banner
CKB 中文

CKB 中文

CKB 是理想的比特币 Layer 2

系統解讀 Fiber Network:把閃電網絡嫁接到 CKB 上的宏大實驗

作者:Faust & Nickqiao,極客 web3;原文鏈接:系統解讀 Fiber:把閃電網絡嫁接到 CKB 上的宏大實驗

8 月 23 日,CKB 團隊發布了基於 CKB 的閃電網絡方案 — — Fiber Network,這則新聞一經傳播,很快便在社區裡引發了熱議,讓 CKB 價格在一天內快速上漲了近 30%。新聞之所以會引起強烈反響,主要在於閃電網絡具有強大的敘事魅力,而 CKB 的 Fiber 對傳統閃電網絡進行了方案升級,針對後者做出了諸多改進。

比如,Fiber 可以原生支持多類型資產,如 CKB、BTC、穩定幣等,而且 CKB 的手續費遠比 BTC 低、響應速度快,Fiber 可以借此在 UX 方面取得突破。而在隱私和安全層面,Fiber 也做出了不少優化。

此外,Fiber 和 BTC 閃電網絡可以互聯互通,形成更大的 P2P 網絡,此前的線下活動中,CKB 團隊甚至表示,將在 Fiber 和閃電網絡中設置 10 萬個物理節點,以促進 P2P 支付網絡的完善與進步。 毫無疑問這是一個空前宏大的故事。

img

如果 CKB 團隊的願景得以在未來實現,無論對閃電網絡還是對 CKB 乃至比特幣生態而言,都將是巨大的利好。根據 mempool 的數據,當前 BTC 閃電網絡中安置了 3 億多美元的資金,節點數量約為 1.2 萬個,彼此之間構建了近 5 萬條支付通道。

img

而在 spendmybtc.com 上,我們還可以看到越來越多的商家在支持閃電網絡收付款,只要 BTC 的被認可度越來越強,閃電網絡和 Fiber 等鏈下支付方案的崛起勢能必將與日俱增。

本著對 Fiber 的技術方案進行系統性解讀的目的,《極客 Web3》寫作了這篇關於 Fiber 整體方案的研報。作為基於 CKB 的閃電網絡實現方案,Fiber 的原理與比特幣閃電網絡大面上一致,但在很多細節上進行了優化。

Fiber 的總體架構包括以下四個核心部分:支付通道、Watchtower、多跳路由、跨域支付。 下面我們先展開解釋下最重要的 “支付通道”。

閃電網絡和 Fiber 的基石:支付通道#

支付通道本質是將轉賬 / 交易都挪到鏈下處理,過段時間再將最終狀態提交到鏈上進行 “結算”。 由於交易是在鏈下即時完成的,往往可以擺脫 BTC 等主鏈的性能限制。

假設 Alice 和 Bob 共同開啟了一個通道,他們先在鏈上構建多簽賬戶,向裡面存一些錢,比如 Alice 和 Bob 各存入 100 塊,作為在鏈下通道中各自的餘額。接下來雙方可以在通道裡進行多筆轉賬,等退出通道時,再把最終的餘額同步到鏈上,由多簽賬戶給雙方打款,即 “結算”。

img

比如說,雙方開始時各有 100 塊,之後 Alice 向 Bob 轉賬 50,之後 Alice 又向 Bob 轉了 10 塊錢,而後 Bob 又給 Alice 轉了 30 塊,最終雙方餘額變為:Alice — 70,Bob — 130。大家不難發現,二人的餘額總和不變,上圖中算盤珠子來回推拉的案例可以很好解釋這點。

如果有一方退出通道,就把當前的餘額 Alice: 70/Bob: 130 同步到鏈上,把多簽賬戶中的 200 塊錢按各自餘額轉給二人,完成結算。上述流程看起來簡單,但在實操中要考慮很多複雜情況。

