本文是做者有關區塊鏈的系列文章之一,可經過以下連接下載原文:
https://github.com/junahan/JU...
摘要
比特幣閃電網絡是一個去中心化的即時、大吞吐量微支付系統,該系統無需委託可信的第三方代管資金,也沒有相應的風險。實現的方法是創新性的利用比特幣內置腳本構建支持鏈下(off-chain)安全確認交易的通道網絡,並利用比特幣區塊鏈做爲法庭確保鏈下交易確認安全。git
閃電網絡的思路並不侷限於比特幣,也適用於相似的數字貨幣(如以太坊),其方法甚至能夠擴展爲一種跨鏈技術以實如今不一樣帳本之間轉移價值。github
本文僅作概念性的介紹,並不涉及閃電網絡實現的細節,有關閃電網絡實現的細節,能夠參閱閃電網絡論文原文 (by Joseph Poon, Thaddeus Dryja, 2016)。算法
比特幣區塊鏈可擴展性問題
- 交易確認緩慢 - 每10分鐘一個區塊,交易要安全的確認須要至少6個區塊,使得交易確認緩慢
-
可擴展性問題:安全
- 交易吞吐量有限:全部交易均廣播上鍊,單個區塊容量有限,每秒中僅支持小於10比交易
- 區塊大小迅速增加限制節點參與並致使集中化風險: 隨着比特幣交易需求的快速增長,動輒數百Gigabyte甚至數十Terabyte的區塊大小限制普通節點(如我的PC和移動終端)加入網絡,也會致使參與節點的集中化風險。
有關比特幣可擴展性問題,比特幣社區有不少討論和提案,有興趣的朋友能夠參閱比特幣擴展方案評論 (Bryan Bishop, 2015) 。網絡
閃電網絡方案
解決問題的基本思路是,在無需引入可信任第三方中介的前提下,若是有合適的方法可以在鏈下安全的確認交易,就沒必要要把全部的交易廣播上鍊。併發

閃電網絡是由微支付通道相互連接造成一個巨大網絡,可以實現鏈下確認交易,鏈上(on-chain)實施不合做節點懲罰和有效交易淨額清算(Net-settlement),而且可以以去信任(Trustless)的方式實現網絡中任意節點之間的價值轉移。less
閃電網絡的設計目標:區塊鏈
- 即時支付:閃電網絡的交易不須要區塊確認,交易可即時在鏈下完成確認。
- 微支付低費用: 閃電網絡使用真正的比特幣交易,卻最小化交易結算(交易廣播上鍊)的須要,能夠以極低的費用實現小到 0.00000001 比特幣的交易。
- 大容量可擴展:閃電網絡交易在鏈下確認,容許用戶執行近乎無限的微支付交易,能夠知足諸如物聯網設備間的自動大量交易。
微支付通道和RSMC
閃電網絡支持交易雙方共同出資以建立一個雙向微支付通道,隨後雙方能夠經過該通道鏈下確認相互之間的一系列交易而不用交易廣播至鏈上確認,只有在須要最終結算和其中一方再也不合做的情形下才須要廣播交易上鍊。做爲類比,閃電網絡經過將比特幣區塊鏈做爲法庭,算法作法官,結合RSMC(可撤銷序列成熟度合約)機制提供證據,共同確保鏈下確認支付的安全:ui
- 可撤銷序列成熟度合約機制提供鏈下交易確認證據 - 有效交易和無效交易證據
- 淨額清算 - 經過廣播上鍊有效交易(即最後一筆交易)就能夠實施淨額清算
- 違規懲罰 - 一方違規,如上鍊對本身有利的老舊交易,另一方則能夠經過上鍊相應的違規補償交易(Breach Remedy Transaction)做爲證據,便可實施違規懲罰,結果是全部通道資金均歸可以提供違規證據的一方全部,懲罰由算法強制執行。
微支付通道建立和鏈下交易確認

該示意圖展現了微支付通道和RSMC如何工做。spa
- 愛麗絲和鮑勃各出資 0.5 BTC 創建一個支付通道,該通道創建意味着,雙方共同簽名的資金交易廣播上鍊(圖中 on-chain 一側)而且雙方的第一筆鏈下交易(圖中 off-chain 一側 Alice 0.5 / Bob 0.5 )已經確認。
- 隨後雙方能夠經過該通道鏈下確認相互之間的一系列交易從新分配資金交易金額而不用把交易廣播至鏈上確認。一筆新的交易會事實上做廢前一筆歷史交易,由於交易機制會致使提交歷史交易的一方損失資金,結果是隻有最新的一筆交易纔是有效的。

