天天看點

如何加入比特币核心開發的介紹

如果你是開發人員并且你擁有任何比特币,那麼為比特币核心做出貢獻可能是你可以做的最好的事情之一,這可以幫助你進行投資。在本文中,我将簡要介紹如何為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。

  • linux/unix說明在這裡。
  • osx說明在這裡。
  • Windows說明在這裡。
  • openBSD說明在這裡。

在你設定環境時,如果某些内容無效,請在送出文檔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語言工程師快速入門區塊鍊開發的最佳選擇。

彙智網原創翻譯,轉載請标明出處。這裡是比特币核心開發的介紹