在 Solana 中,交易的 confirmationStatus 用于表示交易的确认状态,主要有以下几种状态:
1. finalized
- 含义 :这是最高级别的确认状态。当交易达到 finalized 状态时,意味着该交易已经被集群中的大多数验证节点确认,并且不会被回滚。在区块链的共识机制下,这是一个非常安全的状态,表明交易已经被永久记录在区块链上。
- 应用场景 :在需要确保交易不可逆转的场景中,如涉及资金转移、重要数据记录等,通常会等待交易达到 finalized 状态。
2. confirmed
- 含义 :表示交易已经被集群中的一个验证节点确认。虽然交易处于 confirmed 状态,但仍然存在一定的风险,因为在某些情况下,该交易可能会被回滚。不过,这种情况相对较少发生。
- 应用场景 :在一些对交易确认速度要求较高,而对交易最终确定性要求不是特别严格的场景中,可以使用 confirmed 状态。例如,在一些实时性要求较高的游戏或交互场景中,当用户完成操作后,可以快速告知用户交易已 confirmed ,让用户继续后续操作。
3. processed
- 含义 :表示交易已经被集群接收并处理,但尚未被任何验证节点确认。这是交易确认过程中的初始状态,意味着交易已经进入了集群的处理流程,但还没有得到足够的确认。
- 应用场景 :在开发过程中,当需要快速反馈交易是否已经被集群接收时,可以使用 processed 状态。例如,在用户提交交易后,立即告知用户交易已被接收并正在处理中。
代码示例
在使用 @solana/web3.js 进行交易时,可以指定 confirmationStatus 参数。以下是一个示例代码:
const { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } = require('@solana/web3.js');
// 连接到 Solana 网络
const connection = new Connection('https://api-devnet.solana.com', 'confirmed');
// 生成发送方和接收方的密钥对
const fromKeypair = Keypair.generate();
const toPublicKey = new PublicKey('...'); // 替换为实际的接收方公钥
// 创建交易
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: fromKeypair.publicKey,
toPubkey: toPublicKey,
lamports: 1 * LAMPORTS_PER_SOL,
})
);
// 发送并确认交易,指定 confirmationStatus 为 'finalized'
sendAndConfirmTransaction(connection, transaction, [fromKeypair], {
commitment: 'finalized'
})
.then((signature) => {
console.log(`交易已成功发送,签名: ${signature}`);
})
.catch((error) => {
console.error('转账过程中出现错误:', error);
});
在上述代码中, commitment 参数指定了交易的确认状态,这里设置为 finalized ,表示等待交易达到最终确认状态。你可以根据实际需求将其设置为 confirmed 或 processed 。
版权属于:区块链中文技术社区 / 转载原创者
本文链接:https://bcskill.com/index.php/archives/2367.html
相关技术文章仅限于相关区块链底层技术研究,禁止用于非法用途,后果自负!本站严格遵守一切相关法律政策!