
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的話題推出系列文章,大家敬請期待。