Solana确认位详解

  • Dapplink
  • 发布于 2025-02-19 21:31
  • 阅读 13

Solana网络的确认位是一种衡量交易或账户数据可靠性的机制,用于查询交易或账户状态时,决定返回的数据是否足够确定不会被回滚。

Solana网络的确认位是一种衡量交易或账户数据可靠性的机制,用于查询交易或账户状态时,决定返回的数据是否足够确定不会被回滚。Solana的确认机制不同于传统PoW链(如比特币或以太坊),它采用了更高效的PoH+PoS组合共识机制,因此能够更快地确认交易。

一.Solana确认位概述

Solana 的确认位用于确定交易或账户状态的可靠性。当用户查询交易状态或账户余额时,可以选择不同的确认级别,以决定数据的可信度。

Solana提供以下几种主要的确认级别:

Processed : 交易被Leader处理, 但未被网络确认; 可能被回滚。

Confirmed: 交易进入区块,并且有1次确认; 仍然可能被回滚。

Finalized 交易在链上不可逆,达到超级多数共识;交易不可回滚。

不同的确认级别适用于不同的场景,比如:

低延迟交易:使用processed以最快速获取结果。

普通查询:使用confirmed,确保交易已上链。

高安全性场景:使用 finalized,确保交易不可逆。

二.Solana确认的运作机制

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方法来获取交易和账户的确认状态。

1.查询交易状态

使用 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"。

2.查询账户状态

使用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钱包确认位

在Solana中,每个slot大约400毫秒产生一个,用于装载区块。当超过 2/3 的节点对某个slot进行投票时,该区块就被视为 Finalized。最少需要经过32个slot才能达到相对安全的确认状态,而当slot数量超过64时,区块的状态就变得绝对安全,不会出现回滚现象。因此,在实际应用中,为了确保交易绝对安全,建议等待64个slot 的确认。

1. 相对安全:32Slot

等待32个Slot:如果一个区块已经连续经历了32个 Slot(每个 Slot 都相互依赖前面已确认的区块),就可以算是达到了“相对安全”——此时区块被回滚的可能性极小。

适合常规交易场景:大多数情况下,32Slot就足以保证交易安全,满足一般用户的需求。

2. 绝对安全:64Slot

等待64个Slot:如果还不放心,或者是遇到金额巨大的交易,等待64个Slot 会让区块的最终性几乎板上钉钉,“绝对安全”几乎排除了所有回滚或分叉的可能性。

● 适合高价值应用:对风险敏感度高的场景,如金融机构、跨境支付等,大额交易会选择等待 64 Slot 以保证万无一失。

3.Slot几乎是瞬时确认

快速但有风险:如果只等1个 Slot,虽然交易能极快显示出“已确认”的状态,但安全性相对较低,仅适用于那些对回滚风险不太敏感的场合,比如一些小额闪付或测试交易。

4.总结

1 Slot:最快,但安全保障相对较弱。

32 Slot:平衡了效率与安全,适合大多数日常交易需求。

64 Slot:几乎可以“高枕无忧”,适合高价值交易或极端安全需求。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Dapplink
Dapplink
0xBdcb...f214
首个模块化、可组合的Layer3协议。