Introduction
It’s time for a deep dive on Sealed-Bid Auctions — our flagship token launch mechanism.
To recap, our previous posts on the Token Launch Trilemma Trilemma highlighted the need for solutions to balance Accessibility, Participation, and Valuation. Axis addresses this with our Sealed-Bid Auction implementation, a multi-unit batch auction mechanism. To further understand the importance of bringing sealed-bids on-chain and our system design, readers may want to review On Auctions, Privacy, and Blockchains.
Sealed-Bid Auction Characteristics
Auction mechanisms differ based on factors such as the number of units auctioned, bid visibility, settlement rules, pricing mechanisms, and information availability.
Sealed-Bid Auctions have the following characteristics:
- Multi-unit: Multiple identical items auctioned simultaneously.
- Batch: Bids are grouped together and settled at the end of the auction.
- Encrypted: Participants’ bids are sealed and not visible to others.
- Marginal Price: All winning bids pay the price of the last, marginal bid included.
This auction type is particularly powerful for price discovery with fungible ERC20 tokens. By awarding tokens to the highest bidders, it allows for an open and accessible bidding environment. However, this naturally compromises the certainty of participation for bidders.
Life Cycle of a Sealed-Bid Auction
A Sealed-Bid Auction begins when a seller calls the ‘auction’ function from the Auction House. At this point, the auction setup has been configured and the auction will start at a specified time. Before the auction begins, the seller has the option to cancel it. However, once started, Sealed-Bid Auctions cannot be canceled.
At the start time, the auction goes live and accepts sealed-bids from participants. Bidders commit an amount of bidding tokens and specify the maximum price they’re willing to pay for the tokens being auctioned. When the user submits their bid, the maximum bid price is encrypted using the auction’s public key (see note below) and their bid amount is transferred to the auction contract. Other bidders can see the bid size transferred (e.g. 1,000 USDC) but cannot know the bid price (e.g. 10 USDC per XYZ). Bidders can submit multiple bids and cancel their bids at any time before the auction concludes.
Encryption Strategy
Axis uses a hybrid encryption scheme called ECIES to encrypt bid prices. ECIES makes it possible to decrypt bids on-chain using Ethereum’s native elliptic curve precompiles. Axis provides a key management service that holds each auction’s private key and publishes it once an auction concludes. This service is optional; sellers can still use the smart contracts while retaining custody of their auction’s private key.
This design introduces trust assumptions related to key management, but alleviates some of the UX challenges posed by commit-reveal schemes. We plan to address this trade-off in future iterations and new auction types.
Sealed-Bid Auction Settlement
Once the auction concludes, there is a dedicated settlement period. During this time, anyone can call the decrypt
and settle
functions. The first step is decrypting the bids by submitting the private key to the Sealed-Bid Auction module, which validates the key and decrypts the bids. Once decrypted, the bids are sorted from highest to lowest in preparation for settlement.
The auction settles by finding the marginal price, assigning winning bids, and distributing the auction proceeds to the seller. Sealed-Bid Auctions are settled at a uniform clearing price — the marginal price of the last bid filled. This is determined by allocating tokens for each bid until the auction capacity is expended. After settlement, winning bidders can claim their tokens while losing bids can claim their refunds.
There are a few edge cases when calculating the marginal price worth highlighting:
- Partial Fill: The last bid may not be filled completely if the capacity is expended with a portion of the final bid
- Intermediate Price: The auction can settle at a price in between the last two bids if there is a significant gap, assuming that intermediate price fills the capacity
- Same Price: If two or more bids are submitted at the same price, and that price is the marginal price, earlier bids are given priority — it pays to be early! This small incentive for early bids helps counteract the tendency of bidders to wait until the last minute. Early bidding can also be advantageous since auction subscription helps participants gauge whether the auction is over or under subscribed.
- Minimum Price: If the auction is under-subscribed but exceeds the minimum filled threshold, it will settle at the minimum price
- Unfilled Capacity: If the auction ends below the minimum filled threshold, it cannot be settled. The marginal price is set to the maximum value and users can claim refunds
Auction Configuration
Now that we have covered how Sealed-Bid Auctions work, let’s discuss how to configure one from the seller’s perspective.
First, sellers need to specify the token they want to auction (i.e. Payout Token) and the token they want to receive (i.e. Quote Token). Next, they decide whether to use any of Axis’ optional derivative modules to modify the Payout Token. As of now, Vesting is the sole token derivative offered on Axis.
After selecting the token inputs, sellers schedule their auction with a specified start date and duration. Auctions must be scheduled in advance to give curators time to review the implementation and officially curate the auction.
With the basic inputs set, the seller needs to configure the settlement parameters. The number of tokens being auctioned is set as the capacity. Next, the seller determines the minimum number of tokens that must be sold for a valid auction (i.e. Minimum Fill Quantity). Sellers can also specify a reserve price, which is the minimum price they are willing to accept per token. Another important parameter is the minimum bid size, which must be set to protect against excessive gas costs.
Advanced settings can be configured for any auction on Axis using the protocol’s callback functions. Callbacks must be deployed on-chain prior to auction setup, so this will require additional verification beforehand.
Finally, the public key is provided for auction deployment. As mentioned, a key hosting service is provided by Axis. However, the service is entirely optional and sellers can provide their own private key or hosted solution if preferred. Additional information will be provided about the key management solution and long-term plans to decentralize it