CAsoon

Protocol

The token program

Tokens live in a program built for hooks. A mint names its hook and the callbacks it runs; every holding keeps room for the hook's state.

Mints and holdings#

A mint holds decimals, supply, an optional maximum supply, four revocable authorities (mint, freeze, hook, metadata), the hook program and its flags, and the name, symbol and URI on chain. A holding is one owner’s account for one mint: always the PDA of the pair, which anyone can create for anyone.

layoutprograms/token
holding = PDA(["holding", mint, owner], token_program)
signer  = PDA(["hook-authority", hook_program], token_program)   // signs every call to that hook

create_mint    create_holding   transfer        mint_to          burn
approve        revoke           set_frozen      close_holding    write_hook_data
set_authority  set_hook         update_metadata

transfer(amount): authority (owner or delegate), source, destination, mint,
                  hook_program?, hook_signer?, then the hook's extra accounts

Hooks and events#

Transfers, mints and burns call the mint’s hook before and after the operation, for the callbacks its flags subscribe to (the hook protocol). Events are emitted by self-CPI with post-balances, so an indexer keeps exact holder balances without reading accounts. Hook data is not in events: an indexer that mirrors it reads the holding.

The bridge#

The bridge wraps SOL, SPL tokens and Token-2022 tokens into the standard one for one, and unwraps them. The original sits in a vault owned by the wrapper PDA; the first wallet to bridge a mint registers it. Bridged SOL is what every launch is quoted in: the site wraps and unwraps it inside a trade, so a trader only ever sees SOL.