導語

加密貨幣具有顯著特性,不易遭黑客襲擊或關停。所有人都能通過加密貨幣在全球範圍內傳輸價值,無需第三方介入。

爲確保這些特徵保持不變,須付出巨大代價。由於運行加密貨幣的節點衆多,導致吞吐量受限。因此,雖是致力於面向大衆普及的技術,但區塊鏈網絡能處理的每秒交易量(TPS)相對較低。

爲打破區塊鏈技術的固有侷限性,各種可擴展性解決方案紛紛涌現,以提升網絡可處理的交易數量。在本文中,我們將深入探討比特幣協議的一種擴展,即閃電網絡。


什麼是閃電網絡?

閃電網絡運行在區塊鏈之上,旨在加速點對點交易。該網絡的運用不僅侷限於比特幣,諸如萊特幣等加密貨幣也集成其中。

我們可能會產生困惑,“在區塊鏈之上”是什麼意思?閃電網絡即所謂的鏈下或Layer 2解決方案。個人可通過該網絡交易,且無需在區塊鏈中記錄每筆交易。

閃電網絡獨立於比特幣網絡,擁有自主節點和軟件,但仍需與主鏈通信。如要進出閃電網絡,需在區塊鏈中創建特殊交易。

個人的首筆交易實際上是在與其他用戶建立一種智能合約。稍後我們會詳細介紹。現在,我們先把智能合約設想爲與其他用戶共持的私人賬本。用戶可在這本賬本中寫入多筆交易。這些記錄僅對用戶與交易對手可見,且基於設置的特性,雙方無法作假。

這種迷你賬本稱之爲“通道”。例如,Alice和Bob分別向智能合約投入5 BTC。他們的通道中此刻各自有5 BTC的餘額。然後,Alice寫入賬本“向Bob支付1 BTC”。現在,Bob有6 BTC,Alice餘4 BTC。Bob日後又將2 BTC發還給Alice。餘額更新後,Alice有6 BTC,而Bob剩4 BTC。他們可以這樣持續操作一陣。

任意一方隨時可將通道當前的狀況發佈到區塊鏈中。屆時,通道兩端的餘額分配到雙方各自的鏈上地址。

顧名思義,閃電交易快如閃電。無需等待區塊確認,即可在互聯網連接允許時快速支付。


閃電網絡爲何必要?

截至目前,閃電網絡(或簡稱“LN”)似乎是應對比特幣區塊鏈可擴展性最合理的方式。在如此龐大的生態系統中協調變化十分棘手,因爲要面臨硬分叉和潛在災難性漏洞等風險。保護鉅額價值安全是當務之急,而實驗極爲危險。

如果要把實驗從區塊鏈中移除,就必須更具靈活性。這樣稍出差錯,也不會對比特幣網絡造成實質影響。Layer 2解決方案不會破壞維持該協議運行10年以上的任何安全假設。

而且,沒有必要改變慣有的操作方式。這樣終端用戶的鏈上交易照常進行,現在還多了鏈下交易選擇。

使用閃電網絡有諸多好處。我們將重點介紹以下幾點。 


可擴展性

比特幣區塊大約每十分鐘創建一次,且容納交易數量有限。區塊空間屬於稀缺資源,因此用戶之間須相互競價,才能保證自己的交易及時納入區塊空間。礦工最關心的是獲取報酬,因此他們會優先納入手續費更高的交易。

假設沒有多名用戶試圖同時發送資金,這其實並不會成爲問題。您可以將手續費設置得較低,這樣交易可能會納入到下一個區塊。但是,所有人同時發佈交易時,就會導致平均手續費大幅上漲,偶爾會超過5美元。在2017年牛市鼎盛時期,手續費甚至突破了50美元。


比特币平均交易手续费(以美元为单位)

比特幣平均交易手續費(以美元爲單位)


這對於價值數千美元的比特幣交易而言,似乎微不足道。但小額支付卻舉步維艱。誰會願意爲買一杯3美元的咖啡而額外支付5美元呢?

使用閃電網絡仍需支付兩項費用,即開啓和關閉通道的費用。通道開啓後,用戶和交易對手可免費進行數千筆交易。交易完成後,只需將最終狀態發佈到區塊鏈。

