Files
solana/docs/i18n/zh/docusaurus-plugin-content-docs/current/proposals/bankless-leader.md
mergify[bot] b03186e3c6 Add chinese translations to docs (#17125) (#17127)
* import zh translations

* Fix broken links

* fix whitespace

(cherry picked from commit a1df57a4ea)

Co-authored-by: Justin Starry <justin@solana.com>
2021-05-08 17:09:51 +00:00

3.4 KiB
Raw Blame History

title
title
见证领导人

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

基本原理

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

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

费用账户

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

余额缓存

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

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

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

余额检查

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

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

领导者重播

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

带连续区块的领导者重播

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

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

重置余额缓存

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

对客户端的影响

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

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

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