簡述閃電網絡歷史:一個與比特幣同樣偉大想法的歷程

閃電網絡 責任編輯:Aaron 2018-07-25

說起閃電網絡,很多人對這個名稱並不陌生,可是對於它究竟是幹什麼的卻知之甚少。今天就講講關於閃電網絡從「頭腦風暴」到最近官方Beta版發佈的這段歷史,真是一段有趣的故事。

不久前,閃電網絡的第一個官方測試版lnd正式發佈,第二個版本eclair也在上個月進行了部署。而第三個版本——C-Lightning預計也很快就會開始實施。正因如此,人們期待已久的以「低成本」和「即時」的方式進行交易的比特幣覆蓋網絡——閃電網絡(Lightning Network)成為很多開發商的首選。同時,它也可以在比特幣的主網上使用,這是多年來技術發展的一個重要里程碑。

說起閃電網絡,很多人對這個名稱並不陌生,可是對於它究竟是幹什麼的卻知之甚少。今天營長就講講關於閃電網絡從「頭腦風暴」到最近官方Beta版發佈的這段歷史,真是一段有趣的故事。

接下來,讓我們坐時光機回到比特幣誕生的時候。

雛形的誕生

閃電網絡最早的起源可以追溯到比特幣本身。

閃電網絡拼圖的第一部分是一個叫做「支付通道」的概念。支付通道基本上是兩個比特幣用戶之間的比特幣收支,這個渠道鏈接的只有兩個用戶:其他人不需要知道也不需要關心他們的共同餘額有多少。更重要的是這些餘額可以在不需要進行任何比特幣在線交易的情況下更新;如果一個用戶的餘額增加,另一個用戶的餘額就會相應減少。實際上,這一過程使得參與者之間可以互相交易,且不會因為交易數據而給整個網絡帶來負擔。

一旦用戶完成了交易,他們就可以只向網絡傳輸一個交易來結清他們的支付通道:這種交易根據他們的通道餘額向每個交易支付應得的數額。對於這些用戶來說,這一過程的好處是,通道更新(鏈下交易)的成本更低,因為它們不需要挖礦的費用,此外,由於不需要區塊鏈的確認所以速度也更快。

這一概念可以說和2009年由中本聰發佈的第一款比特幣軟件一樣古老。比特幣0.1中包含了一段原始版本的代碼,可以讓用戶在交易被確認之前更新交易:

1.png

雖然這段代碼只是一個粗略的草稿,但中本聰與當時的bitcoinj開發者Mike Hearn進行私人通信時更詳細地介紹了支付渠道的工作原理。

幾年後,也就是2013年,Mike Hearn在比特幣開發者郵件列表中,發佈了中本聰對支付通道的解釋:

未記錄的開放交易可以被保持並替換,直到nLockTime達到為止。它可能包含多方支付,每個輸入所有者都需對輸入進行簽名。對於新的寫入,每個版本都必須簽名更高的序列號。如果寫入的是較高的nSequenceNumber,則除了上述規則外,該方可以退出協商,或簽名SIGNHASH_None完全退出。

參與的各方可以通過使用OP_CHECHMULTISIG創建一個更高的nSequenceNumber tx,用來創建一個預先約定的默認選項。各方保留這個tx,如果需要的話,直到它有足夠的簽名才能傳輸。

nLockTime的一個用途是在一組參與者之間的高頻交易,它們可以通過一致的同意而不斷地更新一個tx。如果一方停止同意更改,則最後的狀態將在nLockTime中記錄。如果需要,在每個版本之後默認交易可以是預先準備,中間交易不需要廣播,網絡只記錄最終結果。

原文如下:

2.png

支付通道的首次提出

儘管「支付通道」的概念與比特幣本身一樣是一直存在的,但中本聰的設計在安全性方面並不是十全十美的。最重要的是,一個支付通道的用戶可以與礦工串通確認一筆舊的交易,讓他索取比通道餘額更多的比特幣。

2011年夏天,中本聰離開比特幣項目後,有人第一次提出瞭解決這個問題的方案。BitcoinTalk論壇用戶「hashcoin」簡要描述了一種雙層支付通道,該通道要求用戶交換幾個部分簽名的多重簽名交易,並且交易的時間鎖相互依賴才能生效。

如果一個參與者消失了,另一個人可以在一段時間過去之後在付款通道中索取所有的資金。然而,這種設計的一個缺點是,hashcoin的通道只能在一個交易方向發揮作用。Alice可以向Bob進行任意次數的支付,但Bob不能通過同一個通道向Alice發起支付。

