Mintvelocity

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.

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. Launches trade in native SOL (swap_v2, nothing wrapped); on a pool still quoted in bridged SOL the site wraps and unwraps it inside a trade, so a trader only ever sees SOL.