Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Auction an alias

See Aliases for what an alias is and how an auction differs from a fixed-price listing. This page covers the sithbit alias sell --auction/bid/settle-auction command tree.

sithbit alias sell <alias> --auction --reserve <lamports> \
  [--ends-in <seconds> | --ends-at <unix-timestamp>] \
  [--antisnipe <seconds>] \
  [--keypair <keypair>] \
  [--skip-preflight]

An auction is the second way to sell an alias on the open marketplace, alongside the fixed-price alias sell --price listing. Where a fixed-price listing sets one number any buyer may take first come, first served, an auction opens an ascending-bid contest: bidders escrow lamports on-chain, each bid must top the last by a minimum increment, and after the clock runs out anyone settles the auction and the alias repoints at the high bidder.

The two modes are mutually exclusive — a listing is either fixed-price or an auction, chosen when it is staged. --auction requires --reserve (the floor the first bid must meet) and rejects --price; a plain --price listing rejects the auction flags.

sithbit alias sell john_doe --auction --reserve 50000000
Opened an auction on alias 'john_doe' (reserve 50000000 lamports, ends in 7d)
https://explorer.solana.com/tx/…

The alias’s current holder signs to open the auction. As with a fixed-price listing, the auction lives in a dedicated account derived from the alias name’s blake3 hash, so each alias carries at most one listing of either kind at a time. The holder fronts that account’s rent when opening the auction and gets it back at settlement (or on cancel — see Strict commitment for when a cancel is still allowed).

Until settlement the alias keeps resolving to the current holder, exactly as before; mail keeps working unchanged while bids come in.

Timing: when it ends, and anti-snipe

The end time is set at open and clamped on-chain:

  • --ends-in <seconds> — a duration from now, clamped to [now + 1 hour, now + 7 days] (the minimum and maximum auction duration). A value below the floor is raised to one hour; above the ceiling it is capped at seven days.
  • --ends-at <unix-timestamp> — an absolute end instant, clamped to the same one-hour-to-seven-day band around now.
  • Omitting both defaults the auction to run 7 days.

Anti-snipe extension

To blunt last-second sniping, a bid that lands inside the final anti-snipe window pushes the end time out, giving other bidders a chance to respond. The window is set with --antisnipe <seconds>, clamped to [0, 24 hours] and defaulting to 24 hours; passing 0 disables the extension entirely (a hard deadline).

Concretely: a bid arriving after expires_at - window moves expires_at out to min(now + window, created_at + 7 days). Two properties fall out of that formula:

  • Each qualifying late bid re-arms roughly a full window of remaining time, so an auction only ever ends once a full anti-snipe window passes with no further bids.
  • The extension can never carry the auction past seven days from when it was opened — the created_at + 7d cap is a hard backstop, so no amount of sniping keeps an auction alive indefinitely.

Bidding

sithbit alias bid <alias> --amount <lamports> \
  [--payer-keypair <keypair>] \
  [--keypair <keypair>] \
  [--skip-preflight]

Any wallet may bid. The amount is in lamports and is escrowed on-chain in the auction account the moment the bid lands — the bidder is not merely promising to pay, the funds are held by the program until the bid is either outbid (refunded) or settled (won).

sithbit alias bid john_doe --amount 50000000 --keypair bidder.json
Bid 50000000 lamports on alias 'john_doe'
https://explorer.solana.com/tx/…

The minimum next bid

  • The first bid must be at least the reserve (--reserve at open).

  • Every later bid must clear the standing high bid by a minimum increment:

    minimum next bid = high_bid + max(5% of high_bid, 1_000_000 lamports)
    

The max(...) means a flat 1,000,000-lamport floor dominates while the high bid is small, and the 5% term takes over once the high bid exceeds 20,000,000 lamports (5% of 20,000,000 is exactly the flat floor). The increment exists so a bidder can’t inch past the leader one lamport at a time, and — together with the reserve and the escrow-rent cost below — it is the auction’s friction against spam bidding.

