由于提币是按顺序处理的(这是上面顺序机制的目标),Alice不需要担心在她自己提币之前IVAN_B会去处理后面的提币需求。在一个批次中可以交易的最大金额是TRADE_LIMIT*TXS_PER_BATCH,因此IVAN_B合约需要至少持有这个数量的ETH,再加上足够的资金来覆盖未处理的交易。例如,假设TRADE_LIMIT=0.1ETH(上限可以设得比较低,因为一笔较高金额的交易可以通过多笔交易完成),并且TXS_PER_BATCH=1000。那么,IVAN_B需要有100ETH的资金。 注意,在这个设计中还有额外的隐含费用,因为任何交易超过0.1枚ETH的人都需要消耗区块空间,这与资金要求相权衡:如果你消耗掉一半的区块空间,那么你的资金要求也会翻倍(可能指隐含费用更高),反之亦然。要建立合适的平衡,似乎应该让隐含费用比市场上出现的显性费用少几倍。如果我们想减少或消除这种消耗,rollupA可以被设计成这样,例如,让排序器发送一个签名消息,向Alice证明到目前为止,批次中批准的所有消息。然后Alice就会知道在她之前没有交易(尽管恶意的排序器可以欺骗Alice,但代价很高)。 备注 上面的设计建立在rollupA上的交易有一个备注字段的假设上,Alice可以使用该字段指定ALICE_B作为她接收代币的目的地址。如果rollup没有此特性,那么我们可以使用以下解决方案。Alice可以在顺序注册合约的rollupB上注册ALICE_B,并获得一个按顺序分配的ID(因此Alice的ID等于在她之前注册的用户数量)。设置MAX_USER_COUNT为用户数的最大值,如果有必要,这个值可以随时间向上调整。Alice可以简单地确保TRADE_VALUE%MAX_USER_COUNT等于(Alice的ID),使用TRADE_VALUE的低阶位(这个数字表示一个不重要的值)来表示她想交易的代币数量。 从rollupB到rollupA的交易 如果Alice把rollupB上的代币转移到rollupA,可以使用类似的机制,只是角色颠倒了:-Alice将代币发送给IVAN_B-经过一段时间的延迟,她将获得收回代币的权利-如果Ivan可以向IVAN_B证明,他在rollupA上给Alice发送了代币,Alice就失去了这个权利 总结 所以我们可以看到,在这个过程中,许许多多的“Ivan”其实就是去中心化的银行,在两条rollup上分别扮演存款机和取款机的角色,从而赚取手续费。如果Ivan作恶,rollupA和rollupB间不需要进行过多的交互,Alice就可以提供打币证明。根据Vitalik的表述,在从rollupA向rollupB转账的场景中,提供证明这一步操作可以直接在rollupB上进行,只要rollupB能获取rollupA的区块哈希,就可以计算出rollupA上的交易记录,从而向Ivan索赔。在索赔这个过程中,Vitalik还给出了更多的可能性。 比如,可以在IvanB上增加一个“快速通道”,AliceB可以把她在IvanB上的提币插槽出售给其他用户。假设这个用户叫Bob,那么Bob可以把款项先转账给AliceB,此后,IvanB应该转账给AliceB的资金将被Bob获取。也就是由Bob先垫付资金给Alice,以此来提升Alice的用户体验,这个过程或许可以涉及到挖矿之类的玩法。Github上有用户提到,如果中间商Ivan不是个体,而是去中心化的资金池,这个模型是否会更好。 (责任编辑:admin) |