區塊鏈研究實驗室|Merkle Bridge-鏈間資產轉移的簡單協議

Merkle Bridge的目標是成爲一個簡單輕巧的協議,用於在區塊鏈之間資產轉移,同時提供分佈式的監管和審查阻力。第一個應用程序是將Aergo ERC20代幣轉移到Aergo的主網原生代幣。一旦部署了網橋,任何以太坊或Aergo資產都將可以在這些網絡之間直接轉移。在本文中,我們將介紹該協議的一些技術細節。

我們可以用以下兩種方式錨定(2WP)的資產轉移:首先在區塊鏈A上存入代幣,然後要將代幣轉移到區塊鏈B上,必須先將區塊鏈A上代幣進行鎖定,並以1:1的比例在區塊鏈B上鑄造一個副本,最後副本區塊鏈B上銷燬後,才能解鎖區塊鏈A上的鎖定代幣。

維持固定匯率的簡單方法是將資產鎖定在單個密鑰或多重簽名合同中(大多數交易所如何存儲資金)。

第一種情況(單個密鑰)不安全,因爲密鑰可能會被盜或丟失。

第二種情況(multisig)更安全,但是轉讓費用昂貴,因爲它們每次轉讓都需要鏈上進行2/3簽名驗證。讓每個傳輸進行多重簽名處理也意味着很容易審查單個用戶的傳輸。還有其他更安全和無需信任的方法,例如ETH-ETC的平橋,但需要資本鎖定才能進行抵押和削減。

我們的目標是實現允許20多個驗證者的分散資金鎖定/解鎖,但同時通過設計一種簡單的協議(無需橋接操作員來處理單個轉賬),將橋接轉賬費用保持在較低水平。

Merkle橋設計

Aergo Merkle橋可實現分散式保管和資產的有效鑄造。

權限證明(PoA)側鏈通常使用其狀態根在公共鏈上的錨定來提供可驗證的真相來源。Merkle橋使用這些錨定狀態根來允許用戶提交側鏈狀態的證明。

資金保管

這種設計的安全性取決於錨定根的有效性。固定的區塊鏈狀態根包含鎖定和已用餘額的信息,因此任何無效的狀態根都可用於竊取鎖定的用戶資金。

爲了確保狀態根的有效性,錨定使用類似於multisig oracle的簡單形式的DAO(分散式自治組織)。該DAO的成員稱爲驗證者。

驗證者有以下職責:

  • 在將要錨定的根源上達成共識(因此它們必須是具有信譽的已知實體,以確保有效的錨定)。

  • 同意驗證者集更新建議(使用2/3當前驗證者的簽名添加或刪除驗證者)。

  • 同意Merkle橋設置更新建議(還需要獲得2/3驗證者的批准).

操作方式

提案人(願意支付錨定費的人)會定期在橋接鏈上發佈橋接合約的狀態根。僅在狀態根已由2/3驗證者簽名的情況下才會記錄。

然後,用戶錢包可以通過使用錨定狀態根驗證其鎖定資產的Merkle證明來獨立鑄造目標橋合約上的資產。

鎖定並跟蹤帳戶的總代幣餘額。創建了包含此餘額的Merkle證明,並且可以在橋的另一側鑄造該代幣餘額。鑄造記錄了總的造幣餘額,因此帳戶造幣的金額永遠不會超過存入的金額。燒燬和解鎖餘額也是使用相同的過程。

這種設計使合約的存儲管理和操作變得簡單,因爲它不需要記錄傳輸隨機數或返回值。 侷限性在於,隨着用戶數量和固定代幣數量的增長,Merkle證明的大小會增加(合約狀態樹會更深),從而使轉移變得更加昂貴。

使用Merkle Bridge將ERC20代幣從以太坊轉移到Aergo

優點:

  • 驗證者實現起來很簡單,因爲它們只需要簽署它們認爲有效的最終狀態根(通過在橋的兩邊運行完整的節點)。驗證者不需要監視和驗證用戶的轉移。

  • 用戶錢包直接通過網橋合同進行轉賬,不需要驗證者批准。

  • 錨定週期是靈活的,狀態根可以由許多驗證器(20 +)簽名。

  • 如果沒有超過2/3驗證者共同認可並廣播無效的側鏈狀態根,則不能任意審查代幣傳輸。

  • 可以進行小額轉賬,並且可以隨時鑄造/解鎖總存款餘額。

  • 鏈上的Merkle證明驗證比簽名驗證便宜。

  • 任何新資產都可以通過網橋進行轉移,而無需獲得驗證者的批准(由於在鑄造時會部署新的固定合約,因此第一次轉移的成本會更高)。

  • 可以通過一次交易完成對另一個鏈上同一帳戶的多次轉賬,提取發送到該帳戶的總鎖定餘額。

侷限性:

  • 一旦啓動,傳輸就應該在網橋的另一端完成(沒有超時限制),但這意味着無法取消傳輸。

  • 如果超過1/3的驗證者停止合作,網橋將無限期暫停(不可能有新的取款)。

部署

在此存儲庫中可以找到2個Aergo區塊鏈之間的Merkle橋的POC實現:https://merkle-bridge.readthedocs.io

