- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Solana 中发送多个依赖事务的最佳实践是什么?假设我要发送 2 笔交易,每笔交易都是相关的。
如果第二个交易失败,那么我必须要求用户发送第一笔和第二笔交易。但实际上我可以实现,当第二个 trx 失败时,它只会要求用户重试第二个。
有人能为我指出正确的方向吗?
谢谢
最佳答案
有两种方法可以做到这一点。
如果您不受事务限制(最多 1232 字节,最多 ~30 条指令,最多 ~18 个公钥,最多 1.4m 计算)的约束,您可以将指令打包到单个事务中,并且任何失败都会使事务失败整个。
例子:
const Transaction = new Transaction().add(
SystemProgram.createAccount({
fromPubkey: publicKey,
newAccountPubkey: mintKeypair.publicKey,
space: MINT_SIZE,
lamports: lamports,
programId: TOKEN_PROGRAM_ID,
}),
createInitializeMintInstruction(
mintKeypair.publicKey,
form.decimals,
publicKey,
publicKey,
TOKEN_PROGRAM_ID)
);
如上,createInitializeMintInstruction
首先依赖于createAccount
。将两者打包在一个交易中,如果其中一条指令失败,则整个交易失败。
由于限制,您可以将每笔交易分开,但最终相互依赖。
const transaction1 = new Transaction().add(
SystemProgram.createAccount({
fromPubkey: publicKey,
newAccountPubkey: mintKeypair.publicKey,
space: MINT_SIZE,
lamports: lamports,
programId: TOKEN_PROGRAM_ID,
})
);
const transaction2 = new Transaction().add(
createInitializeMintInstruction(
mintKeypair.publicKey,
form.decimals,
publicKey,
publicKey,
TOKEN_PROGRAM_ID)
);
const signature1 = await connection.sendTransaction(transaction1, [mintKeypair, payerKeypair])
const signature2 = await connection.sendTransaction(transaction2, [mintKeyPair, payerKeypair])
使用上面的方法,您可以将 connection.confirmTransaction
与签名一起使用,以验证哪些签名实际得到确认,哪些失败。这将允许您根据网络上确认的交易随意切换 UI。
关于web3js - 发送多个依赖事务的最佳实践[solana] [web3js],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71451583/
我很好奇目前是否有任何方法可以在 Solana 程序中创建随机性? 我知道 Solana 使用权益证明机制,这对我来说意味着区块哈希不可靠,因为权益证明机制可以轻松创建新的区块哈希。 我也熟悉 Cha
我是 Solana/web3 的新手,并开始学习如何为 Solana 开发 dApp。在我看来,“账户”本质上只是去中心化“计算机”内存中分配的一 block 空间。 这是否意味着,例如,如果我为竞价
向 Solana NFT 社区寻求帮助! 我有一个托管在 arweave 上的收藏。薄荷是通过糖果机 v2。然而,只类型转换了预期供应量的一半。这在拥有超过最大供应量的 NFT 的持有者中引起了混淆。
在 Anchor 测试中注意到此代码注释: ATA 代表什么?为什么它对于 DAO 控制的机构很重要? 最佳答案 ATA 是关联的 token 地址。 可以使用 findProgramAddress
不推荐使用 confirmTransaction 方法。相反,有一个 sendandconfirmtransaction 方法,但它在连接对象上不可用,所以我不能用于要使用 phantom 签名的交易
在 Anchor 测试中注意到此代码注释: ATA 代表什么?为什么它对于 DAO 控制的机构很重要? 最佳答案 ATA 是关联的 token 地址。 可以使用 findProgramAddress
不推荐使用 confirmTransaction 方法。相反,有一个 sendandconfirmtransaction 方法,但它在连接对象上不可用,所以我不能用于要使用 phantom 签名的交易
Uncaught (in promise) WalletSignTransactionError: Transaction recentBlockhash required at PhantomWal
什么是 Aux 帐户? 我已经创建了自己的 spl-token。我可以用我的主要地址为我自己的帐户类型转换初始供应。我创建了另一个地址并为其创建了 token 帐户: spl-token create
当我尝试部署带有 anchor 的 IDL 时,我收到一条神秘的“自定义错误 0x1004”消息。这是什么意思:? $ anchor idl init --provider.cluster testn
我正在尝试使用 web3.js 和 spl-token.js 创建 NFT。 但是,我需要添加元数据(如 token 名称或其他属性),否则它只会在我的钱包中显示为“未知 token ”。 这是我类型
我在运行: solana airdrop 10 7Fbdg5vecamm8MLxDw7bPN2xENaBE7fP65tKW935BEhq 7Fbdg5vecamm8MLxDw7bPN2xENaBE7f
我来自以太坊环境,Solana 概念有点令人困惑。我找到了各种指导代码步骤的教程,但并没有真正解释逻辑背后的概念。 我知道在 Solana 中我们有程序,它们不包含数据,只是逻辑 - 网络中的可执行实
我正在使用 solana-web3.js但找不到任何关于如何创建和类型转换我自己的代币的示例。最好的方法是什么? 最佳答案 为此,您还需要使用我们的 token 程序 js 绑定(bind)。您可以通
我正在尝试对 Serum DEX V3 发出订单请求: tx.add(market.makeNewOrderV3Instruction( { owner, payer, sid
我正在尝试对 Serum DEX V3 发出订单请求: tx.add(market.makeNewOrderV3Instruction( { owner, payer, sid
我正在尝试通过使用下面这篇文章的公认答案来获得收藏的类型转换版本: How to find all NFTs minted from a v2 candy machine 但是当我尝试查询时,我收到了
运行此命令后出现此错误:./scripts/cargo-install-all.sh。 error: failed to run custom build command for `prost-bui
我正在尝试使用 solana-wallet 适配器传输自定义 SPL token 。但是,我无法获取钱包的 key /签署交易。 我已经查看了这些用于编写传输代码的答案,但我需要获取签名者并且我无法弄
我写了一个Sol程序,但是在初始化的时候,我需要填一些默认地址。 问题 1:我可以使用 Solana 文档中的 Solana 烧录地址:1nc1nerator111111111111111111111
我是一名优秀的程序员,十分优秀!