誰在控制BitcoinCore的GitHub信息庫,這個問題經常被人提出。但這本身就是一個轉移視線的提法,源于威權主義的觀點。顯然,這種提法不適用于BTC。
本文旨在揭示BitcoinCore如何運作,以及在更高層次上BTP本身如何發展。
本文作者為BitcoinCore開發者,由加密谷獨家編譯
BitcoinCore的歷史
BitcoinCore是開發BTP的焦點,而不是一個指揮和控制點。如果它因為任何原因不復存在,一個新的焦點就會出現——它所基于的技術通信平臺(目前是GitHub存儲庫)是一個方便而非定義/項目完整性的問題。事實上,我們已經目睹BTC發展重心改變了平臺甚至名字!
2009年初,BTC項目的源代碼只是托管在SourceForge上的一個.rar文件。早期的開發人員實際上會通過E-mail與Satoshi交換代碼補丁。
2009年10月30日,Sirius(MarttiMalmi)在SourceForge上為BTC項目創建了一個subversion存儲庫。
2011年,BTC項目從SourceForge遷移到了GitHub。
2014年,BTC項目更名為BitcoinCore。
不輕信任何人
雖然一些少數有組織的GitHub“維護者”帳戶能夠將代碼合并到主分支中,但這更像是一種“清潔工”的職位,而非掌權者。
BitcoinCore遵循最小特權原則,即如果被濫用,任何賦予個人的權力都很容易被顛覆。
PeterTodd推文:“Core對于重要的列表是公開透明的,可以簽署合并提交的PGP密鑰。”
這里要學到的教訓是:不要輕易相信GitHub!即便BitcoinCore也不知道可以更改回購的人員的完整列表,因為這可能擴展到數十名GitHub員工。”
從反抗者的角度來看,GitHub是不可信任的。任何GitHub員工都可以使用他們的管理權限將代碼注入存儲庫,而無需維護人員的同意。但GitHub攻擊者不太可能破壞BitcoinCore維護者的PGP密鑰。
BitcoinCore不是基于GitHub帳戶代碼的完整性,而是具有持續集成系統,該系統執行必須對每個合并提交簽名的可信PGP密鑰進行檢查。雖然這些密鑰與已知身份相綁定,但仍然無法確保萬無一失。密鑰可能會被泄露,除非原始密鑰持有者通知其他維護者,否則我們將無從得知。因此,提交密鑰也不能提供完美的安全性,它們只會使攻擊者更難以注入任意代碼。
Twitter CEO:如果不在Twitter或Square工作,就會從事比特幣相關的工作:Twitter首席執行官Jack Dorsey宣稱,他對比特幣的肯定比他在面對Twitter和Square時的任何未決項目都要強大,超過了Twitter和Square這兩家自成立以來由他領導的公司。這位億萬富翁是出席邁阿密比特幣2021會議的嘉賓之一,在此之后不久,他對比特幣發表了非常樂觀的評論,并且披露Square正在考慮制造一個比特幣的硬件錢包。同時作為活動的策劃者他說了觀眾想聽到的話,“對我來說,所有其他加密貨幣都完全不考慮”,他們專注于讓比特幣成為互聯網的原生貨幣。Dorsey承諾,如果我不在Twitter或Square工作,我就會從事比特幣相關的工作。如果它需要比Square或Twitter更多的幫助,我會把精力和時間留給比特幣。但是,我相信這兩家公司都可以發揮作用,我不認為有什么比這更能讓全世界的人受益。”[2021/6/6 23:15:53]
開啟王國的鑰匙
在撰寫本文時,這些是可信賴的PGP指紋:
71A3B16735405025D447E8F274810B012346C9A6133EAC179436F14A5CF1B794860FEB804E66932032EE5C4C3FA15CCADB46ABE529D4BCB6416F53ECB8B3F1C0E58C15DB6A81D30C3648A882F4316B9BCA03882CB1FC067B5D3ACFE4D300116E1C875A3D
這些密鑰注冊給了:
WladimirJ.vanderLaan
PieterWuille
JonasSchnelli
MarcoFalke
SamuelDobson
這是否意味著我們可以完全相信這五個人?并不是。鑰匙不是身份證明,可能落入其他人的手中。如果運行verify-commitspython腳本,你能得到什么保證呢?
python3contrib/verify-commits/verify-commits.pyUsingverify-commitsdatafrombitcoin/contrib/verify-commitsAllTree-SHA512smatchedupto309bf16257b2395ce502017be627186b749ee749Thereisavalidpathfrom“HEAD”to82bcf405f6db1d55b684a1f63a4aabad376cdad7whereallcommitsaresigned!
USDT占比特幣交易比重約為57.37%:金色財經消息,據cryptocompare數據顯示,目前比特幣交易情況按照交易幣種排名,排名名第一的是USDT,占比為57.37%;排名第二的是美元,占比為15.36%;排名第三的是日元,占比為9.63%;排名第四的是歐元,占比為3.78%;排名五的是CNYT,占比為3.32%[2020/10/13]
Verify-commits腳本是一個完整性檢查,任何開發人員都可以在他們的機器上運行。執行后,它會在自2015年12月提交82bcf405之后的每個合并提交中檢查PGP簽名。在編寫時已經超過3,400次合并。
如果腳本成功完成,它告訴我們,自那時起已經更改的每一行代碼都已通過BitcoinCore開發過程,并被具有維護者密鑰的人進行了“簽名”。雖然這無法完全保證沒有人注入惡意代碼,但會大大減少攻擊面。
什么是“維護者”,以及他們是如何實現這一角色的,這點我們稍后會深入研究。
多層防御
BitcoinCore代碼的完整性不能僅僅依賴于少數密鑰,這就是為什么存在大量其他檢查的原因。
有許多安全層來提供深度防御:
PullRequest安全性
任何人都可以通過在Bitcoin/Bitcoin上打開針對主分支的PullRequest(簡稱PR),來自由地提出代碼更改,以改進軟件。
開發人員審核PR以確保它們無害。任何人都可以自由地審查PR并提供反饋。在為BitcoinCore做出貢獻時,沒有門檻或入門測試。如果沒有人對一個PR提出合理的反對意見,那么維護者就會進行合并。
Core維護者設置pre-pushhook,以確保它們不會將未簽名的提交推送到存儲庫中。
合并提交可以選擇通過OpenTimestamps加上安全時間保障。
TravisContinuousIntegration系統會定期運行此腳本以檢查gittree的完整性,并驗證主分支中的所有提交是否都由可信的PGP密鑰進行簽名。
任何想要運行此腳本以驗證所有合并提交的PGP簽名的人都可以追溯到2015年12月。
發布安全性
Gitian確定性構建系統由多個開發人員獨立運行,目標是創建相同的二進制文件。如果有人設法創建與其他開發人員不匹配的構建,即表明引入了非確定性,則最終版本不會發生。如果存在非確定性,開發人員會追蹤出錯的地方,修復它,并構建另一個候選版本。一旦確定性構建成功,那么開發人員就會對生成的二進制文件進行簽名,從而保證文件和工具鏈不被篡改并且使用相同的源代碼。此方法將構建和分發過程作為單點故障刪除。任何具有技術技能的人都可以運行自己的構建系統。
動態 | Bitwise回應比特幣ETF提案被拒一事 最終將解決目前的擔憂并完成挑戰:SEC周三宣布,Bitwise與NYSE Arca共同提交的ETF提案不符合防止市場操縱或其他非法活動的法律要求。對此,Bitwise官方向媒體回應稱:1.盡管我們無法在240天的法定審查窗口內解決SEC的擔憂,但仍提供了他們需要的更多數據和背景信息,以闡述我們的主要成果;2.我們為這個行業所取得的進展感到很高興,并相信,隨著在該領域中進行更多的研究和不斷取得進展,最終將解決目前的擔憂和并完成挑戰。[2019/10/10]
一旦Gitian構建成功完成,并由構建者簽署,BitcoinCore維護者便會簽署一條包含每個SHA256哈希值的消息。如果你決定運行預構建的二進制文件,則可以在下載后檢查其哈希值,然后使用哈希值驗證簽名版本消息的真實性。
以上所有內容都是開放源代碼,任何有技能和意愿的人都可以審核。
最后,即使完成上述所有質量檢查和完整性檢查,提交到BitcoinCore,并最終進入版本的代碼也不會被任何中心化的實體部署到節點網絡上。相反,每個節點運行者必須有意識地決定是否更新他們運行的代碼。BitcoinCore刻意沒有加入自動更新功能,因為它可能用于使用戶運行他們沒有明確選擇的代碼。
盡管BitcoinCore項目實施了所有技術安全措施,但它們也并非完美。理論上,任何代碼都有可能遭到損害。BitcoinCore代碼完整性的最后一道防線與任何其他開源項目相同:時刻保持警惕。有越多的人盯著BitcoinCore代碼,進入發布版本的惡意或缺陷代碼就越少。
代碼覆蓋范圍
BitcoinCore有許多測試代碼。有一個針對每個PR運行的集成測試套件和一個每晚在主服務器上運行的擴展測試套件。
可以通過以下方式自行檢查測試的代碼覆蓋率:
1.克隆BitcoinCore的GitHub存儲庫;
2.從源代碼安裝構建所需的依賴項;
3.運行這些命令;
4.在./total_coverage/index.html上查看報告;
或者,可以查看由MarcoFalke主持的代碼覆蓋率報告。如下圖:
代碼覆蓋率報告
代碼覆蓋率越高,意味著預期運行的確定性越高。
當涉及到共識關鍵軟件時,測試非常重要。對于特別復雜的更改,開發人員有時需要進行艱苦的變異測試。也就是說,他們通過故意破壞代碼來查看測試是否會按照預期一樣失敗。
行情 | 比特幣市值占比升至近一年半高位:據coinmarketcap數據顯示,伴隨著比特幣近日的持續走強,比特幣市值占比升至59.66%附近,創2017年12月以來新高,排名第二的為ETH,市值占比為9.25,BCH排名第三,占比為2.97%。[2019/5/14]
GregMaxwell在討論0.15版本時,對這個過程給出了一些見解:
“測試是對軟件的測試。要測試,你必須破解軟件本身。”
自由市場競爭
BitMEX曾撰寫了一篇關于BTC實現路徑生態系統的精彩文章。目前有十幾種不同的BTC實現方式,甚至會有更多的“競爭網絡”實現。這是開源的自由,任何對BitcoinCore項目不滿意的人,都可以自由地開啟他們自己的項目。他們可以從頭開始,也可以分叉Core軟件。
在撰寫本文時,有96%的BTC節點正在運行某種版本的BitcoinCore。為什么會出現這種情況?
如果切換到另一個軟件實現路徑所需的努力最小,那么是否意味著BitcoinCore在節點網絡上具有近乎壟斷的地位?畢竟,許多其他實現方法提供了與BitcoinCore兼容或高度相似的RPCAPI。
我認為,這是BitcoinCore成為開發焦點的結果。它擁有更多開發人才和時間作為支持,這意味著,BitcoinCore項目生成的代碼往往擁有最好的性能、穩健和安全。
在資金管理方面,節點運營商不會想運行次好的軟件。同時,鑒于這是一個共識軟件,BTP不具有,一個正式的規范,因為沒有人有權威制訂。因此,用焦點開發人員的實現方式或多或少都更安全。
從這個意義上說,開發焦點的代碼是最接近現有規范的代碼。
誰是Core的開發人員?
對于不熟悉BitcoinCore開發過程的人,從外部看這個項目,可能會認為Core是一個單一的實體。實際情況遠非如此!
核心貢獻者之間經常存在分歧,即使是最多產的貢獻者也編寫了大量從未合并到項目中的代碼。如果閱讀相關指南,你可能會注意到,它們相當松散——這個過程可以用“粗略的共識”來描述。
維護人員會考慮:一個補丁是否符合項目的一般原則?是否符合納入的最低標準?進而對貢獻者的普遍共識進行判斷。
誰是BTCCore的維護者?他們是在一段時間內做出高質量的代碼、在項目中累積了足夠的社會資本的貢獻者。
當現有的維護者們認為,某位貢獻者是在某一領域能力表現突出、可靠、積極的人選時,他們可以授予該人員GitHub帳戶提交訪問權。
聲音 | CoinShares首席執行官:比特幣潛在投資者約1億人:據Coinpost報道,英國虛擬貨幣公司CoinShares首席執行官Ryan Radloff根據世界銀行人口數據,計算出全球虛擬貨幣行業的潛在投資者。計算結果顯示,澳大利亞存在196萬人,美國存在4232萬人,歐洲存在5463萬人,合計將近1億人。分析并稱,可能存在的市場需求為190萬個 BTC(約120億美元)。[2018/8/20]
首席維護者的角色負責監督和協調項目的方方面面。它是多年來自愿流傳下來的:
SatoshiNakamoto:1/3/09-2/23/11
GavinAndresen:2/23/11-4/7/14
WladimirvanderLaan:4/7/14—present
作為一個BitcoinCore維護者通常被稱為“清潔工”,因為維護者實際上沒有權力做出違背貢獻者或用戶共識的決定。然而,由于整個生態系統被外界過分關注,這個角色的工作可能相當繁重。
例如,GregoryMaxwell(格雷戈里·麥克斯韋爾)在2017年出于個人原因放棄了他的維護者角色,很可能是因為他在擴容討論期間所承受的公眾壓力。
Wladimir寫了一篇作為核心維護者的壓力的文章,其中解釋了為什么移除Gavin的提交訪問,這讓很多人感到不安。
同樣地,當JeffGarzik被從GitHub組織中移除時,他和其他人也都感到不滿,但他已經兩年沒有為Core做貢獻了。保留他GitHub帳戶對儲存庫的訪問權限,不僅對項目沒有任何好處,反而會構成安全風險,并且違反了Wladimir在他的文章中提到的最小特權原則。
其他人可能會關注Core,認為它是一個技術統治或象牙塔,讓新人很難加入。但如果你和貢獻者交談,就會發現事實并非如此。雖然多年來只有十幾個人擁有提交訪問權限,但已有數百名開發人員做出了貢獻。我自己也做了一些小貢獻。雖然我不認為自己是一個“核心”開發人員,但嚴格來說,我也是一名Core開發者。沒有人能阻止你做出貢獻!
MattCorallo推文:“2011年,作為一名不懂標記的高中生,開發者社區與我合作,讓我糟糕的補丁變得值得合并,并創造了一個偉大的學習環境。”
JohnNewbery推文:”2016年,@TheBlueMatt在@ChaincodeLabs組織了一次訪問。我一直在閱讀有關BTC的所有內容,我可以放手嘗試,但還是不敢提交PR。Matt,Alex和Suhas非常慷慨地花時間教我們關于BTC的一切,以及如何做貢獻。”
JeffRade推文:”我開始對@bitcoincoreorg進行小型提交,并且對@MarcoFalke@pwuille@orionwl@LukeDashjr和@jfnewbery加入我的PR深深感動,這真是一個熱情的項目!”
人們最難以理解的事情之一似乎是,BTC發展的焦點并不僅僅是BitcoinCoreGitHub賬戶定義的結構。雖然BitcoinCore有一些結構(它使用中心化的通信渠道來進行協調),但項目本身不受任何參與者的控制——即使是那些升級了GitHub存儲庫特權的參與者也不行。
雖然從技術上講,維護人員組織內部可能會發生“政變”,并有可能劫持GitHub存儲庫,審查持不同意見的開發人員,甚至可能搶奪“BitcoinCore”的品牌名稱,但結果是BitcoinCore將不再是開發的重點。反對維護者行為的開發人員只需將代碼分叉,并將工作轉移到BitcoinCore維護者沒有管理權限的另一個存儲庫。
即使沒有“政變”,如果一個有爭議的變更以某種方式進入Core,部分開發人員會將軟件分叉,刪除這個變更,并將其提供給用戶使用。你可能會說,這正是AmaurySechet分叉BitcoinCore,并刪除隔離見證,創建比特幣ABC時所發生的事情。或者,如果Core拒絕一些人想要的提議的變更,開發人員可以分叉,再添加這些變更。這種情況發生過很多次,例如:
MikeHearn用forkedCore創建了BitcoinXT
AndrewStone創立了Core,創建了BitcoinUnlimited
JeffGarzik用forkCore創建了BTC1
分叉代碼很容易。轉移BTC發展的焦點卻很困難的——你必須說服貢獻者,他們最好把時間花在另一個項目上。
JamesLopp推文:”我不對任何人、任何比特幣開發團隊效忠。我的意圖是運行最能保護我財務主權的代碼。”
很難說服公眾。用戶不會盲目地追隨BitcoinCore的變化,這是一種自我強化的信念,因為如果用戶不參與共識過程,并意識到自己的選擇,他們就會把部分權力拱手讓給開發者。
然而,用戶在2017年的UASF(UserActivatedSoftFork)運動中,實行了他們的權利。一位化名shaolinfry的BTC開發者提出了BIP148,這個提案將迫使礦工在8月1日左右激活隔離見證。
然而,由于BIP148爭議太大,無法被BitcoinCore采納,所以shaolinfry將Core進行了分叉,并提供了“BitcoinUASF”軟件。這個軟件實現獲得了不小的吸引力,并且創造了充分的壓力來說服礦工在BIP148截止日期之前采用BIP91來激活fork。
在我看來,最好的BitcoinCore貢獻者是那些充分實行主權的人。例如JohnNewbery,盡管他沒有編寫包含這個特定共識錯誤的代碼,但是他認為自己有責任仔細地檢查來阻止它被合并,并且在編寫測試時發現這個錯誤的代碼。
JohnNewbery推文:”我為CVE-2018-17144的錯誤全權負責。錯誤的代碼被合并是不對的。由于沒有徹底地審查共識變更,整個社區搞砸了它,開發人員需要注意!這是大家的責任。”
我們都是Satoshi(中本聰)!
為BitcoinCore做貢獻
雖然有足夠的資源可以幫助有抱負的開發人員,但為Core做貢獻仍舊讓人感到畏懼。你可以從JimmySong寫的指導說明“AGentleIntroductiontoBitcoinCoreDevelopment”入手。
Core開發人員EricLombrozo還撰寫了一篇文章“TheBitcoinCoreMergeProcess”,了解如何在Core存儲庫中進行更改。
此外,AlexB.撰寫了一篇關于BTC開發理念的優秀文章“TheTaoofBitcoinDevelopment”,任何想要成為貢獻者的人都可以通過閱讀它來節省大量時間。
具體的示例可能會有所幫助。在寫這篇文章時,我嘗試在我的機器上運行verify-commits.py腳本,以便審核GitHub提交歷史記錄的完整性,但遇到了困難。
為了便于未來的開發人員規避這些問題,我打開了一個PR來改進文檔。從PR歷史中可以看出,有4位不同的開發人員提出了如何改進PR的建議。這包括使用不同的wiki標記到簡化的bash命令,以及可以在verify-commits.py腳本中使用的新參數。我認為所有的建議都很合理,所以我將它們合并到我的代碼中,并為我的PR推送了更新版本。在那時,參與審查的開發人員承認可他們發現PR,維護者MarcoFalke將其標記為包含在0.18版本中。經過幾天的努力,開發人員沒有反對意見,代碼被維護者SamuelDobson合并到了Core中。
總結:沒有人能夠掌控BTC
正如飽受爭議的那樣,把BTC理解為一個系統是不可能的。對BTP的定義(控制),就如同對語言的定義。語言是自然產生的,對詞匯含義的共識是有機的,而不是由字典決定的。就像字典描述一種語言的現象而不是定義它,BTC的實現方式也用代碼描述了BTC的語言。沒有人被迫同意字典中給出的定義,同樣,也沒有人被迫運行BTC實現方式或認同這一過程中的代碼。
語言不受民主支配,BTC也不受民主管理。雖然你可能會聽到人們提到礦工、節點、開發人員或用戶“投票”,但是,沒有任何一種機制能夠讓多數人迫使持不同意見的少數人接受他們不同意的變更。簡言之,BTC是無政府狀態——沒有統治者,但也不是沒有規則。規則由網絡上的各個參與者定義和執行。
對BTP本身的更改通常是通過BTC改進提案流程進行的,即使這只是一個推薦的最佳實踐,也不能強迫任何人遵循它。它只是一種更正式的方式,試圖通過同行審查和建立共識的過程來指導變革。
BTC抗脆弱性的一個重要方面——如果只有一個單一的控制點,那么它也是一個單一的故障點,會被強大實體所利用。最終,每個節點運行者通過確保網絡上沒有其他人違反它們達成一致的規則來管理自己。這種安全模型是BTC自下而上治理的基礎。
沒有人掌控BTC。沒有人掌控BTC開發的焦點。
-END-
JamesonLopp作者
DUANNIYI翻譯
SonnySun編輯
Roy排版
前言:這里的FAMGA是Facebook、Apple、Microsoft、Google以及Amazon的首字母,泛指科技巨頭。科技巨頭可能會遲到,但從來不會錯過.
1900/1/1 0:00:00很長一段時間,中心化交易所成為眾矢之的。每個持幣人都認為高額上幣費中有自己的一份,另一邊是交易所安全事件頻發,讓人有種交了保護費卻不干事兒的錯覺.
1900/1/1 0:00:00親愛的Bit-Z用戶: 因MIN疑似有盜幣事件發生,Bit-Z已暫停其充、提幣服務,待調查清楚、問題解決后會盡快開放,請留意官方公告。由此給您帶來不便,敬請諒解.
1900/1/1 0:00:00項目介紹 ThunderCore(TT鏈)是新一代的區塊鏈公鏈平臺。它突破了現今區塊鏈的困境,達成快速、高擴展性、安全,而且又與以太坊虛擬機兼容.
1900/1/1 0:00:00暗網絲綢之路建立,成為非法交易的新寵前面小號和大家回顧了比特幣發展的三件大事,大家還記得嗎?先一起來回顧一下:“最貴的一份披薩與實物交易”!今天來和大家叨叨另外一個大事件——“暗網中的比特幣”.
1900/1/1 0:00:00Gate.io“搶購點卡送GT活動”第一天順利完成并創造了歷史!非常感謝每一位用戶的參與,感謝各位對我們真實誠信理念的認可,我們在一起創造了歷史.
1900/1/1 0:00:00