Vitalik:如何實現跨Rollup DEX

買賣虛擬貨幣

假設我們有兩個 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 的方法傳送交易來完成上述操作,這個方法儲存了一個記錄,防止合約中的自動傳送條款觸發該交易。

預期行為很簡單:

  1. Alice 向 Ivan_A 傳送帶有 N 個代幣和備忘錄 Alice_B 的交易。
  2. 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

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;