原文標題:《》
撰文:0xB10C
翻譯:阿劍
要想完全理解比特幣開發現狀背後的原因,就不能不了解一些歷史事件。本文著重列舉了中本聰離開這個項目前後的歷史事件、軟體發布和漏洞修復;還額外添加了一個章節敘述比特幣開發的現狀。文章後附的時間線為每一個事件提供了額外的細節。
對於這裡的大部分事件,我都不是親歷者。所以這份時間線的一大部分引自 John Newbery 的一次名為 「」 的演講。本文的標題也寫得很清楚了,本文沒有,也做不到包含每一個重要事件。歷史總在不斷變化,如果你認為我遺漏了什麼事件,或想提議我作一些修改,請在開源項目 中提交一個 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 貢獻者(2018 年數據)的去中心化。顯然,代碼審核、代碼質量和安全性的高標準都是有必要的。這些標準得到了遵循和持之以恆的提高。
我認為,要完全理解比特幣開發現狀背後的哲學,了解這些歷史事件是必不可少的。所以我做了一個把更多事件串起來的時間線。
若有進一步的研究需求,建議閱讀 Alex B. 寫的《》、Eric Lombrozo 寫的《》以及 Jameson Lopp 的大作《》。
致謝
感謝 John Newbery 幫助我梳理並審核這篇文章。他在自己的演講《》中做了很多歷史考證工作,該演講也是我這篇文章的基礎。此外,我非常感激 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、checkpoints added (diff on GitHub)
2010 年 7 月 25 日:Bitcoin v0.3.3 軟體發布
這個版本加入了第一個共識層面的變更。比特幣軟體開始跟隨累積工作量最多的鏈。在此之前,是跟隨字面意義上的最長鏈。見:bitcointalk.org、consensus change (diff on 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 的目的和指南」 出現。見:BIP 1 on GitHub
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所有的文字和圖片都遵循自由創作和分享協議 4.0,作者保留署名權,允許自由分享和改編,後續使用應維持同樣的使用條件。
冷萃財經原創,作者:awing,轉載請註明出處:https://www.lccjd.top/2021/09/25/%e6%af%94%e7%89%b9%e5%b8%81%e7%ae%80%e5%8f%b2%ef%bc%9a%e4%bb%8e%e6%97%b6%e9%97%b4%e7%ba%bf%e4%ba%86%e8%a7%a3%e5%85%b6%e5%bc%80%e5%8f%91%e5%8e%86%e7%a8%8b/?variant=zh-tw
文章評論