Keyword Auctions
The timed auction system allows merchants to sell goods in an eBay-style format. Buyers bid before the deadline; the highest bidder wins. After the seller ships and the buyer confirms receipt, the transaction completes. Platform fee is 5% of the winning bid; sellers must stake a merchant deposit as collateral.
System Components
- AuctionFactory: Deploys auction contract clones, manages seller's active auction list
- AuctionFactoryReader: Read-only view functions for auction queries (pagination, status filtering)
- AuctionTemplate: Individual auction escrow contract—handles bids, buy-now price, shipping, and settlement
Auction Flow
Creating Auctions
- Seller calls
AuctionFactory.createAuction(), setting start price, buy-now price, minimum bid increment, and start/end time - System automatically freezes
buyNowPrice / 10from the seller's merchant deposit (deposit leverage = 10×) - Maximum auction duration: 365 days (
MAX_DURATION)
Bidding
- Bidder calls
bid()and sends USDT; each bid must exceed the current highest bid plus the minimum increment - Previous highest bidder's USDT automatically refunded (CEI pattern)
- Anti-snipe extension: if a bid is placed within the last 5 minutes, the auction automatically extends by 10 minutes (stackable — prevents last-second sniping)
Buy-Now Price
If a buyer wants to win immediately, they call buyNow(). The auction ends immediately and any current highest bidder is refunded.
Settlement and Receipt
- After the auction ends, the seller calls
ship()with a tracking number; status becomes Shipped - Within 15 days of shipping (
_MIN_AUTO_RECEIVE), buyer confirms receipt or auto-receive triggers; seller can extend the deadline - Buyer calls
confirmReceipt()or waits fortriggerAutoReceive() - Settlement: 5% fee distributed via InviteRegistry, remainder transferred to seller, seller's frozen deposit unlocked
No-Ship Refund
If the seller does not ship within 3 days after the auction ends (SHIPPING_DEADLINE), the buyer can call claimNoShipRefund():
- Buyer receives a full refund
- 10% of the winning bid deducted from the seller's frozen deposit as compensation
Community Arbitration
Once an item is shipped, either party can initiate community arbitration (requestCommunityArbitration()):
- Buyer must post a deposit equal to 10% of the winning bid (frozen from the buyer's deposit contract if available)
- 13 arbitrators vote over a 48-hour voting period
- Buyer wins: full refund + arbitration fee deducted from seller's deposit; Seller wins: normal settlement, buyer's deposit used as arbitration fee
Core Parameters
| Parameter | Value | Source |
|---|---|---|
| Fee rate | 5% | PlatformSettings.feeRates[4] = 500 |
| Deposit freeze ratio | buyNowPrice ÷ 10 | AuctionTemplate.DEPOSIT_LEVERAGE = 10 |
| Max auction duration | 365 days | AuctionTemplate.MAX_DURATION |
| Anti-snipe trigger window | Last 5 minutes | AuctionTemplate.ANTI_SNIPE_WINDOW |
| Anti-snipe extension | +10 minutes per trigger | AuctionTemplate.ANTI_SNIPE_EXTENSION |
| Shipping deadline | 3 days after auction ends | AuctionTemplate.SHIPPING_DEADLINE |
| Min auto-receive wait | 15 days after shipping | AuctionTemplate._MIN_AUTO_RECEIVE |