不完整比特幣開發史

要想完全理解比特幣開發現狀背後的原因,就不能不了解一些歷史事件。本文著重列舉了中本聰離開這個項目前後的歷史事件、軟件發布和漏洞修復;還額外添加了一個章節敘述比特幣開發的現狀。文章後附的時間線為每一個事件提供了額外的細節。

對於這裡的大部分事件,我都不是親歷者。所以這份時間線的一大部分引自John Newbery 的一次名為“比特幣開發的歷史與哲學” 的演講。本文的標題也寫得很清楚了,本文沒有,也做不到包含每一個重要事件。歷史總在不斷變化,如果你認為我遺漏了什麼事件,或想提議我作一些修改,請在開源項目bitcoin-development-history 中提交一個issue,這也是我用來附加更多時間線的辦法。

中本聰仍在的時候

這份時間線的起點是2007 年早期。中本聰開始開發比特幣。這個點對點的電子現金系統沒有受信任的地方。整個系統完全由用戶運行的軟件來控制。

早期,有貢獻者加入了中本聰的工作。除了軟件的開發,這些新來的貢獻者還為軟件添加了Linux 和maxOS 操作系統的支持。到了2010 年夏天,中本聰給軟件做了一些關鍵的修改。比如,引入了“檢查點” 作為一項安全措施,來對抗傳播低難度鏈的攻擊。使用了這些檢查點的節點會拒絕那些特定高度與特定區塊不符的鏈。檢查點是由中本聰獨自硬編碼的,理論上來說,這讓中本聰可以自己決定整個網絡要跟隨哪條鏈。

加入檢查點的幾天后,中本聰在版本v0.3.3 的軟件中放出了第一個共識機制變更。中本聰敦促用戶升級。在接下來一個月裡,多個小版本更新陸續放出。其中一個修復了一個致命的溢出漏洞。這個漏洞被利用來創造了兩個高價值的UTXO。中本聰建議礦工們重組包含了惡意交易的區塊。

一周以後,中本聰加入了一個警報系統,來提醒節點運營者網絡中出現的類似bug 和問題。這個警報系統有一個安全模式。這個安全模式一旦觸發,就會禁用整個網絡的所有關於貨幣處理的RPC 方法。只有中本聰能夠用一個私鑰簽名來創建有效的網絡警報。一些用戶開始提出質疑:如果其他人,比如某個政府,拿到了這個私鑰,那網絡會變成什麼樣呢?

這個時候,中本聰對比特幣網絡有太大的權力。但大家主要擔心的不是中本聰會變壞、會摧毀整個網絡,而是一個去中心化的網絡中不應該存在一個單點故障。

到了2010 年10 月,中本聰在bitcointalk 論壇上發布了他的最後一個帖子,宣布移除這個安全模式。中本聰在他最後留下的電子郵件之一里面寫道:“我準備到別的地方去了。有了Gavin 和大家,這個項目會得到很好的維護。”一些人主張,中本聰離開比特幣世界,是他最偉大的貢獻之一。

中本聰離開之後

幾乎同一時間,整個開發流程從SVN 轉移到了GitHub 上。 BlueMatt、sipa、laanwj 和gmaxwell 加入了這個項目。在2011 年中,BIP(比特幣升級提議)流程應運而生。在2011 年的最後一個季度和2012 年的第一個月,社區討論了允許交易的接收者指定花費條件的多個提案。由此,P2SH 交易引入了比特幣。

在2012 年末,比特幣基金會宣告成立。比特幣基金會(Bitcoin Foundation)模仿的是Linux 基金會。在公告帖子下面,一些人留言表示擔心開發會變得中心化。

Bitcoin v0.8.0 在2013 年春天發布。兩週以後,一場意料之外的硬分叉在網絡中升級了和沒升級的節點間爆發。硬分叉很快就被解決了,礦工們都把挖礦算力切換到了對已升級和未升級節點都有效的鏈上。

在2013 年末,Bitcoin 軟件更名為Bitcoin Core。在接下來幾年裡,包括Chaincode 和Blockstream 在內的公司成立。後來,MIT Digital Currency Initiative 加入了Chaincode 和Blockstream,為開發比特幣的開發者和研究者提供報酬。在2015 年二月,Joseph Poon 和Tadgw Dryja 放出了閃電網絡白皮書的第一份草稿。

