AUKT

FIRST BID TAKES

/DOCS — HOW TO RING THE BELL

SIX STEPS.
FIRST BID TAKES.

Open the page. Walk to a stall. Ring the bell. The market is a pixel hall, not a spreadsheet — but the rules are the same.

$AUKT CAGptFocWzjDCk8uvQLceqkBkYeVx9PkmV6TQsoyb4pump

STEP 01

OPEN aukt.fun

Mute is on by default. Click the splash to unmute — dawn-market BGM and fish-market ambience start playing in parallel, both loop forever. Mute toggle in the corner takes them down anytime.

STEP 02

WALK PAST THE STALLS

Five stalls run at once on the home page. Each one has its own falling-price ticker, its own auctioneer shouting on a slightly different cycle, its own countdown. Move with arrow keys, A/D, or click anywhere on the floor to auto-walk.

STEP 03

STOP AT THE STALL

When you stop within range, a PRESS E prompt floats above. The price ticker keeps falling — you are watching the live curve. If you hold 10K+ $AUKT, your bell-ringer head start kicks in: bid five seconds before the public window opens.

STEP 04

RING THE BELL

Press E (or tap the stall on mobile). The bid modal shows the current curve price. Enter your max in SOL (or accept the default). Confirm — wallet popup, signature, on-chain bid lands in the next 400ms slot. Stall settles, asset arrives in your wallet.

STEP 05

LIST YOUR OWN STALL

Walk to /launch. Pick the asset you want to sell. Set start price, floor, decay curve (linear or exponential), and duration. Listing burns 100,000 $AUKT — the burn is permanent and visible on Solscan. Your stall appears within the next slot.

STEP 06

SUBSCRIBE TO THE BELL

Before you walk away, subscribe to @aukt_market_bot on Telegram. The bot pings you the moment any new stall opens. Set filters for the kinds of assets you care about. Walk away. Come back when the bell rings.

HOLDER SYSTEM — TWHS

HOLD LONGER. LAND EARLIER.

The server pulls every $AUKT transfer touching your wallet straight from on-chain history (Helius Enhanced API), then integrates balance(t) × time across every segment between transfers. Your time-weighted holder score (TWHS) updates the moment a buy or sell lands — no daily snapshot delay. Sell your bag down to zero and the counter immediately locks at 0 until you buy back in.

Unit: coin-day = 1 $AUKT held for 1 day. Holding 100K for 7 days = 700,000 coin-days. Holding 1M for 30 days = 30,000,000 coin-days.

FORMULA

TWHS = Σ (balance_i × seconds_i) / 86,400   // coin-days

where:
  balance_i   = $AUKT balance during segment i
  seconds_i   = wall-clock seconds the balance held steady
  segment     = interval between two consecutive transfers

head_start(wallet) =
  TRADER_HEAD_START   if TWHS ≥ 30,000,000
  REGULAR_HEAD_START  if TWHS ≥    500,000
  BELL_HEAD_START     if TWHS ≥     10,000
  0                   otherwise

WHAT THE SCORE DOES

  • · Extends your head-start window beyond the base 5s
  • · Reduces the 100K $AUKT listing burn you pay when you open a stall
  • · Unlocks a 30-minute private pre-window on dev-run auctions (top tier)
  • · Weights the upcoming on-chain airdrop snapshot

TIER TABLE

TIERTHRESHOLDHEAD START
BELL≥ 10K $AUKT5s
REGULAR≥ 500K $AUKT15s
TRADER≥ 30M $AUKT30s
NONEBelow BELL0s

Thresholds are dev-adjustable. Every change is logged on this page and announced on X before it lands.

CACHE FLOW — STALE WHILE REVALIDATE

request TWHS(wallet)
   │
   ▼
 holder_ledger_cache?
   │
   ├── miss or age > 30min  ──▶  block, fetch Helius, compute TWHS, write, return
   │
   ├── age ≤ 60s            ──▶  return fresh
   │
   └── 60s < age ≤ 30min    ──▶  return stale, refresh in background

BID path (never trusts cache):
   cached TWHS  ──▶  re-verify live balance vs Helius
                 ──▶  if balance < threshold, reject with HolderGate

Cache TTL is 60s and stale window is 30 minutes. Live balance is always re-verified before a bid settles — the cache is a read optimization, never a gate on on-chain state.

NOTE — PARAMETERS MAY CHANGE

Thresholds, tier sizes, head-start scaling, and decay are stored in a dev-adjustable config. As the holder base matures, these numbers are re-tuned to keep the curve fair. Every change is logged on this page and announced on X before it lands.

1% BELL BURN

Every successful bid routes 1% of the winning price into a public burn treasury. Treasury SOL → $AUKT via Jupiter → burn. The BurnTicker under the hero polls the burn-totals endpoint every 30 seconds. Supply tightens with every ring of the bell.

STALL STATES — REFERENCE

FIVE FLAGS. ONE CLOCK.

Every stall lives in exactly one state at a time. The UI colors below match the badges you see on market cards, account rows, and the home-floor signs.

PENDING

The stall is listed but the auctioneer has not rung the opening bell yet. Head-start windows for BELL / REGULAR / TRADER tiers begin inside this state.

UIRendered with a muted grey badge and a countdown to go-live. Bid button is disabled for the public; tier holders see a PRE-WINDOW label if their head start is active.

LIVE

Public window is open. The Dutch price curve ticks down every slot until either someone rings the bell or the floor / end-time is reached.

UIGold BELL pulse on the card, live ticker, and a green RING button. Every new bid re-renders the stall and settles within one 400ms block.

