LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > V 神:如何实现 ETH 跨分片快速转账

V 神:如何实现 ETH 跨分片快速转账

2020-01-04 区块律动BlockBeat 来源:区块链网络

原文标题:《跨分片 ETH 转账的元执行环境》
原文来源:Unitimes 作者:Vitalik Buterin


问题描述请参阅:「关于分片之间 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 替换位域请参考评论内容。


原文链接:https://ethresear.ch/t/a-meta-execution-environment-for-cross-shard-eth-transfers/6656

来源链接:https://www.unitimes.pro/m/p/4404ed455edf4bad840a0882dabc216e


区块律动 BlockBeats 提醒,根据银保监会等五部门于 2018 年 8 月发布《关于防范以「虚拟货币」「区块链」名义进行非法集资的风险提示》的文件,请广大公众理性看待区块链,不要盲目相信天花乱坠的承诺,树立正确的货币观念和投资理念,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。    

—-

编译者/作者:区块律动BlockBeat

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...