首先,你其實並不知道對方想在何時退出通道。 拿上面的例子來說,Bob 可以在第二筆轉賬完成後就退出,亦或是第一筆轉賬後就退出,而支付通道不會對此強制要求,是允許參與方自由退出的。要實現這一點,要假設隨時會有人退出,任意一方都可能向鏈上提交最終餘額,進行結算。

所以有一個 “承諾交易” 的設定,“承諾交易” 用於聲明通道內雙方的最新餘額,每筆轉賬發生時都會生成對應的 “承諾交易”。 你如果要退出通道,可以向鏈上提交最新的一筆 “承諾交易”,把自己應得的錢從多簽賬戶中抽出來。

img

我們可以記下這個結論:承諾交易用於對通道中雙方的餘額進行鏈上結算,任何一方隨時可以把最新的承諾交易上鏈,然後退出通道。

但這裡有一個重要的作惡場景:Bob 可以把過期的餘額和承諾交易提交到鏈上,比如上圖中的 Commit Tx3 生成後,Bob 的餘額為 130,但 Bob 為了給自己牟利,把過期的 Commit Tx2 提交到鏈上,聲明自己的餘額是 160,而這個餘額狀態不是實時的,這就是典型的 “雙重支付”。

為了防止此類雙花場景,要有相應的懲罰措施,關於懲罰措施的設計恰好是整個 1 對 1 支付通道的核心,理解了這部分才能真正理解支付通道。在通道的設計裡,如果任何一方把過期的狀態和 Commit Tx 提交到鏈上,不但不會如願以償,反而會被另一方把全部資金都抽走。

這裡用到了 “ 不對稱的承諾交易 ” 和 “ 撤銷密鑰 ”,這兩個概念非常重要。我們先對 “不對稱的承諾交易” 進行解釋。以前面的 Commit Tx3 為例,下圖是承諾交易的示意圖:

img

這筆承諾交易由 Bob 構造,然後發給 Alice 讓對方自行處理。如圖所示,這就是一筆比特幣轉賬,聲明把多簽賬戶中 70 塊錢給 Alice,130 塊錢給 Bob,但錢的解鎖條件 “不對稱”,Alice 面對的限制更苛刻,對 Bob 更有利。

Alice 收到 Bob 構造的承諾交易後,可以附上自己的簽名滿足 2/2 多簽,之後 Alice 可以主動把 “承諾交易” 提交上鏈,這樣就可以退出通道,如果她不這麼做就可以繼續在通道中轉賬。

這裡我們要注意:這筆承諾交易是 Bob 主動構造的,其中條件對 Alice 不利,Alice 只能接受 / 拒絕,我們要想辦法留給 Alice 一些自主權。在支付通道的設計中,只有 Alice 自己能把 “對自己不利” 的承諾交易放到鏈上觸發,這是因為承諾交易要湊足 2/2 多簽,Bob 在本地構造交易後只有自己的簽名,沒有 Alice 簽名。

而 Alice 可以 “只接收 Bob 的簽名,但不把自己的簽名發給他”,這就好比一份對你不利的合同,需要你和別人雙簽,對方先簽名後把文件給你,你可以不讓對方拿到簽名。你想讓合同生效就簽名然後公示,不想生效就不簽名或不公示。顯然在上面的案例中,Alice 有辦法限制 Bob。

img

然後到了重點:通道中每次有轉賬發生後,會有一對承諾交易出現,有兩個類似鏡像的版本,就像下面這樣。Alice 和 Bob 可以分別構造對自己有利的承諾交易,在其中聲明餘額 / 退出時應得的金額,然後把交易內容發給對方處理。

有趣的是,這兩筆承諾交易聲明的 “退出時所得金額” 相同,但取款條件不同,這正是前文 “不對稱的承諾交易” 的來歷。

img

前面我們解釋過,每筆承諾交易都要 2/2 多簽才能生效,Bob 本地構造的、對自己有利的承諾交易不滿足 2/2 多簽,而滿足 2/2 多簽的承諾交易扣在 Alice 手上,Bob 沒法提交,只能由 Alice 提交,這就形成了制衡。反過來也是類似的道理。

