Solana 本地测试环境下创建和管理 SPL 代币

  • 曲弯
  • 发布于 2天前
  • 阅读 28

在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 &lt;TOKEN_ADDRESS> 代币账户地址 (Token Account)​
6. 铸造代币 spl-token mint &lt;TOKEN_ADDRESS> 1000000 将代币存入你的账户
7. 转移代币 spl-token transfer &lt;TOKEN_ADDRESS> 50 &lt;RECIPIENT_ADDRESS> 完成代币转账

💻 详细操作步骤

1. 环境准备与启动

打开一个新的终端窗口,执行以下命令来配置环境并启动本地测试验证器。

# 将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

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)​里。你需要为刚刚创建的这个代币创建一个关联的代币账户。

# 为刚才创建代币创建一个代币账户(将&lt;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

3. 验证与管理代币

使用以下命令确认操作结果:

# 查看你的默认钱包持有的所有SPL代币及其余额
spl-token accounts

# 查看特定代币的总供应量
spl-token supply 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN

# 查看你的SOL余额
solana balance

4. 转移代币(可选)​

要转账给其他人,需要对方的代币账户地址,而非钱包地址。可以先为对方创建代币账户,再进行转账。

# 为接收方创建代币账户(需要知道对方的钱包地址)
spl-token create-account 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN --owner &lt;RECIPIENT_WALLET_ADDRESS>

# 将50个代币转移到接收方的代币账户
spl-token transfer 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN 50 &lt;RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

💡 核心概念与技巧

  • 理解三个关键地址​:

    • 代币地址 (Mint Address)​​:代币的“身份证”,定义了代币的核心属性(如精度、总供应量)。
    • 钱包地址 (Wallet Address)​​:你的主账户地址,用于持有SOL和签名交易。
    • 代币账户地址 (Token Account)​​:一个“保险箱”,专门用于存放特定代币地址的余额。每个代币类型你都需要一个独立的代币账户。
  • 创建NFT​:如果要创建一个非同质化代币(NFT),只需在创建代币时将精度(--decimals)设置为0,并且只铸造1个代币即可。

  • 放弃铸币权限​:如果希望代币总量固定,不可增发,可以在铸造完成后禁用铸币权限。这是一个不可逆的操作,请谨慎处理。

    spl-token authorize 7ZZ82iRnq9zbLHQyisqLU4svMzmQTskZkJW6rNxZFWkN mint --disable

希望这套完整的命令流程能帮助你在本地测试网上顺利创建和管理SPL代币!如果你在操作中遇到具体问题,比如想了解如何为代币添加元数据(名称、图标等),我可以进一步提供相关信息。

<!--EndFragment-->

遇到问题

<!--StartFragment-->

1 solana-test-validator 提示 Notice! No wallet available. `solana airdrop` localnet SOL after creating one

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与观察验证器日志 确认余额到账,验证器节点运行平稳

💡 详细操作指南

  1. 创建或确认默认钱包

    启动一个新的终端,执行以下命令来生成一个新的密钥对作为你的默认钱包。如果之前已经创建过,此命令会提示你是否覆盖,请谨慎选择。

    solana-keygen new

    执行后,请务必安全备份显示的助记词(BIP39 Seed Phrase)​。生成的密钥对文件默认会保存在 ~/.config/solana/id.json。你可以通过 solana config get命令查看当前配置的密钥对路径。

  2. 获取测试SOL代币

    确保Solana CLI的配置指向你的本地测试网络:

    solana config set --url localhost

    然后,向你的钱包地址空投测试SOL。这些SOL用于在本地网络支付交易和部署程序的费用。

    solana airdrop 2

    空投成功后,可以使用以下命令验证余额:

    solana balance
  3. 验证整个环境

    完成以上步骤后,你的本地开发环境就应该已经完备了。可以观察运行着 solana-test-validator的终端,通常会看到类似下面的状态行在持续滚动,这表明区块正在被处理,网络运行正常:

    ⠴ 00:01:26 | Processed Slot: 182 | Confirmed Slot: 182 | Finalized Slot: 151 | ...

🛠️ 实用技巧与故障排除

  • 使用特定密钥对​:如果你希望为不同项目使用不同的钱包,可以在命令中通过 --keypair &lt;路径>指定密钥文件,或者使用 solana config set --keypair &lt;路径>临时更改默认钱包。
  • 重置本地账本​:如果遇到数据不一致或其他奇怪的问题,可以关闭验证器后,使用 solana-test-validator --reset命令启动。这会清空之前的账本数据,从一个全新的状态开始。
  • 确保验证器在运行​:所有操作(空投、部署等)都需要在 solana-test-validator正在运行且终端没有关闭的情况下进行。请确保其进程稳定。

2. solana-test-validator 端口占用启动失败

<!--StartFragment-->

看起来您的 solana-test-validator在启动时遇到了端口冲突问题,具体是 ​8000 端口​ 已被占用。这在本地开发中很常见,通常是因为有旧的验证器进程没有完全退出。

解决方案概览

方案 核心思路 适用场景
终止占用进程 找到并结束占用 8000 端口的进程。 推荐首选。希望彻底解决冲突,恢复默认端口。
更换验证器端口 solana-test-validator使用其他未被占用的端口。 想保留占用端口的其他程序,或快速绕过问题。

方案一:终止占用端口的进程(推荐)

这是最直接的解决方法,可以一劳永逸地解决问题。

  1. 查找进程​:

    在终端中运行以下命令,查看是哪个进程占用了 8000 端口。命令会返回占用该端口的进程信息,请记下最后一列的 ​PID​(进程ID)。

    lsof -i :8000

    如果 lsof命令不可用,也可以使用 netstat

    netstat -tulpn | grep :8000
  2. 终止进程​:

    使用上一步查到的 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-->
  • 原创
  • 学分: 0
  • 分类: Solana
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
曲弯
曲弯
0xfd88...Df47
江湖只有他的大名,没有他的介绍。