從宏觀角度來看,如果有更多人選擇閃電網絡等鏈下解決方案,區塊空間的使用效率將得到提高。小額、高頻次的轉賬通過支付通道進行,而區塊空間則用於大額交易和通道開啓/關閉。如此一來,訪問系統的用戶羣體數量增加,可擴展性進而獲得長久發展。


小額支付

比特幣設有最低交易金額,約爲0.00000546 BTC。截至本文撰稿時,約等值於四美分。這已經是很小的數額,但閃電網絡將交易限額壓得更低,按目前最小的單位來算,爲0.00000001 BTC,或一聰。

閃電網絡對小額支付更具吸引力。按照常規交易的費用,在主鏈上發送小金額顯得不切實際。然而在通道內,則可免費發送比特幣的微小零頭。

小額支付適用於衆多用例。有人預測小額支付會成爲訂閱服務模式的有效替代方案,這樣用戶只需就每次使用的服務支付很小的金額。


隱私

閃電網絡的第二個好處是用戶信息的保密程度更高。各方無需在網絡上擴散自己的通道信息。區塊鏈中可能會顯示“該交易開啓了通道”,但不會透露交易詳情。如果參與者選擇將通道設爲私密狀態,則交易進展僅本人可見。

假設Alice和Bob共享通道,Bob又與Carol共享另一個通道,則Alice和Carol可通過Bob相互發送付款。如果Dan與Carol建立連接,Alice同樣可向他發送付款。試想將這種模式擴展到支付通道相互連接的龐大網絡中。按照這樣的設置,只要通道關閉,就無法確定Alice究竟向誰發送了資金。


閃電網絡如何運作?

我們已經解釋了閃電網絡如何依賴高層次上各節點的通道。現在研究一下其底層的具體原理。


多重簽名地址

多重簽名(或英文簡稱“multisig”)是可供多個私鑰支付的地址。用戶創建多重簽名後,就能指定用於支付資金、簽署交易所需的私鑰數量。例如,5取1方案指五個密鑰生成一個有效簽名,且簽署交易僅需一個密鑰。3取2方案表示,如有三個密鑰,需其中兩個才能支付費用。

要預置閃電網絡通道,參與者需在2取2方案中鎖定資金,即僅需兩個私鑰用以簽署交易,而轉移代幣同樣需要兩個私鑰。讓我們回到Alice和Bob的示例。接下來幾個月內,他們需相互支付大筆費用,因此,他們決定開啓閃電網絡通道。

首先,他們在共有的多重簽名地址中分別存入3 BTC。需特別強調的是,未經Alice同意,Bob無法把資金轉出地址,反之亦然。 

他們只需在調整兩邊餘額時留下一紙記錄。雙方各自擁有3 BTC的初始餘額。如果Alice想向Bob支付1 BTC,爲何不直接記下Alice現有2 BTC,而Bob的餘額爲4 BTC呢?在決定真正轉出資產之前,這樣記錄可以追蹤到餘額。

這種方式行之有效,但其中有什麼奧妙呢?其實更重要的是,這樣是不是讓彼此合作變得易如反掌了呢?假設Alice最終擁有6 BTC,而Bob空無分文,那麼Bob拒絕釋放資金就不會有任何損失(或許失去的只是與Alice的友誼吧)。


哈希時間鎖合約(HTLC)

上述系統很枯燥單調,與目前的受信任設置相比,沒有什麼過人之處。我們接下來介紹的機制可強制執行Alice與Bob之間的“合約”,就會有趣得多。如果其中一方不按規則行事,則另一方可採取補救措施,將資金撤出通道。

這種機制稱爲“哈希時間鎖合約”,或縮寫爲“HTLC”。這個術語聽上去令人生畏,但實際上是個非常簡單易懂的概念。它結合了哈希鎖和時間鎖兩種技術,對支付通道中各種拒不配合的操作採取補救措施。

哈希鎖是加在交易中的條件,具體需證明自己知道某個祕密才能動用資金。發送方對一段數據進行哈希運算,並將帶有哈希值的交易發送給接收方。接收方只有提供出與哈希值匹配的初始數據(即祕密),才能動用資金。唯一能獲取該數據的途徑是由發送方告知。

時間鎖是防止在特定時間前動用資金的限制條件,可指定具體時間,或特定區塊高度。

