如何加入比特幣核心開發的介紹
如果你是開發人員並且你擁有任何比特幣,那麼為比特幣核心做出貢獻可能是你可以做的最好的事情之一,這可以幫助你進行投資。在本文中,我將簡要介紹如何為Core開發做出貢獻。
你想成為核心開發者
在我們深入瞭解為Core做出貢獻的實際細節之前,需要了解一些可以解決問題的注意事項。
首先,比特幣核心是高標準的。作為一個菜鳥,你不太可能將瘋狂的工作量證明變更後提交請求合併到Core中。像任何高標準管理一樣,你從零聲譽開始,一路向上。
好訊息是沒有人關心你的背景。無論你是14歲的印度人還是45歲的財富500強公司的首席技術官,唯一真正重要的是你的工作質量。
壞訊息是你必須願意把自己留在門口。沒有人關心你有多少年的經驗或者你有什麼好主意來修復比特幣。你的程式碼,評論,文件和測試的質量是重要的。
其次,你應該相應地設定你的期望。值得注意的核心開發人員如Pieter Wuille,Cory Fields和Gregory Maxwell通過多年的血汗,淚水贏得了他們的尊重。新增一個糾正拼寫錯誤的PR並不會贏得Pieter Wuille級別的尊重。好的工作會贏得你的認可和尊重,但只有在你生產了一段時間之後。
第三,這不是一條容易的道路。成為X公司的頂級開發人員並不一定會讓你成為一名優秀的核心開發人員。造成這種情況的原因有很多種,但總的來說,你的工作必須滿足一些非常高標準的測試,文件和程式碼審查,即使是非常稱職的技術公司也是如此。
總而言之,如果你擁有謙遜,追求卓越的追求,那麼Core的貢獻將使你成為更好的開發人員,程式碼審閱者,記錄員和測試人員。
先決條件
你需要一些知識和技能才能開始。
比特幣核心主要有兩種語言,C++和Python。如果你希望貢獻,你最有可能必須學習至少其中一些。
原始碼控制通過Git進行管理。至少,你應該知道如何從origin獲取,如何建立主題分支以及如何rebase。如果你正在測試其他人的程式碼,你還應該知道如何將多個儲存庫新增到本地開發環境中,以便你可以獲取並測試程式碼。
對Core的所有更改都在Github上以PR為基礎合併,因此你需要一個GitHub帳戶。
最後,你需要知道如何在平臺上安裝和刪除軟體包。這些說明非常詳細,但它可以幫助你根據需要新增和刪除ZMQ。
開始
開始時你想要做的第一件事是閱讀一些文件。 README檔案和貢獻指南是開始的好地方。
然後,轉到doc目錄並閱讀那裡的README。doc目錄中的所有文件都在README中描述,因此如果你在任何時候迷路或困惑,可以參考它。
請注意,你不必瞭解我建議的每個文件中的所有內容。如果你遇到一些你不理解的東西,IRC,StackExchange和Slack上有很多非常好的人可以幫你。
從原始碼構建
既然你已經閱讀了開發應該如何工作的基礎知識,那麼首先要從原始碼構建比特幣。首先,克隆比特幣Git儲存庫:
git clone [email protected]:bitcoin/bitcoin
下一步將是設定你的開發環境。這在很大程度上取決於你所使用的平臺,但編譯是你需要經常進行的操作,因此將這部分放下來是非常值得的。
此外,你還需要執行所有整合測試,因此請務必在執行以下說明時開啟GUI和ZMQ。
在你設定環境時,如果某些內容無效,請在提交文件PR之前先Google錯誤。如前所述,IRC,StackExchange和Slack是很好的資源,但請不要問簡單問題而且耗盡每個人時間。
測試
既然你已經編譯了所有內容,那麼下一步就是測試軟體。值得慶幸的是,比特幣核心有各種單元和整合測試,以檢查你剛剛編譯的軟體是否正常工作。
首先,執行位於此處 的單元測試。單元測試與其他所有內容一起編譯,因此你需要做的就是執行生成的二進位制檔案。檢查所有測試是否通過。如果他們不這樣做可能會錯過一些指令。
如果所有單元測試都通過,請執行此處 的整合測試。你將要執行擴充套件測試。特別是修剪測試需要很長時間才能執行,因此你希望在將來執行整合測試時排除該測試。
再次,檢查所有測試是否通過。在最後顯示摘要之前,你將看到很多點。如果某些事情沒有通過,你可能會錯過一些指令,儘管有時候,一些整合測試可能會因RAM和CPU而變得有點浮躁。
貢獻類別
現在你已經設定了系統,你可以開始貢獻!
你可能認為貢獻意味著新增一堆程式碼,傳送PR並獲得榮耀。實際上,很多工作都圍繞著其他人提交的審查和測試程式碼。它有助於理解PR如何合併所涉及的步驟。
- 有人建立更改並通過Pull Request(PR)提交程式碼。
- 一個或多個人檢視程式碼。
- 一個或多個人測試程式碼。
- 當有足夠的人審查並測試程式碼時,維護者將合併程式碼,只有少數人可以這樣做。
大多數人認為對開源專案的貢獻只是貢獻程式碼,但實際上,測試和審查對專案的成功更為重要。正如我們在最近的以太坊奇偶校驗中看到的那樣,缺乏審查和測試通常是許多專案中出現安全漏洞的原因。
審查和測試也很關鍵,因為通常很難有涵蓋所有案例的對抗心態。有許多眼睛看並測試程式碼有助於發現可以利用程式碼的可能方式。
最後,不僅審查和測試對專案有益,而且它們對你有好處!審查和測試將迫使你瞭解有關程式碼庫的更多資訊,並且甚至比編寫程式碼更能讓你理解。
開始
為了適應貢獻過程,你不應該首先新增大量的PR。相反,作為一個沒有聲譽的新開發者,最好的辦法是開始審查和測試其他人的工作。審查和測試往往是瓶頸,因此你可以同時在社群中貢獻並贏得一些聲譽。
值得一提的是,Greg Maxwell在開發人員中享有如此良好聲譽的部分原因是他是一位非常優秀的評論家和測試人員。當他找到可能破壞的方法時,他擁有世界級的才能,他審查和測試的程式碼多於寫作。我保證在你自己審查並測試一些程式碼之後,你會更加感激他。
此外,程式碼通常只寫一次,但它讀了很多次。因此,審查是一個非常重要的步驟,因為它揭示了程式碼的“可讀性”。一般的經驗法則是,對於你執行的每個pull請求,你應該檢視大約3個pull請求。一開始你可能希望這個評論比率pull請求更高。
如何評論
通常,在瞭解程式碼執行的操作之前,你將無法對Pull請求進行良好的稽核。正如他們在編碼中所說,寫作比閱讀容易得多,所以花些時間來真正理解程式碼。
通常,為了掌握PR中發生的事情,你必須查詢正在使用的函式和方法,並仔細檢查程式碼的上下文。如果你感到困惑,並且你正在稽核的程式碼在IRC上,你可能需要直接提問。大多數時候,公關作者非常感謝評論者,並樂意為你提供幫助。
就像回顧一篇文章或一本書一樣,你應該注意很多事情,即:
- 程式碼是否在做它應該做的事情?
- 程式碼是否經過充分測試?
- 圍繞程式碼的所有評論是否有用且準確?
- 程式碼是否清晰,以後可以輕鬆修改?
作為一般規則,如果你不同意某些事情的完成情況,最好假設你不瞭解正在發生的事情而不是開始長篇大論。理智和機敏會讓你在這裡走很長的路。記住,你是在很多方面評論某人的孩子。提問並溫和,至少在開始時。通常情況下,這些程式設計師不瞭解你或你的意圖。當一些東西是一個小問題而非一個可能破壞某些東西的重大問題時,要非常清楚。聽起來像學生試圖掌握改進的內容比偷聽更好。
一旦你確定程式碼試圖實現的是什麼,那麼你可以評論這是否值得做。在你建立一些聲譽之前,請遠離任何可能被認為是消極的評論。
檢視完程式碼後,請使用適當的同行評審評論對PR進行評論。如果你想要NACK,請重新開始並假設你不明白髮生了什麼,與作者交談並提出問題,直到你肯定這是一個糟糕的公關。即便如此,與更有經驗的人交談以確保。
如何測試
為了正確測試,你必須從pull請求下載程式碼,再次編譯並執行測試。如果你能想到一種以某種方式手動測試該功能的方法,那就更好了,但這不是必需的。
大多數情況下,pull請求將包括一個或多個測試。如果編碼器沒有提供測試覆蓋,請嘗試理解為什麼,重構通常不會出於明顯的原因。如果你認為應該進行測試,你可以在PR中寫下“這需要測試”。更好的是,自己編寫測試並讓作者知道它可以在公關中挑選出來!這是一個很好的方式來建立你正在審查的程式碼的人的一些善意。
你作為測試人員的工作是確保測試通過,並且他們充分涵蓋了所引入的功能。評論中的一個好評可能是“如果這樣的情況可以被做到這一點的測試所涵蓋,那就太好了”。
經過測試,請務必在PR中註明你已經過測試。
更好pull請求
最終,當你感覺自己建立自己的pull請求時,你將達到一定程度。pull請求可以是從新增文件到共識關鍵功能的任何內容。無論發生什麼變化,提出良好pull請求的關鍵是讓它易於理解,無需審查。
為此,請不要通過讓你的公關單一次提交3000行更改來折磨你的審稿人。將這些更改分成易於稽核的提交,少於300行(或者可能少於100行!)並進行適當分組。例如,你應該將格式更改放入一個提交中,將實際編碼更改為另一箇中的另一個程式碼塊的大型移動。
努力解釋你正在做什麼以及你在每次提交中所做的事情背後的原因。我不能足夠強調這一部分。逆向思考使PR中的所有內容都易於理解!如果你不這樣做,你將不會讓任何人審查你的程式碼。
當評論者評論某些內容或建議更改時,請嘗試瞭解其原因。如果你不理解,請詢問,直到明確他們想要你做什麼為止。如果你同意,請進行適當的更改並讓你的稽核人員知道,但如果沒有,請確保你與他們進行成熟,機智的對話,以瞭解如何獲得他們的確認。
開始時的PR理念
以下是你可以立即提供的一些公關想法(請記住,請檢視你提交的PR的3倍!)
- 製作文件,特別是有關設定的文件,清晰。
- 為尚未測試的東西編寫單元或整合測試。
- 在未記錄的程式碼中編寫註釋以幫助其他人找到自己的方式。
結論
比特幣核心使用的軟體開發實踐在其他環境中通常不會被遵循。進入Core開發的大多數人發現這個過程過於嚴格和限制。我保證每一步都有理由。
記住要有禮貌,溫柔和委婉。以謙虛的態度和渴望學習的方式進來,這將使你不僅成為更好的開發者,而且還成為比特幣社群的優秀力量。
======================================================================
分享一些比特幣、以太坊、EOS、Fabric等區塊鏈相關的互動式線上程式設計實戰教程:
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在C#程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約程式碼庫二次開發,實戰專案採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- EOS入門教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- 深入淺出玩轉EOS錢包開發 ,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智慧合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中整合對EOS區塊鏈的支援。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
- Hyperledger Fabric 區塊鏈開發詳解 ,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、通道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
- Hyperledger Fabric java 區塊鏈開發詳解 ,課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、許可權策略、頻道配置與啟動、鏈碼通訊介面等核心概念,也包含Fabric網路設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
- tendermint區塊鏈開發詳解 ,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裡是比特幣核心開發的介紹