第二年,Luke Dashjr 通過BIP 2 修訂了BIP 流程;Bitcoin Core 放出了v0.13.0,加入了SegWit 作為軟分叉。在2016 年11 月,警報系統完全棄用。到了2017 年8 月,SegWit 在比特幣網絡上激活。 2019 年,又一家公司Square Crypto 開始資助比特幣開發。在2019 年5 月,Pieter Wuille 提出了BIP taproot。

比特幣開發的現狀

在過去幾年中,比特幣的開發文化日益去中心化、目標明確而且嚴格。現在Bitcoin Core 代碼庫有6 名維護者,分佈在三個國家。只有他們能夠合併由貢獻者提出的代碼更改。不過,在內容合併之前,更改的內容還需經過一個審議流程,這個流程也變得嚴格得多。

舉個例子,在比特幣早期,有個與P2SH 相競爭的提議,叫做“OP_EVAL”。有個實現了OP_EVAL 的pull request(“合併請求”)在2011 年底被合併到了代碼庫中。即便是這樣對共識有重大變更的代碼,它也只有一個審核人。 Russell O’Connor 開了一個issue 批評了這個實現的一部分,並主張這麼大的、對共識極為關鍵的變更應該得到更多的審核和測試。

這件事推動瞭如何通過更多的測試和審核來實現更高質量的代碼的持續討論。到了今天,每一個合併請求都有多個開發者來審核。如果某個改變觸及到了對安全性甚至共識的關鍵部分,審核的流程還需要通過更多的審核員審核,需要大量的測試,通常會花費幾個月的事件。活躍的Bitcoin Core 貢獻者John Newbery 告訴我,“只需一個審核人員首肯就能合併影響共識的代碼的事情,已經一去不復返”。

人們也投入了很多精力到自動化的測試中,比如,有C++ 語言編寫的單元測試和Python 語言編寫的功能性測試。每一個不簡單的變更都要相應更新現有的測試或者在框架中加入新的測試。在單元測試和功能測試以外,還要在Bitcoin Core 上做模糊測試,以及建立基準測試框架來度量代碼的性能。舉個例子,bitcoinperf.com 網絡提供了Grafana 和codespeed 接口來可視化週期性的基準測試的結果。

多年努力下來,Bitcoin Core 軟件已經形成了一個清晰的發布流程。 Bitcoin Core 的大版本每6 個月發布一次。發行計劃包括一個翻譯流程,一個特性凍結流程,還通常有多個候選版本。近期Cory Fields 和Carl Dong 還致力於提高Bitcoin Core 構建過程的安全性,使用確定性和可引導的構建包。這個新的構建系統可能還沒準備好支持即將在今年秋天發布的Bitcoin Core v0.19.0,但未來可以提供更好的構建過程安全性。

結論

十年間,比特幣的開發文化滄海桑田,從圍繞中本聰的高度中心化,變為圍繞幾千名GitHub 貢獻者的去中心化。顯然,代碼審核、代碼質量和安全性的高標準都是有必要的。這些標準得到了遵循和持之以恆的提高。

我認為,要完全理解比特幣開發現狀背後的哲學,了解這些歷史事件是必不可少的。所以我做了一個把更多事件串起來的時間線。

若有進一步的研究需求,建議閱讀Alex B. 寫的The Tao Of Bitcoin Development(比特幣開發之道)(中文譯本)、Eric Lombrozo 寫的The Bitcoin Core Merge Process(Bitcoin Core 代碼合併流程) 以及Jameson Lopp 的大作Who Controls Bitcoin Core? (誰控制著Bitcoin Core?)。

致謝

感謝John Newbery 幫助我梳理並審核這篇文章。他在自己的演講History and Philosophy of Bitcoin Development(比特幣開發的歷史和哲學)中做了很多歷史考證工作,該演講也是我這篇文章的基礎。此外,我非常感激Chaincode Labs,他邀請我參加他們的2019 夏令營(Summer Residency),在那裡我遇見了很多有意思的人,學到了很多東西,也正是在哪裡,我開始著手整理時間線和撰寫這篇文章

時間線

2007 年早期:中本聰開始開發比特幣

中本聰開始寫比特幣的代碼。這是根據中本聰在Cryptography 郵件列表中一份寫於2008 年11 月17 日的郵件中得出的:

“我確信自己已經在過去一年半的編程工作中解決了所有這些細節問題。”

見:e-mail (metzdowd.com) 以及e-mail (nakamotoinstitute.org)

2008 年11 月1 日:比特幣白皮書發布

中本聰在Cryptography 郵件組中公佈了白皮書:

“我一直在開發一個全新的數字現金系統,它是完全點對點的,沒有需要用戶信任的第三方。”

