Drops
A drop is the capsule releasing: USDG fees become the real assets, the assets become transfers to holders. This section is the exact procedure the engine follows.
5.1 Trigger
A capsule drops when its unspent USDG ≥ $25 (MIN_DROP_USD) — that is the 100% line on every capsule. The number is the 95% capsule share of what has been claimed from the pons Fee Escrow since the last drop. Legacy v1 coins keep their old line: 0.01 ETH of WETH (MIN_DROP_ETH).
Or when 24 hours (MAX_DROP_WAIT_H) have passed since the last drop and there is anything collected at all — so a slow capsule still drops, just smaller.
The engine ticks every minute. Each tick does bounded work: sweep and claim fees, run at most one drop phase per capsule, send at most MAX_PAYOUTS_PER_TICK=25 transfers, and stop. A big drop simply spans several ticks. The capsule page shows an ETA line: "drops at $25 of fees or in Xh".
5.2 Snapshot
At drop time the engine records a snapshot block and reads every holder's balance at that block from its indexed holdings table. The snapshot is the source of truth for that drop; buying or selling after it does not change who gets paid.
Excluded from the snapshot, always:
- the coin's bonding curve (it holds the unsold supply) and, after graduation, the Uniswap v4 pool manager and position manager
- the pons v2 factory, launch deployer, forwarder, locker, fee hook, fee escrow and buyback vault
- the operator wallet
- the dead and zero addresses
- the Uniswap v3 router and position manager (and, for legacy v1 coins, their pool and locker)
- any wallet holding less than
MIN_HOLD_BPS=1— 0.01% of supply
5.3 Purchase
The engine takes the unspent USDG and, for each asset in the capsule, swaps spend × weight on Uniswap v3 along that asset's USDG route (§6): direct-usdg where the asset has a USDG pool — most stocks quote in USDG — or via-weth (USDG → WETH → asset) otherwise, with a slippage cap of 3%. Stocks and memecoins are bought the same way. Each swap is its own transaction and its own row in the drop log: USDG in, tokens out, USD value at the time, tx hash. A swap that fails leaves the USDG unspent for the next drop; it is never forced through. Legacy v1 coins spend WETH along the WETH family instead.
5.4 Pro-rata
eligible_supply = Σ balance(h) for every eligible holder h at snapshot block share(h, asset) = amount_out(asset) × balance(h) / eligible_supply if usd(share) < MIN_PAYOUT_USD (0.25) → tray_balances[h][asset] += share (status: dust) else → transfer(asset, h, share) (status: sent)
Integer maths, rounded down; rounding dust stays in the operator wallet and is folded into the next purchase of that asset. Failed transfers are retried on later ticks and show as failed with an attempt count until they go through.
5.5 The tray
Sending $0.03 of a stock token costs more in gas than it is worth, so the engine does not. Shares below MIN_PAYOUT_USD=0.25 bead up in the holder's tray — a per-wallet, per-coin, per-asset balance the engine holds on the holder's behalf. On every subsequent drop the tray balance is added to the new share; once the total clears the threshold it pops: it is sent and the tray line is cleared. You can see your tray on any capsule page (connect a wallet) or at /wallet.
5.6 Where the fees are before a drop
Between a trade and a drop, a coin's fees pass through three places, all public. First, inside pons: accrued on the bonding curve (or, after graduation, in the fee hook) until the engine sweeps. Second, in the pons Fee Escrow, credited to the operator's name in USDG — the "in escrow" line on the capsule page and the status page. Third, in the operator wallet as USDG once claimed, 95% of it banked against that coin's drop line. Nothing is ever converted to the coin along the way.
Tray balances are an accounting entry in the engine's database backed by tokens sitting in the operator wallet. They are not a claim on a contract. If the engine stopped, unsent tray balances would be whatever the operator honours. See §8.