以太坊和Aergo區塊鏈之間的Merkle橋的POC實現可以在以下存儲庫中找到:https://eth-merkle-bridge.readthedocs.io

在此存儲庫中可以找到用於在以太坊和Aergo之間轉移資產的Javascript SDK:https://github.com/aergoio/eth-merkle-bridge-js?source=post_page-----32bd0f06c308----------------------

橋的操作員

他們要爲橋接的每個區塊鏈運行一個完整節點。 每隔固定的時間間隔(每10分鐘?),他們將獲得最新的最終狀態根,並將其註冊在橋合約的Root和Height狀態變量中的相反區塊鏈上。

橋操作員有2種類型:廣播set_root()事務的建議者和爲建議者請求的兩個橋接鏈狀態根簽名的驗證器任何人都可以是提議者:橋合約只允許在錨定期之後發生且具有有效簽名的狀態根更新。驗證者的數量可以根據所需的multisig安全性而變化,如果請求的狀態根有效,驗證者會對其進行簽名。

 

操作員調用newAnchor(…)來錨定新的狀態根

橋驗證者集更新:

如果2/3的當前驗證者同意新的驗證者集,則可以定義新的驗證者集。

 

橋驗證者集更新

版本2

在Merkle橋的版本2中,簽名驗證將在單獨的Oracle合約中重構,該合約將對橋合約具有完全控制權。這樣可以升級oracle合同的共識機制,併爲用戶轉移保留相同的橋接合約。 橋的安全屬性保持不變

用戶資產轉移:

要傳輸代幣,用戶會將其鎖定在橋接合約中,並等待目標區塊鏈上的下一個錨。

lock(…)記錄用戶存入的總餘額。

用戶錢包將讀取目標區塊鏈上的新錨定狀態根(Root,Height),並向該節點請求Merkle證明,包括該狀態根的鎖定餘額。用戶的鎖定平衡被記錄在鎖狀態映射,其中鍵是用於一個令牌帳戶參考。 帳戶參考是用戶地址和令牌地址的串聯。 然後可以使用鎖定令牌的Merkle證明在目標區塊鏈上進行薄荷交易。 用戶的造幣金額不能超過合同所存入和記錄的總金額。

mint(…)驗證存款的Merkle證明並鑄造正確數量的代幣。 如果從未鑄造過令牌,則部署新的固定代幣合約。

如果橋的操作員在用戶產生餘額之前錨定了新的狀態根,則用戶的錢包可以爲新錨定的狀態根簡單地創建新的Merkle證明。

用戶的錢包在原始區塊鏈上解鎖代幣之前,會重複類似的燒燬代幣的過程。

有關Merkle橋合約中的Merkle證明驗證的詳細信息,請參閱:

以太坊Patricia樹的Merkle證明驗證

相關作品

Merkle Bridge採取的方法是儘可能使用最簡單,最可靠的設計,以使驗證者無需就用戶轉移達成共識,而是將所有資源集中在他們錨定的區塊鏈狀態根的有效性上。此外,用戶沒有完成轉賬的時間限制,並且可以通過一次交易完成對同一帳戶的多次轉賬。這是與以下協議的主要區別:

ICS(鏈間標準)

其他項目,如cosmos ibc,則採用不同的方法,將所有單個跨鏈資產傳輸抽象爲數據包(也可以支持契約調用),並且peg區域驗證器在這些數據包上達成共識。這是一種非常有趣的方法,可以減少對跨鏈資產的信任,但當peg驗證器鎖定的資金的價值超過所涉原子的價值時,這種設計也最終依賴於驗證器的聲譽時,就會產生問題。

需要注意的是,爲了連接比特幣和EOS這樣的區塊鏈,將存款事件轉發到傳輸代幣上是必要的,而EOS並不是Merkelize狀態。

Plasma

Merkle橋的設計靈感來自對Plasma的研究,並解決了在Plasma上運行合約的問題。Merkel橋並不是Plasma的,因爲它不具有相同的安全性:沒有退出提示可以挑戰來自側鏈的退出,並且提款必須在側鏈上進行。 Merkle橋的安全性取決於錨定驗證者的分散性。由於可以爲單個狀態根進行無限數量的傳輸,因此該狀態根所需的簽名數量可能很高。用戶無需關注區塊鏈上的無效提款和大規模退出情況,而應該信任去中心化的驗證者。同樣在POA企業側鏈的情況下,我們通常會假設共識安全性,因此可以在側鏈上初始化提款是可以接受的,並且側鏈運營商不需要監視父級掛鏈的退出。

結論

Merkle橋由一個簡單的DAO(multisig oracle)組成,用於驗證錨,更新驗證者集和橋設置。用戶錢包可以獨立創建其鎖定/燒燬餘額的Merkle證明,以進行跨鏈轉移,而無需驗證者觀看轉移事件。

EthAergo網橋將用於在Aergo和以太坊主網之間發送AergoERC20和任何其他代幣。

AERGO-AERGO橋接器將被企業側鏈的用戶用於以一種成本高效和安全的方式在AERGO主網之間轉移他們的資產。

這使MakerDAO的DAI穩定幣和其他任何ERC20等令人興奮的應用程序都可以供Aergo主網用戶使用,並由Merkle橋錨定保護。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章