This post breaks down the mechanics behind Litemint’s decentralized NFT auctions on Stellar.

We have just released the Auctions feature on Litemint! NFT owners on Litemint can now run live, time-limited auctions with reserve price to further engage with their potential buyers. Collections also accept a dynamic filter for your auctions.

Litemint Auction UI

Live auction on Litemint

Litemint auctions are fully decentralized, require no escrow, with full settlement on the Stellar DEX. Let’s uncover the tools and dissect how it works.

Auction Requirements

  • Decentralized, at no time should a third party (e.g., Litemint) have ownership or access to the assets being traded.
  • Participants should be guaranteed that their bids cannot be filled before the auction expires.
  • NFT owners should be guaranteed that execution only occurs if the best price is at or above their reserve price at the end of the auction.
  • At any time before the end of the auction, NFT owners should be able to withdraw their NFT from auction.
  • At any time before the end of the auction, bidders should be able to retract their bids.

🛠️ The Stellar Toolbox

⏳ Time-Bound Transactions

Stellar allows us to specify time bounds for transaction validity so transactions can fail if submitted too early (or too late) to the network. Using these properties, we can ensure that a settlement transaction cannot happen before a specific time determined by the auction duration.

✍️ Pre-Authorized Transactions

Stellar allows an account to pre-authorize transactions on the network. These transactions can be used to lock accounts and have them execute very specific operations for settlement, and nothing else — the account becomes single-purpose.

💸 Path Payment Operations

Path payments can be used for filling the highest bid on the SDEX at the end of the period. The pathPaymentStrictSend operation also allows us to specify a destination minimum amount, the auction reserve. If this amount is not met, all other operations fail.

📜 The Contract

Combining these primitives, we can now bind participants to a contract implemented via a time bound, pre-authorized transaction on Stellar. By locking the contract holder account, we can guarantee that the bids can never be filled before the end of the auction.

Litemint submits this automatically, but anyone can submit the pre-authorized transaction to the network at the end of the auction, ensuring the execution is fully decentralized.

Here is a sequence diagram to help visualize the various operations.

Stellar Auction Sequence Diagram

Stellar-powered Auction on Litemint

You can find a sample XDR from this link on Stellar Laboratory with the contract transaction generated for the live auction below. This transaction is automatically submitted at the end of the auction.

Check out this live auction example.

Questions or feedback? Reach out anytime.