關於無需信任的跨鏈資產轉移

本文為機器翻譯
展示原文

關於無需信任的跨鏈資產轉移。

注意:該協議的早期開發已經在Viaduct的名稱下開始。

前言

在當前以太坊的狀態下,Layer 2區塊鏈彼此以及與以太坊主網之間存在碎片化。解決這個問題並實現有效互操作性的一個核心部分是跨鏈資產轉移。許多橋接實現了這一功能,但它們在某種程度上依賴於信任。

但是,透過使用基於簽名的交易系統,可以無需信任地在多個網路之間映象代幣轉移。唯一的信任假設是至少存在一個誠實的節點,並且網路可以在合理的短時間內檢測和中繼交易。

第一部分:單一部署

第一步是建立一個可靠地處理基於簽名的轉賬的系統。該協議將這些轉賬分為三個部分:檢索、簽名和執行。

檢索步驟呼叫協議核心智慧合約上的getValidHash()方法。給定傳送者、收款人、數量和nonce,該方法將計算並返回所請求轉賬的雜湊值。

接下來是簽名步驟。一旦合約完成計算,交易傳送者就可以簽署生成的雜湊值來批准交易。簽名僅對一次轉賬有效。如果傳送者希望重複一筆交易,可以使用新的nonce計算新的雜湊值和簽名。

最後,在執行步驟中,任何擁有交易簽名的人都可以在核心合約上呼叫objectiveTransfer()。在檢查雙重支付和簽名正確性後,合約將從傳送者轉移正確數量的代幣到收款人。簽名者或所謂的中繼節點可以發起objectiveTransfer()呼叫。請注意,中繼節點可能會在轉賬過程中引入費用。

這個系統允許透過簽名和中繼進行代幣轉賬。此時,這種設計複製了Uniswap的Permit2系統的優點和缺點。

第二部分:跨部署

建立跨鏈無需信任簽名轉賬系統的下一步是使該協議能夠在同一區塊鏈上的多個部署或例項之間執行。雖然現在可能不太相關,但它構成了跨鏈轉賬基礎設施的一個重要組成部分。

每個部署都可以保持其他部署的列表。每個部署不需要知道所有其他部署。唯一的要求是任意兩個例項之間存在直接或間接的路由。然後,每當一個部署收到一個有效的目標轉賬時,它都可以在其對等鏈上發起一個相同的轉賬呼叫。這些鏈可以獨立驗證該呼叫是否正確,然後執行轉賬並適當重新計算餘額。

試圖在多個例項上同時進行雙重支付的行為將失敗。因為每個例項都在同一區塊鏈上,簽名者無法同時執行多筆交易。這意味著所有部署將保持同步,阻止所有雙重支付嘗試。

第三部分:隔離的跨部署

現在,核心合約部署或例項需要一種方式來執行協議的安全版本,而無需相互通訊。為了實現跨部署交易執行,可以有一個無需許可的中繼節點網路,監控鏈上的目標轉賬並將其中繼到每個部署。

然而,此時協議仍存在一個關鍵缺陷。如果同一傳送者同時在兩個不同的部署上發起兩筆交易,將一半以上的餘額傳送到兩個不同的地址,則傳送者可以進行雙重支付。兩個部署都將拒絕它們最初未收到的交易,並且它們的賬戶餘額將不同。

為了解決雙重支付問題,核心合約使用了一個挑戰視窗。每個視窗持續w_f秒,由兩個階段組成:提議期和僅挑戰期,分別持續w_pw_c秒。核心智慧合約在僅挑戰期禁用objectiveTransfer()功能。

當簽名者提交目標轉賬時,合約會檢查是否存在雙重支付,然後將其儲存在challengeableTransfers陣列中。請注意,objectiveTransfer()呼叫上的初始雙重支付檢查只檢查地址的最終餘額。協議還會在呼叫cleanChallengeWindow()時再次檢查雙重支付,屆時將合併所有可挑戰轉賬的總支出金額,並然後與最終餘額進行檢查。一旦當前挑戰期結束,核心合約就可以完成轉賬。任何地址都可以呼叫cleanChallengeWindow()方法,它將嘗試執行並刪除所有可以完成的可挑戰轉賬。此時,轉賬完成。

任何地址都可以在核心合約上呼叫challengeAndRecord()方法,該方法將檢查一個或多個轉賬,並將其與所有可挑戰的轉賬進行雙重支付檢查。如果此過程檢測到雙重支付(在挑戰視窗期間從一個地址轉出的代幣總量超過其餘額),它將標記所有來自雙重支付地址的可挑戰轉賬為有問題的。在cleanChallengeWindow()呼叫期間,核心合約將刪除但不執行有問題的交易。

這些規則創造了一個系統:

  • 只需要一個誠實的中繼。
  • 防止雙重支付。
  • 在部署之間保持共識。

但是到目前為止,該協議並不太有用。

第四部分:跨鏈

從第三部分到跨鏈代幣之間存在一個surprisingly小的差距。因為隔離的跨部署解決方案不需要合約相互互動,所以每個部署都不需要對任何其他部署有任何意識或連線。它們可以部署在完全不同的區塊鏈上,該協議仍將正常執行。我們可以在我們想要連線的每個網路上部署一個例項。然後,當一個地址在一個鏈上發起轉賬時,中繼將在每個其他鏈上覆制它。

一個無需信任的交易合約將該協議重新打包成一種更熟悉的形式,EOA地址可以在一個鏈上轉移資產到另一個鏈。這透過使用swap-on-sync-swapoff模型來實現,該模型的功能如下:

  1. 在源鏈上將ERC20代幣換成跨鏈代幣。
  2. 等待中繼同步跨鏈餘額。
  3. 將跨鏈代幣換成ERC20。

但是,像Uniswap這樣的標準流動性池無法將ERC20代幣換成跨鏈代幣。我們必須採取類似訂單簿的方法,而不是依賴於傳統模型。

對於賣家:

  1. 將ERC20代幣存入交易合約,指定交易價位。
  2. 等待買家完成訂單。

對於買家:

  1. 獲取指定價位的未完成交易。
  2. 建立並簽署交易,將跨鏈代幣轉移給相應的賣家。
  3. 將交易和簽名傳送到交易合約,合約將對其進行驗證。
  4. 交易合約使用objectiveTransfer()呼叫執行跨鏈代幣轉賬。
  5. 交易合約向買家釋放賣家存入的資金。

這種設計允許在區塊鏈之間使用標準的資產橋接介面。

結論

該協議使用標準化介面實現了無需信任的跨鏈資產轉移。也有可能擴充套件該協議,在EVM例項上執行任意交易。該協議的擴充套件版本可能是構建一類區塊鏈的第一步,該區塊鏈將大量網路整合到其基本設計中,實現所有以太坊系區塊鏈之間的無需信任互操作性。它在某種程度上類似於L2區塊鏈,因為交易資料儲存在另一個區塊鏈上,但又不同,因為它同時在多個區塊鏈上儲存資料以增強互操作性。

單獨來看,這個系統的可擴充套件性並不太好。每次轉賬需要多筆交易,預計會產生較高的費用。但是,這個問題可以透過只使用L2網路儲存轉賬資料或在該協議之上構建L3來緩解。或者,交易可以被捆綁在一起,並將它們的Merkle根與ZK證明一起提交到鏈上,類似於零知識Rollup。透過這種方式,多個目標轉賬可以在只有幾筆交易中提交。

最後,歡迎任何反饋!該專案處於非常早期階段,但我會在取得更多進展後附上Github倉庫。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論