Solana网络的确认位是一种衡量交易或账户数据可靠性的机制,用于查询交易或账户状态时,决定返回的数据是否足够确定不会被回滚。
Solana网络的确认位是一种衡量交易或账户数据可靠性的机制,用于查询交易或账户状态时,决定返回的数据是否足够确定不会被回滚。Solana的确认机制不同于传统PoW链(如比特币或以太坊),它采用了更高效的PoH+PoS组合共识机制,因此能够更快地确认交易。
Solana 的确认位用于确定交易或账户状态的可靠性。当用户查询交易状态或账户余额时,可以选择不同的确认级别,以决定数据的可信度。
Solana提供以下几种主要的确认级别:
● Processed : 交易被Leader处理, 但未被网络确认; 可能被回滚。
● Confirmed: 交易进入区块,并且有1次确认; 仍然可能被回滚。
● Finalized 交易在链上不可逆,达到超级多数共识;交易不可回滚。
不同的确认级别适用于不同的场景,比如:
● 低延迟交易:使用processed以最快速获取结果。
● 普通查询:使用confirmed,确保交易已上链。
● 高安全性场景:使用 finalized,确保交易不可逆。
Solana使用PoH + PoS机制来实现高效的交易确认:
● 交易提交:客户端提交交易,Leader(验证者)将其放入当前Slot的block 中。
● Processed:Leader节点将交易打包到block,并广播给其他验证者。
● Confirmed:当2/3的验证者认可该block后,它被认为已确认(confirmed)。
● Finalized:当交易block成为一个超级多数共识链的一部分,不会再被后续区块回滚时,该交易达到Finalized状态。
Slot和Bank
● Slot:Solana的时间单位,每个Slot大约400ms(0.4 秒)。
● Bank:每个Slot代表一个Bank(状态快照),其中存储了当前状态。
由于Solana采用乐观并行处理,每个Slot可能包含多个交易。
Solana提供多个RPC方法来获取交易和账户的确认状态。
使用 getSignatureStatuses 查询交易的状态:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignatureStatuses",
"params": [
["5vw6t3...YjX"], // 交易签名
{
"searchTransactionHistory": true
}
]
}
返回示例:
{
"jsonrpc": "2.0",
"result": {
"value": [
{
"slot": 150332512,
"confirmations": 12,
"status": { "Ok": null },
"confirmationStatus": "finalized"
}
]
}
}
解读
● slot: 交易所在的Slot 编号。
● confirmations: 交易的确认次数(达到 finalized 后不会再增加)。
● status: 交易的执行结果,"Ok": null 表示成功。
● confirmationStatus:交易的确认级别,可以是"processed", "confirmed", "finalized"。
使用getAccountInfo获取账户状态:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getAccountInfo",
"params": [
"B3mvT...L1C", // 账户地址
{
"commitment": "confirmed"
}
]
}
返回示例:
{
"jsonrpc": "2.0",
"result": {
"context": { "slot": 150332512 },
"value": {
"lamports": 5000000000,
"owner": "11111111111111111111111111111111",
"data": "",
"executable": false,
"rentEpoch": 0
}
}
}
解释
● "lamports": 账户余额(1 SOL = 10^9 lamports)。
● "owner": 账户的 owner,通常是智能合约或默认owner。
● "rentEpoch": 该账户的租金状态。
● "context": 账户信息的Slot编号,代表该数据的确认级别。
● 快速交易确认
● 确保交易已上链
● 最终确定交易
在Solana中,每个slot大约400毫秒产生一个,用于装载区块。当超过 2/3 的节点对某个slot进行投票时,该区块就被视为 Finalized。最少需要经过32个slot才能达到相对安全的确认状态,而当slot数量超过64时,区块的状态就变得绝对安全,不会出现回滚现象。因此,在实际应用中,为了确保交易绝对安全,建议等待64个slot 的确认。
● 等待32个Slot:如果一个区块已经连续经历了32个 Slot(每个 Slot 都相互依赖前面已确认的区块),就可以算是达到了“相对安全”——此时区块被回滚的可能性极小。
● 适合常规交易场景:大多数情况下,32Slot就足以保证交易安全,满足一般用户的需求。
● 等待64个Slot:如果还不放心,或者是遇到金额巨大的交易,等待64个Slot 会让区块的最终性几乎板上钉钉,“绝对安全”几乎排除了所有回滚或分叉的可能性。
● 适合高价值应用:对风险敏感度高的场景,如金融机构、跨境支付等,大额交易会选择等待 64 Slot 以保证万无一失。
● 快速但有风险:如果只等1个 Slot,虽然交易能极快显示出“已确认”的状态,但安全性相对较低,仅适用于那些对回滚风险不太敏感的场合,比如一些小额闪付或测试交易。
● 1 Slot:最快,但安全保障相对较弱。
● 32 Slot:平衡了效率与安全,适合大多数日常交易需求。
● 64 Slot:几乎可以“高枕无忧”,适合高价值交易或极端安全需求。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!