如此一來,Alice 和 Bob 只能主動提交對自己不利的承諾交易,只要雙方中有一人把 Commit Tx 提交上鏈且生效,通道就被關閉。而回到最開始說的 “雙重支付” 場景,如果有人把過期的承諾交易提交上鏈,會發生什麼呢?

這裡要提到一個叫 “撤銷密鑰” 的東西。假如 Bob 把過期的承諾交易提交上鏈,Alice 可以通過撤銷密鑰把 Bob 應得的錢提走。

我們看下面這張圖,假設最新的承諾交易是 Commit Tx3,Commit Tx2 過期,如果 Bob 把過期的 Tx2 提交到鏈上,Alice 可以通過 Tx2 的撤銷密鑰把 Bob 的錢抽走(Alice 要趕在時間鎖範圍內行動)。

img

而對於最新的 Tx3,Alice 沒有其撤銷密鑰,只有在未來 Tx4 出現後,Alice 才能獲取 Tx3 的撤銷密鑰。這是由公私鑰密碼學和 UTXO 的特性決定的,礙於篇幅本文不會深入解釋撤銷密鑰的實現原理。

我們可以記住結論:Bob 只要敢把過期的承諾交易提交上鏈,Alice 就可以用撤銷密鑰把 Bob 的錢拿走,作為懲罰。反過來如果 Alice 作惡了,Bob 也可以如此懲罰她。這樣一來,1 對 1 的支付通道可以有效避免雙重支付,只要參與方都是理性人,就都不敢作惡。

關於支付通道這塊,基於 CKB 的 Fiber 相比於比特幣閃電網絡有大幅優化,能夠原生支持多類型資產的轉賬 / 交易,比如 CKB、BTC 和 RGB++ 穩定幣, 而閃電網絡只能原生支持比特幣,Taproot Asset 上線後比特幣閃電網絡還是無法原生支持非 BTC 資產,只能間接支持穩定幣。

img

(圖片來源:Dapangdun)

img

(圖片來源:Dapangdun)

此外,由於 Fiber 依賴的 L1 主鏈是 CKB,打開和關閉通道的操作消耗的手續費低得多, 不會像 BTC 閃電網絡那樣磨掉用戶很多手續費,這是其在 UX 上的明顯優勢。

全天候的保安:Watchtower 瞭望塔#

上文中講到的撤銷密鑰有個問題:通道參與方要時刻監視對方,防止對方偷摸把過期的承諾交易提交上鏈。但沒人能保證 24 小時在線,如果你離線的時候對方作惡,該怎麼辦?

對此,Fiber 和比特幣閃電網絡都有 Watchtower 瞭望塔的設計,會幫用戶全天候監視鏈上活動。一旦通道中有人提交了過期的承諾交易,Watchtower 會及時處理,從而確保通道和資金的安全。

具體的解釋如下:對於每筆過期的承諾交易,Alice 或 Bob 可以事先把對應的懲罰交易構造好(用撤銷密鑰處理過期的承諾交易,受益人聲明為自己),然後把懲罰交易的明文發給 Watchtower。一旦 Watchtower 監測到有人把過期的承諾交易提交上鏈,它就會把懲罰交易也提交上鏈,進行針對性的懲罰。

img

Fiber 為了保護通道參與者的隱私,只讓用戶把 “過期承諾交易的 hash + 懲罰交易明文” 發給 Watchtower,這樣 Watchtower 一開始並不知道承諾交易的明文,只知道其 hash。除非有人真的把過期承諾交易提交到鏈上,Watchtower 才會看到明文,然後緊隨其後把懲罰交易提交上鏈。這樣一來,除非真的有人作惡,否則 Watchtower 不會看到通道參與者的交易記錄(即便看到了也只能看到其中一筆)。

