在Solana本地测试环境下创建和管理SPL代币,是智能合约开发和dApp测试的重要环节。下面这套完整的命令代码将引导你从环境设置到代币创建、铸造和转移的全过程。下表概括了整个流程的核心步骤,帮你快速把握要点。
<!--StartFragment-->
在 Solana 本地测试环境下创建和管理 SPL 代币,是智能合约开发和 dApp 测试的重要环节。下面这套完整的命令代码将引导你从环境设置到代币创建、铸造和转移的全过程。
下表概括了整个流程的核心步骤,帮你快速把握要点。
| 步骤 | 核心命令/操作 | 关键产出物 |
|---|---|---|
| 1. 环境设置 | solana config set --url localhost |
连接到本地网络 |
| 2. 启动本地节点 | solana-test-validator |
本地测试环境 |
| 3. 获取测试SOL | solana airdrop 2 |
支付交易费用的资金 |
| 4. 创建代币 | spl-token create-token --decimals 6 |
代币地址 (Mint Address) |
| 5. 创建代币账户 | spl-token create-account <TOKEN_ADDRESS> |
代币账户地址 (Token Account) |
| 6. 铸造代币 | spl-token mint <TOKEN_ADDRESS> 1000000 |
将代币存入你的账户 |
| 7. 转移代币 | spl-token transfer <TOKEN_ADDRESS> 50 <RECIPIENT_ADDRESS> |
完成代币转账 |
打开一个新的终端窗口,执行以下命令来配置环境并启动本地测试验证器。
# 将Solana CLI配置为连接到本地网络
solana config set --url localhost
# 启动本地Solana测试验证器(保持此终端窗口运行)
solana-test-validator
注意:solana-test-validator会启动一个本地Solana集群,默认RPC端口为8899。启动后,它会自动生成一个持有大量测试SOL的钱包,并持续输出日志。
打开另一个终端窗口进行后续操作。首先获取一些测试SOL用于支付交易费用(Gas Fee):
# 向默认钱包地址空投2个测试SOL(通常2个就足够测试使用)
solana airdrop 2
现在开始创建你的代币。以下命令假设你要创建一个精度为6位的代币。
# 创建一个新的SPL代币,并设置精度(小数位数)为6
spl-token create-token --decimals 6
命令成功后会返回类似以下的信息,请务必记录下你的 代币地址(Token Address):
Creating token 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN under program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Address: 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN
Decimals: 6
Signature: 4gJH3rzP4vA5NyrHrzv61os6pLcjQViUdrTWQbqtCy8wAVSVovTFDmKGsrq3utQyidB5c6zphG9bRGN6G8ss7qb9
在Solana上,代币并不直接存储在钱包地址中,而是存储在专门的代币账户(Token Account)里。你需要为刚刚创建的这个代币创建一个关联的代币账户。
# 为刚才创建代币创建一个代币账户(将<TOKEN_ADDRESS>替换为你的代币地址)
spl-token create-account 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN
命令成功后会返回代币账户地址:
Creating account iMqV2UhrefEibCem3TvBwe95K1boFAHmPqN5SWZXnVM
Signature: 2tJjXwazRquvvu4A1neZZDHLKxSr97jrTmyc2WqDNSr78FnY7FRPHHH5mVwGV652KrZ9qqBR58y64cZsdrMSUpNW
有了代币账户,就可以向里面铸造初始供应量了。
# 向你的代币账户铸造1,000,000个代币(注意:数量是整数,会根据精度自动换算)
spl-token mint 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN 1000000
成功后输出:
Minting 1000000 tokens
Token: 7ZZ82iRnq9zbLHQyimqLU4svMzmQTskZkJW6rNxZFWkN
Recipient: iMqV2UhrefEibCem3TvBwe95K1boFAHmPqN5SWZXnVM
Signature: 2ACXzvaSg7NuhR3ZLzcmCG7hVaq1LRi9XGtsEwioKinYoFduKScDRY3E9mkqg8S8wqxbn66H4emF1C92hJ2BsfLK
使用以下命令确认操作结果:
# 查看你的默认钱包持有的所有SPL代币及其余额
spl-token accounts
# 查看特定代币的总供应量
spl-token supply 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN
# 查看你的SOL余额
solana balance
要转账给其他人,需要对方的代币账户地址,而非钱包地址。可以先为对方创建代币账户,再进行转账。
# 为接收方创建代币账户(需要知道对方的钱包地址)
spl-token create-account 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN --owner <RECIPIENT_WALLET_ADDRESS>
# 将50个代币转移到接收方的代币账户
spl-token transfer 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN 50 <RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
理解三个关键地址:
创建NFT:如果要创建一个非同质化代币(NFT),只需在创建代币时将精度(--decimals)设置为0,并且只铸造1个代币即可。
放弃铸币权限:如果希望代币总量固定,不可增发,可以在铸造完成后禁用铸币权限。这是一个不可逆的操作,请谨慎处理。
spl-token authorize 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN mint --disable
希望这套完整的命令流程能帮助你在本地测试网上顺利创建和管理SPL代币!如果你在操作中遇到具体问题,比如想了解如何为代币添加元数据(名称、图标等),我可以进一步提供相关信息。
<!--EndFragment-->
<!--StartFragment-->
solana-test-validator提示 "Notice! No wallet available" 是一个信息性提示,并非错误。它表明你的本地测试验证器已经成功启动,但还没有为其配置一个包含测试SOL的钱包。下面这个表格概括了解决这个问题的核心步骤。
| 步骤 | 核心命令/操作 | 关键产出物与验证 |
|---|---|---|
| 1. 检查当前配置 | solana config get |
确认RPC URL为 localhost并记录密钥对路径 |
| 2. 创建钱包密钥对 | solana-keygen new(或使用现有密钥) |
生成或确认默认钱包地址 (~/.config/solana/id.json) |
| 3. 配置CLI指向本地网络 | solana config set --url localhost |
确保后续操作(如空投)在本地网络执行 |
| 4. 获取测试SOL | solana airdrop 2 |
为钱包注入资金,支付交易费用 |
| 5. 验证节点与钱包状态 | solana balance与观察验证器日志 |
确认余额到账,验证器节点运行平稳 |
创建或确认默认钱包
启动一个新的终端,执行以下命令来生成一个新的密钥对作为你的默认钱包。如果之前已经创建过,此命令会提示你是否覆盖,请谨慎选择。
solana-keygen new
执行后,请务必安全备份显示的助记词(BIP39 Seed Phrase)。生成的密钥对文件默认会保存在 ~/.config/solana/id.json。你可以通过 solana config get命令查看当前配置的密钥对路径。
获取测试SOL代币
确保Solana CLI的配置指向你的本地测试网络:
solana config set --url localhost
然后,向你的钱包地址空投测试SOL。这些SOL用于在本地网络支付交易和部署程序的费用。
solana airdrop 2
空投成功后,可以使用以下命令验证余额:
solana balance
验证整个环境
完成以上步骤后,你的本地开发环境就应该已经完备了。可以观察运行着 solana-test-validator的终端,通常会看到类似下面的状态行在持续滚动,这表明区块正在被处理,网络运行正常:
⠴ 00:01:26 | Processed Slot: 182 | Confirmed Slot: 182 | Finalized Slot: 151 | ...
--keypair <路径>指定密钥文件,或者使用 solana config set --keypair <路径>临时更改默认钱包。solana-test-validator --reset命令启动。这会清空之前的账本数据,从一个全新的状态开始。solana-test-validator正在运行且终端没有关闭的情况下进行。请确保其进程稳定。<!--StartFragment-->
看起来您的 solana-test-validator在启动时遇到了端口冲突问题,具体是 8000 端口 已被占用。这在本地开发中很常见,通常是因为有旧的验证器进程没有完全退出。
| 方案 | 核心思路 | 适用场景 |
|---|---|---|
| 终止占用进程 | 找到并结束占用 8000 端口的进程。 | 推荐首选。希望彻底解决冲突,恢复默认端口。 |
| 更换验证器端口 | 让 solana-test-validator使用其他未被占用的端口。 |
想保留占用端口的其他程序,或快速绕过问题。 |
这是最直接的解决方法,可以一劳永逸地解决问题。
查找进程:
在终端中运行以下命令,查看是哪个进程占用了 8000 端口。命令会返回占用该端口的进程信息,请记下最后一列的 PID(进程ID)。
lsof -i :8000
如果 lsof命令不可用,也可以使用 netstat:
netstat -tulpn | grep :8000
终止进程:
使用上一步查到的 PID,用 kill命令结束该进程。例如,如果查到的 PID 是 1234,则执行:
kill -9 1234
之后,再重新运行 solana-test-validator,它应该就能正常启动了。
注意:请确保您终止的进程确实是旧的 solana-test-validator或其他无关紧要的程序,避免误关系统关键进程。
如果您希望保留正在使用 8000 端口的程序,可以为测试验证器指定一个新的端口。
使用 --gossip-port参数指定一个未被占用的新端口(例如 8001)来启动验证器:
solana-test-validator --gossip-port 8001
这样,验证器的 Gossip 服务就会监听 8001 端口,从而避免冲突。您还可以使用 --rpc-port等参数来更改其他服务的端口。
solana-test-validator时,尽量在它运行的终端窗口按 Ctrl+C来正常终止,而不是直接关闭终端窗口。这能确保进程完全释放所占用的端口。lsof -i :8000检查一下默认端口是否空闲。
<!--EndFragment-->如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!