How it works
Pandabox is a Move package on Sui. A creator deploys a Project — a Sui object that owns a SUI treasury and a locked TreasuryCap for the project's own coin. The project then runs a single sale at a fixed rate: supporters contribute SUI and earn the right to claim project tokens at the configured price.
Supporters don't receive tokens directly. They receive a ContributionReceipt — a transferable Sui NFT holding their entitlement. They claim their tokens by burning the receipt after the sale closes. Any payment that would exceed the remaining allocation is refunded in the same transaction.
The sale ends in one of three ways: the configured end time arrives, the full allocation sells out, or the platform admin closes it. After close, the creator withdraws the raised SUI (minus a platform fee) and processes any unsold tokens per the policy they chose at deploy.
Sale window
Every sale has a single locked window. You set an end time at deploy — or leave it open and close the sale manually as admin. Until the sale finalizes, anyone can contribute at the fixed rate.
Three things finalize a sale: the end time elapses (Time), the allocation sells out (Sellout), or the admin force-closes it (Admin). Finalization is the gate for token claims, SUI withdrawal, and unsold-supply processing — none of those work while the sale is still active.
Finalization can be triggered by the admin (try_finalize) or by anyone once the conditions are met (permissionless_finalize) — so a stalled creator can't trap supporters' claims after an end time has passed.
Base rate & allocation
Two numbers govern the sale: the base rate (project tokens issued per 1 SUI) and the funding allocation (total project tokens to sell). Both are set at deploy and frozen for the life of the project — they can't be changed by metadata updates or admin actions.
base rate = 1,000 tokens / SUI
funding alloc. = 1,000,000 tokens
implied max raise = 1,000 SUI
if a supporter pays 12 SUI → entitled to 12,000 tokens
If a contribution would push past the remaining allocation, only the affordable portion is accepted and the rest is refunded in the same transaction. Supporters never overpay.
Contribute & claim
Contribute. A supporter calls contribute with a SUI coin. The project records the contribution against their address and returns a ContributionReceipt NFT — plus a refund coin if the payment exceeded what could be allocated.
Claim. After the sale finalizes, the supporter burns their receipt with claim and receives the project tokens. Multiple receipts (from several contributions) can be burned together in one call via claim_multiple, returning a single merged coin.
Receipts are regular Sui objects: transferable, sellable on secondary markets, and they don't expire. Claims remain open as long as the project object lives.
Unsold supply
If the sale closes with tokens left in the allocation, the creator runs process_unsold to execute the policy they picked at deploy:
Burn — the unsold supply is destroyed, raising the implied price of every claimed token. Signals scarcity: the float is exactly what the sale raised.
Transfer to creator — the unsold supply moves to the creator as a normal coin balance. Useful if you intend to seed liquidity, run a secondary sale, or hold a treasury position. The project page surfaces this as UNSOLD → CREATOR in the spec line so supporters see the policy before paying.
Finalize & withdraw
Once finalized, the creator calls withdraw_sui to pull raised SUI from the project treasury. The platform fee (in basis points, set by Pandabox) is skimmed automatically — the creator receives the net amount, the fee accrues to the platform treasury. Withdrawals can be partial; the cap holder can withdraw the rest later.
The ProjectAdminCap minted at deploy is a regular Sui object. It moves via transfer_project_admin (which emits the event the indexer relies on — prefer this over a raw object transfer) or destroys itself via renounce_project_admin, leaving the project permanently un-administered — useful for community projects that want to remove themselves from the creator's discretion.
Project metadata — name, description, icon URL, source-code blob, and the off-chain details JSON (tagline, category, socials) — stays editable via update_metadata whether the sale is active or closed.