- 一次新交易,雙方會擁有該次交易各自的版本,如最近的一筆交易,愛麗絲擁有 Cna 和 RDna 交易而鮑勃有本身相應的版本 Cnb 和 RDnb(如上圖)。交易 Cnb 中,交易輸出 0 的意思是愛麗絲可花費該輸出 0.8 BTC,交易輸出 1 是一個帶有RSMC的 2-of-2 簽名輸出,鮑勃持有子交易 RDnb 以RSMC合約約定的方式花費該輸出。交易 RDnb 是交易Cnb的子交易,其輸入來自 Cnb 1 RSMC 輸出,並帶有值爲 1000 的時間鎖,這意味着,該交易只有在父交易 Cnb 上鍊確認後,還須要等待 1000 個比特幣區塊鏈之後才能被確認。這就是對方實施違規懲罰的窗口期。

- 伴隨新交易的產生,老舊交易事實上被做廢,做廢的方式是產生一個相應的稱之爲違規補償的交易,例如,老舊交易 C3a 的子交易 BR3a,以及 C3b 的子交易 BR3b。以鮑勃持有的交易 C3b爲列,交易 BR3b 沒有時間鎖,容許愛麗絲當即花費交易 C3b 1. RSMC 0.7 BTC 輸出,這事實上撤銷了交易 RD3b, 由於 RD3b 具備時間鎖,須要在父交易上鍊確認後再等待 1000 個比特幣區塊鏈之後才能被確認。
淨額清算和懲罰
在微支付通道創建並存繼期間,雙方能夠鏈下確認多筆交易直到通道關閉,有三種情形致使清算並關閉通道。
- 雙方合做上鍊清算 - 雙方可能再也不有業務來往和交易的必要並但願可以贖回各自的資金,雙方能夠經過建立另一次交易,該交易不帶RSMC輸出,直接按最後一次交易的份額分配交易輸出並交換籤名。任意一方廣播上鍊最後這筆交易便可完成最後淨額清算。
- 單方面提交最後一次交易 - 例如愛麗絲想贖回資金而因爲聯繫不上鮑勃等緣由,沒法合做關閉通道,愛麗絲能夠單方面上鍊本身擁有的最後一次交易而關閉通道,在該情形下,鮑勃能夠當即得到最後一次交易中本身的份額,而愛麗絲必須等待如 RDna 交易指定的時間鎖到期後才能夠贖回本身的份額。
- 任意一方違規提交老舊歷史交易 - 這種情形事實上並不會發生,但一旦發生,對方能夠提交違規補償交易以實施懲罰。例如,鮑勃提交了對本身有利的歷史交易 C3b,那麼,按照鮑勃擁有的 RD3b 交易來看,他須要在 C3b 被廣播上鍊確認後,RD3b 仍須要等待 1000 個比特幣區塊後纔可以被上鍊確認。在此期間,愛麗絲髮現鮑勃違規提交老舊歷史交易,她能夠經過廣播 BR3b 交易,該交易沒有時間鎖,能夠當即上鍊確認並花費 C3b 1. RSMC 0.7 BTC輸出,考慮到 C3b 0 號輸出的 0.3 BTC 本就歸屬愛麗絲,這樣一來,至關於通道全部資金均歸愛麗絲全部。固然了,廣播違規補償交易是愛麗絲的責任,若是愛麗絲在懲罰窗口期沒有上鍊違規補償交易,則鮑勃到期能夠花費 C3b 1 號輸出的 0.7 BTC。這就是閃電網絡的懲罰機制。
閃電網絡和HTLC
經過HTLC能夠在閃電網絡任意節點之間安全轉移價值而無需信任中介節點。

