本文将详细介绍在 Solana devnet 上创建自定义 SPL 代币、部署经过审计的代币线性释放程序(Bonfida),并实现代币分期释放的全过程。通过本指南,您将掌握 Solana 核心概念与操作实践。
概述
在 Solana 网络中实现代币线性释放需完成以下关键步骤:
- 创建自定义 SPL 代币
- 部署经过审计的线性释放程序
- 创建释放计划并设置释放时间与数量
- 在满足条件后释放代币
通过这一流程,您将深入理解 Solana 的账户体系、默认程序与非默认程序的交互方式。
前期准备
开始操作前,请确保准备好以下工具与环境:
- Rust 编程语言环境:用于构建和部署释放程序
- Solana 工具套件:用于创建账户和与网络交互
- SPL 代币命令行工具:用于与默认代币程序交互
这些工具将帮助您顺利完成代币创建与释放流程。
操作流程总览
从零开始实现代币线性释放的完整流程包括:
- 生成两个账户:一个用于部署程序和持有代币,另一个用于接收释放的代币
- 通过水龙头为账户注入 devnet SOL 以支付手续费
- 创建自定义 SPL 代币
- 为两个账户派生代币账户
- 铸造代币到源账户
- 部署线性释放程序
- 创建释放实例并设置释放计划
- 检查释放状态
- 释放已到期的代币
详细操作步骤
生成账户与获取资金
首先需要生成两个账户并为其注入资金:
solana-keygen new --outfile ~/wallet/keypair.json请确保生成两个独立账户:一个用于创建和持有代币,另一个作为代币释放的目标账户。
两个账户都需要 SOL 来支付网络交易费用。通过 Solana devnet 水龙头为每个账户注入测试网 SOL。
创建 SPL 代币
设置默认签名账户:
solana config set --keypair ~/wallet/keypair1.json创建代币:
spl-token create-token此命令通过您连接的节点调用 Solana 默认代币程序,返回新创建代币的地址。代币默认具有 9 位小数精度。
派生代币账户
在操作代币前,需要为每个主账户派生对应的代币账户:
spl-token create-account TOKEN_ADDRESS其中 TOKEN_ADDRESS 是您创建的代币地址。请记住使用 solana config set --keypair WALLET_PATH 命令在两个账户间切换。
铸造代币
确保当前处于创建代币的账户,然后执行铸造:
spl-token mint TOKEN_ADDRESS 1000这将铸造 1000 个代币到您的账户。
至此,您已成功:
- 通过 Solana 默认代币程序创建了代币
- 两个主账户均注入了 SOL
- 两个代币账户已映射到主账户并与创建代币关联
- 一个代币账户持有 1000 个代币,另一个为空
部署线性释放程序
接下来部署经过审计的 Bonfida 线性释放程序——这是 Solana 上许多项目的首选释放方案。
在项目目录中克隆代币释放库:
git clone https://github.com/Bonfida/token-vesting切换到 program/ 目录并构建程序:
cargo build-bpf部署程序:
solana program deploy target/deploy/token_vesting.so部署完成后将返回程序在 Solana devnet 上的地址。
创建释放实例
需要构建 CLI 工具来与程序交互并创建释放实例:
切换到 cli/ 目录并构建:
cargo build --release创建释放实例:
./target/release/token-vesting create --program PROGRAM_ADDRESS --token TOKEN_ADDRESS --source SOURCE_WALLET_PATH --from SOURCE_ACCOUNT_TOKEN_ADDRESS --to DESTINATION_ACCOUNT_TOKEN_ADDRESS --amount AMOUNT --time TIME参数说明:
- PROGRAM_ADDRESS:您在 devnet 上部署的释放程序地址
- TOKEN_ADDRESS:您创建的代币地址
- SOURCE_WALLET_PATH:持有代币账户的钱包文件路径
- SOURCE_ACCOUNT_TOKEN_ADDRESS:持有代币的派生代币账户
- DESTINATION_ACCOUNT_TOKEN_ADDRESS:接收释放代币的目标账户
- AMOUNT:释放的代币数量(基础单位)
- TIME:代币可释放的 Unix 时间戳
创建释放实例将返回一个种子,该种子可公开共享并用于检查释放状态。
检查释放状态
您可以检查释放实例的状态,查看预定义的释放时间和待释放数量:
./target/release/token-vesting state --program PROGRAM_ADDRESS --seed SEED释放已归属代币
网络中任何愿意支付释放交易费用的人都可以调用代币释放:
./target/release/token-vesting release --program PROGRAM_ADDRESS --seed SEED --fee-payer WALLET_PATH如果代币在过去时间戳有未释放数量,它们将被释放到目标账户。
检查派生代币账户的余额:
spl-token balance AcFTnytDRgQhdKK5QSxjAByjcwz5jaUnkTQG6FK5F7bP常见问题
什么是代币线性释放?
代币线性释放是一种机制,通过智能合约锁定代币并按预定时间表逐步释放。这常用于项目团队代币锁定、投资分期释放等场景,确保代币不会一次性进入流通市场。
Solana 上的代币账户与主账户有何区别?
主账户用于持有 SOL 和支付交易费用,而代币账户是派生账户,专门用于持有特定类型的 SPL 代币。每个主账户可以为每种代币派生一个独立的代币账户。
释放程序部署后可以重复使用吗?
是的,类似默认代币程序,您只需要程序的部署地址即可创建自己的程序实例。无需每次都需要重新部署程序,只需使用已部署程序的地址并传入自己的参数即可创建新的释放实例。
代币释放是否可以多人触发?
是的,网络中的任何参与者都可以调用释放函数,只要他们愿意支付交易费用。这种设计避免了依赖单一主体执行释放操作的风险。
本教程是否适用于主网?
完全适用。只需将端点切换至主网,并确保有足够的 SOL 支付交易费用。操作步骤和序列与 devnet 完全一致。
总结
本指南详细介绍了如何使用 Solana 默认代币程序创建代币、部署自定义程序以及在 Solana 网络上与程序交互的基本流程。您还学习了程序设计和派生代币账户的核心概念。
通过这一完整流程,您不仅掌握了技术操作,更深入理解了 Solana 生态的核心工作机制。这些技能为您在 Solana 上进行更复杂的代币经济设计和智能合约开发奠定了坚实基础。