WARNING: This is experimental software, do not use with real funds.
A decentralized exchange for Liquid transactions.Naming Maker: proposes the trade as a signed but partial transaction Taker: accepts the trade, completes and broadcasts the transaction Flow
NOTE: for now assume all assets are unblinded.
Maker wants to propose to exchange amount x of asset A for amount y of asset B.
Maker must have an utxo U_xA locking exactly amount x of asset A.
Maker creates a transaction T_xAyB spending a single utxo U_xA and receiving a single output locking amount y of asset B. At this stage T_xAyB is partial and invalid.
Maker signs the (only) input with SIGHASH_SINGLE | SIHASH_ANYONECANPAY. This allows the Taker to add more inputs and outputs, without invalidating the Maker signature.
Maker posts TX_xAyB to the LiquiDEX.
Taker sees TX_xAyB on the LiquiDEX, and decides to accept the trade.
Taker does whatever it wants to complete the trade, what follow is an example.
Taker does some verifications, such as U_xA actually locks amount x of asset A.
Taker adds an output locking amount x of asset A.
Taker funds TX_xAyB (fee and asset A).
Taker signs the newly added transacion inputs, possibly with SIGHASH_ALL.
Taker broadcasts the TX_xAyB, and the trade is executed.Examples 10000 USDT in exchange of 1 LBTC 10 asset A in exchange of 15 asset B Test on Liquid Mainnet
In the following example performed on Liquid Mainnet, the Maker propose a trade offering 4.99 USDT in exchange of 0.05 Atomic Swap pints.Requirements
python3 with requests and wallycore>=0.7.9 modules installedMaker $ python3 maker-cli.py -n http://USER:[email protected]:PORT/ -u 6a9956e9d97a8478fd5269224aa41b8365ff4efb32b4f7bfe3db0b80b1f7d94d:1 -a 13315b14d240bde1e797d8396cd58f1e9fe9d0f459298a9c35a8fa44ba87462e -r 0.0000000100195 0200000001014dd9f7b1800bdbe3bff7b432fb...