閃電網絡(Lightning
Network)是解決比特幣主鏈轉賬速度慢、成本高等問題的鏈下交易網絡,是主鏈擴容、跨鏈交換最有前景的技術方案。由於設計複雜,閃電網絡的原理較難理解,同時也存在一些實用方面的問題,本文通過生活化的案例從設計層面上解釋了閃電網絡的原理,同時對閃電網絡現存的問題進行了分析和解決建議。

一、兩塊 pizza 的故事

2010 年 5 月 22 日是值得紀念的一天,程序員小哥 Laszlo 在這天用 10000 枚比特幣買了兩塊 pizza,並在 bitcointalk 論壇上炫耀。對就是下面這倆:

1

PIZZA / BTC : 10000

後來的事大家都知道了,比特幣價值一路狂飆,這兩塊 pizza 的「身價」也不斷上升,國外有好事者專門開了個 Twitter 來記錄它們每天的價值(並對小哥造成一萬點傷害)。目前這對 pizza 大概值 6 億人民幣,每塊 3 億,咬一大口差不多一千萬吧。

2

Twitter @bitcoin_pizza

大家先替小哥默哀 3 秒——好了,我們都知道比特幣所有轉賬記錄都能查到,所謂可追溯,對比時間和金額之後基本可以鎖定這筆偉 (che) 大 (huo) 交 (xian) 易 (chang) 就是下面這條:

3

bitcoin pizza 交易記錄

想圍觀的 →
傳送門

除了喜聞樂見的交易金額之外,還有一個數據抓住了我的眼球:手續費是 0.99 BTC。這也太——便宜了!

– 啥?6 萬多的手續費還便宜?看來知縣大人沒少撈啊!

這這…本官可是清…清官,多說無益,咱們上數據:

彼時彼刻,10000 個比特幣價值 40 美金左右,手續費 0.99 BTC 值差不多 0.4 美分;

此時此刻,全網推薦手續費是 0.0001125 BTC (下圖),約爲 1.125 美金,也就是 112.5 美分。

4

推薦的比特幣轉賬手續費(2018-04-25 上午 10 點左右),來源:bitcoinfees.earn.com

1125 : 4,現在是以前的幾百倍,當年是不是很便宜?

這還沒完,17 年底比特幣轉賬太貴逼走很多人後,手續費已經大幅回落了。回落之前呢?有段時間平均手續費超過了 30 美金,比買 pizza 時漲了將近萬倍。

你說當年便宜不便宜?你說知縣大人是不是清官?

– 好好好你是清官,不過就算按照現在來算,一筆交易手續費要 7 塊多錢,我買個煎餅才 5 塊,搶劫啊?

對,用比特幣進行小額支付就是貴,而且服務還不好。根據代碼的設定,每秒鐘比特幣全網只能處理大約 7 筆交易,這速度基本是恆定的。礦工肯定先爲手續費高的「土豪交易」進行確認,沒那麼土豪的交易很可能要等幾十分鐘甚至幾小時才能到賬,這當口煎餅攤有沒有被城管端了都難說。

– 那比特幣是不是沒救了?

當然不是。之所以這麼貴、這麼慢,根本原因是你買煎餅這筆交易需要全球所有比特幣結點進行驗證和記錄,這樣才能保證交易的一致性、可追溯和不可篡改,這對大額交易是非常重要的,轉幾百萬的大佬也不在乎多幾十塊手續費和等上個把小時。

– 買個煎餅而已,能不能降低點要求,比如不求追溯,也不用大家都知道,然後便宜點?

可以啊,那就不要麻煩礦工大佬了,來筆「鏈下 (off-chain) 交易」就成了,既快又便宜,還能保證跟鏈上差不多的安全性。

– 還有這種操作??

二、閃電網絡

閃電網絡就是這樣一種鏈下交易「騷操作」,也是目前主鏈擴容最有前景的方案。

閃電網絡是基於 BOLT (Basic of Lightning)協議實現的鏈下交易網絡,主要由 RSMC (Revocable Sequence Maturity
Contract)和 HTLC (Hashed TimeLock Contract)兩個智能合約組成,翻譯過來分別是
「序列到期可撤銷合約」和「哈希時間鎖定合約」

…嗯我知道,聰慧如知縣也記不住這些全稱,但是我能記住縮寫,因爲更加聰慧的知縣夫人給它們起了暱稱——「肉絲冒菜(RSMC)」
「火腿臘腸(HTLC)」。這喫…哦不智商,我反正是跪了。

這兩個合約設計得非常精巧:資金通道用堅實的密碼學技術進行限定,資金流向又用精巧的博弈論策略進行引導,跟比特幣一樣都是跨學科設計的典範。BOLT 協議細節很多,實現複雜,秉着說人話的原則,咱們簡單描述一下它們的工作原理就好。

