教程 | 理解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 id
  • owner: 所属的钱包账号
  • amount: 持有spl-token的数量
  • delegate: 代理账号
  • state: 账号状态
    • Uninitialized: 账号未初始化
    • Initialized: 账号已经初始化 (ownerdelegate都可以操作)
    • Frozen: 账号已被冻结 (ownerdelegate都无法操作)
  • 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下,只能生成一个关联账号)
Edit Account
    编辑账号
    

  •     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-beta
  • testnet
  • devnet
  • localnet

    空投的输入的地址可以是任何Solana支持的地址格式
    
  • 钱包账号、关联账号、spl-token账号
TOKENSToken Faucets
    token水龙头
    

  •     Inspect Faucet: 检查水龙头
        输入地址后,点击Inspect faucet会返回
        
    • FaucetKey: 水龙头地址
    • MintKey: 水龙头领取的spl-token
    • AdminKey: 管理员账号
    • 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: 数量