Skip to main content

见证领导人

见证领导人做较少的工作便能产生有效的区块。 其任务是处理区块交易,对有效交易进行分类和过滤,将它们排列成条目,并广播每一个单元条目。 每个验证者只需要重新组装块并重新审查格式正确的条目即可。 见证领导人在执行任何存储区之前,执行的内存工作要比每个验证者处理的交易多3倍。

基本原理#

正常的验证者需要进行2次加载和2次存储。 有了这个见证领导人,只需要1个负载即可。 因此在生成该区块之前,验证者的工作量要少4倍。 存储操作可能比读取操作更昂贵。

当重新审查阶段开始处理相同的交易时,可以审查历史证明的有效性,并且所有条目对于并行执行都是安全的。 已被加载以生成该块的费用帐户可能仍在内存中,因此额外的负载应处于预热状态,并且成本可能会平摊。

费用账户#

费用账户 支付的交易费用被包括在区块中。 领导者仅需要验证费用帐户是否有余额来支付费用。

余额缓存#

在领导者连续出块的持续时间内,领导者为所有已处理的费用帐户创建一个临时余额缓存。 缓存是从公钥到"Lamport"的映射。

在第一个程序段开始时,余额缓存为空。 在最后一个区块的末尾,缓存将被销毁。

在整个缓存期间,余额缓存查找必须引用相同的基叉。 在区块与区块交界处,可以在重播阶段完成对前一个块的验证之后,将缓存与基叉一起重置。

余额检查#

在进行余额检查之前,领导者会验证交易中的所有签名。

  1. 确认帐户未使用且区块哈希有效。
  2. 检查收费帐户是否存在于高速缓存中,或从"accounts_db"加载帐户并将"Lamport"余额存储在高速缓存中。
  3. 如果余额少于费用,请取消交易。
  4. 从余额中减去费用。
  5. 对于交易中的所有属于信用借记并被指示引用的密钥,将其余额在缓存中减少为0。 帐户费用被声明为贷方借方,但是只要未在任何指令中使用该帐户费用,其余额就不会减少为0。

领导者重播#

领导者将需要重新广告播区块,作为标准重播阶段操作的一部分。

带连续区块的领导者重播#

可以安排一个领导者连续生产多个块。 在那种情况下,领导者可能会在广播第一个区块的重播阶段时产生下一个区块。

领导者完成重播阶段后,可以通过清除余额缓存来重置余额缓存,并重新设置缓存,该缓存可以在下一个块中变为活动状态。

重置余额缓存#

  1. 在区块的开头,如果未初始化余额缓存,则将余额缓存的基叉设置为区块的父代,并创建一个空缓存。
  2. 如果缓存已初始化,请检查区块的父级是否有一个新的冻结账本,该冻结账本比余额缓存的当前基叉要新。
  3. 如果存在比缓存的基本派生更新的父代,请将缓存重置为父代。

对客户端的影响#

相同的费用帐户可以在同一区块中多次重复使用,直到指令将其用作贷方借方一次为止。

每秒传输大量交易的客户应使用专用的费用帐户,该费用帐户在任何指令中均不得用作贷方借方。

一旦将帐户费用用作贷方借方,它将无法进行余额检查,直到重置余额缓存为止。