該示意圖展現了Alice如何使用HTLC經過閃電網絡轉帳給Dave一筆資金,假設Alice和Dave之間並未創建一個微支付通道但能夠經過閃電網絡創建起一條Alice和Dave之間的臨時支付路由通道。
- 首先雙方經過其餘通道(綠色線條所示),Alice告知Dave要轉 0.01 BTC 給Dave,Dave產生一個隨機像原R,以及R的散列H,Dave保留R並把散列H傳遞給Alice。
- Alice和Bob之間有已經創建的微支付通道,Alice能夠產生一個HTLC合約並連同H送給Bob (紅色虛線所示),該合約的意思是:若是Bob可以在合約過時(三天)內提供一個H值對應的像原R值,則合約規定的 0.01 BTC就歸Bob全部,若是合約過時,則返回合約金額給Alice。同理,Bob和Carol,Carol和Dave之間也能夠創建相似的HTLC合約,區別在於合約過時時間是遞減的。至此,紅色虛線所示的Alice到Dave之間支付路由通道就創建了。
- 履行HTLC合約的過程也至關簡明,因爲Dave持有H的像原R,就能夠在HTLC合約(Carol和Dave間的合約)過時前,經過把R傳遞給Carol以獲得HTLC合約的資金。同理,Carol經過把獲得的R傳遞給Bob已從Bob哪裏獲得資金,最後,Bob把獲得的R傳遞給Alice以獲得資金。至此,整個HTLC交易完成並關閉。
閃電網絡相關名詞
- RSMC (Revocable Sequence Maturity Contract / 可撤銷序列成熟度合約) - 一個交易合約,容許帶有該合約的交易(父交易)輸出只能在該交易確認後推遲指定時間(由子交易序列肯定)花費,能夠經過建立一個特殊的子交易來取代其餘子交易並當即花費父交易輸出。
- HTLC (Hashed Time Lock Contract / 散列安全時間鎖合約) - 一個比特幣腳本,容許受託方提供一個指定散列的原始密文來花費合約資金,也容許委託人在時間鎖過時後贖回資金。
- 資金交易 (Fund Transaction) - 一個 2-of-2 多重簽名交易,用於建立最初的支付通道資金池。
- 可撤銷承諾交易 (Revocable Commitment Transaction) * 資金交易的子交易,能夠花費資金交易的輸出,經過建立新交易並撤銷老舊交易在交易通道雙方從新分配資金額。
- 支付交易 (Delivery Transaction) - 一旦承諾交易廣播上鍊,該交易能當即從承諾交易贖回資金。
- 可撤銷支付交易 (Revocable Delivery Transaction) - 帶有時間鎖的支付交易,可延遲收回承諾交易資金。
- 違規補償交易 (Breach Remedy Transaction) - 用於對不合做節點實施懲罰的交易。
相關比特幣改善提案 (BIPs)
BIP65: CHECKLOCKTIMEVERIFY
該BIP爲比特幣腳本系統引入一個新操做碼 (OPCHECKLOCKTIMEVERIFY) ,使用比特幣交易域nLockTime指定交易鎖定時間,從而容許交易輸出推遲至指定時間之後才能花費。閃電網絡可使用該機制建立微支付通道,但不便之處在於到期後須要清算並關閉通道。
BIP68: 基於交易序列號的相對時間鎖
經過在比特幣交易記錄中引入交易序列號 (nSequence) 實現相對時間鎖 (RLT),確保簽名交易的輸入在其相應的前序交易確認後的指定時間內(現對於前序交易確認時點)保持無效。閃電網絡使用nSequence,但修改其原有的語意以實現RSMC,好處是能夠保持支付通道一直開啓。
BIP199: 散列安全時間鎖合約交易
一個散列安全時間鎖合約(HTLC)是一個腳本,它容許受委託者經過提供一個散列的原始密文來花費合約資金,也容許委託人在時間鎖過時後贖回資金。該比特幣改善提案實現HTLC。
閃電網絡引入的問題
流動性問題
閃電網絡要求在支付通道內鎖定資金,這可能會致使流動性問題,同時因爲閃電網絡具備大幅度下降交易上鍊的需求,可能會致使和礦工之間的競爭。
- 網絡流動性 (Network Liquidity) - 保持通道開放可用
- 通道流動性 (Channel Liquidity) - 鎖定部分資金覺得通道提供可用的資金池
系統性攻擊
閃電網絡包含百萬級別的支付通道,通道內鎖定了大量的資金,特別是大的中介人通道容易成爲系統性攻擊的目標,而且隔離措施將再也不起做用。系統性攻擊看起來可能性不大,但一旦發生則會致使災難性後果。
- 支付通道相互連接並鎖定大量的資金,系統性攻擊會使全部通道參與方損失資金。
- 支付通道特別是中介人通道包含大量歷史鏈下交易(未廣播交易),經過併發廣播歷史鏈下交易,攻擊者可能獲得更多的資金。
- 系統行攻擊可能致使不少交易上鍊,並帶來高昂的交易費用
閃電網絡的啓示
閃電網絡給咱們最大的啓示莫過於再一次證實創新的利用比特幣腳本可以產生顛覆性革新應用。固然了,閃電網絡的思想也不只僅適用於比特幣。
- 創新利用比特幣腳本可以產生顛覆行革新。
- 閃電網絡思想不只僅可用於改善比特幣網絡,它一樣適用於相似的數字貨幣,實際上,以太坊就有本身的閃電網絡。
- HTLC的思想也不只僅限於比特幣內部,它能夠擴展爲一個跨鏈技術以在不一樣帳本之間交換價值。
參考文獻
- Satoshi Nakamoto(中本聰),"Bitcoin: A Peer-to-Peer Electronic Cash System", http://www.bitcoin.org/en/bit..., 2009.
- Bryan Bishop, "Review of Bitcoin Scaling Proposals", http://diyhpl.us/~bryan/irc/b..., 2015.
- Joseph Poon, Thaddeus Dryja, "The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments", https://lightning.network/lig..., Version 0.5.9.1 2016.
- Joseph Poon, "Time and Bitcoin", https://lightning.network/lig..., 2015
- "SF Bitcoin Social", https://lightning.network/lig..., 2015
- BIP65 "OPCHECKLOCKTIMEVERIFY", https://github.com/bitcoin/bi..., 2014
- BIP68 "Relative lock-time using consensus-enforced sequence numbers", https://github.com/bitcoin/bi..., 2015
- BIP199 "Hashed Time-Locked Contract Transactions", https://github.com/bitcoin/bi..., 2017
本做品採用
知識共享署名 4.0 國際許可協議進行許可。