What is a redeem pool?
A redeem pool is a shared on-chain object that buys back a specific coin at a fixed SUI rate. Anyone holding that coin can call redeem at any time and receive SUI from the pool's reserve — minus a small platform fee. The pool's exchange rate and the address that receives the redeemed coins are locked when the pool is deployed and can never be changed.
The model is the same whether you're a project building a long-term floor for your token (BUYBACK) or destroying supply to anchor scarcity (BURN). The only thing that varies between those two modes is where the redeemed coins go — see the next section.
Pools live one-per-deployer per coin type, but the contract doesn't enforce a global uniqueness rule. Multiple teams can deploy independent pools for the same coin at different rates if they want to.
Recipient
The recipient is the address that receives the project coins on every redeem. Pick the canonical Sui dead address (0x…dead) for a BURN pool — the coins are effectively destroyed, since no one holds the private key. Pick your own treasury or a multisig for a BUYBACK pool — redeemed coins flow back to you.
The contract rejects the literal zero address (0x0…0) as a recipient to prevent accidentally locking coins in a way that looks like an unset value. Use the DeFi-standard 0x…dead pattern instead.
Recipient is immutable. Once the pool is deployed, you cannot redirect the flow. Choose carefully.
Rate
The pool stores its exchange rate in a single field — price_mist_per_token — which is the mist of SUI returned for one WHOLE displayed token. The wizard does the conversion for you: type a rate in SUI/token, and the wizard multiplies by 1e9 to get the on-chain value.
price_mist_per_token = rate (SUI/token) × 1,000,000,000
example: 0.5 SUI/token → price_mist_per_token = 500,000,000
on redeem: sui_gross = coin_in × price / 10^coin_decimals
The minimum the contract can store is 1 mist (0.000000001 SUI) per whole token. Below that, the rate rounds to zero and the contract rejects the deploy. The maximum is bounded only by the u64 capacity, which is many orders of magnitude beyond any plausible price.
Reserve
The pool needs SUI on hand to honour redeems. The initial deposit you provide at deploy time is split from your gas in the same transaction and seeded into the pool's sui_reserve. Anyone — including you, but also any holder — can top up the reserve later by calling deposit_reserve.
Reserve depth is the upper bound on what the pool can pay out. If a redeemer asks for more SUI than the reserve currently holds, the contract aborts. So the rule of thumb is to seed enough for expected near-term volume and top up as demand grows.
There is no withdrawal path. SUI deposited into the reserve can only leave the pool through a redeem. Treat every deposit as committed.
Permanence
Two things are immutable on every pool: price_mist_per_token and the recipient address. The Move module has no setters for either field — there is no admin, governance, or backdoor that can change them. What you sign at deploy is what holders see forever.
This is the trust property the pool surfaces to holders. They can verify the rate and recipient on chain once, link to the pool, and never have to re-check whether the terms still hold.
Platform fee
Pandabox takes a platform fee from the SUI side of every redeem. The fee is set at deploy time of the platform (not the pool) and is currently 5%. You'll see this disclosed on every pool's detail page and accounted for in the wallet's transaction preview before signing.
The fee is taken from the gross SUI payout: sui_out = sui_gross - sui_gross × fee_bps / 10_000. Net SUI shown in the redeem panel already accounts for it — there's no surprise on settlement.
