如何在Solana Pay(Web3.js v1.41.3)中检查交易成功并打印签名
如何检查Solana交易是否成功(Web3.js v1.41.3)
你可以通过两种方式检查交易状态,核心是利用Web3.js提供的交易确认和查询接口:
方法一:通过confirmTransaction返回结果直接判断
confirmTransaction方法本身会返回交易的确认结果,其中包含交易是否成功的状态信息。你可以修改代码,捕获返回值并检查err字段:
const { signature } = await window.solana.signAndSendTransaction(transaction); // 确认交易时指定finalized级别,确保交易不会回滚 const confirmationResult = await connection.confirmTransaction(signature, 'finalized'); // 检查交易状态 if (confirmationResult.value.err) { console.error('交易失败:', confirmationResult.value.err); // 这里可以添加失败后的业务逻辑,比如提示用户 } else { console.log('交易成功完成'); // 执行交易成功后的操作,比如更新页面状态 }
说明:
'finalized'是Solana的交易确认级别,代表交易已被集群最终确认,不会出现回滚。如果不需要这么严格,也可以用'confirmed',但前者更安全。- 如果
confirmationResult.value.err存在,说明交易执行失败,该字段会包含具体的错误信息(比如指令执行错误、余额不足等)。
方法二:通过getTransaction获取完整交易详情
如果需要更详细的交易信息(比如执行日志、账户变动),可以调用getTransaction接口查询交易的完整元数据:
const { signature } = await window.solana.signAndSendTransaction(transaction); await connection.confirmTransaction(signature, 'finalized'); // 获取交易详情,指定finalized确保拿到最终状态 const transactionDetails = await connection.getTransaction(signature, { commitment: 'finalized' }); // 检查交易状态 if (transactionDetails.meta.err) { console.error('交易失败详情:', transactionDetails.meta.err); // 可以查看logMessages调试错误:console.log(transactionDetails.meta.logMessages) } else { console.log('交易成功,完整详情:', transactionDetails); // 比如提取日志:console.log('交易日志:', transactionDetails.meta.logMessages) }
说明:
transactionDetails.meta包含交易的核心执行数据,err字段为空则代表交易成功;logMessages字段可以查看链上执行的日志信息,方便调试交易失败的原因。
内容的提问来源于stack exchange,提问作者Abhishek Chatterjee
相关产品推荐
相关产品推荐