肉絲冒菜( RSMC)有點像兩個人記私賬,而且誰也不敢作惡,否則血本無歸。

舉個例子。張三和李四相約去澳門的一家遊樂設施裏打牌,設施規定:

「現金不能進場,要在櫃檯託管,轉賬提現每次手續費 100 塊,而且必須跑回櫃檯按手印確認」

倆人傻眼了,每人也就帶了 5000 塊,多打幾局還不夠交手續費的?每局都跑回來,這一下午也打不了幾局啊…櫃檯妹子看這倆人玩的小,給了另一個方案:

「兩人花 100 塊開一個共同賬戶,按照張三 :5000/ 李四 :5000 放錢進去,並得到一沓票據。每張票據記錄一次資金劃分,比如張三 :6000/ 李四 :4000,兩人都按手印,票據就生效了。任意一人拿生效的票據去櫃檯交 100 塊,就能按票據比例自動打錢到各自的賬戶。另外,每張票據都有遞增的編號,用完了可以免費加。」

這麼一來,就算一下午打了 100 局,額外費用也就 200 塊,還省了每局跑去櫃檯劃賬的時間,有這好事兒?張三馬上就要掏錢,卻被李四攔住了:

「等下,假設我先輸了 3000,記了張三 :8000/ 李四 :2000 的票據,後來我追平還贏了 3000,又記了張三 :2000/ 李四 :8000 的票據,但是這小子趁我上廁所拿前一張票據提現,我不虧慘了?」

櫃檯妹子白了一眼:

「你當我們傻啊,你倆一起來提現,錢當然馬上就打給你們;但是如果只有張三來,我會先把你的錢打了,他的錢扣一個小時。你收到短信發現到賬只有 2000,就拿最新的那張有效票據給我,如果這張比張三的編號大,我就認定張三作惡,剩下的 8000 都打給你,張三淨身出場」

倆人愉快地交錢開打了。

以上就是肉絲冒菜(RSMC)的基本原理,實現了任意兩人鏈下交易(票據記錄金額劃分),鏈上確認(領票據
& 提現),通過數字簽名(按手印)和時間戳(票據編號),以及「先提現後到賬」和「作惡罰沒」等規則設計,讓鏈下交易做到了安全、快速、低成本。

其中,兩人「開設共同賬戶」對應閃電網絡裏的「開通道」,「提現」則對應「關通道」,這兩個操作實際上是在比特幣主網提交了兩筆特殊的交易,因此會產生手續費和等待時間,也就是去櫃檯交 100 塊。承載所有規則的「櫃檯妹子」其實就是代碼寫就的智能合約,公開、透明、可執行。

火腿臘腸(HTLC)又是做什麼的?上面提到開 / 關通道是要花錢的,10 個人兩兩交易需要開 C(10,2) =
45 條通道,100 人是 4450 條,1000 人就是 44 萬多條…呈平方級增長,這是非常恐怖的。

實際上,張三也不可能認全其他 999 人,比如小區門口新開張的煎餅攤攤主王五,跟張三不認識,但跟李四是小學同學。話說這天早上張三來買煎餅:

張三:倆果子倆雞蛋不放香菜,能比特幣付嗎?

王五:好嘞一共 7 塊,能啊,主鏈不值當,閃電唄?掃這個碼就行。張三:

咱倆沒通道啊,不還得去主鏈開?是不是想着我通道錢都花了,就會多買幾次煎餅攤低成本?你這小算盤打得不錯啊,嘖嘖…

王五:哈哈哈,機智如您,其實還有個辦法,你不是跟李四有通道嗎?我跟他也有。你付 7 塊付給他,讓他轉給我,這不就省了咱們開通道了嘛?

張三:對啊,這麼好的點子我咋沒…等下,李四最近出國了,操作不了啊!

王五:好吧,要不你問問其他跟你開了通道的「閃電好友」,要是恰好有人也是我好友,或者是我好友的好友,不就能幫忙轉錢了?

張三:行是行…但是麻煩啊,要層層傳話,還要經過很多人,中間要是誰捲款跑路了咋辦?

王五:(7 塊還「款」…)那…那要不這樣吧,我給你發個鏈接,點開後有個密碼框,輸入密碼後會提示對錯,現在密碼只有我知道。你把鏈接轉發給所有好友,承諾「誰能找到正確的密碼,我就給誰 7 塊錢」,他們都沒密碼啊,就也轉發鏈接給他們的好友並承諾。這樣層層轉發下去,直到比如趙六轉給了我,我給他密碼,他驗證後墊付給我 7 塊錢,再拿密碼找他上家要錢,層層要賬,最後就找到你頭上啦。

