系統解讀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支付網絡的完善與進步。毫無疑問這是一個空前宏大的故事。

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

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

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

Fiber的整體架構包括以下四個核心部分:支付通道、WatchTower、多跳路由、跨網域支付。以下我們先展開解釋下最重要的「支付通道」。

閃電網路與Fiber的基石:支付通道

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

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

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

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

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

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

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

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

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

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

這筆承諾交易由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。

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

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

前面我們解釋過,每筆承諾交易都要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要趕在時間鎖範圍內行動)。

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

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

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

(圖片來源:Dapangdun)

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

全天候的保全:WatchTower瞭望塔

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

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

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

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最短路徑演算法找到最短路由路徑,讓中間人數量盡可能的少,然後在雙方之間架設轉帳路徑。

不過這裡面要解決中間節點的信用問題:你怎麼保證他是誠實的,比如前面提到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。

之後,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就實現了目標:給Carol 100塊錢。

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

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

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

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

假設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官方的​​相關資料。

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

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

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

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

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

如果Bob想收到1個BTC,Alice可以與Ingrid協商兌換比率,例如用1個CKB換1個BTC。 Alice可以在Fiber中向Ingrid發送1.1個CKB,而後Ingrid在BTC閃電網路中向Bob發1個BTC,而Ingrid會留下0.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++資產(尤其是穩定幣),這使得它在即時支付場景中有極大潛力,更適合日常小額支付需求。

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

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

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

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

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

Total
0
Shares
Related Posts