HOLDERS ONLY

A min_holder_score gate is attached to the stall. Wallets below the threshold see the stall but cannot ring. The curve still ticks — the gate is on the bid, not the clock.

UICyan HOLDERS ONLY ribbon, eligibility status inside the card (ELIGIBLE / NEED X MORE COIN-DAYS), and a disabled RING button with a tooltip on non-qualifying wallets.

ENDED

The bell was rung. Settlement is complete, the asset moved to the winner's wallet, and 1% of the winning bid routed to the burn treasury.

UIGreen SETTLED stamp, winning price + winner wallet (truncated), and a Solscan tx link. Cards drop out of the LIVE rail and surface on the stall history / by-creator pages.

CANCELLED

The auction reached its end-time without a bid at or above floor, or the creator reclaimed it. The asset returns to the creator; the 100K listing burn is not refunded.

UIRed RECLAIMED stamp, a Solscan cancel-tx link, and the card moved to the /account history panel. New cancelled stalls render immediately after the cancel TX confirms.

ARCHITECTURE

CLIENT, SERVICE, PROGRAM, CHAIN.

Four surfaces, one loop. The client renders the pixel hall, the service signs reads and enqueues jobs, the Anchor program is the source of truth on Solana, and Helius is the eye that sees every transfer the moment it lands.

┌──────────────────────────┐
│  CLIENT                  │   Next.js 14 + Phaser 3
│  aukt.fun                │   Wallet adapter: Phantom / Solflare / Backpack
└──────────┬───────────────┘
           │ HTTPS + wallet signatures
           ▼
┌──────────────────────────┐
│  SERVICE                 │   Hono + Postgres + Redis on Railway
│  api.aukt.fun            │   TWHS cache, snapshot jobs, burn totals
└──────────┬───────────────┘
           │ RPC + Enhanced Tx
           ▼
┌──────────────────────────┐          ┌──────────────────────────┐
│  SOLANA PROGRAM          │◀────────▶│  HELIUS RPC              │
│  Anchor + Token-2022     │  reads   │  Enhanced Transactions   │
│  Dutch-curve auctions    │          │  per-wallet transfer feed│
└──────────────────────────┘          └──────────────────────────┘
           │
           │ settle / cancel events
           ▼
┌──────────────────────────┐
│  TELEGRAM BOT            │   @aukt_market_bot
│  new-stall notifications │   filters by asset / tier / price
└──────────────────────────┘

READ PATH

Client asks the service for stalls, TWHS, burn totals, airdrop snapshots. Service serves from Postgres + Redis with stale-while-revalidate, refreshing from Helius on miss. No wallet signature required for reads.

WRITE PATH

Client builds the bid / listing / cancel TX, wallet signs, Anchor program executes on-chain. Service observes the confirmed TX via Helius, updates cache, and notifies the Telegram bot. The chain is the source of truth — the service never forges state.

FAQ

QUESTIONS THAT COME UP.

Q. What is a Dutch auction, the short version?

Price starts high and ticks down every slot. The first wallet to ring the bell at or above the current curve price wins. No sniping, no bidding wars — either you ring now or the price keeps falling.

Q. What is TWHS and how is it computed?

Time-Weighted Holder Score. The server pulls every $AUKT transfer on your wallet from Helius Enhanced Transactions, integrates balance × seconds between transfers, and divides by 86,400 to express the result in coin-days. Formally: TWHS = Σ (balance_i × seconds_i) / 86,400.

Q. How often does the holder score update?

Every bid, listing, and leaderboard render re-checks the cache. Entries under 60 seconds old are served instantly; entries between 60s and 30 minutes old are served instantly then revalidated in the background (stale-while-revalidate). Live balance is always re-verified against on-chain before a bid is accepted — the cache never gates money decisions.

Q. Why do I see HOLDERS ONLY badges?

The creator attached a min_holder_score to the stall. Wallets below the threshold can watch the curve but cannot ring. Your card shows ELIGIBLE or NEED X MORE COIN-DAYS based on your live TWHS.

Q. Do I need $AUKT to bid on every stall?

No. Public stalls accept any wallet with enough SOL to cover the curve price. $AUKT gives you the head-start window on tier-gated stalls and unlocks stalls flagged HOLDERS ONLY.

Q. What happens if my bid is below the current price?

The program rejects it with PriceTooLow. The bid modal pre-fills the live curve price on every tick, so the common cause is a slot delay — just ring again; the next slot usually lands.

Q. Can I bid on my own auction?

No, the program blocks self-bidding by default. The one documented exception is the dev wallet, which can ring dev-owned stalls during the private 30-minute pre-window used for liquidity tests.

Q. How do I reclaim a failed auction?

Walk to /account, open the stall row, and hit RECLAIM. One wallet signature returns the asset to you. The 100K listing burn is not refunded — it was burned when you opened the stall. The card flips to RECLAIMED as soon as the cancel TX confirms and the Solscan link is surfaced on the row.

Q. How does the 1% burn work?

Every settled winning bid routes 1% of the SOL price into a public burn treasury. Treasury SOL swaps to $AUKT via Jupiter, then burns. The BurnTicker under the hero polls /burn-totals every 30 seconds — supply tightens in public every time the bell rings.

Q. When is the next airdrop snapshot?

The /airdrop page renders a live D/H/M/S countdown to the next capture plus a preview of your current tier and allocation, weighted by your TWHS. Past snapshots are listed underneath so you can see how much dropped each cycle.

STILL READING?

THE BELL IS UP. WALK IN.

Live stalls are at /market. Open your own at /launch. Read the program at github.com/auktLabs/aukt.