這裡我們要提一下 Fiber 相比於比特幣閃電網絡的優化。上述與撤銷密鑰相關的懲罰機制被稱為 “LN-Penalty”,而比特幣閃電網絡的 LN-Penalty 有明顯缺點:Watchtower 要保存所有的過期承諾交易 Hash 和對應的撤銷密鑰,這會造成不小的存儲壓力。

早在 2018 年,比特幣社區就提出了一種叫 “eltoo” 的方案來解決上述問題,但需要比特幣分叉支持 SIGHASH_ANYPREVOUT 操作碼。思路是當過期的承諾交易上鏈後,最新的承諾交易能對其進行懲罰,這樣用戶只保存最新的承諾交易即可。但是 SIGHASH_ANYPREVOUT 操作碼至今還未激活,該方案遲遲不能落地。

而 Fiber 實現了 Daric 協議,修改了撤銷密鑰的設計,讓同一個撤銷密鑰適用於多筆過期的承諾交易。這樣可以大幅減少 Watchtower 以及用戶客戶端的存儲壓力。

網絡中的交通系統:多跳路由和 HTLC/PTLC#

前面講的支付通道僅適用於 1 對 1 交易的場景,而閃電網絡支持多跳支付,即通過中間節點來路由,讓未直接建立通道的兩方間能夠轉賬,比如說 Alice 和 Ken 沒有通道,但 Ken 和 Bob 間有通道,Bob 和 Alice 間有通道,Bob 就可以作為 Alice 和 Ken 之間的中間節點,讓 Alice 和 Ken 之間可以發生轉賬互動。而 “多跳路由” 就是指通過多個中間人搭建轉賬路徑。

“多跳路由” 能夠增強網絡的靈活性和覆蓋範圍。 不過,發送方需要了解所有的公共節點和通道的狀態。在 Fiber 中,所有公開通道即網絡結構是完全公開的,任何一個節點都可以獲知其它節點掌握的網絡信息。由於閃電網絡中整個網絡的狀態是不斷變化的,Fiber 會使用 Dijkstra 最短路徑算法找到最短路由路徑,讓中間人數量盡可能的少,然後在兩方之間架設轉賬路徑。

img

不過這裡面要解決中間節點的信用問題:你怎麼保證他是誠實的,比如前面提到 Alice 和 Ken 之間有中間人 Bob,Alice 現在要給 Ken 轉賬 100 塊,Bob 隨時可能扣住這筆錢。對此要有辦法防止中間人作惡,HTLC 和 PTLC 便用於解決此類問題。

假設 Alice 要向 Daniel 付款 100 塊,但他們之間沒有建立通道。而 Alice 發現,可以通過 Bob 和 Carol 這兩個中間人向 Daniel 付款。這裡面要引入 HTLC 作為支付渠道,首先 Alice 向 Daniel 發起請求,然後 Daniel 發給 Alice 一個哈希 r,但 Alice 不知道 r 對應的明文 R。

img

之後,Alice 在與 Bob 的通道中,通過 HTLC 構造支付條款:Alice 願意付給 Bob 102 塊,但 Bob 要在 30 分鐘內說出密鑰 R,否則 Alice 會把錢撤回。同理 Bob 再跟 Carol 創建 HTLC:Bob 會向 Carol 支付 101 塊,但 Carol 要在 25 分鐘內說出密鑰 R,否則 Bob 會把錢撤回。

Carol 如法炮製,在和 Daniel 的通道中創建 HTLC:Carol 願意支付 100 塊,但 Daniel 要在 20 分鐘內告訴她 R 的明文,否則錢會被 Carol 收回。

Daniel 明白,Carol 索要的密鑰 R 其實是 Alice 想要的,因為除了 Alice 沒人會在意 R 的內容是啥。所以 Daniel 會配合 Carol,告訴她 R 的內容,並從 Carol 那拿到 100 塊,這樣子 Alice 就實現了目標:給 Daniel 100 塊錢。