見:e-mail (metzdowd.com) 以及e-mail (nakamotoinstitute.org),以及白皮書

2009 年1 月3 日至9 日之間:比特幣的創世區塊挖出

創世區塊的時間戳是1 月9 日。

這個區塊的coinbase 交易(發行新幣的交易類型)包含了著名的一段話:

“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks(泰晤士報2009 年1 月3 日刊英國財政大臣正在考慮對銀行的第二輪紓困計劃)”

見:區塊瀏覽器、百科詞條

2009 年1 月9 日:Bitcoin v0.1 軟件發布

中本聰在Cryptography 郵件組中寫道:

“我發布了Bitcoin 軟件的第一個版本。比特幣是一種新的電子現金系統,使用點對點網絡來防止多重支付。它是完全去中心化的,沒有服務端,也沒有中心化的權威。”

見:e-mail

2009 年12 月16 日:Bitcoin v0.2 軟件發布

Martti Malmi (sirius-m) 加入了對Linux 系統的初步支持。其它新功能包括在利用CPU 的多個核心來挖礦以及初步支持使用代理。

見:bitcointalk.org

2010 年7 月6 日:Bitcoin v0.3 軟件發布

Laszlo Hanyecz (Bitcoin pizza guy) 加入了對macOS 的支持。其他新特性包括JSON-RPC 接口,以及一個新的daemon 模式。用戶幫助把軟件的圖形界面翻譯成了德語、荷蘭語和意大利語。

見:bitcointalk.org

2010 年7 月15 日:Bitcoin v0.3.1 軟件(補丁)發布

修復了各種各樣的bug。 Gavin Andresen 開始作貢獻。

見:bitcointalk.org

2010 年7 月17 日:Bitcoin v0.3.2 軟件發布

中本聰加入了檢查點作為一項安全措施。檢查點就是鎖定某個高度的區塊哈希值必須是某個,否則就拒絕。中本聰寫道:

“我可能會從現在開始,每發布一個新版本就增加一個檢查點。如果軟件已經決定了哪個是被普遍接受的區塊鏈,就沒有必要留下一個徒增困擾的、可能在幾個月後發生逆轉的機會。”

見:bitcointalk.org、檢查點已添加(GitHub 上的差異)

2010 年7 月25 日:Bitcoin v0.3.3 軟件發布

這個版本加入了第一個共識層面的變更。

比特幣軟件開始跟隨累積工作量最多的鏈。在此之前,是跟隨字面意義上的最長鏈。

見:bitcointalk.org、共識變更(GitHub上的差異)

整個2010 年夏天

Bitcoin v0.3.xx 的多個版本在此期間放出

2010 年8 月15 日:致命的溢出漏洞得到修復

中本聰在v0.3.9(ish) 中放出一個補丁,告訴用戶和礦工要重組帶有溢出錯誤交易的區塊。

見:bitcointalk.org

2010 年8 月22 日:警報系統引入

中本聰開始開發一個警報系統,計劃在v0.3.11 加入。他寫道:

“我一直在編寫一個警報系統。警報會在網絡中廣播,並在一些版本的軟件中生效。警報消息要用只有我知道的一把私鑰簽名。”

“節點偶爾陷入暫時的停機可能給你驚嚇,但總好過你發現自己的錢被全部吸走的驚嚇。”

“等什麼時候我們很長一段時間都沒有再發現新bug、透徹的安全檢查也沒有發現任何問題時,這個系統可以縮減。我並不主張我們會永遠使用它。但比特幣還是一個beta 階段的軟件。”

見:bitcointalk.org

2010 年12 月12 日:中本聰發出最後一個帖子

中本聰在bitcointalk.org 上發表他自己的最後一個帖子。他加入了一些DoS 限制,並移除了前述的警報系統安全模式。

“在DoS 保護上還有許多工作要做,但我正在開發一個備份的快速構建包,以備不測;更複雜的主意則以後再說。這個包所構建的軟件是v0.3.19。”

見:bitcointalk.org

2010 年12 月19 日:開發工作轉移到GitHub 上

Bitcoin 軟件的活躍開發和issue 跟踪轉移到了GitHub 上。

見:GitHub 記錄的第一個issue

2011 年4 月23 日:中本聰最後一次發聲

據稱來自中本聰給Mike Hearn 的最後一份電郵:

“我已經做別的事情去了。Gavin 和大家會把這件事做好。”

見:pastebin.com 上的電子郵件對話

2011 年3 月至6 月:新的貢獻者加入

