Protocol
bordrless-programsThe 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.
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.