流动区块链介绍--第四部分
本系列的第三部分解释了区块链分叉和区块终结的概念。在这篇文章中,我们将最终看一下区块封存,这是区块生命周期的最后一步。在我们进入区块封存之前,我们需要解释Flow中的数据存储,因为这是理解区块封存有什么用以及为什么它很重要的关键。
流量中的数据存储
有2个数据存储,流量网络在其中存储数据。
协议状态是主要的区块链本身,它存储了关于网络状态的数据,如谁被允许参与协议,收集保证,执行收据,结果批准等等。
执行状态是一个名为Memory-trie(MTrie)的数据结构,包含所有通过Cadence智能合约操作的数据(账户代币余额、NFT、部署的智能合约...)。每当一个集合被执行,就会产生一个更新的MTrie。MTrie数据的新状态可以通过单一哈希(根节点哈希)来引用。这个哈希值是执行节点承诺的执行结果(执行承诺),它被共识领导者添加到一个区块中,以便它可以被验证。
💡 Flow在信息上不是自成一体的,这意味着账户信息不存储在链上,而是在执行状态中。
块状密封
区块密封是区块生命周期的最后一步。对于提交交易的客户来说,区块封存是对执行结果(执行后他们账户的状态)被成功验证的一种保证。请注意,包含封印的区块在被视为提交到链上之前仍然需要被最终确定。
当为所执行的区块收集到足够的结果批准时,区块印章就被添加到区块链上。
让我们来看看这个最后的图表。
- 在视图1中,共识领导者A向网络提出0号区块(B0)。
- 执行节点接收并执行B0,并向网络发送执行收据。
- 在理想情况下,共识领袖C收到执行收据,将B0的执行结果添加到区块2(B2)。这意味着共识领袖C将执行结果纳入了B2,有效地将B0的执行结果(MTrie根哈希)提交给了区块链。
- 当共识领导者D提出块3(B3)时,验证节点可以使用添加到B3的随机性源来确定它们的块分配。然后,VNs从收集节点为他们的分块请求交易,并开始验证他们分配的分块。请注意,验证节点要等到B3被最终确定,以避免在链分叉和B3最终出现在一个将被丢弃的分支上时做不必要的工作。
- 验证节点在完成对其分配的块的验证后,将其结果批准发送到网络。假设共识领袖H在视图8中收到足够的结果批准,它将为B0创建印章并将其添加到块7(B7)。
- 一旦B7在区块10(B10)中被最终确定,区块B0被密封,密封被最终确定。
在这一点上,提交交易的用户可以确定他们的交易被执行了,并且交易执行的结果被提交到了链上,该交易被添加到了区块B0中的一个集合。
简单地说,这意味着交易的结果将不会改变。如果你要把你的车的所有权转让给新的车主,你现在可以把钥匙交给他们,车就是他们的了!"。
这是该系列的结尾,我希望这很有趣!
如果你有任何问题,可以在Discord上问我或在Twitter上DM我。