Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit an issue.

批量交易

TypeScript SDK 内置了将多个独立交易批量发送的功能。当需要从同一账户快速执行多个交易时,这是一个便捷的工具。

可以通过 aptos.transaction.batch.forSingleAccount 实现,如下例所示。

完整 TypeScript 示例

batch.ts
/**
 * 此示例展示如何使用 Aptos SDK 批量发送多个交易
 */
 
import {
    Account,
    Aptos,
    AptosConfig,
    Network,
    InputGenerateTransactionPayloadData,
} from "@aptos-labs/ts-sdk";
 
async function example() {
    console.log("本示例将批量发送多个交易");
 
    // 配置客户端和测试账户
    const config = new AptosConfig({ network: Network.DEVNET });
    const aptos = new Aptos(config);
 
    let sender = Account.generate();
 
    console.log("=== 地址 ===\n");
    console.log(`发送方地址: ${sender.accountAddress}`);
 
    console.log("\n=== 为发送方注资 ===\n");
    await aptos.fundAccount({
        accountAddress: sender.accountAddress,
        amount: 100_000_000,
    });  
    console.log("已为发送方账户注资")
 
    // 生成多个接收方账户用于发送 APT
    const recipients = [Account.generate(), Account.generate(), Account.generate()];
 
    // 创建向每个账户发送 APT 的交易
    const transactions: InputGenerateTransactionPayloadData[] = [];
 
    for (let i = 0; i < recipients.length; i += 1) {
        const transaction: InputGenerateTransactionPayloadData = {
            function: "0x1::aptos_account::transfer",
            functionArguments: [recipients[i].accountAddress, 10],
        };
        transactions.push(transaction);
    }
 
    // 签名并尽可能快地提交所有交易(任一错误都会抛出)
    await aptos.transaction.batch.forSingleAccount({ sender: sender, data: transactions });
};
 
example();

检查批量交易状态

要判断批量提交的交易何时在链上执行,必须在流程运行时监听事件。

transaction-worker-events.ts
export enum TransactionWorkerEventsEnum {
  // 交易发送到链上后触发
  TransactionSent = "transactionSent",
  // 交易发送到链上失败时触发
  TransactionSendFailed = "transactionSendFailed",
  // 单个交易成功执行时触发
  TransactionExecuted = "transactionExecuted",
  // 单个交易执行失败时触发
  TransactionExecutionFailed = "transactionExecutionFailed",
  // 当工作线程完成任务/队列清空时触发
  ExecutionFinish = "executionFinish",
}

监听这些事件的示例可参考此处.