LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > Vitalik:实现跨RollupDEX

Vitalik:实现跨RollupDEX

2021-03-16 FilCloud 来源:区块链网络

假设我们有两个 rollup(A和B),并且 Alice 希望用 rollup A 上的一定数量的代币交换 rollup B 上的相同硬币。已经有人提出方案解决这个问题了,如果 rollup A 和 B 都是完全支持智能合约时,那么就可以去中心化地实现这个假设。

本篇文章提出了在只有 rollup B 具有完全智能合约支持(而rollup A只能处理简单交易)的情况下如何执行此操作。

我们假设 rollup A 上的交易有某种“备注字段”;如果没有,可以使用该交易值的低位数字作为备注发送。

提案

假设有一个交换中介 Ivan(在实际实现中,会有许多中介可供选择)。Ivan 在 rollup A 上有一个帐户 Ivan_A(由他完全控制)。Ivan 还在 rollup B 的智能合约 Ivan_B 中存入了一些资金。

智能合同 IBAN_B 具有以下规则:

如果任何人向 IVAN_A 发送事务处理,将 TRADE_VALUE 代币作为备注包含地址目的地,则在 MIN_REDEMION_DELAY 延迟后,他们可以向 IBAN_B 发送包含转账证明的交易处理,该交易处理会将 TRADE_VALUE 代币的取款排队到地址目的地。

提款在延迟一段时间后处理(例如,1天)按照批次和索引的顺序,转移包括在 rollup A 中。

当 Ivan 发现其在 Ivan_A 收到款项时,他就可以亲自发送 TRADE_VALUE*(1 - fee)代币至 DESTINATION 中。他可以用 IVAN_B 的方法发送交易来完成上述操作,这个方法保存了一个记录,防止合约中的自动发送条款触发该交易。

预期行为很简单:

Alice 向 Ivan_A 发送带有 N 个代币和备忘录 Alice_B 的交易。

Ivan 通过 Ivan_B 发送交易,通过 Ivan_B 向 Alice_B 发送 TRADE_VALUE*(1-fee)代币。

第二步可以在第一笔交易之后立即进行。如果 Ivan 证明第二笔交易和第一笔交易之间的时间戳差异非常小,合同甚至可以有规则允许收取更高的费用。

“最坏的情况”是如果 Ivan 没有像他期望的那样把代币寄给 Alice_B。在这种情况下,Alice 可以等待 rollup A 上的交易确认,找到一些替代方法来获得 rollup B 上的代币来支付费用,然后简单地自己认领资金。

资本成本

该方案的主要局限性是,Ivan_B 需要持有大量资金,以确保所有发送者都会得到支付。具体地说,假设:

我们设置了 Trade_Limit 代币的交易大小限制(因此,前往Ivan_A且Value>Trade_Limit的交易不是有效交易)。

每个 rollup 批次最多可以包含 TXS_PER_BATCH 交易。

Alice 可以自己检查在 rollupA 中即将到来的批次之前有多少未处理的交易,从她在 IVAN_B 合同中看到的资本中减去这个值,然后检查剩余的金额是否足够。

因为取款是按顺序处理的(这是上面队列机制的目标),所以 Alice 不需要担心将来取款在她自己的取款之前被处理的可能性。一批可以交易的最大金额是 TRACE_LIMIT*TXS_PER_BATCH,因此 IBAN_B 合约需要至少持有这个数量的 ETH,外加足够覆盖未处理的交易。

例如,假设 trade_Limit=0.1 ETH(下限是可以的,因为可以使用多个事务进行更大的交易),并且 TXS_PER_BATCH=1000。那么,IVAN_B 将需要保持 100 ETH。请注意,在此设计中有一项额外的隐含费用,因为任何交易超过 0.1 ETH 的人都需要浪费块空间。这与资本要求是权衡的:也就是说,如果用户消耗了一半的区块空间,那么其资本要求将翻倍,反之亦然。如果想要获得合适的平衡,那么隐含的费用要比市场上明确的费用少几倍。

如果我们想要减少或消除这种浪费,可以设计 rollup A 来做到这一点,例如,让序列器发送一条签名消息,向 Alice 证明到目前为止批处理中批准的所有消息。Alice 就会知道,在她之前没有交易(尽管恶意的定序器可能会以高昂的代价欺骗Alice)。

备注

上面的设计假设 rollup A 上的事务有一个备注字段,Alice 可以使用该字段将 Alice_B 指定为她的目的地。如果 rollup 没有此功能,则可以使用以下解决方法。

Alice可以在顺序注册契约中注册 ROLLUP B 上的 Alice_B,并获得一个顺序分配的ID(因此Alice的ID等于在她之前注册的用户数)。

让 MAX_USER_COUNT 为用户计数的最大值;如果需要,该值可以随时间向上调整。Alice 只需确保 TRADE_VALUE%MAX_USER_COUNT 等于(Alice的ID),即可使用 TRADE_VALUE 的低位数字(表示无关紧要的价值)来表示她想要交易的金额。

从 Rollup B 到 Rollup A 的交易

如果 Alice 从 Rollup B 上的代币开始,并将它们移动到 Rollup A,则可以使用类似的机制,只是角色颠倒:

Alice 给 Ivan_B 送代币。

经过一段时间的延迟后,她将获得取回代币的权利。

如果 Ivan 能向 Ivan_B 证明他用 Rollup A 发送了 Alice 代币,那么她就失去了这一权利。

End

非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。

FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用公众号:filcloud

—-

编译者/作者:FilCloud

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

LOADING...
LOADING...