Flow 节点架构简要分享 - P4

Created
May 15, 2022 05:41 PM
作者
翻译
Tags
Node
notion image
 
这个系列的第三部分解释了区块链的分叉以及区块的最终确认。在本篇文章中,我们终于会来研究一下区块的封装,也就是区块整个生命周期的最后一步。在我们正式讨论区块封装之前,我们需要先来解释一下Flow里存储机制,因为这对理解区块封装擅长做什么以及为什么它很重要是很关键的。
 

Flow上的数据存储

Flow网络有两个用来存储数据的地方。
 
协议状态(Protocol State),就是主要的区块链它本身,用来存储有关网络状态的数据,比如谁被允许加入协议,收集证明,执行收据,结果批准等等。
 
执行状态(Execution State)是一种叫做Memory-trie(MTrie)的数据结构,包含所有由Cadence智能合约操纵的数据(账户的代币余额,NFTs,已部署的智能合约等等)。每当一个集合被执行的时候,一个更新了的MTrie也会被生成。MTrie数据的新状态是以单一的哈希(root-nood hash)指代。这个哈希是,执行节点许可了的并由共识首领加入到区块中的从而能被验证的执行结果。
 
Flow 本身并不存储信息,也就是说,账户的信息并不是存在链上,而是存在执行状态里。
notion image
 

区块的封装

区块的封装是区块生命周期的最后一步。对于提交一笔交易的用户来说,区块的封装是一个执行结果(交易后的账户状态)已经被成功验证的保证,注意一个包含封装的区块在被认为发布到链上之前仍需要被最终确认。
封装的区块是当已执行的区块已经收集到足够的结果许可后被加入到链中。
notion image
 
让我们一起看一下这最后一个图例。
  1. 在View1阶段,共识首领A提议把 区块0(B0)加到网络中。
  1. 共识节点收到并执行B0,并把执行收据发到网络中。
  1. 理想情况下,共识首领C收到执行收据要把B0的执行结果加到区块2(B2)中去。也就是说,共识首领C会把执行结果合并到B2中,高效的把B0的执行结果(MTrie 根哈希)添加到区块链里。
  1. 当区块3(B3)由共识首领D提出的时候,验证节点可以使用B3中添加的随机源来决定他们的任务块。然后验证节点会从收集节点索要任务块中的交易并开始验证他们分配的任务块。注意,验证节点会一直等到B3被最终确认,这是为了避免一些比如区块链分叉B3所在的那个分支被舍弃这样的非必要的工作。
  1. 验证节点完成他们分配的任务块的验证后,验证节点会把结果许可发到网络中。假设共识首领H收到了足够的在View8中的结果许可,它就会为B0创建一个封装并加到区块7(B7)中。
  1. 当B7在区块10(B10)中最终完成时,区块B0会被封装,且封装会被完成。
 
到这里,提交这笔被加进了区块B0集合的交易的用户可以确定他的交易已经被执行并且交易的结果已经被发布到了链上。
 
简而言之,这也就是说这个交易的结果不会再改变了。如果你正在把你汽车的所有权转给一个新主人,那现在你可以把车钥匙交给他们了,车已经是他们的了。
 
这个系列在这里就结束了,我希望大家觉得这个会有点意思!
 
如果你有任何问题的话,可以在Discord或Twitter上找到我。
 
并且,Flow Forum和Discord也都是加入社区,提问题,了解Flow的非常好的渠道。