張三:emmm…也就是說,有密碼就等於有收款權,有承諾所以敢層層代付,最後傳到我這裏,我把錢付了就結了!要是中間有人違反承諾,拿了密碼不付錢咋辦?

王五:哈哈,別說中間了,你都可能不付錢啊…唉唉別動手,你聽說過「智能合約」嗎?這東西條款公開,而且能確保按條款執行。做出承諾也就是簽訂智能合約,這時候你要把你的 7 塊等值比特幣鎖進去的,要不別人怎麼敢幫你代付?所有傳遞承諾的人也都會籤合約、鎖 7 塊,大家纔敢玩。最後,這麼多人幫你省了通道錢,你不表示表示?所以放 7 塊 1 進去吧,多的 1 毛就給他們當辛苦費了,也都沒太費勁。

於是,張三花了 1 毛手續費,喫上了熱騰騰的煎餅。王五看到自己的想法變成了現實,幸甚至哉,免費給張三的煎餅裏夾了火腿和臘腸以詠志,後世遂將王五設計的流程命名爲「火腿臘腸(HTLC)」。

先把口水擦一擦,總結一下。
火腿臘腸(HTLC)實現了沒有直接通道的兩個結點,通過與網絡中其他結點間已有再的通道完成鏈下交易的流程,也就是讓一串用肉絲冒菜(RSMC)連接起來的結點作爲交易傳遞的通路。全過程由智能合約保障,結點間無需信任就能代付,速度快、成本低、安全性高。

– 我去,閃電網絡太厲害了,秒天秒地秒空氣,以後我就是閃電教教徒!

哎陳同學你先坐下,閃電網絡的理想確實很豐滿,但真要用起來就…

三、現實很骨感

就像老梗「真空中的球形雞」一樣,理論都有前提條件,閃電網絡也一樣。我們來列一下閃電網絡在實用中幾處最「骨感」的地方,大家體會一下:

骨感之一,跑不起。
目前在手機上跑閃電網絡結點是不可能的,因爲還得捎帶一個公鏈的「全節點」。這是什麼概念?比特幣全節點是 100G 左右,每 10 分鐘更新 1M~2M;以太坊即便 fast 模式的全節點也要 100G,每 15 秒更新 2M 左右。一部手機不僅要拿幾百 G 來存全節點,還得保證全天候聯網實時更新,一旦斷更就得把漏掉的數據都同步回來,同步不完不給用…

骨感之二,傳不到。
「路由」在閃電網絡裏指「確定張三到王五交易傳遞路徑」的過程。目前的路由用的是 dijkstra 算法(知縣一直叫它亂碼算法),時間複雜度可以簡單看做 O(n2),說人話,100 萬個結點的網絡路由一次需要 1 萬億(英文表示是 1
Trillion,也就是常說的 1T)次計算,而且是單點完成。2.0GHz 的 CPU 跑 1T 的計算量需要 500 秒…這還不算,跑完時數據已經過期快 10 分鐘了,天知道路徑還通不通?路徑上的結點掉線了 / 關通道了 / 通道乾涸了(後面會講啥叫乾涸)…咋辦?現在的設計是——涼辦,用最新的數據重新跑 500 秒…

骨感之三,中心化。
攤主王五非常適合做一個「大節點」——因爲大家經常跟他交易,所以他的「閃電好友」最多,新人跟他開通道是最優的,因爲通過他很容易就能跟另一個人轉賬,這樣比較省錢。極端情況下,當所有人都只跟王五建立通道的時候,就會形成一個大節點帶一圈小節點的結構,這就是「中心化」結構。這時候效率非常高,因爲任意兩人轉賬至多需要一次中轉,但又最危險:如果王五手機丟了 / 沒流量了 / 昏迷了…那麼大家都無法轉賬;王五還可能作惡,比如看趙六不順眼,把趙六通過他轉的午飯錢故意拖到晚飯時分…單點故障導致全網癱瘓、單點權力過大容許作惡,這些都是「中心化風險」。

骨感之四,被掏空。
張三經常找王五買煎餅,乾脆開了通道,放了 100 塊錢。半個月後張三通道里就剩 2 塊了,咋辦?再往裏充 100?錯!閃電網絡通道一旦建立就無法追加金額,只能花錢關通道再花錢開新的。王五也一樣,想把通道里的錢提出來進貨,必須挨個關掉再開;通道里有 98,能不能只提 70 呢?對不起,不支持,必須全提。通道:感覺總是被掏空…

