一、Sui区块链简介Sui是由前Meta(Facebook)工程师创建的下一代Layer1区块链,采用基于Move编程语言的新型智能合约平台。Sui的设计专注于高吞吐量、低延迟和可扩展性,使其特别适合需要处理大量交易的场景。Sui的核心特点:对象中心模型:不同于传统区块链的账户模型,Su
<!--StartFragment-->
Sui是由前Meta(Facebook)工程师创建的下一代Layer 1区块链,采用基于Move编程语言的新型智能合约平台。Sui的设计专注于高吞吐量、低延迟和可扩展性,使其特别适合需要处理大量交易的场景。
在区块链应用中,批量转账是一项常见且重要的功能需求,主要原因包括:
#!/bin/bash
# 读取CSV文件并执行批量转账
while IFS=, read -r recipient amount
do
sui client transfer-sui \
--to "$recipient" \
--sui-coin-object-id 0xyour_coin_object_id \
--gas-budget 1000 \
--amount "$amount"
done < recipients.csv
--to
: 接收方地址--sui-coin-object-id
: 发送方的币对象ID--gas-budget
: 设置gas预算--amount
: 转账金额module my_batch_transfer::batch {
use sui::coin;
use sui::tx_context::TxContext;
use sui::sui::SUI;
public entry fun batch_transfer(
coin: &mut coin::Coin<SUI>,
recipients: vector<address>,
amounts: vector<u64>,
ctx: &mut TxContext
) {
assert!(vector::length(&recipients) == vector::length(&amounts), 0);
let i = 0;
while (i < vector::length(&recipients)) {
let recipient = vector::borrow(&recipients, i);
let amount = vector::borrow(&amounts, i);
let transfer_coin = coin::split(coin, *amount, ctx);
transfer::public_transfer(transfer_coin, *recipient);
i = i + 1;
};
}
}
batch_transfer
函数sui client call \
--package 0xYOUR_PACKAGE_ID \
--module batch \
--function batch_transfer \
--args 0xYOUR_COIN_OBJECT_ID "[0xaddr1, 0xaddr2]" "[10000000, 20000000]" \
--gas-budget 10000
1.安装依赖:
npm install @mysten/sui.js csv-parser
2.编写脚本:
import { SuiClient, getFullnodeUrl } from "@mysten/sui.js/client";
import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
import { TransactionBlock } from "@mysten/sui.js/transactions";
import * as csv from "csv-parser";
import * as fs from "fs";
const client = new SuiClient({ url: getFullnodeUrl("mainnet") });
const keypair = Ed25519Keypair.fromSecretKey(process.env.PRIVATE_KEY!);
async function batchTransfer() {
const recipients: { address: string; amount: string }[] = [];
fs.createReadStream("recipients.csv")
.pipe(csv())
.on("data", (data) => recipients.push(data))
.on("end", async () => {
const txb = new TransactionBlock();
const coin = txb.splitCoins(txb.gas, recipients.map(r => BigInt(r.amount)));
recipients.forEach((recipient, index) => {
txb.transferObjects([coin[index]], recipient.address);
});
const result = await client.signAndExecuteTransactionBlock({
transactionBlock: txb,
signer: keypair,
options: { showEffects: true }
});
console.log("Transaction result:", result);
});
}
batchTransfer();
目前已有一些第三方工具提供Sui批量转账功能,例如:
✅ 优点:
如果您对内容有任何疑问,欢迎在Telegram群组中联系志愿者: https://t.me/gtokentool <!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!