在 Solana 的 JavaScript 客户端库(@solana/web3.js)中,我们通常需要将多条指令(TransactionInstruction)打包到一笔交易中统一提交。无论是传统的 Transaction,还是支持新版本特性和扩展性的 VersionedTransaction,都可以轻松实现这一点。本文将以示例方式演示如何将多条指令进行合并,从而在一次提交中完成更为复杂的链上操作。

1、使用传统 Transaction 构建多指令交易
使用传统 Transaction将Swap操作的多条指令合并到同一笔交易中,并添加一条 SOL 转账指令。

// 构建转账指令
const transferInstruction = SystemProgram.transfer({
    fromPubkey: payer.publicKey,
    toPubkey: new PublicKey("钱包地址"),
    lamports: 0.1 * LAMPORTS_PER_SOL, // 转账0.1 sol
});

// 指令 TransactionInstruction
const instructions = [
   // create token account
   // raydium v4 swap
   // colose token account
   // ... 
]

const recentBlockhashForSwap = await connection.getLatestBlockhash()

const legacyTransaction = new Transaction({
  blockhash: recentBlockhashForSwap.blockhash,
  lastValidBlockHeight: recentBlockhashForSwap.lastValidBlockHeight,
  feePayer: payer.publicKey,
})

legacyTransaction.add(...instructions).add(transferInstruction)

return legacyTransaction

2、使用 VersionedTransaction 构建多指令交易
使用传统 VersionedTransaction将Swap操作的多条指令合并到同一笔交易中,并添加一条 SOL 转账指令。

// 构建转账指令
const transferInstruction = SystemProgram.transfer({
    fromPubkey: payer.publicKey,
    toPubkey: new PublicKey("钱包地址"),
    lamports: 0.1 * LAMPORTS_PER_SOL, // 转账0.1 sol
});

// 指令 TransactionInstruction
const instructions = [
   // create token account
   // raydium v4 swap
   // colose token account
   // ... 
]

const recentBlockhashForSwap = await connection.getLatestBlockhash()

const versionedTransaction = new VersionedTransaction(
    new TransactionMessage({
        payerKey: payer.publicKey,
        recentBlockhash: recentBlockhashForSwap.blockhash,
        instructions: [...instruction,transferInstruction],
    }).compileToV0Message()
)

versionedTransaction.sign([payer])

return versionedTransaction;

Solana 中使用 Transaction 和 VersionedTransaction 将多条指令一次性打包进同一笔交易。通过这种方式,我们能够在单笔交易中完成更复杂的链上操作,从而提高整体执行效率和用户体验。
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