Solana SPL-Token 命令行完整实战:从安装到多重签名

·

核心关键词:Solana代币发行、spl-token CLI、Solana开发测试、Solana多签、Solana NFT、Solana发币教程

环境准备

1 安装 Solana CLI

打开终端,一键脚本安装最新稳定版:

sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"

把可执行文件加入系统路径:

export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# 建议把上面这句追加到 ~/.zshrc 或 ~/.bashrc

验证安装:

solana --version

2 切换 Devnet,领取测试 SOL

开发阶段永远用 Devnet,免费且不会烧真钱:

solana config set --url https://api.devnet.solana.com
solana airdrop 5

看到余额增加即成功:

solana balance

从零创建你的第一个代币(Fungible Token)

1 创建 Mint(铸币账户)

spl-token create-token

输出示例:

Creating token 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT ...
Address: 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT
Decimals: 9

此时总供应量为 0:

spl-token supply 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT
# 返回 0

2 为你的钱包创建 ATA(关联代币账户)

必须先有 ATA,才能接收这种代币:

spl-token create-account 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT

CLI 会自动计算出你的 ATA 地址并存入少量 SOL 做租金。

3 铸造代币(Mint to)

给自己发 100 枚(9 位小数,所以其实是 100.000000000):

spl-token mint 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT 100

再查余额:

spl-token balance 34GbKbRzLMfvpHEFywhe2KyheKMMxab8tQAFj5t2rBYT
# 100

总供应量随之更新:

spl-token supply ...
# 100

常用查询与管理命令

需求命令示例
查看当前钱包持有的所有代币spl-token accounts
查看指定代币的全部持有者spl-token accounts <mint> -v
转 50 枚给另一地址spl-token transfer <mint> 50 <receiver-wallet>
铸造权限一次作废,永久固定总量spl-token authorize <mint> mint --disable

FAQ:转账时对方没有 ATA 怎么办?

Q:如果接收方钱包没有对应的 ATA,会不会失败?
A:加 --allow-unfunded-recipient --fund-recipient 即可自动创建,转账手续费略高于正常转账。

衍生场景

1 发行 NFT(Non-Fungible Token)

只需把小数位设为 0,让 供应量永远为 1

spl-token create-token --decimals 0
spl-token mint <new-mint> 1

完成后禁用再铸即可。

2 包装与解包 SOL(WSOL)

在 DeFi 场景常把原生 SOL 包装成 WSOL(W-rapped SOL),与普通 SPL 代币统一处理。

FAQ:包装 SOL 有什么坑?

Q:为什么包装后钱包仍显示 SOL 金额?
A:只是表现形式不同,链上实际发生了两步:

  1. 把 1 SOL 转进新 ATA。
  2. 发送 SyncNative 指令让 Token Program 更新余额。

多重签名(Multisig)深度实践

创建 2/3 多签

  1. 先准备 3 把钥匙:
solana-keygen new --no-passphrase -so signer-1.json
solana-keygen new --no-passphrase -so signer-2.json
solana-keygen new --no-passphrase -so signer-3.json
  1. 读取公钥:
for i in signer-{1..3}.json; do echo "$i: $(solana-keygen pubkey $i)"; done
  1. 创建多签账户:
spl-token create-multisig 2 <pubkey1> <pubkey2> <pubkey3>
# 得到多签地址:46ed77fd4....

将铸币权限挂给多签

典型流程:

spl-token create-token                       # 普通新代币
spl-token authorize <mint> mint <多签地址>  # 移交权限

此时,任何人单签都无法继续铸币,必须集齐 两把钥匙 才能继续:

spl-token mint <mint> 1 <target-ata> \
  --owner <多签地址> \
  --multisig-signer signer-1.json \
  --multisig-signer signer-2.json

离线签名完整示例

当主要签名人不在线时,可将交易导出离线签名 —— 用 nonce 账户防重放。
如需完整脚本与演示,👉 点击获取实战离线签名模板 (免注册直接运行)。

JSON-RPC 索引速查

可用链上方法帮你在应用层快速查询:

示例:获取某钱包的全部 SPL 代币(Devnet 节点为例):

curl https://api.devnet.solana.com -X POST -H "Content-Type: application/json" -d '
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getTokenAccountsByOwner",
  "params": [
    "<用户钱包地址>",
    {"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},
    {"encoding": "jsonParsed"}
  ]
}'

开发者锦囊:常见坑与技巧

场景避坑指南
反复空投Devnet 每小时最多 2 次,超出需等待。
小数位过多UI/前端展示记得除以 10^decimals
忘记保留 SOL创建 ATA、转账、关账户都需要少量租金,钱包至少留 0.002 SOL。
多签失败检查提供的签名数量与 --owner 设定的阈值是否匹配。

总结

从安装一条命令到发链上 NFT,这套 Solana代币发行spl-token CLI 完整实践已覆盖全部核心环节。想深入 Solana开发测试Solana多签 高级模式,可将本文命令稍作组合即可投入 DAO、DeFi、空投等真实场景。祝一路链上顺利!