作者:胡飛瞳
閃電網路是比特幣最成熟的二層解決方案,其理論探索和工程構建已經有接近10年的時間,雖然仍然存在不少弱點,但相對於其他比特幣創新的二層解決方案而言,閃電網路不僅及in是最完善和最成熟,可能也會是其他二層解決方案的一個基礎。本文就閃電網路的技術進行一個簡單介紹,希望能起到一點科普的作用。
引言
在當前比特幣生態突然繁榮、各種創新和項目如雨後春筍般湧現的時候,來談閃電網路似乎有些過時。但如果仔細分析比特幣生態的各種創新,你也不得不承認,閃電網路在設計和工程實踐上都最為完善。閃電網路概念從2015年提出,2016年初白皮書完善並發布,2018年閃電網路誕生落地,並實現你1個BTC的鏈下轉移支付,到2023年底閃電網路節點達到14000個以上,容量達到5000BTC左右。
針對比特幣的低TPS,超長確認時間,以及網路擁塞等問題,閃電網路希望能夠透過鏈下交易,並藉助比特幣自身網路的安全性來解決這三大問題,也就是要實現:
-
交易的即時性;
-
高吞吐量的交易;
-
降低交易費用
當然,對於當前比特幣Layer 2 的一些其他方案,也希望解決一個比特幣網路的另一個重要問題- 圖靈完備合約。這本身對於區塊鏈技術而言不是一個大問題,因為這已經是成熟的技術,關鍵在於如何做到去中心化地比特幣資產轉移和確認,並且借助比特幣網路的安全性。從這個方面來講,還沒有一個能夠取代閃電網路(狀態通道)的完善方案。
閃電網路的一些技術要點
閃電網路透過在比特幣區塊鏈之上創建一個支付通道網路來實現前文所述的三大目標。它主要包含以下一些技術要點:
-
支付通道(Payment Channels):支付通道是閃電網路的核心概念。它允許兩個用戶在不必每次都在比特幣主鏈上發起交易的情況下進行多次交易。用戶首先在比特幣區塊鏈上創建一個多簽名錢包,這個錢包需要兩個用戶的私鑰來進行資金轉移。然後,他們將一定數量的比特幣存入這個錢包,這個存款交易在區塊鏈上確認。
-
鏈下交易(Off-Chain Transactions):一旦支付通道開啟,雙方可以在不與主鏈互動的情況下進行無限次數的鏈下交易。這些交易是透過簽署新的交易來更新通道內資金的分配。這些交易記錄代表了在關閉通道時應該如何分配資金,但在通道開放期間,這些交易不會被廣播到比特幣網路。
-
通道關閉(Channel Closing):當任一方想要取回在通道中的資金時,他們可以關閉支付通道。這透過在比特幣區塊鏈上廣播最終狀態的交易來實現。一旦交易被確認,通道中的資金將根據最後一次鏈下交易的狀態分配給兩方。
-
路由和多跳支付(Routing and Multi-hop Payments):使用者可以透過網路中其他使用者的支付通道發送支付,即使他們沒有直接的支付通道連線。這是透過路由支付透過一個或多個中間節點來實現的。每個中間節點收取微小的費用作為提供流動性的補償。
-
Hash Time-Locked Contracts (HTLCs,哈希時間鎖):為了安全地進行多跳支付,閃電網路使用了HTLCs。這允許創建條件支付,只有在接收方提供支付預像(一個由發送方產生的隨機數的雜湊值)的證明時支付才能完成。這保證了沿途的每個節點只有在確保自己能收到付款的情況下才會轉發付款。
-
網路容量和流動性:雖然閃電網路可以大幅降低交易費用並提高速度,但它的效能也取決於網路的容量和流動性。每個通道的資金容量限制了可以通過該通道發送的最大支付量。此外,資金必須在網路中正確分佈,以便支付可以找到有效的路徑。
-
安全與隱私:閃電網路提高了隱私,因為不需要將所有交易記錄在公共區塊鏈上。然而,它也帶來了新的安全考慮,例如需要用戶定期在線以回應潛在的詐欺嘗試。
閃電網路支付的基本過程
支付通道是閃電網路中最關鍵的組成部分,允許兩個參與者在不必每次都廣播到比特幣主鏈的情況下進行多次交易。雙方透過閃電網路進行多次交易的過程可分為三個步驟:1)開啟支付通道;2)多次鏈下交易;3)關閉通道。以下是從技術角度對支付管道及相關概念的詳細解釋:
支付通道的建立是基於多簽錢包,這是一個需要多個私鑰簽名才能進行交易的特殊類型錢包。在閃電網路中,通常是兩個參與者各持有一個私鑰,共同控制這個錢包。多簽錢包確保沒有一方可以單獨移動資金,只有當雙方同意時才能進行交易。
開啟支付通道:
資金存入:參與者共同創建一個多簽錢包,並從各自的常規錢包向這個多簽錢包發送比特幣。這筆交易在比特幣主鏈上廣播並確認,顯示他們共同對這些資金有控制權。
交易記錄:雙方各自保留一份交易記錄,記錄目前的資金分配。這個交易不會廣播到比特幣網絡,只在雙方之間共享。
鏈下交易:
一旦通道建立,參與者可以進行無限次數的鏈下交易。
交易更新:每進行一次鏈下交易,雙方就更新他們各自保存的最新交易記錄,這個記錄代表了在關閉通道時資金的最終分配方式。
隱私和速度:這些交易僅在雙方之間進行,不需要比特幣網路的確認,所以幾乎是即時的,並且保持私密。
關閉通道:
廣播最終狀態:當任一方想要退出通道時,他們可以廣播他們同意的最後一筆交易到比特幣網路。
結算資金:這筆交易一旦被網路確認,多簽錢包中的資金將根據最後的交易記錄分配給雙方。
支付通道和鏈下交易是閃電網路提高比特幣交易速度和擴展性的關鍵技術。透過這種方式,只有在通道的建立和關閉時,交易才需要在比特幣主鏈上進行確認,而通道一旦開啟,參與者就可以進行無限次數的快速、低成本交易。
那麼大家很自然地可以想到,資金的安全如何保證呢?因為資金只會在關閉通道的時候才回到各自的錢包,那麼如果一方提前關閉通道,或者某方不願意關閉通道,就不能實現一個期望的結算過程。
閃電網路的用戶資金安全主要由以下兩個機制來保障:
-
時間鎖:為了防止詐欺(例如,一方嘗試廣播過時的交易以獲取更多資金),支付通道通常包含時間鎖定機制。如果一方嘗試廣播舊的交易,另一方有時間回應並廣播最新的狀態。
-
監控:參與者需要定期監控網絡,以確保對方沒有嘗試廣播舊的交易。
基本過程例子和結算安全
我們以一個例子來看說明這個基本過程,在這個例子中,用戶A和B希望透過閃電網路來進行多次交易。
第一步- 建立支付通道:交易雙方(例如,Alice和Bob)共同創建一個多簽名(multisig)地址,並向該地址存入初始資金(例如,Alice存入5BTC,Bob存入3BTC)。這項初始交易在比特幣主鏈上確認,標誌著支付通道的建立。
第二步- 雙方進行鏈下交易:一旦支付通道建立,雙方可以開始進行無限次數的鏈下交易,無需每次都在比特幣主鏈上記錄。對於每次鏈下交易,雙方更新一個共同維護的平衡表,來反映當前的資金分配。例如,發生了三次交易:1)A轉給B 1.0BTC;2)B轉給A 0.5BTC;3)A再次轉給B 0.2BTC。
在這些交易之後,根據平衡表,A總共轉給B 0.7BTC,即A:4.3BTC, B:3.7BTC
第三步:A 或B 都可以傳送這最後一個結果,A 轉B 0.7 BTC給多錢位址來關閉頻道;
第四步:等待時間鎖結束;在時間鎖結束前,A 或B 都可以發送更晚的雙方簽名的交易結果來防止任何一方不是發送的最終的交易結果來獲利;
第五步:時間鎖結束,關閉頻道。多簽地址處理最後的交易,並返回資金給A 和B;在這個例子中,A 將獲得4.3BTC,B 將獲得3.7BTC 。
為了防止不誠實方提交舊的狀態,閃電網路鼓勵用戶保持在線或委託第三方監控服務(如「監控塔」)來監視網路中的不誠實行為。如果B發現A試圖提交一個舊的狀態,B可以使用他持有的包含A簽名的最新狀態作為證據,提交給網路以糾正並懲罰A的不誠實行為。
如果A提交了非最新狀態,而B能夠證明存在一個更新的狀態,那麼閃電網路協議允許B不僅收回自己的資金,還可能獲得A的部分或全部資金作為懲罰。這種機制大大增加了嘗試詐欺的成本,從而保護了網路的誠實行為。
路由和多跳支付
前面討論了兩方透過支付通道(狀態通道)來透過鏈下支付提高效率和吞吐量,建立交易費的過程。我們知道,不可能讓有交易的用戶都去建立支付通道,閃電網路可以透過路由和多跳支付來解決這個問題。這類似我們目前的網路系統,每個最終用戶只需要數個自己認可的服務商(相當於網關)來建立狀態通道,而這些服務商之間再建立起狀態通道,這樣形成一個網絡,從而透過多跳支付來實現整個閃電網路中用戶之間的任意互動和轉帳。
讓我們透過一個簡單的例子來說明閃電網路中的路由和多跳支付是如何運作的:假設有四個使用者在閃電網路上:Alice(A)、Bob(B)、Carol(C)和Dave( D)。 Alice有一個支付通道直接連接到Bob,Bob有一個通道連接到Carol,Carol又有一個通道連接到Dave。現在,Alice想要發送一筆支付給Dave,但她和Dave之間沒有直接的支付管道。
步驟1: 尋找路由
Alice的客戶端使用閃電網路的路由演算法來找到一條到達Dave的路徑。在這個例子中,最簡單的路徑是Alice -> Bob -> Carol -> Dave。
步驟2: 建立支付
Alice決定寄0.01 BTC給Dave。她的客戶端創建一個支付請求,這個請求包含了付款的細節和一個特殊的數字——支付預像(Dave創建的隨機數)的雜湊值。
步驟3: 使用HTLCs
為了安全地進行多跳支付,每個中間節點(Bob和Carol)都會創建一個HTLC。 HTLC允許中間節點轉發支付,但只有在他們知道支付預像的情況下才能最終獲得資金。這確保了支付只有在完全到達Dave時才能最終解鎖。
步驟4: 轉發支付
-
Alice首先將付款發送給Bob,鎖定在一個HTLC中。
-
Bob看到這個支付要轉發給Carol,所以他創建一個新的HTLC並發送給Carol。
-
Carol做同樣的事情,創建一個HTLC並發送給Dave。
在每一步,支付都被鎖在一個新的HTLC中,每個節點都只有在知道支付預像時才能解鎖這些資金。
步驟5: 解鎖支付
-
一旦Dave收到了支付,他會提供支付預像給Carol,解鎖他那裡的HTLC並獲得資金。
-
Carol使用這個支付預像解鎖Bob發給她的HTLC,並將支付預像發送給Bob來解鎖她應得的資金。
-
Bob最後用支付預像解鎖Alice給他的HTLC,完成整個支付過程。
步驟6: 確認和關閉
一旦整個支付鏈完成,所有中間HTLCs都被解鎖,每個人都收到了他們應得的資金。支付被確認,所有參與節點更新了他們的支付通道狀態。
閃電網路的優劣勢及發展前景分析
根據前面的介紹,我們可以說,閃電網路從技術上解決了比特幣網路的一些問題,並具有優勢:即時交易,低交易費用,高可擴展性和高交易頻率,更好的隱私保護以及對微支付的支持。正因如此,透過閃電網路等技術創新,比特幣才有可能成為真正的電子現金,而不是僅僅作為儲值貨幣。
但同時,我們也看到閃電網路的技術複雜性。同時一個網路的建構不只是技術因素,使用者的認可度和採用率也非常關鍵。儘管比特幣得到更廣泛的價值認可,但是,閃電網路整體容量還不高,在其發展過程中,以下一些弱點會是阻礙因素:
-
線上要求:為了接收支付,用戶的裝置需要保持在線,以便即時回應可能的支付請求或詐欺嘗試。
-
資金鎖定:在支付通道中的資金在通道關閉之前會被鎖定,這意味著資金在一定時間內無法自由使用。
-
複雜性和使用者體驗:設定和管理支付通道可能對一般使用者來說比較複雜,尤其是涉及到通道的資金管理和路由選擇等問題。
-
網路流動性和路由挑戰:雖然理論上閃電網路可以處理大量的交易,但實際上其效率高度依賴網路中支付通道的分佈和資金流動性。找到有效的支付路徑有時可能是挑戰。
-
中央化風險:雖然閃電網路旨在是去中心化的,但存在大節點或中心化服務提供者可能控制較大流量的風險,這可能導致網路的某種程度中央化。
隨著比特幣生態的發展,儘管有各種BTC Layer2 的方案出台,但同時,整體的發展也為閃電網路帶來前所未有的機會。如果閃電網路的佈局者在使用者體驗、網路規模以及與其他技術相結合的方面有較大的突破的話,相信閃電網路會迎來一個春天。