哈希時間鎖合約(HTLC)通過結合哈希鎖和時間鎖而創建。在實際運用中,哈希時間鎖合約(HTLC)可用於創建條件支付,即接收方須在特定時間前提供某個祕密,否則發送方收回資金。以下通過示例解釋會更加淺顯易懂。那麼,讓我們說回Alice和Bob。


開啓和關閉通道

我們之前舉了例子,設想Alice和Bob剛創建交易,雙方向共享的多重簽名地址存入資金。但是這些交易還沒發佈到區塊鏈當中!我們需要先做一件事。


三枚代币来自Bob,还有三枚代币则来自Alice。

三枚代幣來自Bob,還有三枚代幣則來自Alice。


請記住,從多重簽名中取出這些代幣的唯一途徑是Alice和Bob共同簽署交易。如果Alice要把全部六枚代幣發送到外部地址,需獲得Bob批准。她先發起一筆交易,指明“將六枚比特幣發送到該地址”,然後加上自己的簽名。 

如果她嘗試立即發佈交易,但沒有Bob的簽名包含其中,則交易無效。Alice須先將不完全交易交給Bob。他簽名之後,交易才生效。

到此爲止,我們還沒建立督促衆人誠信交易的機制。正如前文所述,如果交易對手拒絕合作,資金就會徹底困住。讓我們來了解一下預防此類情況的機制。該機制涉及多步驟操作,請耐心聽我們逐一介紹。

雙方各提供一個祕密,我們稱之爲“As”和“Bs”。雙方一旦透露祕密,結果不堪設想。因此,他們暫時要保守住祕密。兩個祕密分別生成各自的祕密哈希值,即h(As)和h(Bs)。這樣雙方無需分享祕密,只需彼此分享哈希值。


Alice与Bob相互分享秘密哈希值。

Alice與Bob相互分享祕密哈希值。


Alice和Bob在向多重簽名地址發佈首筆交易之前,還需創建一系列承諾交易,即防止對方扣押資金的補救措施。

如果把通道想象成我們之前提過的迷你賬本,那麼承諾交易就是對賬本的更新。每當創建一組新的承諾交易,就是在對二位參與者的資金進行再平衡。

Alice的交易有兩個輸出,一個支付她擁有的地址,另一個鎖進新的多重簽名地址。她簽名後交給Bob。


Alice的交易有两个输出,一个到她自己的地址,另一个到新的多重签名,且需Bob签名才能生效。

Alice的交易有兩個輸出,一個到她自己的地址,另一個到新的多重簽名,且需Bob簽名才能生效。


Bob的情況一樣,一個輸出支付自己,另一個支付其他的多重簽名地址。他簽名後交給Alice。


两笔大同小异的不完全交易。

兩筆大同小異的不完全交易。


通常而言,Alice可在給Bob的交易中添加簽名,讓交易生效。但是我們注意到,這些支出資金來自於尚未撥款的的2取2多重簽名。這類似於試圖從目前餘額爲零的賬戶中支出支票。因此,這些部分簽名的交易只有在多重簽名啓動和運行後才能使用。 

新的多重簽名地址,即3 BTC輸出的目的地,具有一些特性。我們來看一下Alice簽名給Bob的不完全交易。多重簽名輸出可在以下條件下使用:

  1. 雙方可以合作簽署交易。

  2. 由於有時間鎖,Bob在一段時間後才能自行花銷。

  3. Alice如果知道Bob的祕密Bs,就能夠動用資金。

對於Bob給Alice的交易:

  1. 雙方可以合作簽署交易。

  2. Alice在一段時間後方可自行花銷。

  3. Bob如果知道Alice的祕密As,就能夠動用資金。

請記住,雙方均不知道彼此的祕密,因此第3點暫時無法實現。另一個注意事項是,如一方簽署了交易,交易對手就能夠立即動用資金,因爲他們的輸出未設置任何條件限制。簽署方需等到時間鎖到期才能自行花銷資金,或與對方合作直接共同花銷。

一切順利!現在就能把交易發佈到初始的2取2多重簽名地址中去。這樣做是安全的,因爲您可以在交易對手放棄該通道時收回資金。

交易確認後,通道將開啓並運行。第一對交易顯示的是迷你賬本的當前狀態。這時,賬本向Bob支付3 BTC,並同樣向Alice支付3 BTC。 

Alice要向Bob支付新款項時,兩人會創建兩筆新的交易來取代第一組交易。操作方式如出一轍,這筆交易會由各自簽署一半。只是Alice和Bob要先放棄他們的舊祕密,併爲下一輪交易交換新的哈希值。