一個與hashcoin類似的想法在2013年初再次出現,這一次它繞開了理論。當年4月,TapLink創始人Jeremy Spilman在比特幣開發者郵件列表中描述了支付通道的概念。他甚至編寫了一個概念的證明。對於這個設計,Mike Hearn接下來進行了調整,之後比特幣核心的貢獻者——Blockstream聯合創始人及Chaincode Labs開發者Matt Corallo,在2013年中將這個概念轉化成為bitcoinj的工作代碼。

又過了一年,也就是2014年。Alex Akselrod (現為Lightning Labs工程師)第一個提出了「雙向支付通道」的概念。 Alice可以隨意付給Bob很多次,而使用遞減的時間鎖,Bob也可以在同一個通道內向Alice發起支付(儘管支付次數有限)。然而,與單向支付通道不同,這個解決方案實際上一直沒有落實到代碼上。

第一個支付網絡概念的提出

就在「支付通道」概念被首次提出的同時,包括Bitcoin Core開發者Peter Todd和Gavin Andresen在內的一些人則正在考慮鏈下支付網絡。如果Alice可以通過一筆鏈下交易向Bob進行支付,而且Bob可以通過一個鏈下交易支付給Carol,那麼Alice應該能夠在不需要進行任何鏈上交易的前提下,通過Bob向Carol進行支付。

Corné Plooy(現為荷蘭比特幣交易所BL3P的閃電網絡開發者)也在為比特幣設計一個支付層,他在2011年首次提出了這一想法。

3.png

Plooy關於支付層設計的早期例子,將演變成閃電網絡的前身Amiko Pay

這一想法,連同Bitcoin Core、後來的Blockstream CTO——Gregory Maxwell,以及Ripple的發明者Ryan Fugger等人的建議,在過去的幾年裡逐漸演變成比特幣和原始Ripple技術的合併版本,最終形成了被稱為Amiko Pay的系統。

但是,早期的Amiko Pay草案並沒有使用支付通道,因此在系統中注入了信任機制。然而,如果一個用戶拒絕與另一個用戶結清餘額的話,則後者將無法追索。

2012年夏天,數學家、後來的TLV的聯合創始人Meni Rosenfeld,提出了一個利用支付通道的早期支付網絡提案。在BitcoinTalk論壇上,Meni Rosenfeld描述了一個系統,在這個系統中,Bob被一個支付處理器取代,而Alice和Carol都是它的客戶。反過來,支付處理器也可以與其他擁有更多客戶的支付處理器建立通道連接,這以做法把支付通道網絡變成了一個輪輻式系統。

而這樣的一個系統也確實在支付處理其中引入了一點信任機制——他們可以拒絕完成付款並把錢留在自己手裡,這無疑降低了風險。不過這一系統只能在用戶注意並停止使用這一通道之前,這種手段只能完成一次支付。此外,更大的支付可以被分成較小的部分,這樣如果一個支付處理器被證明是不可靠的,那麼只會損失一小部分支付數據。

這個解決方案在後來的幾年裡被提及了好幾次。Peter Todd在2014年將這個概念發佈到了比特幣開發者的郵件列表中。與此同時,支付處理器BitPay,在2015年初發表了一篇關於類似的跨渠道支付(Impulse)的白皮書。與此同時,一個類似的解決方案,實際上是由瑞典的一家初創公司Strawpay來實現的,稱為Stroem (或Ström),但是這些迭代最終並沒有以一種有意義的方式進行下去。

4.png

已成為歷史的Strawpay的公司logo

作為一個相對早期的嘗試,Alex Akselrod建立了一個去信任的支付通道網絡。在2013年的wiki草案中,Akselrod的解決方案在理論上解決了這個問題。但他的解決方案並不完美,如果一筆付款在任何一條交易路線上都失敗了,那麼用戶就沒有追索權,只能等到資金通過支付渠道的時間鎖定來能獲得釋放,這一過程可能需要幾個月的時間。

與此同時,到了2015年,Plooy的Amiko Pay已經發展到了一個可以被人們所信任的程度。不過,這一設計仍然需要對比特幣協議進行相對深遠的改變,以至於有必要將某些類型的交易進行回滾。雖然在技術上是可行的,但比特幣協議對於這些改變是否會採納還尚不明確。

到了2015年末,來自蘇黎世理工大學(ETH Zurich)的研究員Christian Decker博士(現就職於Blockstream)和Roger Wattenhofer在他們的白皮書中提出了另一種網絡設計——通過比特幣雙微支付通道建立一個快速和可伸縮的支付網絡。