之後的事情不難想象:Carol 把密鑰 R 告訴 Bob,拿到 101 塊錢;Bob 再把密鑰 R 告訴 Alice,拿到 102 塊錢。我們觀測所有人的得失,可以看出 Alice 失去 102 塊錢,Bob 和 Carol 淨賺 1 塊錢,Daniel 得到 100 塊。這裡面 Bob 和 Carol 賺的 1 塊錢就是他們從 Alice 那抽的手續費。

img

即使上面的支付路徑中某個人卡住,比如 Carol 沒有把密鑰 R 告知下游的 Bob,也不會讓 Bob 有損失:過時間後 Bob 可以把構建的 HTLC 撤回。對於 Alice 也是同理。

但閃電網絡也有問題:路徑不宜過長,如果路徑太長中間人太多,會降低付款的可靠性。 某些中間人可能離線,亦或是餘額不足以構建特定 HTLC(比如前面案例中每個中間人至少要有 100 多塊錢)。所以在路徑中每增加一個中間節點,都会提高出錯的可能性。

此外,HTLC 可能洩露隱私。 雖然洋蔥路由可以適當保護隱私,比如把每一跳的路由信息都加密,除了最初發起者 Alice 外,每個人只知道相鄰的上下家,不知道完整的路徑,但實際上 HTLC 還是容易被推斷出關聯性。我們以上帝視角看下面這個路徑

img

假設 Bob 和 Daniel 是同一實體控制的兩個節點,每天都會收到很多人發來的 HTLC。他們發現,Alice 和 Carol 每次發來 HTLC 後,要獲知的密鑰總是一致的,而與 Daniel 相連的下家 Eve 總是知道密鑰 R 的內容。因此 Daniel 和 Bob 能猜到,Alice 和 Eve 之間存在支付路徑,因為它們總是和相同的密鑰扯上關係,借此推斷出 Alice 和 Eve 之間的關係並施加監視。

對此,Fiber 採用了 PTLC,在 HTLC 基礎上進行了隱私改良, 支付路徑中每道 PTLC 都用不同的密鑰來解鎖,單純觀測 PTLC 索要的密鑰無法判斷出彼此的關聯性。通過將 PTLC 與洋蔥路由結合,可以讓 Fiber 成為隱私支付的理想方案。

此外,傳統的閃電網絡存在 “替代交易循環攻擊(replacement cycling attack)” 場景,可以讓支付路徑中間人的資產被盜。 這一發現甚至讓開發者 Antoine Riard 退出了閃電網絡的開發工作。到目前為止比特幣閃電網絡尚未有根本措施解決這個問題,已然成為一個痛點。

目前,CKB 官方通過在交易池層面進行改良,可以讓 Fiber 解決上述攻擊場景。由於替代交易循環攻擊及解決方案比較燒腦,本文不打算繼續佔用篇幅做出解釋,感興趣的可以閱讀 BTCStudy 的下述文章以及閱讀 CKB 官方的相關資料:

https://www.btcstudy.org/2023/10/24/how-does-a-lightning-replacement-cycling-attack-work/

總體而言,無論是在隱私還是在安全層面,Fiber 都比傳統的閃電網絡進行了大幅改良。

Fiber 與比特幣閃電網絡間的跨域原子支付#

利用 HTLC 和 PTLC,Fiber 可以和比特幣閃電網絡實現跨域支付,且能夠保證 “跨域行為的原子性”, 即跨域相關的全部步驟要麼全成功,要麼全失敗,不會有部分成功部分失敗的情況。

跨域原子性有了保障後,可以保證跨域本身不會導致財產損失,這樣可以讓 Fiber 與比特幣閃電網絡互聯起來,比如可以在 Fiber 和閃電網絡組成的混合網絡中搭建支付路徑,直接在 Fiber 中向 BTC 閃電網絡中的用戶轉賬(接收端僅限 BTC),還可以在 Fiber 中用 CKB 和 RGB++ 資產在 BTC 閃電網絡中換取等價比特幣。

