转载自链登社区Satoshi Nakamoto
在Solana生态系统中,批量转账是一种常见的操作,特别是在空投代币或者将代币发送给多个地址时。本教程将向您展示如何在Solana网络进行批量转账,包括账户模型、批量转账的成本等方面的介绍。
solana 账户模型
在Solana中有三类账户:
数据账户,用来存储数据
程序账户,用来存储可执行程序
原生账户,指Solana上的原生程序,例如"System","Stake",以及"Vote"。
数据账户又分为两类:
系统所有账户
程序派生账户(PDA)
我们通常使用的钱包地址属于数据帐户中的系统所有帐户,我们可以通过自己私钥签名,系统验证签名是否正确,签名正确就可以访问账户,比如转账,调用合约。
solana 代币中账户的关系
在以太坊系列中,发行一个代币是直接部署一个智能合约,合约对应的地址就是代币地址。但是solana 有所不同。
下图是 solana 代币对应的三种账户:
![](https://public.bnbstatic.com/image/pgc/202404/a550d4700e4ea2a3ccd4cee86cd7bdd7.png)
其中:
token program: 是程序账户,是 spl 代币官方部署的可执行程序。
mint account: 是用户通过 token program 创建出来的代币账户,也就是代币铸币地址,该账户存储了代币的基本信息,如代币供应量、铸币和冻结许可权的地址以及代币的小数精度。
token account: 是指用户的代币账户,每个代币持有者都有一个特定的代币账户, 记录了该持有者特定Token 的余额和相关信息。例如,Alice 同时拥有 USDT 和 Slerf 两种Token,她将分别拥有两个代币账户,其中一个记录USDT 的余额,另一个记录 Slerf 的余额。该账户是通过关联用户地址和代币代币账户创建出来的。
实际上我们向某个地址发送代币的时候,程序是先计算出来用户地址下该代币的代币账户,并且余额数据变化记录在代币账户中。
solana账户租金
solana经济模型中,建立代币账户需要给向链支付一定的租金,用户也可以关闭自己地址下的某个代币账户来回收租金,回收时需要注意代币资产为 0,不然会损失资产。
当一个solana地址在接受某个代币时,地址下面必须有创建好的 代币账户,用来存储代币信息、余额等资料。如果接收方没有,发送发可以为接收方建立一个代币账户。
Solana 上的租金存储费用为每字节0.00000348 SOL,钱包数据大小为 586 字节,需要支付租金 0.002 SOL 左右。
批量转账的成本
搞清楚上面的账户模型,我们就可以知道一笔代币转账交易,将花费多少成本,以及这些成本都花费到哪里。
假如我们向 10 个地址转账 Slerf 代币,如果 10 个从未接受该代币,那么我们的成本就是 0.02 sol ,在加上转账的上链费用。
如果这10个地址之前已经接受过 Slerf ,那么转账成本仅仅是微不足道的上链费用。
如何批量转账
如果熟悉编程,那么可以使用 Solana 官方提供的 SDK 来,您可以访问 Solana 官方文档 获取详细使用说明和示例代码。
下面详细的介绍如何无编程的使用工具来进行批量转账,SlerfTools 是全网最便宜、快速、便捷的 Solana一键工具箱,支持发币、创建 openbook 市场 ID、创建Raydium流动性、移除流动性、批量交易等。
1、首先打开 SlerfTools 的批量转账页面:
![](https://public.bnbstatic.com/image/pgc/202404/48a19fc36e1b0cac448862c6ded95e9c.png)
2、链接钱包后,填入代币地址和收款地址列表,收款地址列表也可以通过上传文件来完成。
![](https://public.bnbstatic.com/image/pgc/202404/0f4bc10bfca36bffa2c233dd86867fd9.png)
3、点击下一步出现如下确认界面
![](https://public.bnbstatic.com/image/pgc/202404/8602179495671f1e3f52da7d76376e46.png)
4、点击发送交易后,转账成功:
![](https://public.bnbstatic.com/image/pgc/202404/67f3f3d8dcf58c6cd2dc90ba851f67ff.png)
5、转账成功后会出现两笔成功的交易 hash,可以点击在区块浏览器访问查看。
![](https://public.bnbstatic.com/image/pgc/202404/441dc1afe00f3ac89cd389a1f2346a52.png)
需要注意的是,SlerfTools 为了节省上链费用和加快上链速度,每一批转账都是汇总在一笔交易里面。
由于 Solana 为了加快节点之间数据传输速度,每一笔交易都限制在 1232 个字节内,其大小限制在 ipv6 一个MTU传输单元内。因此每一批转账数量需要有所限制。
我们通过多次测试,得出每笔交易转账数量的最佳值是:对于新地址(即之前未接收过此代币的地址),每笔批量转账最多包括9个接收地址;对于老地址(即之前已接收过此代币的地址),每笔批量转账可以包含最多19个接收地址。超过这些推荐数量的转账尝试可能导致失败。
前者少的原因就是文章上面说的,从未接收过此代币的地址在接收代币转账的时候,需要创建代币账户,占用一部分交易的大小。