這一解決方案在很大程度上依賴於時間鎖,並把時間鎖作為支付渠道有效性的「倒數計時器」(countdown ticker),這種方法與一種被稱為「失效樹」(invalidation tree)的加密技巧結合起來應對過期的通道餘額。

Akselrod的解決方案也就是後來的Amiko Pay和雙工微支付通道(DMC),在某些方面都與閃電網相似,並且可以通過做出不同的權衡來實現自己的權利。如果閃電網絡沒有出現,那麼這些解決方案中的任何一個都可能成為比特幣可擴展層的基礎。

然而,歷史不接受假設……閃電網絡最終還是被髮明出來了。

閃電網絡

支付通道和網絡設計經過了多年的演變,所有的碎片終於在2015年初一起形成了一張完整的拼圖。

智能合約交易平臺Mirror CTO、Thaddeus“Tadge”Dryja和Joseph Poon寫了一篇題為《比特幣閃電網絡:可擴展的連鎖即時支付》(The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments)的白皮書,該文章於當年2月首次公開。

事實證明,這份白皮書最終成為了遊戲規則的改變者。

這篇被人們稱為「閃電網絡白皮書」的文章,提出了幾個解決方案,以完全去信任的方式實現了支付通道網絡。當參與者把他們所有的錢都放在他們的渠道上時,它們是不會冒險進行欺詐的,而中間商在完成交易的時候也無法竊取用戶哪怕是一丁點的比特幣。此外,該解決方案對比特幣協議的要求相對較少,並且承諾比目前提出的替代方案更加靈活和方便使用。

白皮書中描述的關鍵創新是「Poon-Dryja通道」。像以前的支付通道設計一樣,Poon-Dryja通道依賴於部分簽名和非廣播交易的交換。但與以往的支付通道相比,這些新的通道採取了額外的步驟,包括交換祕密數字,這使得支付通道可以更新支付的「方向」。Alice可以隨意多次向Bob發起支付,而Bob也可以在同一個通道里向Alice支付任意次數。

此外,閃電網絡利用了哈希時間鎖合約(HTLC, Hashed Timelock Contract)。這個概念通常被認為是Tier Nolan提出的,最初這一概念是為跨區塊鏈交易而設計的。例如,通過這個系統,用戶可以去信任地交換比特幣和萊特幣。在閃電網絡中,這個解決方案被用來連接跨支付通道的支付。

Poon和Dryja在2015年2月的舊金山比特幣研討會上首次公開展示了他們的想法。感興趣的話可以點擊下面鏈接查看:

https://youtu.be/8zVzw912wPo 

在那之後的幾個月裡,比特幣的規模問題和區塊大小限制的爭議變成了公開的爭執。在這樣的氣氛中,Poon和Dryja分別在蒙特利爾和香港擴容大會上,兩次就這一主題進行深入的講解。

就在香港擴容大會之後,Gregory Maxwell在比特幣開發者郵件列表中提出了一個關於可擴展性的路線圖,這個路線圖也包括了閃電網絡。它獲得了大多數比特幣技術團體的支持,併成為了Bitcoin Core項目的路線圖。

閃電網絡的實現

閃電網絡白皮書是一篇很長很複雜的論文,包含很多技術性的概念。在2015年,很少有人有時間和心思閱讀並理解這篇論文。但是當Linux內核開發者Rusty Russell瞭解到這份白皮書之後,對大眾對閃電網絡的理解起到了促進的作用。Rusty Russell在2015年初發表了一系列博客文章,把閃電網絡白皮書「翻譯」成了更適合普通讀者(但仍然有相當的技術性)的文字。

在隨後的2015年5月,區塊鏈公司Blockstream聘請了Russell,並希望他能用C語言來完成一個閃電網絡的實現,稱為C-Lightning。這一實現成為了閃電網絡的轉折點,一個幾個月前才提出的概念現在正由一個世界級的開發者來實現。Russell後來加入了Blockstream,其他開發者包括Corné Plooy也在未來幾年內為該開源項目做出了貢獻。

在Russell開始開發C-Lightning後不久,Blockstream就不再是唯一一家實現閃電網絡的公司了。到了2015年夏天,一家原本計劃開發基於Android的硬件錢包的比特幣技術公司ACINQ也決定嘗試一下這一有前景的技術。這家總部位於巴黎的初創公司後來宣佈,他們已經用Scala語言開發出了自己的閃電網絡協議,名為「eclair」。

5.png

ACINQ公司關於 éclair的公告

