在即将进行的Rollup A批次之前,Alice可以自己检查有多少未处理的交易,可以从她在IVAN_B合约中看到的资本中减去该值,然后检查剩余金额是否足够。因为提款是按顺序处理的(这是上述队列机制的目标),所以Alice不必担心那些自己的交易之前被处理的提款。 一个批次可以交易的最大金额为TRADE_LIMIT * TXS_PER_BATCH,因此IVAN_B合约需要至少持有这个数量的ETH,加起来需要足以覆盖未处理的交易。例如,假设TRADE_LIMIT = 0.1 ETH(低限制是可以的,因为可以通过多次交易完成更大的交易)并且TXS_PER_BATCH =1000。那么,IVAN_B将需要持有100 ETH。 请注意,这种设计需要支付额外的隐性费用,因为任何交易量超过0.1 ETH的人都将浪费区块空间。 这是向资金要求妥协的:如果将区块浪费减半,则资金要求将增加一倍,反之亦然。 对于正确的余额,似乎隐性费用比市场上出现的显性费用小几倍。 如果我们想减少或消除这种浪费,可以设计Rollup A来这样做,例如,让sequencer发送一个签名的消息,向Alice证明到目前为止在批处理中批准的所有消息。 这样,Alice就会知道在她前面没有交易(尽管恶意sequencer可能会以高昂的代价诱骗爱丽丝)。 Memos 上面的设计假定Rollup A上的交易具有一个备注字段(memo field),Alice可以使用该字段将ALICE_B指定为目的地。如果rollup不具有此功能,那么我们可以使用以下解决方法。Alice可以按顺序注册表合约在B上注册ALICE_B,并获得按顺序分配的ID(因此,爱Alice的ID等于在她之前注册的用户数)。令MAX_USER_COUNT为最大用户数;如有必要,此值可以随时间向上调整。Alice只需使用TRADE_VALUE的低位数字(表示无足轻重的金额)来表示她要交易的金额,即可确保TRADE_VALUE%MAX_USER_COUNT等于(Alice的ID)。 Rollup B到A的交易 如果Alice从Rollup B上的币开始并将其移动到Rollup A,则可以使用类似的机制,但角色相反: 爱丽丝将币发送到IVAN_B经过一段时间的延迟后,她有权利收回这些币如果Ivan可以向IVAN_B证明他在Rollup A中向Alice发送了币,则她将失去该权利。 (责任编辑:admin) |