例如,Alice要向Bob支付1 BTC,两笔新交易会把2 BTC存给Alice,而4 BTC给Bob。这样,余额就会更新。

 例如,Alice要向Bob支付1 BTC,兩筆新交易會把2 BTC存給Alice,而4 BTC給Bob。這樣,餘額就會更新。


雙方均可隨時簽署和發佈最近的一筆交易並在區塊鏈完成“結算”。然而,簽署發佈方需等待時間鎖到期,而另一方可馬上花銷費用。請記住,如果Bob簽署和發佈了Alice的交易,她就能擁有一次無條件輸出。

雙方可達成共識同時關閉通道,即合作關閉。這是資金返回鏈上最便捷的途徑。但是,如有一方沒有迴應或拒絕合作,另一方可在時間鎖到期後收回資金。



想要開啓加密貨幣之旅嗎?立即前往幣安購買比特幣吧!



閃電網絡如何預防作假?

我們可能會注意到此處存在攻擊向量。假設Bob現有餘額爲1 BTC,要怎樣才能阻止他發佈餘額更高的舊交易?畢竟他已經從Alice那裏拿到了半簽名的交易,他只需加上自己的簽名就可以發佈了,對吧?

沒有任何措施能阻止他這樣操作。但如果真要這麼做,他可能會損失全部餘額。假設他確實發佈了舊交易,交易內容是向Alice支付1枚代幣,並向我們此前提到的多重簽名地址支付5枚代幣。

Alice馬上就會收到代幣,但Bob必須等到時間鎖到期才能從多重簽名地址進行花銷。是否記得我們上面提過,還要具備另一個條件,Alice才能立即動用同一筆資金?她需要一個自己當時不掌握的祕密。但是現在她已經知道這個祕密了——第二輪交易剛剛創建,Bob泄露了這個祕密。

在Bob只能靜待時間鎖到期時,Alice就能挪走所有資金。這種帶有懲罰性質的機制確保參與者不會打歪主意試圖作假,否則交易對手將獲得他們的代幣。


通道支付

我們之前說到過這個問題,通道之間可以建立連接,否則閃電網絡無法有效支持支付功能。試想我們是否真的會預存500美元到同一家咖啡店,就爲了接下來幾個月每天都去喝上一杯?

其實完全沒有必要這樣做。 Alice和Bob開啓了通道,Bob和Carol也已建立通道,那麼Bob就能通過通道向二者付款。Alice通過這種方式跨越多個“跳點”,就能支付到路徑中的所有人。


在这种情况下,Alice可通过多通道抵达Frank处。实际操作时,她一定会选择最便捷的通道。

在這種情況下,Alice可通過多通道抵達Frank處。實際操作時,她一定會選擇最便捷的通道。


中間機構在通道中起到一定作用,會收取少量費用,但非強制收取。閃電網絡尚處於新興階段,收費市場還未成形。許多人期望能夠基於流動性收取費用。 

在基礎鏈中,用戶需根據佔用的區塊空間來支付費用,但與傳輸的價值無關。也就是說,支付1美元與1000萬美元的費用是相同的。與之相反,閃電網絡沒有區塊空間一說。 

但是,存在本地餘額和遠程餘額的概念。本地餘額是指一方可“推送”到通道另一端的金額,而遠程餘額則是指交易對手可推送回本地一方的金額。

再來舉個例子。下面我們詳細瞭解一下上述其中一條路徑:Alice <> Carol <> Frank。


Alice向Frank转账0.3 BTC之前和之后各位用户的余额。

Alice向Frank轉賬0.3 BTC之前和之後各位用戶的餘額。


Alice <> Carol和Carol <> Frank兩條路徑各有1 BTC的總容量。Alice的本地餘額爲0.7 BTC。大家此時在區塊鏈中結算,則Alice收到0.7 BTC,Carol收到0.3 BTC的遠程餘額。

假設Alice要向Frank發送0.3 BTC,她會向Carol通道一側推送0.3 BTC。然後Carol從自己的本地餘額經通道向Frank推送0.3 BTC。最終,Carol的餘額保持不變:來自Alice的+0.3 BTC和發送至Frank的-0.3 BTC相互抵消。

