You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Solana的spltoken CLI批量发送SPL-Tokens?CSV尝试失败求助

用Solana工具批量发送SPL代币的方案

一、CLI工具直接实现(solana-tokens)

你尝试的solana-tokens是官方推荐的批量发币工具,先排查CSV格式和命令问题:

  • CSV必须严格遵循格式:第一行表头为address,amount,每行对应一个接收地址和代币最小单位数量(比如代币有6位小数,发1个代币需写1000000)
  • 正确执行命令:
    solana-tokens distribute-tokens --from <你的钱包地址> --token <SPL代币地址> --input-csv <你的CSV文件路径>
    
  • 常见错误排查:
    • 确保钱包有足够SOL支付手续费(单转账约0.000005 SOL,批量需提前算好总量)
    • CSV内地址无空格/换行,数量必须为整数
    • 先执行solana-tokens validate-csv <你的CSV文件路径>检查格式合法性

solana-tokens默认会将多个转账打包进单笔交易(不超过Solana单笔交易指令上限,约100条),无需额外参数。

二、代码实现(新手友好的Python版本)

如果CLI方案仍有问题,用Python实现更灵活,以下是带详细注释的学习代码:

前置准备

  1. 安装依赖:
    pip install solana spl-token pycryptodome python-dotenv
    
  2. 创建.env文件存储敏感信息:
    SOLANA_RPC_URL=https://api.devnet.solana.com  # 主网替换为https://api.mainnet-beta.solana.com
    WALLET_PRIVATE_KEY=<你的钱包私钥字符串>
    TOKEN_MINT_ADDRESS=<你的SPL代币地址>
    

代码示例

from solana.rpc.api import Client
from solana.keypair import Keypair
from spl.token.instructions import transfer, TransferParams
from spl.token.core import Token
from dotenv import load_dotenv
import os
import csv

# 加载环境变量,避免硬编码敏感信息
load_dotenv()

# 初始化Solana网络客户端
client = Client(os.getenv("SOLANA_RPC_URL"))

# 加载发送方钱包
sender = Keypair.from_secret_key(bytes.fromhex(os.getenv("WALLET_PRIVATE_KEY")))

# 初始化SPL代币操作对象
token = Token(client, os.getenv("TOKEN_MINT_ADDRESS"), sender.public_key, sender.secret_key)

# 读取CSV中的接收方信息
def read_recipients(csv_path):
    recipients = []
    with open(csv_path, mode='r') as file:
        # 按表头解析CSV内容
        reader = csv.DictReader(file)
        for row in reader:
            # 数量转整数(必须是代币最小单位)
            recipients.append((row['address'], int(row['amount'])))
    return recipients

# 批量发送函数,支持分批次打包交易
def batch_transfer(recipients, batch_size=50):
    # 分批次处理,避免单笔交易指令过多触发限制
    for i in range(0, len(recipients), batch_size):
        batch = recipients[i:i+batch_size]
        transaction_instructions = []
        
        for addr, amount in batch:
            # 查询接收方是否已有对应代币账户
            recipient_token_account = token.get_account_info(addr)
            if not recipient_token_account:
                # 若没有,自动创建关联代币账户(需额外支付少量SOL手续费)
                create_account_ix = token.create_associated_token_account(addr)
                transaction_instructions.append(create_account_ix)
            
            # 添加转账指令
            transfer_ix = transfer(TransferParams(
                token=token.pubkey,
                source=token.get_account_info(sender.public_key)['address'],
                dest=recipient_token_account['address'] if recipient_token_account else token.get_associated_token_account_address(addr),
                owner=sender.public_key,
                amount=amount
            ))
            transaction_instructions.append(transfer_ix)
        
        # 发送打包后的交易
        txn_result = client.send_transaction(sender, transaction_instructions)
        print(f"批次{i//batch_size + 1}发送完成,交易签名:{txn_result.value}")

if __name__ == "__main__":
    # 替换为你的CSV文件路径
    recipient_list = read_recipients("recipients.csv")
    batch_transfer(recipient_list)

代码关键解释

  • 环境变量:私钥、RPC地址等敏感信息单独存储,避免代码泄露风险
  • 代币账户处理:自动检测接收方是否有对应代币账户,无则创建,无需手动操作
  • 分批次打包:控制单笔交易内的指令数量,避免触发Solana网络限制
  • 交易签名输出:方便在Solana浏览器查询交易状态

三、核心注意事项

  • 先在Devnet测试网练手,使用测试SOL和测试代币,避免主网资产损失
  • 手续费预估:每笔转账(含账户创建)约0.000005 SOL,批量交易手续费随指令数量略有增加
  • 私钥安全:绝对不要将私钥上传至任何平台,仅本地存储

内容的提问来源于stack exchange,提问作者7captain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:18:24