The Mechanism Design of the DutchX
Last week, we’ve shown that the current implementation of order book based centralized and decentralized exchanges face some major shortcomings: The high risk of loss of funds, difficulties for less liquid markets, and practices like front-running. To remedy these drawbacks, Gnosis is developing the DutchX— a decentralized exchange for ERC-20 tokens based on the Dutch auction principle.
The DutchX switches between two states: the state before an auction has started (for sellers to deposit their tokens), and the state of a running auction (when buyers are active). Sellers can submit the tokens they would like to sell at any point in time. Those will automatically be placed into the next available auction — no tokens can be submitted into the running auction.
There are no fixed start times for an auction. While the final mechanism hasn’t been decided upon yet, an auction will likely start at the earliest 10 minutes after the last auction for a particular token-pairing (GNO/ETH f.ex.) closed, and it only starts if this auction and the opposite (ETH/GNO) deposited at least an equivalent to 1,000 USD worth of tokens in the auction.
When an auction for a token-pairing starts, the initial price is set at twice the final closing price of the previous auction (of the same pairing). From this initial price, the price falls according to a decreasing function. During this state, buyers are active: buyers submit their bid at the point in time where the current price reflects their maximum willingness to pay, and they can only submit their bids until the auction closes.
An auction closes when the price clears the quantity of tokens sold and bought. Every buyer receives their tokens at the closing time for the same price. Since buyers will only pay the final market clearing price, which is either at their bid or lower, they have an economic incentive to submit the bid at their highest willingness to pay.
Together with the individual bid a successful buyer has made, the final price determines the amount of tokens to be received, which is at least the amount indicated at the bidding time. Buyers can request a partial payout at any time, which can be triggered an unlimited number of times. If triggered for the first time, this number is the minimum possible payout that the buyer would receive at that moment in time. If triggered any time after the first payout, the buyer will be issued the difference between the already received payout and the amount of tokens s/he would receive at the current price point. This is also true for the time the auction closes.
The Dutch Auction mechanism is game theoretically known to be an efficient way of determining a fair market price for fungible goods. One drawback of the auction model is that the exchange is not instantaneous (and funds can’t immediately be withdrawn), which makes fast trading impossible. However, this is secondary to achieving a fair price for most users.
We plan to go live with the DutchX in Q3 2018. In the meantime, feel free to check out the code here. Don’t hesitate to reach out with any questions or feedback and watch Dom, the mechanism design and development lead of the DutchX, discussing crypto exchanges in detail at Oxford University below!
In our next posts, we’ll explain how the exchange works for sellers and buyers more specifically, why users won’t be able to cheat the system, and give more details about the liquidity contribution mechanism. Stay tuned!
Many thanks to Chris, Michel, Friederike, and Dom.