By default the bidder’s own wallet escrows the amount; a sponsor may fund it with --payer-keypair, co-signing alongside the bidder (or simply fund the bidder’s wallet beforehand).

Settlement

sithbit alias settle-auction <alias> \
  [--keypair <keypair>] \
  [--skip-preflight]

Once the end time has passed, anyone may crank settlement — the seller, the winner, or an unrelated third party. Settlement is fully deterministic: the alias repoints at the recorded high bidder, and the escrowed high bid splits 90% to the seller (the prior holder) and 10% to the postoffice (OPERATOR_SHARE_BPS = 1000 basis points), the same split as every other marketplace path — see Economics for the exact money flow.

sithbit alias settle-auction john_doe
Settled the auction on alias 'john_doe'; new holder maiLtdkxym8CCmo9TwDuXywqd9DXaK3tB6toKFVeBFR
https://explorer.solana.com/tx/…

An auction that reaches its end with no bids settles as a no-op: the alias stays with the holder and the listing closes with its rent returned, just like a cancelled fixed-price listing.

A settled auction shows up in the gRPC gateway’s alias index as an ordinary transfer event — the index records the change of holder, not how it was won.

Strict commitment: no take-backs

An auction with a live high bid is binding on the seller. Unlike a fixed-price listing — which the holder may cancel or re-price at will once its binding window elapses — an auction that has taken even one bid can be neither cancelled nor replaced. The seller has, in effect, committed to sell to the highest bidder at the deadline. Bidders likewise cannot cancel a bid: a bid is a firm, escrowed commitment that is only ever undone by being outbid.

A bidless auction is still the seller’s to cancel (alias sell --cancel, closing the auction and reclaiming its rent) or to let expire and settle as a no-op. It is only the arrival of the first bid that locks the auction in.

alias buy is rejected on an auction listing — buying is the fixed-price path only. An auction changes hands solely through bid-then-settle-auction.

The escrow-rent flow (read this before you bid)

This is the one genuinely surprising piece of the auction’s money flow, so it is worth spelling out.

The auction’s bid escrow — the on-chain account that holds the current high bid — must itself be rent-exempt, so it holds rent + high_bid. That rent is funded once, by the first bidder, on top of their bid amount.

When a bid is outbid, only the bid amount is refunded to the outbid bidder — the account rent stays behind in the escrow, carried forward under the new high bid. The rent is not re-funded by each successive bidder; it is paid once and then travels with the escrow.

At settlement, that rent is reclaimed by the winner — the final high bidder — not by whoever originally funded it. So:

  • An early bidder who is later outbid is net out the escrow rent (plus their transaction fee): they get their full bid amount back, but the rent they fronted stays in the escrow and is ultimately recovered by someone else.
  • The eventual winner recovers that rent at settlement, regardless of whether they were the one who first funded it.
  • The listing account’s own rent always returns to the seller, on every resolution path — this is separate from the bid escrow’s rent.

The practical upshot: being the first bidder in an auction you don’t go on to win costs you a small, non-refundable amount (the escrow rent). That is deliberate — it is a further disincentive against throwaway spam bids, on top of the reserve and the minimum increment.

Errors

Message on stderrMeaning
An auction requires a reserve; use --reserve--auction was passed without --reserve.
A fixed-price listing and an auction are mutually exclusive--price and --auction (or the auction timing flags) were combined.
The first bid must meet the reservealias bid below the reserve on an auction with no bids yet.
The bid does not clear the minimum incrementalias bid at or below high_bid + max(5%, 1_000_000).
The auction has not ended yetsettle-auction before the end instant.
This alias is being auctioned; bid instead of buyingalias buy attempted on an auction listing.
An auction with bids cannot be cancelledalias sell --cancel (or a replacement) after the first bid landed.
No auction is open for this aliasbid or settle-auction on an alias with no open auction.