Carol充當Frank的中間連接沒有損失價值,但是自己的資金支配靈活性變差。可以看到,她目前在與Alice的通道中可花銷0.6 BTC,但在與Frank的通道端只能支配0.1 BTC。

我們設想一種情況,Alice只與Carol連接,而Frank連接的網絡範圍更廣。此前,Carol通過Frank可向他人共計發送0.4 BTC,但現在她的通道一端只有0.1 BTC可供向外推送。

在這種情況下,Alice實際上正在蠶食Carol的資金流動性。在沒有任何激勵的情況下,Carol並不想讓自己處於劣勢。因此,她可能會提出“從我的通道每輸出0.01 BTC,我將收取10聰的費用”。 這樣一來,Carol在“較強”路徑中捨棄的本地餘額越高,賺得就越多。

如前所述,這裏並沒有事實上的收費要求。有人並不擔心流動性變差,而有人只想與接收者直接開啓通道。


閃電網絡的侷限性

如果事實證明,閃電網絡能讓比特幣所有可擴展性問題迎刃而解,就皆大歡喜。但很遺憾,閃電網絡存在着阻礙自身發展的缺點。 


可用性

對於初學者而言,比特幣並不是最直觀的系統,地址、費用等等,可能都會讓人摸不着頭緒。但是錢包則抽離了這些複雜的內容,爲用戶提供與現有支付系統較爲相似的操作。我們可以讓他人下載智能手機錢包,並向他們發送代幣。這樣他們會很願意去完成操作。

閃電網絡目前無法做到這一點,其智能手機應用程序選擇還十分有限。通常來說,閃電網絡節點需訪問比特幣節點才能充分使用。

設置好客戶端之後,用戶還需開啓通道才能進行支付。這個過程非常耗時,尤其當新人接觸到“入站/出站容量”等概念,更是一頭霧水。

所以說,閃電網絡還需不斷改進,降低准入門檻,讓用戶獲得更流暢的體驗。


流動性

閃電網絡的一大詬病在於用戶的交易能力受到了限制。個人支出不能超過鎖定在通道中的金額。如果有人要支出所有資金,把通道的所有資金轉到遠程餘額,則必須關閉該通道。或者,被動等待他人通過該通道進行支付,但這並不是理想的方式。

個人路徑受限於通道總容量。以此前的Alice <> Carol <> Frank爲例。如果Alice和Carol的通道有5 BTC的容量,而Carol和Frank的容量僅爲1 BTC,那麼Alice永遠無法發送超過1 BTC的金額。即便如此,所有餘額需在Carol <> Frank通道的Carol一端才能保證閃電網絡的正常運作。這會嚴重限制通過閃電網絡通道傳輸的資金量,繼而連帶影響到網絡的實用性。


中心化樞紐

基於前面提到的問題,有人擔心這樣的網絡會催生出大量“樞紐”,即具有強勁流動性且密切關聯的大型實體,讓所有大額支付都通過這些實體通道。

顯然,這種發展勢頭並不是好現象。中心化樞紐會削弱系統,因爲這些實體離線會嚴重擾亂用戶之間的關係。此外,由於只有少數幾個點進行交易,審查風險隨之增加。


閃電網絡的現狀

截至2022年3月,閃電網絡的運作一切正常,擁有超過3.5萬個在線節點,8.5萬多個活躍通道,並且容量突破3,570 BTC。


闪电网络节点的全球分布。资料来源:explorer.acinq.co

閃電網絡節點的全球分佈。資料來源:explorer.acinq.co


在衆多不同的節點實現當中,Blockstream的c-lightning、閃電實驗室(Lightning Labs)的閃電網絡守護進程(Lightning Network Daemon)以及ACINQ的Eclair尤爲熱門。針對不太精通技術的用戶,許多公司推出了即插即用節點。用戶只需接通設備電源,就能開始使用閃電網絡。


總結

閃電網絡主網於2018年上線,儘管許多人認爲它仍處於測試階段,但該網絡已經呈現出驚人的發展勢頭。

目前,只有具備一定技術熟練程度的用戶纔會操作閃電網絡節點,因此網絡仍需攻克一些可用性障礙。隨着網絡大力開發,准入門檻正在逐漸降低。 

只要問題得以順利解決,閃電網絡將成爲比特幣生態系統中不可或缺的一部分,大大提升可擴展性和交易速度。