在接下來的幾個月裡,第三個關於閃電網絡的實施方案也在進行中。到了2016年1月,閃電網絡的兩位白皮書作者Poon和Dryja,以及Elizabeth Stark和Olaoluwa “Laolu” Osuntokun,共同創立了一個全新的公司來開發閃電網絡——Lightning Labs(閃電實驗室)。Lightning Labs將帶頭開發lnd,這是以Google的Go語言(也稱為「Golang)來實現的閃電網絡,他們在創立公司之前就已經開始使用這種語言了。

在閃電實驗室成立約一年後,2016年底,Dryja離開Lightning Labs加入了麻省理工學院媒體實驗室的數字貨幣計劃,這個組織僱用了比特幣核心開發者Wladimir van der Laan和其他幾個比特幣核心的貢獻者。在麻省理工學院,Dryja繼續致力於他在Lightning Labs的閃電網絡實現工作。

他把自己的閃電實驗室重新命名為Lit,這一時期,Lit和Ind同時存在。Lit通過將一個錢包和一個節點包裝成一個數據包,將自己與lnd和其它的閃電網絡技術區分開來。今天,它還可以通過一個配置選項同時支持多個幣種。

除此之外,以挖礦池和挖礦硬件著稱的區塊鏈公司Bitfury,對lnd的實施進行了分叉產生了另一個版本的軟件。這款分叉軟件的獨特之處在於,在設計中做出了權衡,以便不需要對比特幣網絡進行延展性修復。Bitfury還在交易路由領域做出了貢獻,其中最著名的是一種名為「Flare」的協議 (然而,Ind和Bitfury分叉目前的開發似乎沒什麼新進展)。

此外,2016年,錢包供應商Blockchain宣佈他們開發了一個簡化版的閃電網絡叫Thunder。與典型的閃電網絡實現相比,這個實現做了相當大的權衡,最顯著的一點是它需要在網絡上獲得對方的信任。通過進行這種權衡,它能夠在2016年發佈一個Alpha版本,這一版本的發佈要遠遠早於其他開發團隊(儘管未來Thunder可能與閃電網絡兼容,但目前的發展似乎也停滯不前了)。

2016年底,在米蘭舉辦的第三次擴容大會(Scaling Bitcoin Milan)之後,閃電網絡的貢獻者們匯聚在一起舉行了第一次「閃電峰會」(Lightning Summit)。峰會上,他們討論瞭如何使所有不同的閃電網絡的實現具有互操作性,從而產生了一個被稱為「BOLT」的閃電網協議規範。如果說,閃電網絡白皮書為閃電網絡提供了理論依據,BOLT則成為了我們今天所知曉的實際閃電網絡的基礎。

比特幣協議的變更

當閃電網絡白皮書首次發表時,它所描述的想法實際上是與比特幣協議不兼容的——至少是不安全的。為了實現白皮書所描述的閃電網絡,比特幣需要更改一些協議。

其中第一個就是新的時間鎖,這將使支付通道能夠抵抗比特幣的延展性缺陷。然而,這個問題早在閃電網絡白皮書發佈之前就已經開始著手解決了,並且在2015年完全得到解決。當時,Peter Todd設計並提出的新型時鐘在比特幣協議CheckLockTimeVerify(CLTV)中得到了實現。

後來,Bitcoin Core的開發者們意識到,閃電網絡在相對的時間鎖中的表現更好。這使得用戶可以在確認另一個交易後,將比特幣鎖定在一個特定的時間點上。在使用閃電網絡的情況下,用戶可以無限期地打開他們的支付通道,而CLTV的時間鎖定則要求他們定期關閉他們的通道。於是,在2016年夏天,比特幣網絡上啟動了一個名為CheckSequenceVerify(CSV)的軟分叉升級,以實現相對的時間鎖定。

但是閃電網絡需要的最大改變(至少保證一個說得過去的用戶體驗),是對任何比特幣交易的延展性修正。

在閃電網網絡白皮書發表後,延展性被認為是一個巨大的挑戰。雖然當時有一個軟件分叉草案正在解決這一問題,但開發者們不能確定這是否可行,並認為這可能需要一個硬分叉來解決這一問題。然後,到2015年底,Bitcoin Core的參與者們意識到了隔離見證(SegWit)作為Blockstream的Elements Project項目的一部分,可以作為一個反向兼容的軟分叉部署在比特幣上。

經過長期的艱苦研發,隔離見證的軟分叉最終在2017年的夏天激活使用,為閃電網絡在比特幣上的應用鋪平了道路。

閃電網絡的Alpha版本

儘管當時隔離見證尚未被部署在比特幣協議上(並且還不能完全確定是否會這樣做),但閃電網絡的發展仍在繼續進行。

