官方提供的Token program,solana-program-library/token/program at master · solana-labs/solana-program-library (github.com)
instruction.rs中的TokenInstruction
包含了所有instruction,有详细的注释表述每个instruction需要的account和参数含义,具体实现位于processor.rs
两个重要结构:
Instructions:
InitializeMint
创建一个新token,账户列表:[mint(write), Rent sysvar],其中mint需要可以被spl-token program写入,也就是应该是spl-token program的PDA账户。InitializeAccount
创建一个新钱包,账户列表:[new_account(write), mint, owner, Rent sysvar],为mint代表的代币新建一个owner拥有的钱包new_accountMintTo
铸造新币,注入特定账户,账户:[mint(write), dst_account(write), mint_authority(signed)],需要mint_authority签名授权;参数:[amount]Burn
销毁,账户:[mint(write), src_account(write), src_owner(signed)], 参数:[amount]Transfer
转账,账户:[src_account(write), dst_account(write), src_owner(signed)],参数:[amount]Approve
允许特定账户操作某账户余额,账户:[account(write), delegate, owner(signed)]。注意,授权信息存在account中,内部只能保存一个delegate,故与ERC20不同,同一时刻下spl-token只允许一个其他账户操作本账户,后面的Approve会覆盖以前的delegate信息Revoke
撤销Approve,账户:[account(write), owner(signed)],简单地将delegate和delegate_amount设为0参考: