轉載自鏈登社區Satoshi Nakamoto

在Solana生態系統中,批量轉賬是一種常見的操作,特別是在空投代幣或者將代幣發送給多個地址時。本教程將向您展示如何在Solana網絡進行批量轉賬,包括賬戶模型、批量轉賬的成本等方面的介紹。

solana 賬戶模型

在Solana中有三類賬戶:

  • 數據賬戶,用來存儲數據

  • 程序賬戶,用來存儲可執行程序

  • 原生賬戶,指Solana上的原生程序,例如"System","Stake",以及"Vote"。

數據賬戶又分爲兩類:

  • 系統所有賬戶

  • 程序派生賬戶(PDA)

我們通常使用的錢包地址屬於數據帳戶中的系統所有帳戶,我們可以通過自己私鑰簽名,系統驗證簽名是否正確,簽名正確就可以訪問賬戶,比如轉賬,調用合約。

solana 代幣中賬戶的關係

在以太坊系列中,發行一個代幣是直接部署一個智能合約,合約對應的地址就是代幣地址。但是solana 有所不同。

下圖是 solana 代幣對應的三種賬戶:

其中:

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 的批量轉賬頁面:

2、鏈接錢包後,填入代幣地址和收款地址列表,收款地址列表也可以通過上傳文件來完成。

3、點擊下一步出現如下確認界面

4、點擊發送交易後,轉賬成功:

5、轉賬成功後會出現兩筆成功的交易 hash,可以點擊在區塊瀏覽器訪問查看。

需要注意的是,SlerfTools 爲了節省上鍊費用和加快上鍊速度,每一批轉賬都是彙總在一筆交易裏面。
由於 Solana 爲了加快節點之間數據傳輸速度,每一筆交易都限制在 1232 個字節內,其大小限制在 ipv6 一個MTU傳輸單元內。因此每一批轉賬數量需要有所限制。

我們通過多次測試,得出每筆交易轉賬數量的最佳值是:對於新地址(即之前未接收過此代幣的地址),每筆批量轉賬最多包括9個接收地址;對於老地址(即之前已接收過此代幣的地址),每筆批量轉賬可以包含最多19個接收地址。超過這些推薦數量的轉賬嘗試可能導致失敗。

前者少的原因就是文章上面說的,從未接收過此代幣的地址在接收代幣轉賬的時候,需要創建代幣賬戶,佔用一部分交易的大小。