多位新的貢獻者加入:TheBlueMatt(於3 月3 日)、sipa(於3 月12 日)、laanwj(於3 月15 日)和gmaxwell (於6 月18 日)。

他們的第一次合併請求見:TheBlueMatt、sipa、laanwj、gmaxwell

*2011 年8 月19 日:第一個BIP *

第一個BIP “BIP 1:BIP 的目的和指南” 出現。

: : GitHub 上的 BIP 1

2011 年9 月23 日:Bitcoin v0.4 推出

v0.4 放出,主要的新功能是錢包加密。見:更新說明

2011 年11 月21 日:Bitcoin-QT v0.5 發布

新特性是新的qt 圖形界面以及錢包加密功能的一個重大補丁(CVE-2011-4447)

見:更新說明、CVE-2011-4447

2011 年11 月~ 2012 年4 月:P2SH 和其他提議上的工作

多個提議(OP_EVAL、P2SH、OP_CHV)都旨在允許交易的接收者可以指定花費資金的腳本。

P2SH 在Bitcoin-Qt v0.5.4 上實現。另外兩個則都被放棄了。

見:BIP 12: OP_EVAL、OP_EVAL 和並請求、OP_EVAL 遞歸問題、BIP 16: P2SH、BIP 17: OP_CHECKHASHVERIFY

2012 年3 月30 日:Bitcoin-QT v0.6 發布

新特性包括地址二維碼,BIP30(針對一種涉及復制coinbase 交易的攻擊的安全修復)的一個實現,以及修復內存相關的拒絕服務攻擊向量。

見:更新說明

2012 年9 月17 日:Bitcoin-QT v0.7 發布

包括了BIP22、BIP34 和BIP35 的實現,以及圖形界面上的許多變更,還有聯網的RPC 代碼。

見:更新說明

2012 年9 月27 日:Bitcoin Foundataion 宣布成立

Gavin Andresen 宣布成立Bitcoin Foundation。

見:bitcointalk.org 上的帖子

2013 年2 月19 日:Bitcoin-QT v0.8 發布

本版更新將區塊鏈的存儲從BerkleyDB 數據庫格式遷移成LevelIDB 數據庫。 “Ultraprune(極致修剪)” 功能由sipa (Pieter Wuille) 實現了,他將UTXO 集合從區塊鏈數據庫中分離了出來。

見:更新公告

2013 年3 月11 日:意料之外的硬分叉

一次意料之外的硬分叉發生,將v0.8 的節點與更老版本的節點分離了開來。

見:BIP 50: 2013 年3 月鏈分裂事件的事後報告,bitcoin.org 網絡警報

2013 年12 月12 日:軟件品牌重新包裝

Bitcoin-Qt 軟件重新包裝,使用Bitcoin Core 的新名稱。

見:GitHub 上的PR

2014 年3 月19 日:Bitcoin Core v0.9 發布

新特性包括:OP_RETURN 操作碼可以在區塊鏈中寫入數據,但也會讓相關的UTXO 變成不可使用的狀態。此外,autotools 用作構建系統,而bitcoin-cli(命令行工具)作為一個RPC 客戶端引入。

見:更新說明

2014 年某個時間:Chaincode Labs 成立

Alex Morcos 和Suhas Daftuar 在2014 年成立了Chaincode Labs 以打造一個工程師和科學家能夠支持去中心化數字貨幣開發的空間。

2014 年10 月23 日:Blockstream 成立

Adam Back、Matt Corallo、Greg Maxwell、Pieter Wuille 等人創立了Blockstream 公司並放出了他們的側鏈白皮書。

見:為什麼我們要成立Blockstream?

2015 年2 月16 日:Bitcoin Core v0.10.0 發布

重要的更新包括:首先同步區塊頭的同步方法,REST 接口以及用來創建和操控交易的bitcoin-tx 模塊。

見:更新說明

2015 年2 月:閃電網絡白皮書發布

Joseph Poon 和Thaddeus Dryja 發布了Lightning Network 白皮書第一版草稿

見:閃電網絡白皮書

2015 年4 月15 日:MIT DCI 成立

MIT Media Lab 啟動了Digital Currency Initiative(DCI)。 DCI 是一個研究社區,聚焦密碼貨幣和區塊鏈技術。

見:DCI 啟動公告

2015 年7 月12 日:Bitcoin Core v0.11.0 發布

這一版軟件將區塊文件修剪當成一個主要的特性。

見:更新說明

2016 年2 月3 日:BIP 2