我們簡單說下原理:假設 Alice 在 Fiber 網絡內運行了節點,而 Bob 在比特幣閃電網絡中運行節點,Alice 想向 Bob 轉賬一些錢,它可以通過跨域中轉商 Ingrid 實現這筆轉賬。Ingrid 會分別在 Fiber 和 BTC 閃電網絡內運行節點,充當轉賬路徑中的中間人。

img

如果 Bob 想收到 0.001 個 BTC,Alice 可以與 Ingrid 協商兌換比率,用 7550 個 CKB 換 0.001 個 BTC。然後 Alice 在 Fiber 中向 Ingrid 發送 7551 個 CKB,而後 Ingrid 在 BTC 閃電網絡中向 Bob 發 0.001 個 BTC,而 Ingrid 會留下 1 個 CKB 作為手續費。

這裡面具體的操作方式,其實就是在 Alice 和 Bob 與 Ingrid 之間建立支付路徑,即 Alice →Ingrid →Bob,然後會用到 HTLC。類似道理其實前面有講過,Bob 為了收到錢,必須告訴 Ingrid 密鑰 R 的內容。一旦 Ingrid 獲取了密鑰 R,就可以解鎖 Alice 鎖在 HTLC 裡的錢。

需要注意,這兩筆分別發生於 BTC 閃電網絡和 Fiber 中的跨域行為是原子性的,意味著要麼兩個 HTLC 都被解鎖,跨域支付順利執行。要麼都不解鎖,跨域支付失敗,而不會出現 Alice 給了錢而 Bob 收不到錢的情況。(其實中間人 Ingrid 可以在知道密鑰 R 後不去解鎖 Alice 的 HTLC,但這樣受損的是 Ingrid 這個中間人,而不是用戶 Alice,所以 Fiber 的設計對於用戶是安全的。)

這種方式不需要信任第三方,即可在不同的 P2P 網絡間實現轉賬行為,幾乎不需要任何修改。

Fiber 相比於 BTC 閃電網絡的其他優點#

前面我們提到,Fiber 支持 CKB 原生資產,以及 RGB++ 資產(尤其是穩定幣),這使得它在即時支付場景中有極大潛力,更適合日常小額支付需求。

此外,比特幣閃電網絡有一個主要痛點,就是流動性管理問題。 大家可能記得我們最開始說的,支付通道中總體餘額是固定的,若其中一方的餘額耗盡,就沒法向對方轉賬,除非對方先轉錢給他,這個時候就要重新注入資金或打開新的通道。

img

此外,如果是在複雜的多跳網絡中,某些中間節點餘額不足無法向外轉賬,可能導致整個支付路徑失敗。這是閃電網絡的痛點之一,對此的解決方案無外乎提供高效的流動性注入方案,確保大多數節點都能隨時注入資金。

但是,在 BTC 閃電網絡中,注入流動性、打開或關閉通道的步驟都在 BTC 鏈上進行,若 BTC 網絡手續費極高,會對支付通道的 UX 產生不良影響。假設你想開啟一個容量為 100 美元的通道,但建立通道的操作花掉 10 美元手續費,那這個通道在初始化時就磨了你 10% 的資金,這是讓大多數人無法接受的;對於流動性注入等工作也是同理。

對此 Fiber 擁有非常顯著的優勢。 首先 CKB 的 TPS 遠比 BTC 高得多,手續費可以達到美分級別;其次,為了應對流動性不足導致無法轉賬的問題,Fiber 計劃與其他團隊合作推出新的解決方案,使得流動性注入的工作可以擺脫鏈上操作,解決 UX 和成本問題。

img

至此,我們系統地梳理了 Fiber 的總體技術架構,其和比特幣閃電網絡的大致對比總結如上圖所示。由於 Fiber 和閃電網絡本身涉及的知識點太多太雜,單純一篇文章可能無法覆蓋到方方面面,未來我們將針對閃電網絡和 Fiber 的話題推出系列文章,大家敬請期待。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。