Multi-Object English Auction with Tranches
A conventional English auction for multiple identical objects accepts bids in arbitrary prices. After the auction is closed, the bids are settled ordered by the prices. However, sorting all bids in smart contract may result in high gas fee and is inefficient.
Padit.finance dramatically improves the efficiency by introducing tranches - each tranche is associated with a fixed price and a bid's price must be one of the tranche price. Once the auction is closed, all the bids are settled ordered by tranche prices. Since the tranches are ordered by prices and each tranche aggregates all the bids with the same price, the settlement can be done in a very efficient way.

Examples

Suppose an auctioneer wants to sell 1M $PAD and setup tranches with prices $1.0, $1.5, $2.0 using quote token $USDC.
Example A: Suppose user A places a bid of 1M $USDC with price $1. The bid will be aggregated into tranche 1 with price $1.0. When the auction is closed, the tranches are
  • Tranche 1 with price $1.0: [user A's 1M $USDC]
Therefore, user A will receive 1M $PAD with each $PAD priced at $1.0, i.e.,
  • User A: 1M $PAD.
Example B: Following the previous example, before the auction is closed, suppose user B places a bid of $2M with price $1. When the auction is closed, the tranches are
  • Tranche 1 with price $1.0: [user A's 1M $USDC, user B's 2M $USDC]
Since tranche 1 is oversubscribed with rate 300%, user A will receive 1/3M $PAD and $2/3M $USDC, and user B will receive 2/3M $PAD and 4/3M $USDC, i.e.,
  • User A: 1/3M $PAD and 2/3M $USDC
  • User B: 2/3M $PAD and 4/3M $USDC
Example C: Following the previous example, before the auction is closed, suppose user A would like to receive more $PAD by raising its bid of 1M $USDC with price $1 to price $1.5. When the auction is closed, the tranches are
  • Tranche 1 with price $1.0: [user B's 2M $USDC]
  • Tranche 2 with price $1.5: [user A's 1M $USDC]
As a result, the settlement will first settle Tranche 2 with user A's 1M $USDC, where user A will receive 1/1.5M $PAD. Then the settlement will settle Tranche 1, where user B will receive 1 - 1/1.5M $PAD and $(1 + 1/1.5M) $USDC, i.e.,
  • User A: 1/1.5M $PAD
  • User B: 1 - 1/1.5M $PAD and $(1 + 1/1.5M) $USDC
Example D: Following the previous example, before the auction is closed, suppose user C places a bid of 1M $USDC with price $1.5. When the auction is closed, the tranches are
  • Tranche 1 with price $1.0: [user B's 2M $USDC]
  • Tranche 2 with price $1.5: [user A's 1M $USDC , user C's 1M $USDC]
Consequently, the settlement will become
  • User A: 0.5M $PAD
  • User B: 2M $USDC
  • User C: 0.5M $PAD
Note that user B did not receive any $PAD because all the $PAD are sold by tranches with higher prices.
Copy link