Our experience in Gnosis Auction with the EasyAuction mechanism showed that it is very useful for price discovery but it’s not fully reliable for achieving best execution prices when selling tokens with pre-existing liquidity.
I would like to better frame the problem this proposal is aiming to solve and discuss the possible solutions. I’ll use the following chart as an example of a typical auction of tokens which have pre-existing liquidity:
The red line represent the supply curve created by the auctioneer’s sell order.
The green line represents the demand curve created by bids.
The white dashed line represent the intersection of the supply and demand curve and thus the clearing price of the auction if no more bids are added or canceled.
The orange dashed line represent the current market price (on Balancer for example).
The meaning of this chart is that the auction is about to clear at $4.3, lower than the current available market price of $5. The auction clearing price could have been improved - depending on the depth of liquidity available outside of the auction - by up to 16%.
This is not the full picture though, as the AMM has slippage which will cause a much lower execution price in reality if the full amount was sent to the AMM directly. To add to that, such a big trade sent directly to the AMM must include slippage tolerance which invites all sorts of MEV and results in an even lower real execution price.
So how can we use the available liquidity outside of the auction to improve the final clearing price?
There are few available options that I would like to describe:
- Using the existing easyAuction mechanism - it already includes price improvement mechanism at the end of the auction using the atomic-closure feature. The problem with it is still that big part of the value could be extracted and end up as exploited MEV. Adding a short time where GP solvers have priority over the auction settlement, will let solvers to settle the excess supply from the auction directly to the market while minimizing extracted value.
- Using Dutch auction mechanism similar to Maker Liquidation 2.0 (or even forking it). This mechanism facilitates a competition between parties looking to “extract value” from the auction, so any single keeper is incentivized to bid as soon as there’s a tiny arbitrage or else it’ll be taken by another player. This competition works to limit the ability of any single player to arbitrarily extract value.
- A hybrid approach using Channel Auctions to facilitate the same competition as in (2) but also allow protected limit orders
- Martin in his original post suggested a way to even limit the amount of possible MEV in a Dutch auction using GP solvers. Similar to (1), we allow solvers a slight advantage over other participants. In return solvers are locking funds that could be slashed and by that committing to interact with the auction according to predefined rules that limit their ability to extract value. This approach might have an advantage for large size auctions - solvers will be able to add liquidity to the auction over a period of time using multiple transactions vs a one time settlement transaction proposed in solution number (1).
I think that solution number (1) could be the path of least resistance because it requires minimal smart contract and front end changes. Most of the work will be around making sure solvers can settle auctions against any available liquidity. This will represent a nice integration of GA and GP while also enabling an emerging use case of “DAO treasury trade execution tool”