教程 | 理解Solana中spl-token的Account体系
Solana Hub

Solana中的Account?
阅读此文将会熟悉Solana中spl-token的Account体系,以及如何操作spl-token。
每一个钱包账号在一个spl-token下都可以生成一个派生账号,这个钱包账号对派生账号拥有操作和修改等的所有权限。派生账号也可以继续创建派生账号。
假如你想实现spl-token的transfer,从A转移5个token到B:
- A、B都需要在此spl-token下都创建派生账号,交易可由A或者A在spl-token下派生账号delegate地址的owner签名,转移到B在spl-token下的派生地址
spl-token Account
pub?struct?Account?{
????pub?mint:?Pubkey,
????pub?owner:?Pubkey,
????pub?amount:?u64,
????pub?delegate:?COption,
????pub?state:?AccountState,
????pub?is_native:?COption<u64>,
????pub?delegated_amount:?u64,
????pub?close_authority:?COption,
}
spl-token的Account结构
mint: 关联spl-token的program idowner: 所属的钱包账号amount: 持有spl-token的数量delegate: 代理账号state: 账号状态Uninitialized: 账号未初始化Initialized: 账号已经初始化 (owner和delegate都可以操作)Frozen: 账号已被冻结 (owner和delegate都无法操作)is_native: 是否原生代币,如果是则免除租金delegated_amount: 代理账号可操作的spl-token数量close_authority: 拥有关闭此账号权限的账号
spl-token
spl-token-ui是用于创建和管理 SPL 令牌的 UI 界面
https://www.spl-token-ui.com
Tokens
Create new token
创建新spl-token
Mint authority: 拥有mint权限的账号 (钱包地址)Freeze authority: 拥有冻结权限的账号Decimals: 小数位
点击
Create new token 会唤醒浏览器钱包插件,授权操作之后,会生成一个spl -token的地址Edit existing token
编辑spl-token
Token mint address: 上一步Create new token创建完成后的spl-token地址
Edit mint authority
New mint authority: 更新拥有mint权限的账号 (钱包账号)
Edit freeze authority
New freeze authority: 更新拥有冻结权限的账号
Accounts
Create Account
创建一个账号
Token mint address: spl-token地址Account owner: 派生地址的owner账号 (钱包账号)Create normal account: 创建普通账号Create associated account: 创建关联账号 (相同owner和spl-token下,只能生成一个关联账号)
编辑账号
Mint: 使用创建spl-token时的Mint authority钱包账号签名,给目标地址mint指定数量的spl-token
Destination account: 目标地址账号 (关联账号)Amount: 数量
Transfer: 转账. 使用源地址owner的钱包账号或delegate的owner钱包账号签名,授权发起一笔转账
Source account: 源地址 (签名的钱包账号在此spl-token下的关联账号)Destination account: 目标地址 (关联账号)Amount: 数量
Freeze: 冻结. 使用创建spl-token时的Freeze authority账号owner钱包账号签名, 冻结某个账号
Account to freeze: 冻结的账号 (关联账号)
Thaw: 解冻. 使用创建spl-token时的Freeze authority账号owner钱包账号签名, 解冻某个账号
Account to thaw: 解冻的账号 (关联账号)
Set Owner: 设置账户所有者
Account address: 要设置的账户 (关联账号)New owner: 新的owner (关联账号)
set Closer: 设置关联账号的close authority, 使用关联账号当前的close authority或者owner钱包账号签名
Account address: 关联账号New close authority: 新的close authority账号 (钱包账号)
Burn: 销毁. 使用关联账号的owner钱包账号签名,销毁关联账号下指定数量的spl-token
Account address: 要销毁spl-token的账号 (关联账号)Amount: 数量
Close: 关闭账号. 使用关联账号owner的钱包账号或者close authority账号签名
Account address: 关联账号Destination account: 转移租金的目标账号 (关联账号)
Approve: 授权. 使用关联账号owner的钱包账号签名
Account address: 账号 (关联账号)Delegate: 代理账号 (关联账号)Amount: 授权的spl-token的数量
Revoke: 撤销授权. 使用关联账号owner的钱包账号签名
Account address: 账号 (关联账号)
Airdrops
SOLSOL Airdrop
支持切换的网络
mainnet-betatestnetdevnetlocalnet
空投的输入的地址可以是任何Solana支持的地址格式
- 钱包账号、关联账号、spl-token账号
token水龙头
Inspect Faucet: 检查水龙头
输入地址后,点击Inspect faucet会返回
FaucetKey: 水龙头地址MintKey: 水龙头领取的spl-tokenAdminKey: 管理员账号PermittedAmount: 单次可空投的spl-token数量(不带decimals)Faucet address: 水龙头地址
Create Faucet: 创建水龙头
点击后会唤醒钱包,授权操作后,会生成一个水龙头账户
Token mint address: spl-token的账户Admin address: 管理员账号 (此账号可以忽略单次空投Amount的限制)Amount: 数量 (单次可空投的带decimals的数量)
Close Faucet: 关闭水龙头
Faucet address: 水龙头地址Rent destination address: 接受已存入水龙头租金的账号
Token Airdrop: token空投
Admin:Create Faucet时设置的Admin address地址, 可忽略本次Amount的限制Token destination address: 空投spl-token的目标账号Faucet address: 水龙头地址Amount: 数量