問題在資金流向上。理論預期是有來有往的,通道很長時間都不用關,就像張三李四打牌各有輸贏,打 100 局通道兩邊都還有錢;但實際應用裏,高頻場景是消費支付,資金總是從消費者流向商戶的,付錢的一端就容易被
「掏空」
——雖然通道大小還是 100,但是張三已經無法支付超過 2 塊的金額了。那這個通道還能用嗎?理論上能,王五可以向張三付錢啊,但這種情況非常少,所以事實上失去了使用價值,這就是
「通道乾涸」。這使得閃電網絡通道經常是一次性的,很不經濟。

還有…

– 大人,別說了,我剛剛建立起的閃電網絡信仰已經閃電般崩塌了…你不要走動,我去買幾個橘子壓壓驚…

呔,真當本官不上 B 站?不過陳同學你不要灰心,閃電網絡纔剛剛起步,有問題是正常的,需要大家一起想辦法來解決不是?通道不能追加金額,我們想辦法讓它能啊;通道沒法部分提現,我們想辦法讓它有啊;什麼輕結點、輕錢包、分佈式快速路由、中心化抑制策略…有啥問題就解決啥問題才能不斷進步不是?

– 你說的這些真的都能實現!?

你還是先坐下…當然能,而且馬上就能踏出第一個腳印了!

四、協議層崛起

讓我們重新審視一下閃電網絡在區塊鏈領域所處的位置。

首先,閃電網絡沒有區塊鏈結構;

其次,閃電網絡不依賴某個公鏈,不是 Dapp。只要能實現 BOLT 協議,無論比特幣、以太坊還是萊特幣(LTC),都可以用上閃電網絡;

第三,閃電網絡支持代幣原子互換(Atomic Swap),也就是「跨鏈(cross-chain)」操作
(跨鏈是個大話題,咱們擇日再聊),比如 BTC 和 LTC 就成功進行了原子互換。

不是鏈,也不是 Dapp,純粹依靠規則組成的協議(Protocol)完成鏈下(off-chain)交易、跨鏈(cross-chain)互換等操作,促進價值傳遞(Exchange of Value),歡迎來到協議層。

在主流公鏈齊 (xiang) 頭 (ai) 並 (xiang) 進 (sha),各路「神」鏈雨後春筍的時候,人們開始關注鏈外的世界。懂的人心知肚明,區塊鏈這種重量級、專用型技術架構,適用場景非常有限,怎麼可能像「互聯網+」一樣,隨便一個行業都能「區塊鏈+」?這個行業的數據能可信地記錄到鏈上?絕大多數目前做不到。(可信數據源也是個大話題,有專門領域叫「預言機(Oracle)」,也擇日再聊)

公鏈技術需要完善的地方還很多,比如擁堵問題,很多人寄希望於優化主鏈效率,但在區塊鏈這種全部節點×全量存儲的架構下,安全、效率、可用、一致這些指標不可能同時滿足。比特幣變成 10M 區塊、10 秒出塊不就不堵了?確實,但這也導致對網絡、存儲的要求提高,能 hold 住的節點大幅減少,「去中心化」名存實亡,攻擊也變得更加容易,影響了安全性——這是比特幣最重要的特性。大紅大紫的「次世代」公鏈 EOS 採用的 DPOS 共識機制,本質上也是犧牲了去中心化程度來提升處理速度,只能說各取所需。

協議層則是換個角度處理問題:把主鏈不適合做的事情放到鏈下,用技術+博弈設計來滿足特定場景的需求。

還拿擁堵問題來說,金額大、手續費高的「土豪交易」是感受不到擁堵的,增量迅速的小微支付(micropayment)纔是擁堵的製造者和受害者。買個煎餅 7 塊,手續費 10 塊,肯定不行;手續費 1 毛,第二天到賬,那也不行啊!這種「既要礦工跑,又要礦工不喫草」的需求肯定無法滿足,把它們挪到鏈下才是治本之道,這也是協議層解決問題的方向。

區塊鏈能給人類生產關係帶來巨大的變革,比特幣作爲完全自組織的系統成功運行了 9 年,承載了幾千億美金的價值,足以給我們堅持下去的信心。這個過程中,協議層必將會發揮重要的作用,希望更多人能夠關注、加入協議層的建設,一起打造更加高效穩定的區塊鏈世界。


作者介紹
知縣,北大計算機本碩,LITEX Lab 核心成員。LITEX Lab
將於近期發佈對 BOLT 協議的重要改進,並將持續輸出多個協議層貢獻,包括分佈式快速路由、輕結點、生態型網絡結構,以及 DST 輕量框架等。相關信息可以關注官網
litex.io 以及微信公衆號 LITEX_OFFICIAL。

作者:知縣
編輯:野比大雄
稿源:巴比特資訊(http://www.8btc.com/lightning-network-and-pizza-2) 版權聲明:
by
nc"
sa

作者保留權利。文章爲作者獨立觀點,不代表巴比特立場。

來源鏈接:www.8btc.com