閃電網絡的部署是從測試網絡開始的。更準確地說,閃電網絡開始於一個專門的測試網絡版本,被稱為SegNet 4(這是第4個專門針對隔離見證的測試網絡),SegNet 4在2016年5月投入使用。

同年10月,在部署SegNet 4之後不到6個月,Blockstream的開發小組將其C-Lightning原型推進到了可用的程度。在被稱為「閃電網絡第一戰」中,Christian Decker用測試網絡中的比特幣在閃電網絡的早期循環中,從Russell那「買了」一張貓的照片。

6.png

到了2017年1月,第一個閃電網絡的實現——lnd,發佈了Alpha版本。因此,閃電網絡本身已經正式進入了「Alpha測試階段」。來自世界各地的開發者第一次被邀請進行這項技術的實驗,而Lightning Labs將繼續對項目進行測試和代碼的改進。

Alpha版本階段反過來又導致越來越多的開發者在lnd和其他閃電網絡實現的基礎上開發應用程序。這些在閃電網絡上實施的應用,被稱為LApps。這些LApps的類型很廣,從桌面、手機錢包,到微支付博客平臺;從到賭博網站,到瀏覽器……但大多數情況下,LApps仍然是為比特幣的測試網絡而設計的。

2017年的夏,隔離見證終於被激活,比特幣閃電網絡的基礎工作已經完成。從那時起,到比特幣的主網上宣佈完成了閃電網絡的第一筆交易,前後共經歷了三個月的時間。

不久後,在同年11月,Lightning Labs首次在區塊鏈上通過閃電網絡進行了一次貨幣兌換交易——從比特幣到萊特幣。到了2017年12月,來自Blockstream、Lightning Labs和ACINQ的開發團隊正式宣佈,他們已經成功地完成了互操作性測試。

此外,到去年年底,更多人開始在比特幣主網上的閃電網絡使用比特幣來進行交易——在某些情況下這些使用者違背了開發者的建議,越來越多的閃電通道被打開。到了12月,開發者Alex Bosworth通過他與支付處理器Bitrefill建立的一個閃電通道,支付了他的電話賬單。這是有史以來第一次在閃電網絡上進行真實貨幣的買賣。

一個月後,儘管C-Lightning仍處於beta測試階段,Blockstream還是開設了一家線上商店。在這個商店裡,人們可以用比特幣來購買實際的商品。到了2018年2月,比特幣傳奇人物Lazlo Hanyecz因「比特幣披薩事件」而名聲大噪,他通過閃電網絡購買到了兩張披薩!

7.png

閃電網絡的Beta版本

經過多年的發展,加上更多年概念的醞釀。閃電網絡的發展在上個月達到了最偉大的里程碑。

2018年3月中旬,Lightning Labs的lnd是第一個發佈beta測試版的閃電網絡實現。Lightning Labs同時宣佈了250萬美元的種子輪融資。出資方包括Twitter CEO Jack Dorsey這樣的大牌投資者。

隨後,ACINQ在3月28日發佈了一條推文,聲稱eclair也已經發布了beta版,這也被認為是閃電網絡為上線主網做好了準備。ACINQ還表示,他們的Android版閃電錢包將在一個月內月發佈。

雖然Blockstream的開發團隊向媒體表示,不久後也會這樣做,但C-Lightning的實現還沒有發佈Beta版本。然而,不過,Blockstream在今年3月的最後一週推出了7款全新的LApps,這也凸顯了該公司在閃電網絡方面的進展。

儘管人們在alpha版本的時候就已經開始使用閃電網絡軟件,但beta版的發佈無疑進一步刺激了這種增長。截止到目前,超過1,000個閃電網絡節點打開了5,000多個支付通道,總共的比特幣佔有量為10個(價值約為7萬美元)。每天都有數以百計的新節點上線,甚至一個針對萊特幣的閃電網絡也正在成形,未來可以與比特幣進行互操作。

8.png

閃電網絡圖

然而,儘管取得了很多的進展,閃電網絡仍處於早期階段。如今,閃電網絡的大多數用戶仍然是技術人員或開發者,而且使用場景大多是實驗性的。

雖然beta版軟件的發佈是一個重要的里程碑,但網絡的開發和改進是一個持續的過程,還有許多工作要做,而關於路由、隱私和其他風險的開放問題依然存在。

這一切問題,只有等待閃電網絡被更多人使用後才能解決了。


文章原標題:簡述閃電網絡歷史:一個與比特幣同樣偉大想法的歷程  原作者:Aaron Wirdum

相關推薦

推薦中...