· RSMC 交易構造
圖 3:懲罰交易,來源:https://blocking.net/1516/bitcoin-lightning-network-rsmc/
反之,在 C1b 的第一個輸出 RD1b 中,Bob 把自己的另一個私鑰 Bob2 交給 Alice,這意味著 Bob 放棄 C1b 而認可 C2b。類似地,Alice 可以構造懲罰交易對 Bob 進行反制。
由上面不難看出,seq 變數提供了一個實施懲罰和反制的時間視窗。
· RSMC 交易終止
關閉支付通道,並根據雙方最終認可的資金分配方案構造交易並廣播。
HTLC
RSMC 已可以滿足基礎清算要求,但也存在明顯的侷限性:透過 RSMC 方案進行結算的雙方,必須建立直連的支付通道才能支付。基於此痛點,閃電網路需要另一個協議 HTLC。
HTLC 支援「條件支付」(Conditional Payment),透過多個首尾相連的支付通道串聯起來形成的支付路徑,支援首尾雙方透過支付路徑完成支付。
HTLC 的核心是時間鎖和 Hash 鎖。時間鎖是交易雙方約定在某個時間 T 之內提交才有效,超時則承諾方案失效(無論是提出方或接受方)。雜湊鎖可以理解為,對一個雜湊值 H,提供原像 R,使得 Hash(R) = H,承諾有效;否則失效。如果支付交易因為各種原因未能成功,時間鎖能夠讓交易參與各方收回自己的資金,避免欺詐行為。
假設 Alice 想要開啟一個與 Bob 的交易,交易金額為 0.5 BTC,但 Alice 需要透過 Carol 才能與 Bob 建立通道進行交易(圖 4):
第一步:Bob 設定原像 R (也被稱為暗示數),把雜湊值 H=Hash(R) 告訴 Alice。
第二步:Alice 透過 HTLC 向 Carol 進行條件支付:當且僅當 Carol 在 T 時刻前提供與雜湊值 H 對應的原像,Alice 才向 Carol 支付 0.5 BTC。類似地,Carol 透過 HTLC 向 Bob 進行條件支付:當且僅當 Bob 在 t 時刻前提供與雜湊值 H 對應的原像,Carol 才向 Bob 支付 0.5 BTC。其中,t<T。
第三步:Bob 在 t 時刻前向 Carol 提供 R,獲得 0.5 BTC,此時 Carol 知悉 R。反之,0.5 BTC 會返回給 Carol,Carol 不會遭受任何損失。
第四步:Carol 在 T 時刻前向 Alice 提供 R,獲得 0.5 BTC。反之,0.5 BTC 會返回給 Alice,Alice 不會遭受任何損失。
可以看出兩點:第一,在 HTLC 下,支付要麼完成,要麼完不成但不會對參與者造成損失,因此是「原子式」的(Atomic),這是序貫博弈均衡的結果;第二,原像 R (資訊)和資金相向流動,原像 R 可以被視為收據(Receipt)。
總的來說,RSMC 保障兩個人之間的直接交易可以在鏈下完成,HTLC 保障任意兩個人之間的轉賬都可以透過一條首尾相接的支付通道來完成。閃電網路整合這兩種機制,即可實現任意兩個人之間的交易都在鏈下完成。在整個交易中,智慧合約起到了中介的重要角色,而區塊鏈網路則確保最終的交易結果被確認。
路由
閃電網路使用源路由和洋蔥路由。透過源路由,源節點負責計算從源到目的地的整條支付路徑。為此,源節點需要下載完整的公開支付通道表,以便計算出一條支付路徑,並根據這條支付路徑涉及的所有通道的負載量來計算手續費和所需條數。在點對點交易中,這個過程會涉及到大量資料,而且資料量還會隨著網路擴大而增加。而洋蔥路由則讓交易鏈中間節點無法得知整個交易發起或接受方,保障了使用者隱私。
由於 HTLC 的時限性,交易達成速度不夠快就會失效,因此提高交易傳播速度對閃電網路效率非常重要。而要提高交易傳播速度,最重要問題便是如何規劃最短支付路徑。
閃電網路運用 PBMC (Probability-based mission control) 機制解決這個問題。初始設定每個節點都有一個預設成功率,並根據實際轉賬完成率調整。網路路由的交易越多,任務控制元件就越瞭解這個網路的特性,也就能更好地規劃支付路徑。
費用機制
對於鏈上 BTC 交易,使用者選擇每筆交易的手續費,礦工選擇手續費較高的交易生成區塊,以最大程度提高收入。但閃電網路目前是以另外一種方式運作:節點運營商設定手續費,使用者為他們的支付選擇路徑和通道,以最大程度降低手續費。因此,閃電網路能夠提供較低廉的收費架構。運營商提供專門化服務,運營商之間(而非普通使用者)就費率展開競爭更加恰當,操作上也更為便捷。
在閃電網路中,節點運營商必須確定兩種型別的路由費:基本費和費率。基本費是每次交易透過路由支付時收取的固定費用,以千分之一聰來表示。例如,基本費 1000,這就表示每個交易的基本費是 1 聰。而費率則指按支付價值的一定百分比來收費,實際費率公式為費率除以 1,000,000。例如,費率 1000 是指 1,000/1,000,000,也就是 0.1%,一旦轉賬成功,該路由通道會收取 0.1% 的轉賬價值費用。
此外,為了給路由支付提供流動性,閃電網路節點運營商需要在支付通道鎖定一定數量的比特幣,包含入境流動及出境流動。入境流動指節點的支付通道可以接收其他路由節點的最大資金數額。而出境流動則指節點的支付通道可以用來支付其他路由節點的最大資金數額。節點可以控制出境流動,但無法控制入境流動,因為入境流動取決於其他路由節點存放在通道內的資金數額。比如,如果節點 A 要透過路由節點 B 收取節點 C 的 1 BTC,則節點 A 需要有至少 1 BTC 的入境流動。也就是路由節點 B 需要放置至少 1 BTC 在 A、B 之間的通道中,交易才能成功。
入境流動無法控制會造成閃電網路交易效率低下。如果兩個節點交易中間隔了一個以上的路由節點,就算能夠自身入境流動餘額足夠,但無法確認其他路由節點的入境流動餘額是否足夠。只要有一個路由節點入境餘額不夠,就會造成交易失敗。
節點運營商需要時時調整基本費、費率並監控調整後影響。因為支付需求通道時常改變,再加上目前費率普遍過低 (一個大型節點日均收入為 10 萬聰,約等於 7 美元),所以多數節點入不敷出。因此,當前閃電網路中的流動性提供者,並非受投資回報所推動。但為了實現大規模應用,閃電網路費率設計需要重新思考激勵力度,透過兼顧投資回報和流動性架構以吸引節點運營商。
2019 年閃電網路技術進展
2019 年,閃電網路有許多進展,大幅增加了易用性、使用者資產安全及支付規模。以下,是較為重要的 4 個技術進展:
瞭望塔 Watchtowers
閃電網路白皮書首次描述了瞭望塔機制,該機制在 2019 年改善並應用。瞭望塔針對的問題是,使用閃電網路的人需要保持線上狀態,以確保他們的交易對手沒有試圖竊取資金。暸望塔可以檢測到不誠實的一方是否試圖竊取資金,然後廣播正確交易的訊息,將資金髮回誠實的一方(即使誠實性節點處於離線狀態)。換言之,如果一個不良行為節點試圖傳播一箇舊的交易,瞭望塔就會懲罰該節點。
閃電網路使用者可以連線專業運營的第三方暸望塔來保護他們的利益,任何路由節點也都可以執行自己的瞭望塔來保護自身利益。暸望臺還可帶來威嚇與抑制欺詐的效果。對潛在攻擊者來說,因為不清楚交易對手是否連結暸望塔,欺詐成本會大幅度增加。圖 5 顯示了瞭望塔執行機制,瞭望塔實際上是由專業機構代一般使用者實施圖 3 的懲罰機制。
延續圖 1-圖 3 的表述,考慮兩個交易對手 Alice 和 Bob,各放 0.5 BTC 在通道(即 C1a/RD1a 和 C1b/RD1b,不妨稱為交易 1 或「老交易」),然後 Alice 支付 Bob 0.1 BTC (即 C2a/RD2a 和 C2b/RD2b,不妨稱為交易 2 或「新交易」)。此時,通道餘額應為 Alice 擁有 0.4 BTC,Bob 擁有 0.6 BTC。假設 Alice 想欺詐,把交易 1 含有雙方簽名的通道狀態廣播到鏈上。如果在 seq=1000 個區塊確認時間內,Bob 沒有上線提出反對,欺詐便會成功,Bob 將損失 0.1 BTC。
假設 Bob 委託瞭望塔來防範交易對手詐欺。Bob 建立一個撤銷型交易(即圖 3 中的 BR1a),授權瞭望塔必要時可以撤銷交易對手廣播的過期交易。Bob 將該交易預先簽名並設定暗示數,將暗示數及預先簽名的交易送至瞭望塔。該暗示數可以讓瞭望塔識別出過期交易,但不能讓瞭望塔得知交易明細或通道餘額。
此後,每當區塊鏈上廣播新交易時,瞭望塔會根據雜湊表來比對暗示數。一旦有交易之暗示數符合 Bob 設定之暗示數,瞭望塔就可知該交易為須撤銷之交易。此時,瞭望塔解密 Bob 提供的撤銷型交易並證明 Alice 釋出的是過期交易,重組並廣播 Bob 預先簽好名的交易,將 Alice 通道內的餘額罰沒給 Bob。也就是說,只在欺詐行為發生時,瞭望塔才可以解密撤銷型交易並得知其中內容,因此不會嚴重影響使用者隱私。
潛交換 Submarine Swaps
潛交換技術是由 Alex Bosworth 建立,被作為一種無縫銜接鏈上和鏈下比特幣流通的技術。潛交換運作機制類似 HTLC,但同時涉及鏈上和鏈下交易(圖 6)。
假設 Alice 要將鏈上比特幣支付給閃電網路上的使用者 Bob,但是 Alice 並沒有閃電網路通道。
第一步:Bob 會設定一組暗示數 R (即原像),並將其雜湊值 H 告知 Alice。
第二步:Alice 透過鏈上 HTLC,將比特幣連同 Bob 的閃電網路地址一同送至潛交換服務商,要求潛交換服務商在一定時間內揭示暗示數才能獲得這筆鏈上比特幣。類似地,潛交換服務商透過鏈下 HTLC,將同樣數量的比特幣透過閃電網路支付通道轉到 Bob 的閃電網路地址,要求 Bob 在一定時間內揭示暗示數才能獲得這筆鏈下比特幣。
第三步:Bob 揭示暗示數獲得鏈下比特幣,潛交換服務商再利用暗示數獲得鏈上比特幣,整個潛交換完成。
由此可見,潛交換最大功用是提升鏈上、鏈下的互操作性,並因為 HTLC 的特性,能將信用成本降至最低。潛交換可以用來延長支付通道使用壽命上。閃電網路交易需要交易雙方通道餘額充足。當通道流動性枯竭後,使用者傾向關掉原有通道,等到下次需要時再開啟一個新通道,但這限制了閃電網路通道擴充套件和商業規模化。在使用潛交換時,使用者可以無需經由鏈上交易,經由潛交換服務提供商就可獲得鏈下比特幣,從而維持通道餘額。
原子多路徑支付 Atomic Multi-Path Payments
目前閃電網路交易單次支付的路由只能是單方向的。假設 Alice 要支付 0.01 BTC 給使用者 Bob,那麼他不僅必須在單通道上有 0.01 BTC,而且該路由上的所有中間商也必須在通道中準備好 0.01 BTC 才能進行交易。換句話說,支付額越大,就越難找到合適的支付路徑。
多路徑支付的想法在 2018 年已經有豐富的討論,最初想法如下:將大額付款分割成小部分款項,這些小部分款項再透過不同的節點運營商從付款人轉移到收款人手裡。該解決方案面臨的挑戰是,利用閃電網路支付有失敗的可能,將一筆交易分割為多筆交易可能出現部分交易成功而部分交易失敗的情況。換言之,越大額的支付越可能出現部分支付的問題,這會制約使用者使用閃電網路進行大額付款的意願。
解決方法是原子多路徑支付,簡單來說就是多路徑支付+防部分支付機制。「原子」的含義是:僅當所有小額支付均成功時,交易對手才會收到完整的付款;如果某些小額付款失敗,那麼整個交易就會失敗,資金將退回付款方。
原子多路徑支付有如下好處 : 第一,提升隱私性。不管拆分成多少個通道來支付款項,只有交易雙方知道其中的過程。第二,提升支付體驗。使用者可以一次性轉出大額款項,無須考慮通道金額上限問題。
中微子協議 neutrino
中微子協議由一條「過濾層」鏈所組成。每一個過濾層和一個比特幣區塊連結,以壓縮的方式代表其連結的區塊,過濾層相較於原區塊大小約壓縮 250 倍。中微子協議目的是減輕客戶端硬體設施的負擔,只擷取和交易雙方相關的資料,避免硬體設施需要和比特幣主鏈時刻同步。中微子協議執行流程如下:
每當一個新區塊產出,全節點計算區塊對應的中微子過濾層,併傳送給閃電網路上所有中微子客戶端。因此,大約每 10 分鐘,客戶端會收到一箇中微子過濾層,客戶端比對所有錢包,看是否有任何交易與錢包使用者相關。一旦發現該區塊包含錢包使用者相關交易,客戶端會下載「剝離區塊」。「剝離區塊」只包含交易資料,不包含簽名和「見證」資料,可以讓客戶端減少一半以上硬體負擔。透過新資料,客戶端得以更新錢包餘額。
一般來說,閃電網路錢包運營商希望提供的產品具有高使用者體驗及低使用門檻的特點,但提高易用性往往會降低安全性,比如個人資料遭竊取或使用者資產丟失。此外,大量資料承載使閃電網路難以在移動端實現。中微子協議讓使用者不必執行全節點,且可以在移動裝置上進行操作,對使用者量擴充套件有極大幫助。
閃電網路落地概況和有待解決的問題
閃電網路落地概況
Bitcoin Visuals 提供的閃電網路節點數、通道數和 BTC 承載量等關鍵指標顯示,閃電網路自 2019 年 4 月達到增長高峰後陷入停滯。
目前閃電網路節點數量為 5104 個。節點數量在 2019 上半年經歷了持續增長,從 2019 年 1 月 4 月節點數量增加了 77%。但從 2019 年 5 月初截至 2020 年 2 月 10 日,閃電網路節點數卻只增加了 15%,增長率大幅下滑。
閃電網路通道數量從 2019 年 4 月初開始下滑,截至 2020 年 2 月 10 日下滑了 20%,目前通道數量為 32,030 個。
BTC 承載量從 2019 年 1 月的 525.80 枚上升到了 2019 年 4 月初的 1,059.50 枚,增幅為 101.5%;但自 2019 年 4 月初截至 2020 年 2 月 10 日,BTC 承載量已下滑至 865.58 枚。
閃電網路節點數、通道數及 BTC 承載量從 2019 年 4 月開始下滑主要有三個原因 :
· 比特幣幣價從三月開始快速上漲,投資人變現意願提高
從圖 9 可以看出,閃電網路節點數成長最快的時間(2019 年 11 月至 2019 年 3 月間),正好是比特幣幣價徘徊在谷底的區間。這段時間許多投資者的比特幣在二級市場被套、無法變現,閃電網路通道成為投資者可以考慮的一個比特幣存放處。
但從 2019 年 3 月開始,比特幣上漲,且閃電網路尚未有足夠多的應用場景及商戶,許多閃電網路使用者選擇將比特幣在二級市場變現套利而非繼續存放在閃電網路。從圖 10 也可以看出,從 2019 年 4 月起,比特幣交易量大幅上升,意味著比特幣在二級市場流通量增加,相對地,存放在閃電網路通道的比例下降。
· 閃電網路節點盈利無法覆蓋成本及風險
運營一個閃電網路節點的成本 = 架設節點成本+運營成本+鎖定資金流動性成本,而風險則為閃電網路或節點遭受駭客攻擊的可能。目前閃電網路共鎖定價值 800 多萬美元的比特幣,損失大量流動性且面臨著駭客攻擊的風險,但節點運營商每月的盈利只有 1-20 美元不等。顯然,閃電網路節點目前還缺乏可持續的商業模式。
· 閃電網路為天然壟斷市場,小型節點逐漸無法生存
由於閃電網路開關通道費用的設計,使用者多開一個通道就多一筆開關通道費,且各節點的服務高度同質化,不同之處主要是連線其他節點數量多寡。因此,使用者傾向找一個較多連線其他節點的節點,這樣不僅交易較容易成功,所需支付的通道費也越低。從經濟層面考慮,中心化超級節點是使用者較為理想的選擇。在使用者數量沒有大幅增加的狀況下,關閉小型或無用節點,而擴大大型節點的連結量,是節點運營商節省成本的一種方式。
閃電網路有待解決的問題
· 節點需保持線上
為使交易成功,閃電網路節點需要時時線上,相比傳統支付系統並不方便。閃電網路使用者並沒有冷儲存資金的選擇,使用者無法安全地儲存資金。雖然暸望臺能解決不線上欺詐的行為,但也讓整個生態趨向中心化。如果一個重要節點下線,容易讓整個網路流動性大幅下降,甚至造成使用者資金凍結數天的情況。
· 路由經濟設計不佳
閃電網路為高隱私性而實行洋蔥路由。在洋蔥路由下,每個節點只知道前後兩個節點的地址,沒法重新還原整條鏈或確定收款人的身份,中間方只在掌握須知資訊的基礎上進行傳輸。實際操作中的問題在於,無法得知究竟哪個節點線上,哪個節點能連通到目的使用者。雖然尋找最短路徑不是難題,已經有很多成熟可靠的演算法,但是交易過程中,閃電網路需要計算整條路徑的費用。一旦中間有個節點傳送失敗,發起交易的使用者除了要重新傳送交易以外,還要從起始節點開始重新計算費率,造成時間浪費及使用者體驗下降。
為了提高交易成功率,每個節點都需要維護所有的節點和通道列表。隨著網路規模增大,這個表也越來越大,需要同步和更新的訊息也越來越多,這會佔用大量頻寬。即使如此,傳送前無法保證一定成功,傳送過程中通道還有可能被關閉。可能解決方式是建造一個可信賴的路由網路,由規模化的商業節點負責擔任路由節點,構建一個成本低且高效的路由網。