Luke Dashjr 起草了BIP 2,提出了一個定義更清晰的BIP 流程。這個提議被社區接受

見:BIP 2: BIP 流程修訂

2016 年2 月23 日:Bitcoin Core v0.12.0 發布

主要更新是引入了libsecp、sendheader,選擇進入的RBF(BIP 125)以及交易內存池限制。

見:更新說明

2016 年4 月15 日:Bitcoin Core v0.12.1 發布

這一版本包含了BIP 9(版本標識邏輯)以及OP_CHECKSEQUENCEVERIFY 軟分叉的定義。

見:更新說明

2016 年8 月23 日:Bitcoin Core v0.13.0 發布

包含了為segwit(隔離見證)預備的變更、壓縮區塊功能,交易池基於手續費價格的篩選,HD 錢包的遲滯,以及CPFP 交易選擇算法。

見:更新說明

2016 年10 月27 日:Bitcoin Core v0.13.1 發布

這個版本包含了SegWit 軟分叉。

見:更新說明

2016 年11 月1 日:警報系統退休

網絡層的警報系統代表著比特幣的一個很大的中心化力量,如今走入歷史。

見:公告

2017 年3 月8 日:Bitcoin Core v0.14 放出

本版軟件大幅提高了初次下載區塊的速度。

見:更新說明

2017 年8 月24 日:SegWit 激活

SegWit 在比特幣主網上激活。

2017 年9 月14 日:v0.15 放出

本版軟件加入了一個更好的手續費預估功能,可在圖形界面追加手續費,還有多錢包功能以及腳本緩存功能。

見:更新說明

2017 年11 月11 日:v0.15.1 放出

這個版本著力於P2P 網絡的安全性,以預防未來可能的網絡分叉,也修復了一些bug,為0.15.x 系列做了優化和升級。

見:更新說明

2018 年2 月26 日:Bitcoin Core v0.16 放出

這一版主要是為Bitcoin Core 錢包增加了SegWit 支持。

見:更新說明

2018 年10 月3 日:Bitcoin Core v0.17 放出

這一版本為錢包增加了一些功能。其中一個是支持部分簽名的比特幣交易(PSBT)。

見:更新說明

2019 年3 月20 日:Square Crypto 成立

Jack Dorsey 宣布Square Crypto 將招聘3~4 名工程師和1 位設計師來全職為比特幣生態作開源的貢獻。

見:tweet

2019 年5 月2 日:Bitcoin Core v0.18 放出

本版更新包括了大量新功能和一些小變更。

見:更新說明

2019 年5 月6 日:Taproot 提出

Pieter Wuille 提出了多個BIP 以在比特幣中實現Schnorr 簽名以及taproot,以提高比特幣智能合約的隱私性、效率和靈活性。

見:郵件組帖子

2019 年8 月9 日:Bitcoin Core v0.18.1 放出

這個小版本加入了新功能,多個補丁以及性能升級,還更新了翻譯。

見:更新說明

2019 年8 月19 日:Miniscript 推出

Pieter Wuille 提出了Miniscript,讓比特幣腳本的編程更友好的語言。

見:郵件組帖子,項目頁面

2019 年11 月24 日:Bitcoin Core v0.19.0.1 發布

這個版本加入了新功能,多個補丁以及性能升級,還更新了翻譯。

見:更新說明

2020 年3 月9 日:Bitcoin Core v0.19.1 發布

這個版本修復了多個bug,提高了性能。

見:更新說明

2020 年6 月3 日:Bitcoin Core v0.20.0 發布

這個版本修復了多個bug,提高了性能。

見:更新說明

2020 年8 月1 日:Bitcoin Core v0.20.1 發布

這個小版本的更新包括應對不軌對等節點的方式不同,錢包提醒以及PSBT 支持帶witness 和不帶witness 的UTXO。

見:更新說明

2020:為比特幣項目和個人貢獻者設置的開發獎

包括BitMEX、Square Crypto、OKCoin、BTSE、Kraken 在內的公司,以及Human Rights Fundation、Paradigm 和Coinbase 交易所,為比特幣項目和個人貢獻者設立了多個開發獎項。

見:Square Crypto Grants、BitMEX Grants、OKCoin Grants、Coinbase Grants、Polylunar Grant Tracker、Bitcoin Words Grant Tracker

原文鏈接: https://b10c.me/blog/004-the-incomplete-history-of-bitcoin-development/

作者: 0xB10C

翻譯: 阿劍

Total
0
Shares
Related Posts