要举办跨碎片生意业务,应用措施将执行以下操纵。请留意,用户的应用措施并没有做许多工作,大大都巨大性将由库包装措施(如Web3J)处理惩罚。
7. 应用措施提交根事务,以及Shard 2和4上事务段的系统事件信息和Merkle证明。发出系统事件信息,指示应提交整个跨分片事务。
根生意业务(Root Transaction)
· 姑且状态存储和合约锁定:当合约作为跨分片事务的一部门举办更新时,其更新状态存储在姑且存储中,而且合约被锁定。假如提交了跨分片事务,则姑且状态将替换合约状态而且合约将被解锁。假如忽略交跨分片事务,则姑且状态将被扬弃,合约将被解锁。
· 挪用交错分片函数的参数与函数挪用的事务段的系统事件动静中的参数值不匹配。
· 假如利用跨分片事务Id,则失败。
2. 假如根事务日志指示“忽略”,则放弃姑且更新并解锁合约。
· 生意业务细分日志和Merkle证明(表白已锁定哪些合约),
ETH转移(Ether Transfer):今朝该方案只存眷函数挪用。用这种技能可以在分片之间举办ETH转移。
· 跨分片事务Id
· 将指定行的Merkle证明归并到交错链接。
· 通报到事务段的系统事件动静大概指示某个从属事务段产生错误。
初始事物
这些事务用于清除由事务段锁定的合约的锁定。
想象一下,个中涉及三个分片:观光社在shard 1上运行,旅店在shard 3上运行,火车在shard 4上运行。尚有第二个在shard 2上运行的观光社。这是下面的示意图。一旦最后一次信令生意业务完成后的查抄点,交错分片生意业务将是最终的。这凡是是一个时期中的第一个信标区块。一旦查抄点是最终的,所有先前的区块都是最终的,而且隐含地所有先前的交错链接将是最终的,因此所有分片块都是最终的。
应鼓励有效排除生意业务,以确保参加者提交了此生意业务。可是无效的排除事务应该处罚用户。处罚不该是沉重的,因为信标链重组大概导致无效的排除生意业务。
事务段失败
· 是否举办状态更新和生意业务是否导致合约锁定。
1. 利用动态措施阐明(代码模仿)确定事务的挪用图和参数值。
· 跨分片事务Id
· 返回功效
8. 当这个shard的进口点函数挪用完成时,发出一个系统事件动静,该动静与为根事务描写的动静沟通。
根事务包括函数挪用,该函数挪用是跨分片事务的整体挪用图的进口。此事务范例指示代码应凭据正常的事务段执行(请拜见下文),而且应提交或忽略所有分片上的所有锁定合约。假如事务在超时块之前乐成完成,则作为跨碎片事务一部门的所有事务段的功效,所有状态更新都应提交。假如任何事务段失败,可能假如在超时后提交事务,则应扬弃所有事务段更新。
· 新的事务范例:EE需要支持本发起后头描写的事务范例。
假如信标链分叉,则需要按照修订的交错链接重播所有分片上分片块的事务。一些重播的事务大概期望不再存在交错链接,因此这些事务将失败而不是通过。在这种环境下,交错分片事务将失败,而且任何状态更新的姑且状态都将被扬弃。
跨分片处理惩罚
安详与活性(Safety & Liveness)
5. 提交包括挪用其他事务段的函数的事务段。对嵌套事务的每个“层”反复此操纵。
譬喻在下图中,利用跨分片挪用来获取oracle的值。假如返回的值低于必然数量,则利用“跨分片”挪用来购置商品。
图显示了在另一个返回值的shard(sh2.ee2.conC.func())上挪用函数的示例约定代码,然后按照state1的值,可以在另一个不返回值的shard(sh1.ee4.conD.func())上挪用函数。2. 假如区块编号在超时之后,可能任何“事务段”日志指示错误,则发出指示错误的系统事件。
3. 该应用措施期待发生一个信标链块,该信标链块包罗包括提交事务的Shard块的交错链路。
· 发出包括以下内容的启动系统事件:
3. 查抄事务是否已由启动事务日志指示的同一实体提交。
· 利用跨分片函数挪用的参数与函数挪用的事务段的系统事件动静中的参数值不匹配。
1. 验证“初始事务”和每个事务段的日志信息,查抄Merkle证明,直到“分片交错链接”。
假如根事务因任何原因失败,则会建设一个系统事件,该事件指示所有事务段的所有更新都应该被扬弃。基于此系统事件,可以利用信令事务来解锁所有EE中所有碎片上的所有合约。根事务大概失败,因为:
· 根事务信息(分片,EE,函数挪用和参数)。
事务处理惩罚:
生意业务字段包罗:
进攻者大概提交带有正确数据的排除生意业务,并带有一个错误的Merkle证明。进攻者大概会反复提交生意业务,以试图在以太坊客户端长举办大量处理惩罚。一个大的挪用图将导致以太坊客户需要处理惩罚很多Merkle证明。通过对无效的排除生意业务举办惩罚来阻止这种行为。另外,任何用户提交有效的排除生意业务城市得到少量嘉奖。
先容
应用措施开拓人员需要可以或许在2平台上建设在差异执行情况中具有差异分片合约的措施。应用措施开拓人员需要可以或许利用他们习惯于与以太坊1平台一起利用的同步原子可组合编程技能。这篇文章提出了一种可以做到这一点的技能。
· 根事务日志信息和显示根事务已乐成完成或已失败/超时的Merkle证明。
5. 在将事务段提交给Shard 2的同时,应用措施将事务段提交给Shard 4以执行函数挪用。事务包罗在shard 6和shard 7上执行的事务的系统事件信息和Merkle证明。在本例中,假设此事务导致Shard 4上的状态更新。
为了预订房间,观光社建设了交错分片成果挪用(事务段),用于预订旅馆房间和火车座位并付出用度。旅馆router contract的事情道理是找到一个符合的房间,该房间在请求的当天可用,但今朝尚未预订,然后预订该房间。搜索房间时,代码将跳过当前锁定的room contracts。同样在付出房间用度时,ERC的router contract需要将钱从观光社的账户转到旅馆的账户。它通过为旅馆找到一个没有上锁的付款槽合约来实现这一点。
· 根事务中的代码大概会激发错误。
· 初始生意业务日志和证明(指示交错分片生意业务的挪用图),
· 是否有状态更新,而且事务已导致锁定的协定。
初始事物指示跨分片事务的开始。此事务用于保存每个shard和每个EE的“独一”跨shard事务Id,并注册根事务和事务段的整体挪用图。
· 交错事务处理惩罚块超时后提交根事务。
2. 应用措施将叶事务段提交给Shard 3、5、6和7。事务执行可以更新状态并返回值的函数挪用。执行事务的EEs会发出系统事件,个中包括有关事务挪用和函数挪用的信息,包罗错误状态和返回功效。在本例中,假设只有Shard 7有任何状态更新。
应用措施代码(Application code):我听到您说,“在应用措施中听起来很巨大。这种技能莫非不该该简化应用措施开拓吗?” 谜底是,绝大大都巨大性将被接收到Web3J之类的库中。合约代码和其他应用措施代码应简朴明白。 · 对特定区块的交联举办Merkle证明。
信令事务
应用措施未提交事务段
7. 状态更新被放入姑且存储,合约被锁定。
· 对付从该事务执行的代码中挪用的每个事务段:
1. 应用措施将开始事务提交给Shard 1。这将为跨共享事务保存跨共享事务Id,并指定构成跨共享事务的根事务和事务段的挪用图。
· EE
9. 提交更新状态下执行事务段的所有分片上的所有信令事务。
· 通报到根事务中的系统事件动静大概暗示事务段之一产生错误。
· 在某些环境下,可以建设专门的事务范例来消除对“start”和“clean”事务的需求。譬喻假如有一个根事务和一个执行跨碎片读取而且不更新状态的事务段,则大概可以建设不需要启动和排除事务的专用根事务。今朝正在进一步思量。
2. 提交开始生意业务。这可以与下一步并行举办,也可以在下一步之前的一个插槽中完成。
· 在跨分片事务块超时后提交事务段。
3. 提交叶事务段。“leaf”事务是指其函数挪用不挪用其他跨碎片函数的事务。
示例
4. 验证“初始事务”事件中的挪用图是否与传入的事务段挪用匹配。
· 根事务日志和证明
6. 查抄代码挪用的事务段是否与开始事务日志中预期挪用的事务段匹配。
这些生意业务应该是免费的,可能甚至应该给以勉励,以确保参加者在失败/锁定合约的实体遏制参加时提交此生意业务。无效的信令生意业务应处罚用户。处罚不该太重,因为信标链重组大概导致无效的信令生意业务。
· Contract address
事务处理惩罚:
6. 该应用措施期待发生一个信标链区块,该信标链区块包罗包括提交事务的Shard块的交错链路。
· 陈设可锁定的合约。
除上述生意业务范破例,EE需要支持的其他生意业务包罗:
10. 应用措施在Shard 1上提交清理生意业务,以从未清独一ID列表中删除交错分片生意业务ID。
根生意业务失败
· 此分片日志和Merkle证明的事务段,显示哪些合约被锁定。
5. 利用事务段的缓存返回值执行代码。
应用措施可以看到一个从属事务段失败,并抉择不提交根事务或发送事务信号。为了办理这个问题,另一个用户可以期待跨分片事务超时,并提交一个根事务以使整个跨分片事务失败(这是免费的),并提交信令事务(将嘉奖挪用者)和排除事务(将嘉奖挪用者)以解锁所有锁定的合约并移除跨分片事务Id。
无效的Merkle证明或无效的系统事件
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。