Rollup Bridge 介紹(二):Hop protocol part 1

Hop protocol 是一個讓使用者可以快速在各個不同 Rollup 間轉移資產的協議

NIC Lin
imToken
8 min readAug 16, 2021

--

Photo by Alex Radelich on Unsplash

本篇是 Rollup Bridge 介紹的第二篇,建議先從第一篇 Maker Bridge 看起:

https://medium.com/imtoken/rollup-bridge-%E4%BB%8B%E7%B4%B9-%E4%B8%80-maker-dai-bridge-678c62228eb5

  • 以下所稱的 L2 皆指 Rollup 而非 Plasma 或 sidechain
  • 以下所稱『資產』和『代幣』兩個詞指的是一樣的東西
  • 以下所稱『七天』和『Rollup 挑戰期』兩個詞指的是一樣的東西

快速跨 Rollup 資產轉移

如果你現在要從 Rollup A 把資產搬到 Rollup B,要怎麼搬?答案是從 Rollup A withdraw 回 L1,再從 L1 deposit 到 Rollup B。所以你要等 Rollup A 的挑戰期,然後再等 Rollup B 的 deposit 時間(雖然通常不會很久)才能成功完成跨 Rollup 的資產轉移。

image source: Steven Wu from imToken labs

而 Hop protocol 就像是第一篇介紹裡 fast withdrawal 的例子一樣,只是現在流動性提供者是在 Rollup B 上去墊付而不是在 L1。以下會以 fast transfer 來指跨 Rollup 資產轉移,以便和 fast withdrawal 做出區隔。
從 high level 來看 Hop protocol 就跟 fast withdrawal 一樣簡單,流動性提供者承擔資產鎖住七天的風險、機會成本,收取手續費;使用者支付手續費,換取能快速把資產轉移到另一個 Rollup 的服務。
註:Hop protocol 裡把流動性提供者稱作 Bonder,以下也會以 Bonder 代指流動性提供者。

而如同 fast withdrawal 的例子,如果沒有人來墊付你的 fast transfer,你就必須自己走完正常的路線:Rollup A 回到 L1 再進到 Rollup B。
註:Rollup A 和 Rollup B 都支援 L1<->L2 訊息傳遞的功能也是必要條件,否則無法安全可信地把 transfer 訊息從 A relay 到 B 上。目前基本上大多數(包含 zk)的 Rollup 都支援 L1<->L2 訊息傳遞功能。

不過實作出 Hop protocol 其實沒有這麼簡單。首先,每一個 Rollup 的 withdraw 方式、挑戰期以及 deposit 時間都不一樣。每一個 Rollup 都需要 Hop protocol 團隊去對接。
註:Hop protocol 也可以接上 ZK Rollup,ZK Rollup 因為沒有挑戰期所以設計會比較不一樣,但一樣需要團隊去對接。

而整個 Hop protocol 的安全性會取決於其所接入的 Rollup 中安全性最低的那個。如果某一個 Rollup (或甚至 Rollup 上面的某一個代幣合約)出現漏洞,導致攻擊者可以任意憑空印鈔,那攻擊者就可以馬上透過 Hop protocol 來換成其他 Rollup 上的資產。
其實就和跨鏈橋一樣,你的防守範圍從一條鏈變成了多條鏈上的無數個資產,其安全性不容輕忽。

接下來會介紹一些 Hop protocol 的設計細節

Batch Transfer

如果每一筆 transfer 背後對應的 Rollup A -> L1 -> Rollup B 步驟,Bonder 都要一筆一筆跑過一次,那會耗費很多 gas。所以 Hop protocol 提供 Batch Transfer 的功能,Bonder 可以等待一段時間,收集墊付完的 transfer,再把它們一併處理。

hToken

hToken 是 Hop protocol 的代幣,但這個不是治理代幣。每個代幣在 Hop protocol 裡都有相對應的 hToken,例如 ETH 有 hETH、DAI 有 hDAI。

為什麼需要 hToken?

首先,它能統一代表同一種代幣,簡化使用介面的複雜度:使用者不需要選擇他要換的是 Optimism ETH 還是 Arbitrum ETH,使用者操作的都是 hETH。
其次,Hop protocol 不需要負責維護一個正統代幣的清單。想像一下,任何人都可以在 Rollup 上發行一個 DAI 合約,那 Hop protocol 要怎麼知道哪一個才是 Maker 團隊部署在 Rollup 上的 DAI 合約?答案是:Hop protocol 不需要知道,它只需要知道 hDAI。(你可能會想:拿到 hDAI 可以幹嘛?hDAI 等於 DAI 嗎?我們馬上就會講到)
最後,延續上一點。假設今天沒有 hDAI,而我要從 Rollup A transfer DAI 到 其他 Rollup,Hop protocol 就必須在 Rollup A 上記載 Rollup B C D E … 上的 DAI 合約地址,而且其他 Rollup 也都要依照辦理。所以這樣全部 Rollup 上總共要記載並維護的資料數量會是 N*N*M(N 是 Rollup 數量,M 是代幣種類數量)。

怎麼使用 hToken?

答案是拿去 AMM 換成 DAI。我們先不討論 AMM 從哪裡來,因為只要有誘因、有需求,就會有人建出 hDAI/DAI 的 AMM pair 並提供流動性。
註:這裡的 AMM 指的 L2 上的 AMM。

先介紹 hToken 從哪裡產生:任何人都可以到 L1 的 Hop protocol 合約抵押代幣獲得 hToken,例如抵押 DAI 獲得 hDAI。流動性提供者一定會需要抵押來獲得 hToken,因為他們墊付的代幣會是 hToken。
接下來,假設使用者要從 Rollup A 把 DAI transfer 到 Rollup B,這過程會包含
(1) 在 Rollup A 上把 DAI 換成 hDAI、
(2) transfer hDAI 到 Rollup B、
(3) 在 Rollup B 上把 hDAI 換成 DAI
其中 (1) 和 (3) 都會有 DAI/hDAI 互換的需求,有需求自然就會有人願意提供DAI/hDAI 流動性來賺取手續費。

image source: Steven Wu from imToken labs

當然,如果你沒有被說服為什麼需要 hToken,那 hToken 和 AMM 這兩個東西看起來就會像是項目方故意擠出來扒使用者皮的玩法。不過你可以想看看假設沒有 hToken 的話,這個協議的哪些運作流程、使用者介面會長得不一樣,會是更好、還是更壞。(或許真的會變得更好?)

手續費怎麼估?

當前 Hop 的墊付模式是你申請 transfer 時要指定 Bonder 以及(你願意付的)手續費,然後等 Bonder 來墊付。你可以事先和 Bonder 協調(例如手續費)後再申請 transfer,但沒有機制可以迫使 Bonder 要完成墊付。如果 Bonder 剛好下線或是因為網路壅塞導致手續費不夠 cover 他估算的成本,那下場就是你要自己等七天並自己完成 transfer。

比較好的方式是能有個機制可以證明 Bonder 的確承諾給你,確保 Bonder違反承諾不替你墊付的時候他會受到懲罰,不過這會讓協議變得更複雜。

所以目前這個模式會是比較簡單可行的,但也表示計算手續費這邊要小心,避免 Bonder 不願意墊付,導致使用者要等七天。

另外不同 Rollup 上收取 gas 費用的方式不一樣,也是 Hop protocol 團隊在設計估算手續費功能需要注意的地方。
註:目前 Hop 提供的 SDK 有包含估算手續費的部分,詳細可以到這個 repo 去查看。

--

--