Jacky Gu

Solana开发笔记: Token2022 - 使用spl-token命令行管理代币

01 Jan 2025 Share to

Token2022 - 使用spl-token命令行管理代币

Token2022拥有一些特殊的功能,写法与旧版Token不同,这里用几个篇幅来解释其用法:

  • 1- 初始化mint账户
  • 2- 铸造代币
  • 3- 转账代币
  • 4- 销毁代币
  • 5- 使用Transfer hook冻结和解冻转账
  • 6- 丢弃mint权限
  • 7- 更新metadata
  • 8- 放弃更新metadata权限
  • 9- 使用Transfer fee扩展

首先,使用spl-token命令行实现上述指令。

创建一个token2022标准的代币

spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb

TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbTOKEN_2022_PROGRAM_ID,不能换。

创建一个token2022版的token extentions代币,参数:

  • –enable-close: 可以关闭
  • –enable-freeze: 可冻结
  • –enable-group: 可使用group
  • –enable-metadata: 支持metadata
  • –enable-non-transferable: 支持禁止转账
  • –enable-permanent-delegate: 支持永久代理
  • –transfer-fee basis_ratio min_fee: 支持Transfer fee, basis_ratio是费用率,10000为100%,min_fee是最小费用, lamports为单位

举例:

1- 创建一个token2022

spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb

2- 创建一个支持metadata的代币

spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata

生成token mint地址后,配置metadata

spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>

3- 创建一个指定地址的代币,并将mint authority设置为mint账户

solana-keygen grind --starts-with A1:1

获取一个以A1开头的账户A1hEFthHs9Q4TWFktUTWZppx6DJh6BiEDc14RkUAbuBQ,以该账户为mint账户地址,创建一个mint代币:

spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --mint-authority A1hEFthHs9Q4TWFktUTWZppx6DJh6BiEDc14RkUAbuBQ A1hEFthHs9Q4TWFktUTWZppx6DJh6BiEDc14RkUAbuBQ.json --enable-metadata

然后,设置metadata,注意需要用mint authority作为签名

spl-token initialize-metadata A1hEFthHs9Q4TWFktUTWZppx6DJh6BiEDc14RkUAbuBQ Test02 TEST02 https://node1.irys.xyz/F7qkMeZGbDwZbbo6E6XkOahuUlGEcXElWgGnH5zm4zQ --mint-authority A1hEFthHs9Q4TWFktUTWZppx6DJh6BiEDc14RkUAbuBQ.json

执行上述操作后,在区块链浏览器中查询,得到以下信息:

或者使用spl-token display A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L,显示如下信息:

PL Token Mint
  Address: A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L
  Program: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  Supply: 0
  Decimals: 9
  Mint authority: A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L
  Freeze authority: (not set)
Extensions
  Metadata Pointer:
    Authority: A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L
    Metadata address: A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L
  Metadata:
    Update Authority: 91nnH1cMNz8QHkZuyDyMS7Dj5fL2UNT7VR7t7sS8pWdN
    Mint: A1AFQyyGvD5Y3ynFcV7cmrPHWwsM6ki7PLssRAbutw3L
    Name: Test02
    Symbol: TEST02
    URI: https://node1.irys.xyz/F7qkMeZGbDwZbbo6E6XkOahuUlGEcXElWgGnH5zm4zQ

创建token account用于接收和保存代币

与旧版的Token操作一样。

spl-token create-account <MINT_ACCOUNT>

不需要指定--program-id,程序会根据MINT_ACCOUNT的版本自动创建。

铸造代币

与旧版的Token操作一样。

spl-token mint <TOKEN_MINT_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

注意:这里的amount用普通数量,不要用lamport。

转账代币

与旧版的Token操作一样。

销毁(Burn)代币

与旧版的Token操作一样。