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
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
是TOKEN_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操作一样。