批量交易
TypeScript SDK 内置了将多个独立交易批量发送的功能.当需要从同一账户快速执行多个交易时,这是一个便捷的工具.
可以通过 aptos.transaction.batch.forSingleAccount
实现,如下例所示.
完整 TypeScript 示例
Section titled “完整 TypeScript 示例”/** * 此示例展示如何使用 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();
检查批量交易状态
Section titled “检查批量交易状态”要判断批量提交的交易何时在链上执行,必须在流程运行时监听事件.
export enum TransactionWorkerEventsEnum { // 交易发送到链上后触发 TransactionSent = "transactionSent", // 交易发送到链上失败时触发 TransactionSendFailed = "transactionSendFailed", // 单个交易成功执行时触发 TransactionExecuted = "transactionExecuted", // 单个交易执行失败时触发 TransactionExecutionFailed = "transactionExecutionFailed", // 当工作线程完成任务/队列清空时触发 ExecutionFinish = "executionFinish",}
监听这些事件的示例可参考此处.