加密貨幣具有顯著特性,不易遭駭客攻擊或關停。所有人都能透過加密貨幣在全球範圍內傳輸價值,無需第三方介入。
為確保這些特徵保持不變,須付出巨大代價。由於運作加密貨幣的節點眾多,導致吞吐量受限。因此,雖是致力於大眾普及的技術,但區塊鏈網路能處理的每秒交易量(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的友誼吧)。
上述系統很枯燥單調,與目前的受信任設定相比,沒有什麼過人之處。我們接下來介紹的機制可強制執行Alice與Bob之間的“合約”,就會有趣得多。如果其中一方不按規則行事,則另一方可採取補救措施,將資金撤出通道。
此機制稱為“哈希時間鎖合約”,或縮寫為“HTLC”。這個術語聽起來令人生畏,但其實是個非常簡單易懂的概念。它結合了哈希鎖和時間鎖兩種技術,對支付通道中各種拒不配合的操作採取補救措施。
雜湊鎖是加在交易中的條件,具體需證明自己知道某個秘密才能動用資金。發送方對一段資料進行哈希運算,並將帶有哈希值的交易傳送給接收方。接收方只有提供出與雜湊值相符的初始資料(即秘密),才能動用資金。唯一能取得該資料的途徑是由發送方告知。
時間鎖是防止在特定時間前動用資金的限制條件,可指定具體時間,或特定區塊高度。
哈希時間鎖合約(HTLC)透過結合哈希鎖和時間鎖而創建。在實際運用中,雜湊時間鎖合約(HTLC)可用於建立條件支付,即接收者須在特定時間前提供某個秘密,否則發送方收回資金。以下透過範例解釋會更淺顯易懂。那麼,讓我們說回Alice和Bob。
我們之前舉了例子,設想Alice和Bob剛建立交易,雙方向共享的多重簽名地址存入資金。但這些交易還沒發佈到區塊鏈當中!我們需要先做一件事。
三枚代幣來自Bob,還有三枚代幣則來自Alice。
請記住,從多重簽名中取出這些代幣的唯一方法是Alice和Bob共同簽署交易。如果Alice要把全部六枚代幣送到外部地址,需獲得Bob批准。她先發起一筆交易,指明“將六枚比特幣發送到該地址”,然後加上自己的簽名。
如果她嘗試立即發布交易,但沒有Bob的簽名包含其中,則交易無效。 Alice須先將不完全交易交給Bob。他簽名之後,交易才生效。
到此為止,我們還沒建立督促眾人誠信交易的機制。如前文所述,如果交易對手拒絕合作,資金就會徹底困住。讓我們來了解預防此類情況的機制。機制涉及多步驟操作,請耐心聽我們逐一介紹。
雙方各提供一個秘密,我們稱之為“As”和“Bs”。雙方一旦透露秘密,結果不堪設想。因此,他們暫時要保守秘密。兩個秘密分別產生各自的秘密雜湊值,即h(As)和h(Bs)。這樣雙方無需分享秘密,只需彼此分享哈希值。
Alice與Bob互相分享秘密雜湊值。
Alice和Bob在向多重簽名地址發布首筆交易之前,還需創建一系列承諾交易,即防止對方扣押資金的補救措施。
如果把通道想像成我們之前提過的迷你帳本,那麼承諾交易就是對帳本的更新。每當創造一組新的承諾交易,就是在對二位參與者的資金進行再平衡。
Alice的交易有兩個輸出,一個支付她擁有的地址,另一個鎖進新的多重簽名地址。她簽名後交給Bob。
Alice的交易有兩個輸出,一個到她自己的地址,另一個到新的多重簽名,且需Bob簽名才能生效。
Bob的情況一樣,一個輸出支付自己,另一個支付其他的多重簽名地址。他簽名後交給Alice。
兩筆大同小異的不完全交易。
通常而言,Alice可在給Bob的交易中加入簽名,讓交易生效。但我們注意到,這些支出資金來自於尚未撥款的的2取2多重簽名。這類似於試圖從目前餘額為零的帳戶中支出支票。因此,這些部分簽署的交易只有在多重簽名啟動和運行後才能使用。
新的多重簽章位址,即3 BTC輸出的目的地,具有一些特性。我們來看看Alice簽名給Bob的不完全交易。多重簽章輸出可在以下條件下使用:
對於Bob給Alice的交易:
請記住,雙方皆不知道彼此的秘密,因此第3點暫時無法實現。另一個注意事項是,如一方簽署了交易,交易對手就能夠立即動用資金,因為他們的輸出未設定任何條件限制。簽署方需等到時間鎖到期才能自行花銷資金,或與對方合作直接共同花錢。
一切順利!現在就能把交易發佈到初始的2取2多重簽名位址中去。這樣做是安全的,因為您可以在交易對手放棄該通道時收回資金。
交易確認後,通道將開啟並運作。第一對交易顯示的是迷你帳本的目前狀態。這時,帳本向Bob支付3 BTC,並同樣向Alice支付3 BTC。
Alice要向Bob支付新款項時,兩人會創建兩筆新的交易來取代第一組交易。操作方式如出一轍,這筆交易會由各簽署一半。只是Alice和Bob要先放棄他們的舊秘密,並為下一輪交易交換新的哈希值。
例如,Alice要付錢給Bob1 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處。實際操作時,她一定會選擇最方便的頻道。
中間機構在通道中起到一定作用,會收取少量費用,但非強制收取。閃電網路尚處於新興階段,收費市場還未成形。許多人期望能夠基於流動性收取費用。
在基礎鏈中,用戶需根據佔用的區塊空間來支付費用,但與傳輸的價值無關。也就是說,支付1美元與1000萬美元的費用是相同的。與之相反,閃電網路沒有區塊空間一說。
但是,存在本地餘額和遠端餘額的概念。本地餘額是指一方可“推送”到通道另一端的金額,而遠端餘額則是指交易對手可推送回本地一方的金額。
再來舉個例子。以下我們將詳細了解上述其中一條路徑:Alice <> Carol <> Frank。
Alice轉帳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
在眾多不同的節點實作當中,Blockstream的c-lightning、閃電實驗室(Lightning Labs)的閃電網路守護程式(Lightning Network Daemon)以及ACINQ的Eclair特別熱門。針對不太精通科技的用戶,許多公司推出了即插即用節點。用戶只需接通設備電源,就能開始使用閃電網路。
閃電網路主網於2018年上線,儘管許多人認為它仍處於測試階段,但該網絡已經呈現出驚人的發展勢頭。
目前,只有具備一定技術熟練程度的使用者才會操作閃電網路節點,因此網路仍需攻克一些可用性障礙。隨著網路大力開發,進入門檻正在逐漸降低。
只要問題順利解決,閃電網路將成為比特幣生態系統中不可或缺的一部分,大幅提升可擴展性和交易速度。