4. CLI 实操入门
本章将使用 Solana CLI 和 spl-token 工具进行实际操作。这是理解代币工作原理最直接的方式。
4.1 环境检查
首先确认环境配置正确:
bash# 检查当前配置 solana config get # 输出示例: # Config File: ~/.config/solana/cli/config.yml # RPC URL: https://api.devnet.solana.com # WebSocket URL: wss://api.devnet.solana.com/ # Keypair Path: ~/.config/solana/id.json # Commitment: confirmed # 确认钱包地址 solana address # 检查余额(需要 SOL 支付交易费用) solana balance # 如果余额不足,申请空投 solana airdrop 2
4.2 创建代币(Mint)
创建一个新的代币类型:
bash# 创建代币,精度为 6 位小数 spl-token create-token --decimals 6 # 输出示例: # Creating token 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Address: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Decimals: 6 # Signature: 5Uv2M...
记下这个 Mint 地址,后续操作需要用到。
查看创建的代币信息:
bashspl-token display <MINT_ADDRESS> # 输出示例: # SPL Token Mint # Address: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Program: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA # Supply: 0 # Decimals: 6 # Mint authority: <YOUR_WALLET_ADDRESS> # Freeze authority: <YOUR_WALLET_ADDRESS>
此时 Supply 是 0,因为还没有铸造任何代币。
4.3 创建代币账户
在铸造代币之前,需要有一个账户来接收它们:
bash# 为当前钱包创建该代币的 ATA spl-token create-account <MINT_ADDRESS> # 输出示例: # Creating account 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM # Signature: 3fE...
如果账户已存在,命令会提示账户已创建。
4.4 铸造代币
现在可以铸造代币了:
bash# 铸造 1000 个代币到自己的账户 spl-token mint <MINT_ADDRESS> 1000 # 输出示例: # Minting 1000 tokens # Token: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Recipient: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM # Signature: 4gH...
注意:这里输入的是用户可读的数量(1000),CLI 会自动根据 decimals 转换为底层数值(1000 * 10^6 = 1,000,000,000)。
检查余额:
bash# 查看特定代币余额 spl-token balance <MINT_ADDRESS> # 输出:1000 # 查看所有代币余额 spl-token accounts # 输出示例: # Token Balance # ------------------------------------------------------- # 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU 1000
4.5 转账
转账给其他地址:
bash# 转账 100 个代币给目标钱包 # 如果对方没有该代币的 ATA,可以添加 --fund-recipient 自动创建 spl-token transfer <MINT_ADDRESS> 100 <RECIPIENT_WALLET> --fund-recipient # 输出示例: # Transfer 100 tokens # Sender: 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM # Recipient: Fg6PaFpoGXkYsidMpWxqSk3V7HFgyNvXz9hLYC7e123 # Signature: 2sY...
--fund-recipient参数会在接收方没有对应 ATA 时自动创建,创建费用由发送方支付。
4.6 销毁代币
销毁(Burn)会永久减少代币供应量:
bash# 销毁 50 个代币 spl-token burn <TOKEN_ACCOUNT_ADDRESS> 50 # 或者使用 Mint 地址(会自动找到 ATA) spl-token burn <MINT_ADDRESS> 50 # 确认供应量变化 spl-token supply <MINT_ADDRESS>
4.7 权限管理
查看和修改权限:
bash# 查看代币权限 spl-token display <MINT_ADDRESS> # 移除铸造权限(不可逆!) spl-token authorize <MINT_ADDRESS> mint --disable # 将铸造权限转移给其他地址 spl-token authorize <MINT_ADDRESS> mint <NEW_AUTHORITY> # 移除冻结权限 spl-token authorize <MINT_ADDRESS> freeze --disable
一旦权限设置为 disabled,就无法恢复。这常用于创建固定供应量的代币。
4.8 冻结与解冻账户
如果代币设置了冻结权限,可以冻结特定账户:
bash# 冻结账户(被冻结的账户无法转出代币) spl-token freeze <TOKEN_ACCOUNT_ADDRESS> # 解冻账户 spl-token thaw <TOKEN_ACCOUNT_ADDRESS>
这个功能常用于合规场景,例如 USDC 的发行方 Circle 可以冻结涉嫌非法活动的地址。
4.9 关闭账户
当不再需要某个 Token Account 时,可以关闭它以回收租金:
bash# 首先确保账户余额为 0 spl-token balance <MINT_ADDRESS> # 关闭账户,租金退还到当前钱包 spl-token close <TOKEN_ACCOUNT_ADDRESS> # 或关闭并指定接收地址 spl-token close <TOKEN_ACCOUNT_ADDRESS> --recipient <WALLET_ADDRESS>