了解交易最终性

Understanding Transaction Finality | Cardano Explorer (cexplorer.io)

Cardano 的 Ouroboros PoS 使用概率最终性,当一个块后面附加了足够多的块时,该块被认为是最终的。 用户将交易提交到网络后,必须附加多少个区块以及交易实际发生了什么? 在本文中,我们将解释交易延迟和最终性的概念。

交易故事
Alice 想给 Bob 发送 10 ADA。 让我们描述一下交易从创建到区块最终确定会发生什么。

Alice 在她的钱包或应用程序中创建交易。 这涉及指定交易的详细信息,例如 Bob 的地址和要转移的 ADA 数量。
9cad178aebcadb2eed5894da6711f8da

Alice 必须用她的私钥签署交易。 例如,如果她使用硬件钱包,她必须通过按住按钮来确认交易。 这提供了真实性证明,并确保只有 ADA 币的所有者才能发起交易。

签名的交易将广播到卡尔达诺网络。 它由卡尔达诺节点拾取,并根据协议规则验证交易。

一旦交易被验证,它就会被添加到有效交易池(mem-pool)中,等待包含在新块中。

在卡尔达诺的Ouroboros PoS共识机制中,时间被分为纪元(epoch)和时隙(slots)。 根据赌注为每个老虎机随机选择一名老虎机领导者。 时隙领导者从池中选择交易,验证它们,并铸造一个新块。

新区块包含 Alice 的交易以及其他交易,被附加到本地分类账并广播到网络。

该区块由卡尔达诺节点拾取,并根据协议规则对其进行验证(包括所有交易)。 每个节点维护自己的分类账并自主决定将哪个区块附加到其上。

选择交易和铸造新区块的过程大约每 20 秒重复一次。 尽管网络中的大多数节点都会将区块添加到分类账中,但该交易仍然不能被视为最终交易。

交易延迟和最终性
请注意,一旦 Alice 提交到网络,交易就不能被视为已结算或有效。 Bob 只有在交易最终确定的那一刻才能确定他拥有 ADA 币。

在所描述的过程中有两个重要的时期:交易延迟和交易最终性。

简而言之,交易延迟是指交易提交和出现在账本(新区块中)之间的时间。 交易最终性是指出现在第一个块中直到交易不可变之间的时间。

让我们通过示例更详细地描述它。

交易延迟是指从交易提交到网络到时隙领导者将其插入新块的时间段。 大多数时候,一笔交易与其他交易一起在池中等待。

卡尔达诺以先到先得的原则对待交易。 然而,如果池中的交易数量超过了区块所能容纳的数量,则 Alice 的交易可能不会被时隙领导者插入到区块中,而必须在池中等待下一轮。

另一位老虎机领导者的池中已经有爱丽丝的交易。 一旦它收到一个新块,它就可以从池中删除该块中的那些交易。 在新一轮中,爱丽丝的交易被插入到新的区块中。

交易延迟根据 Alice 提交交易的确切时间以及池中之前提交的交易数量而变化。 交易在几秒钟内就在网络中扩散。 正常情况下,交易和区块(较大的)都会在 5 秒内到达 95% 的节点。

如果 Alice 在新区块被铸造并进入时隙领导者池之前提交交易,则延迟可能只有几秒钟。 提交交易几秒钟后,爱丽丝看到它包含在块中(它在分类帐中)。 爱丽丝很幸运。

然而,爱丽丝可能就没那么幸运了,她在新区块生成后就提交了交易。 在这种情况下,交易可以在池中等待大约 15 秒(当扩散时间为 5 秒时),然后槽领导者将其插入到新块中。 如果网络使用频繁并且池已满,则可能需要几个块才能将事务插入到时隙领导者中。 Alice 可以等待几分钟,然后才能看到区块中的交易。

一旦交易进入区块并进入账本,交易的最终性就开始发挥作用。

卡尔达诺使用概率最终性,这意味着当附加了足够多的块时,一个块被认为是最终的,以至于故意启动并行链并尝试回滚规范链变得极其昂贵或不切实际。 换句话说,概率最终性是指交易被逆转的概率随着包含的区块而减少。

g 该交易会更深地陷入链中。

用户无法保证新添加到分类帐的区块将永远保留在其中。 可能会出现多个具有相同高度的区块被铸造在一个槽位或两个彼此靠近的槽位中的情况。 在这种情况下,就会创建所谓的分叉。 其中一个块将被保留,而另一个块将被孤立。 孤立块中的交易被逆转。

一个区块(即其中所有交易)的最终性在 K 个区块后由 Ouroboros PoS 100% 保证,其中 K 是设置为 2160 的网络参数。最终性在 12 小时后得到保证。

幸运的是,用户不必等待那么久。 尽管分叉在网络中发生的频率相对较高,但通常会在几个区块内得到解决。

在图片中,您可以看到块和铸造它们的插槽。 2 个区块在插槽 N+40 中铸造。 出现了分叉。 在时隙 N+60 中随机抽取的时隙领导者将向红色块追加一个新块,因为它具有较低的 VRF 输出。 如果其他时隙领导者拥有所有可用的区块,他们就很容易决定遵循哪条链。

区块最终性(交易不变性)的高度确定性代表大约 70 个区块,即大约 25 分钟。 不过确定性比较大的只有5个区块,大概是2分钟。

如果爱丽丝向鲍勃发送 10M ADA,鲍勃仅在 25 分钟后就几乎绝对确定了代币的所有权。 10 ADA 的情况下,2 分钟就够了。

每个用户都可以定义自己的确定性级别。 这不是一个非常理想的建议,但对于概率最终的共识,没有更好的解决方案。

所有按照协议统一规则行事的诚实节点都接受有效块。 所有节点都自主运行,不知道网络中的其他节点如何决定(它们将哪些块添加到分类帐中)。 时隙领导者决定跟随哪个区块。 仅同步块的被动节点不会做出有关最终性的决定(尽管它们确实决定自己接受块)。

在大多数情况下(如果可能),槽管理器选择前一个块(如果可用)。 这是由前一个时隙领导者铸造的区块。 如果当前的区块领导者尚未收到前一个区块,它将继续处理它认为是最新的区块。 在这种情况下,将创建分叉。

分叉是根据简单的规则解决的,如果大多数节点表现诚实,如果一个块后面还有 5 个以上的块,则该块可以被视为最终块。 随着每个新添加的块的增加,最终确定性也会增加。 后面还有 25 个区块的区块几乎肯定是最终的(其中的所有交易都是不可变的)。 绝对确定性是 2160 个区块。

结论
当用户向网络提交交易时,他们通常会查看区块链浏览器并等待它出现在分类账中。 这是事务延迟。 之后,我们通常会等待确认数量,这本质上是附加到用户交易所在区块的区块数量。 这通常是使用中本聪共识网络的用户的行为方式,因此比特币网络中也会发生类似的过程。 然而,有些网络的最终确定性更快,因为节点可以在区块生成之前或之后提供“批准”。