本文作者Vitalik Buterin
“L2 DeFi协议当前无法相互通信,因此V神Vitalik提出了解决方案。为了应对不断上升的交易费用,V神在提案中,提出了一种针对特定类型跨Rollup(cross-rollup)扩展的解决方案。该提案概述了使用rollup的两个协议如何在保持互连性和可组合性的同时相互通信。V神提案假设,一个rollup可以处理简单的事务,而另一个rollup具有完整的智能合约支持。使用rollups在两个智能合约支持的协议之间进行传输,目前早已有提案。”
假设我们有两个Rollup,A和B,并且Alice希望将Rollup A上的一些币兑换为Rollup B上的相同币。如果A和B同时都支持完整智能合约,那目前就有以一种去中心方式来实现这种兑换的提案。 而在本文档中,提出了当只有Rollup B支持完整智能合约( Rollup A仅能处理简单交易)的情况下的一种解决方法。
我们假定A上的交易具有某种“备注字段(memo field)”; 如果没有,我们可以使用该值的低位数字作为备注。
提案
假设有一个兑换中介Ivan(在实际的实现中,会有很多中介可供选择)。 Ivan在A(他完全控制)上拥有一个帐户IVAN_A。 Ivan在B的智能合约IVAN_B中也存有一些资金。
智能合约IVAN_B具有以下规则:
- 如果有人发送了一笔发送TRADE_VALUE币到IVAN_A的交易,其中包含一个地址DESTINATION作为备忘录(memo),则在MIN_REDEMPTION_DELAY区块之后,他们可以发送一笔包含转移证明的交易给IVAN_B,并进入地址DESTINATION的TRADE_VALUE币提款队列中。
- 在等待一些延迟(例如1天)后,按批次和索引顺序处理提款,并将这些转账包含到Rollup A。
- 当Ivan看到自己在IVAN_A收到资金时,便可以亲自将TRADE_VALUE *(1-fee)币发送到DESTINATION。 他可以通过使用IVAN_B中的方法发送交易来完成此操作,该方法可以保存一条记录,以防止合约中的自动发送语段触发该交易。
预期的行为很简单:
- Alice将N个币和备忘录ALICE_B通过一笔交易发送给IVAN_A
- Ivan发送一笔交易,通过IVAN_B将TRADE_VALUE *(1-fee)币发送到ALICE_B
第二步可以在第一步之后立即进行。 如果Ivan证明第二笔交易与第一笔交易之间的时间戳差异很小,则合约甚至可以具有允许费用增加的规则。
“最坏的情况”是如果Ivan没有按预期方式将币发送到ALICE_B。 在这种情况下,Alice可以等到Rollup A上的交易确认之后,找到某个替代路由让Rollup B上的币支付费用,然后自己领取资金。
资本成本
该方案的主要限制是IVAN_B需要持有大量资金以确保所有发送者都将得到付款。特别是,假设:
- 我们将交易大小限制为TRADE_LIMIT个币(因此,进入IVAN_A且value > TRADE_LIMIT的交易是无效交易)
- 每个Rollup批次最多可以包含TXS_PER_BATCH个交易
在即将进行的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发送了币,则她将失去该权利。
本文链接:
https://www.8btc.com/article/6604260
转载请注明文章出处