官方提供的Token program,solana-program-library/token/program at master · solana-labs/solana-program-library (github.com)

instruction.rs中的TokenInstruction包含了所有instruction,有详细的注释表述每个instruction需要的account和参数含义,具体实现位于processor.rs

两个重要结构:

  1. Mint:意思是铸造账户,一个铸造地址代表一种spl代币,内部将包含新币种的相关信息[mint_authority, freeze_authority, supply, decimals, is_initialized]。
  2. Account: 表示一个钱包,关联到一个mint地址、一个owner。[mint, owner, amount, delegate, state, is_native, delegated_amount, close_authority]

Instructions:

  1. InitializeMint 创建一个新token,账户列表:[mint(write), Rent sysvar],其中mint需要可以被spl-token program写入,也就是应该是spl-token program的PDA账户。
  2. InitializeAccount 创建一个新钱包,账户列表:[new_account(write), mint, owner, Rent sysvar],为mint代表的代币新建一个owner拥有的钱包new_account
  3. MintTo 铸造新币,注入特定账户,账户:[mint(write), dst_account(write), mint_authority(signed)],需要mint_authority签名授权;参数:[amount]
  4. Burn 销毁,账户:[mint(write), src_account(write), src_owner(signed)], 参数:[amount]
  5. Transfer 转账,账户:[src_account(write), dst_account(write), src_owner(signed)],参数:[amount]
  6. Approve 允许特定账户操作某账户余额,账户:[account(write), delegate, owner(signed)]。注意,授权信息存在account中,内部只能保存一个delegate,故与ERC20不同,同一时刻下spl-token只允许一个其他账户操作本账户,后面的Approve会覆盖以前的delegate信息
  7. Revoke 撤销Approve,账户:[account(write), owner(signed)],简单地将delegate和delegate_amount设为0

参考:

  1. Solana Programs Part 1: Understanding SPL Token Mint (archive.org)
  2. Token Program | Solana Program Library Docs