关于 token-distribution
面向 Solana 开发者的压缩代币分发指南,介绍如何使用 TypeScript 客户端向多个接收者空投代币。内容涵盖单笔或批量分发,以及带领取流程的参考实现。
主要功能
- 01使用 TypeScript 客户端分发压缩代币
- 02按接收者规模选择单笔或批量方式
- 03提供 Merkle Distributor 与 Simple Claim 参考
- 04涵盖线性归属、部分领取和撤回
- 05介绍代币创建与交易设置
适用场景
- 01向少量接收者发起单笔空投
- 02向大量接收者分批发送代币
- 03设置带线性归属或部分领取的分发
- 04构建按领取操作的代币分发
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lightprotocol/ skills --skill token-distribution安装后在 Claude Code 中输入/token-distribution确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/batched-airdrop.mdsimple-airdrop.mdspl-to-light.md详细介绍
空投
使用 TypeScript 客户端向多个接收方分发压缩代币。
免责声明: 本指南演示如何使用 ZK 压缩在 Solana 上高效分发代币。本指南不构成财务建议,也不为任何特定代币或项目背书。
工作流
- 明确意图
- 如果尚未启用,建议使用计划模式
- 使用
AskUserQuestion弥补信息盲点 - 执行前必须解决所有问题
- 确定参考资料和技能
- 将任务与下方的分发方式对应起来
- 查找相关文档和示例
- 编写计划文件(YAML 任务格式)
- 对任何不清楚的内容使用
AskUserQuestion提问,绝不猜测或擅自假设 - 确定阻碍因素:权限、依赖项、未知事项
- 执行开始前必须完成计划
- 对任何不清楚的内容使用
- 执行
- 使用
Task工具和子 Agent 并行开展研究 - 子 Agent 通过
Skill工具加载技能 - 使用
TodoWrite跟踪进度
- 使用
- 遇到阻碍时:请求启动一个只读子 Agent,允许其使用
Read、Glob、Grep和 DeepWiki MCP 访问权限,并加载skills/ask-mcp。将读取范围限定为技能参考资料、示例代码仓库和文档。
通过客户端分发
| 规模 | 方式 |
|---|---|
| 少于 10,000 个接收方 | 单笔交易——参见 simple-airdrop.md |
| 10,000 个及以上接收方 | 分批并重试——参见 batched-airdrop.md |
| SPL 与 Light 对比 | 并排比较设置操作——参见 spl-to-light.md |
| 无代码 | Helius 的 Airship(最多 200k) |
成本对比
| 创建 | Solana | 压缩版 |
|---|---|---|
| 代币账户 | ~2,000,000 lamports | 5,000 lamports |
领取程序参考实现
自定义代币分发方式,并允许用户领取。
简单实现:simple-claim - 分发压缩代币,领取时会将其解压。
高级实现:distributor - 分发 SPL 代币,并使用压缩 PDA 跟踪领取情况。基于 jito Merkle distributor。
| distributor | simple-claim | |
|---|---|---|
| 归属安排 | 线性归属 | 在 Slot X 一次性归属 |
| 部分领取 | 是 | 否 |
| 撤回 | 是 | 否 |
| 前端 | REST API + CLI | 无 |
这些程序是参考实现,未经审计。Light Protocol Programs 已通过审计并部署在 Solana Mainnet 上。
成本
| 每次领取 | 100k 次领取 | |
|---|---|---|
| simple-claim | ~0.00001 SOL | ~1 SOL |
| distributor(压缩版) | ~0.00005 SOL | ~5 SOL |
| distributor(原版) | ~0.002 SOL | ~200 SOL |
核心模式
import { CompressedTokenProgram, getTokenPoolInfos, selectTokenPoolInfo } from "@lightprotocol/compressed-token";
import { bn, createRpc, selectStateTreeInfo, buildAndSignTx, sendAndConfirmTx } from "@lightprotocol/stateless.js";
import { ComputeBudgetProgram } from "@solana/web3.js";
const rpc = createRpc(RPC_ENDPOINT);
// 1. Get infrastructure
const treeInfo = selectStateTreeInfo(await rpc.getStateTreeInfos());
const tokenPoolInfo = selectTokenPoolInfo(await getTokenPoolInfos(rpc, mint));
// 2. Build compress instruction (SPL → compressed to multiple recipients)
const ix = await CompressedTokenProgram.compress({
payer: payer.publicKey,
owner: payer.publicKey,
source: sourceAta.address, // SPL associated token account holding tokens
toAddress: recipients, // PublicKey[]
amount: recipients.map(() => bn(amount)),
mint,
tokenPoolInfo,
outputStateTreeInfo: treeInfo,
});
// 3. Send with compute budget (120k CU per recipient)
const instructions = [
ComputeBudgetProgram.setComputeUnitLimit({ units: 120_000 * recipients.length }),
ix,
];
const { blockhash } = await rpc.getLatestBlockhash();
const tx = buildAndSignTx(instructions, payer, blockhash, []);
await sendAndConfirmTx(rpc, tx);
设置:创建 Mint
import { createMint } from "@lightprotocol/compressed-token";
import { getOrCreateAssociatedTokenAccount, mintTo } from "@solana/spl-token";
const { mint } = await createMint(rpc, payer, payer.publicKey, 9);
const ata = await getOrCreateAssociatedTokenAccount(rpc, payer, mint, payer.publicKey);
await mintTo(rpc, payer, mint, ata.address, payer.publicKey, 100_000_000_000);
计算单元
| 接收方/指令 | CU |
|---|---|
| 1 | 120,000 |
| 5 | 170,000 |
| 批量交易 | 500,000 |
查找表
缩小交易体积:
| 网络 | 地址 |
|---|---|
| Mainnet | 9NYFyEqPkyXUhkerbGHXUXkvb4qpzeEdHuGpgbgpH1NJ |
| Devnet | qAJZMgnQJ8G6vA3WRcjD9Jan1wtKkaCFWLWskxJrR5V |
高级:基于领取
用于归属安排、撤回或由用户发起的领取:
| 实现 | 功能 |
|---|---|
| Merkle Distributor | 线性归属、部分领取、撤回、REST API |
| Simple Claim | 在 slot X 一次性归属 |
资源
- 文档:空投指南
- 代码:examples-light-token
- 工具:Helius 提供的 Airship
SDK 参考
| 软件包 | 链接 |
|---|---|
@lightprotocol/stateless.js | API 文档 |
@lightprotocol/compressed-token | API 文档 |
安全
此技能仅提供代码模式和文档参考。
- 声明的依赖项。 参考示例需要
HELIUS_API_KEY(RPC 提供商密钥)和用于签署交易的付款方密钥对。只读或 localnet 测试不需要这两项。在生产环境中,请从密钥管理器加载二者,切勿将私钥硬编码。 - 文件系统范围。
Read、Glob和Grep必须仅限于当前项目目录和技能参考。不要读取这些路径之外的内容。 - 子 Agent 范围。 遇到困难时,该技能会要求启动只读子 Agent,并将
Read、Glob、Grep的范围限定为技能参考、示例仓库和文档。 - 安装来源。 从 Lightprotocol/skills 运行
npx skills add Lightprotocol/skills。 - 已审计的协议。 Light Protocol 智能合约已由独立机构审计。审计报告发布于 github.com/Lightprotocol/light-protocol/tree/main/audits。
评论
支持 Markdown