作者:Vitalik Buterin,Unitimes团队翻译

问题描述请参阅:“ 关于分片之间 ETH 转账的问题描述 “。

我们可以创建一个执行环境 (executive environment),称其为“ 费用环境 ”,其主要作用是 存储其他执行环境持有的 ETH 余额 。该执行环境包含一个 最小的余额记录和跨分片 收据 系统从而允许 ETH 在分片之间快速转账

前提

我们假设一个区块包含了(i)数据和(ii)访问该数据的执行环境列表。列表中的执行环境被依次调用,并且所有执行环境都可以访问整个数据(之后每个执行环境将只能访问部分数据,但允许每个执行环境访问整个区块数据并不需要付出额外的代价)。 执行环境还可以访问已处理完毕的 “auxiliary outputs” (辅助输出)。

我们假设区块生产者都“了解”该费用环境,从某种意义上说,就是他们知道何时在该费用环境中接受资金

预期的区块结构

每个区块将包含一个或多个分段 (segments),每个分段专属于某个执行环境,其中包含了在该执行环境中进行的交易。执行环境本身会生成一个辅助输出,表示这些执行环境想要进行的跨分片转账的概要。 去往同一目的地(分片 / 执行环境)的交易进入批量处理

在区块的末尾,有一个费用环境的 专用分段 ,其中存储了在该区块中存在分段的所有执行环境的 Merkle 多证明(请注意,那些先前的执行环境会检查这个部分并验证其余额的正确性和充分性[充分性检查将要求执行环境也检查之前执行环境的辅助输出])。

该费用环境将发布一个 状态根  (state root),该状态根包含了此分片内具有更新余额的  Merkle 树 ,以及一个包含了所有跨分片转账的 收据根 (receipt root)。收据根的设计要求路径基于分片和执行环境的组合进行编码,而叶子节点的编码还包含转账的金额。

例如,如果分片A上的一个区块包含单个交易[Alice --- {50 ETH} ---> Bob],而接收方 Bob 在另一个分片B上,如此则会产生两个收据:(i) 特定于执行环境的允许 Bob 提取 ETH 的 收据 ,以及 (ii) 该执行环境将生成一个 辅助输出  {B, EE_id, 50},然后费用环境将 {A,EE_id}的余额减少50, 发布更新的状态根 ,并使用单个元素{key = (B,EE_id), value = 50}创建一个 收据树 。如果同一执行环境中有N个交易,则只会产生N + 1个分支;开销是恒定的。

接收收据

现在,让我们扩展上述方案以允许接收收据。现在,费用环境的状态包含第三个 ,一个为字段的 Merkle 根,为每个分片和每个 slot 标记该 slot 的收据是否已经处理。为了提高效率,我们希望对应于同一 slot 的比特位并排存放,因此在“理想情况”下,我们只需要一个 Merkle 分支即可立即处理收据。

区块中用于费用环境的部分还将声明位字段对应的分支。对于每个分支,比特位默认为0,预平衡的Merkle证明也需要显示相应的执行环境余额,费用环境还需要提供相应收据的Merkle证明。更新后的预平衡根将根据收据增加执行环境余额,同时将比特位设置为1。

同时,执行环境本身将执行一个规则,即只有当表示执行环境级别的ETH转账已完成的相应Merkle分支位于费用环境的分段中时,才认为Alice到Bob的收据有效。这样可以防止Bob在没有执行环境的情况下接收ETH。请注意,有时在同一时隙中创建的具有相同起始和目标分片的收据将在不同的时隙中接收。在这种情况下,必须再次包含对费用执行环境位域的证明,表明收据包含在时隙n中,并且在所有包含项中,该位域已被设置为1,因此执行环境级别的余额增加不会发生多次。

费用和兑现

执行环境还可以在其辅助输出中指定他们为交易费支付的ETH数量。验证者还可以在收费环境中拥有帐户可以接收此ETH。收费环境还允许验证者提取ETH。

开销分析

假设区块链相对完整且活跃,每个块运行约3个执行环境,并且每个分片向其他分片发送事务,则可以计算开销如下:

·平衡证明:3个分支,假设2^16个执行环境占用约15 * 3 = 45个hash即1440字节

·位域:假设平均而言,所有收据均在5个时隙内声明。这要求最后5个时隙包含所有分片的证明;这些位是连续的,因此对于位域分段来说,占用320个字节+一个1024字节的分支= 1356字节。 N个时隙后的单个收据将增加log(N)* 32个字节。

·转移价值证明:假设有216个执行环境和64个分片,则一个长度为22的Merkle分支代表一个(分片,执行环境)密钥。总共有64个,因此我们得到22 * 64个hash即22528字节。请注意,我们可以使用更聪明的办法,将常用的执行环境放在树上更末端的位置,将减少一半以上的存储空间。

因此,总的来说,每个分片块使用约10-25 kB的空间存储与费用环境相关的证明。

更新

如何用nonce替换位域请参考 评论内容

相关文章