最近在看比特幣源碼,從Golang版本入手,一來最近也在寫Golang語言,二來btcd版本的代碼模組設計以及單元測試要比C++版本的源碼更為清晰和完善。
對於Golang新手但又有其他語言基礎的人,我推薦《Go語言實戰》作為Golang入門書籍。該書並不像傳統的教材按基礎類型、迴圈這種套路順序講述,而是直接點出Golang和其他語言的不同,並用不同的小項目直接從代碼開始講解Golang的文法。對於有其他語言基礎的人而言,通過代碼能更容易理解一門新的語言。
同時,可以先看"如何用Go實現區塊鏈"這個簡化版的項目(https://liuchengxu.gitbooks.io/blockchain-tutorial/content/part-1/basic-prototype.html),它把區塊鏈最基本的結構都包含在內,可以協助理解。在基本工作準備就緒後,開始體驗btcd代碼。
首先要配置好環境,我使用的是ubuntu系統,安裝golang後再設定GOROOT和GOPATH路徑。這些在網上可以找到詳細的設定方法,簡單地說GOROOT是Golang源碼安裝路徑,GOPATH是開發代碼的路徑,類似JAVA項目的workplace。
跑glide install這裡會遇到牆的問題,導致下面這個報錯:
我的做法是配置鏡像,然後再重跑glide install就可以了
就這麼簡單,btcd安裝完成了。
有幾個基本的命令可以跑下
查看版本
查看可用的命令
跑btcd則直接啟動了比特幣程式,內建的DNS SEEDS會讓這個全新的節點接入比特幣網路。
btcd啟動一個全新節點的
在這個裡,可以看到不少的資訊,即本地這個重新的節點如何訪問比特幣網路裡的其他節點,進而下載區塊資料到本地,具體互動詳情要往後再分析。簡單地說,第一次啟動這個程式,好比一個新人進入了比特幣的世界裡,但是新人不認識這個世界裡的其他人,其他人也不認識他。於是新人會首先找到幾個權威的人(DNS Seeds),找到了其他人的地址,進而新人再去認識更多的人,成為這個網路的一部分,同時把他們手頭上的賬本資料下載到本地。
另外,需要留意的是這裡連入的是主網,這是2009年1月3日中本聰建立比特幣至今的網路,目前總的區塊資料已經超過100G。如果只是研究代碼,並不需要下載這麼多資料,而且也沒辦法在主網上直接做測試,因為每筆交易都要給真金白銀的礦工費,那麼testnet或就成了本地開發的首選,下篇文章將介紹比特幣的測試網路。