如何執行比特幣完整節點和本地區塊資源管理器
本指南的目標是建立一個比特幣節點,這對於作為開發人員很有用。如果你成功完成本指南,你將擁有一個與網路同步的節點,包含比特幣區塊鏈的完整歷史記錄,並且完全驗證所有交易。
你還可以通過簡單的JSON-RPC呼叫與你的節點進行通訊。這意味著你可以在不依賴任何受信任的第三方的情況下與比特幣網路進行互動。作為可以做到這一點的簡單示例,我們將執行一個開源區塊資源管理器,為你提供一個 trustless
的介面來檢視網路上的活動。
先決條件
因為本指南適用於開發人員,所以它假設你可以輕鬆地進行開發,例如執行Linux,使用bash和執行Python指令碼。我們不會使用比特幣QT GUI來設定我們的錢包:事實上,本指南中的任何步驟都不會假設使用GUI。
如果更深入地使用某些其他技術是超出範圍的先決條件,我將提供適用於這些部分的有用指南的連結。如果你希望以標準使用者身份執行完整節點,請檢視 ofollow,noindex">bitcoin.org 上的指南。
有一些硬體和軟體要求,如下所列:
- 具有至少2GB RAM(建議4+)的規格適中的計算機。
- 至少150 GB的可用磁碟空間。
- 網路連線速度相當快,沒有嚴格的頻寬要求。
- 安裝Ubuntu 18.04。
- 如果你在已安裝macOS或Windows的開發計算機上執行此操作,則可以在VM中執行此操作。
- 較舊版本的Ubuntu可能也可以正常工作,但未經過測試。
- Linux的其他變種也應該可以正常工作,但是你必須安裝bitcoind並處理適用於你的發行版的依賴項(更多資訊如下)
我在一臺6歲的臺式電腦上使用快速家用寬頻執行我的節點。它有一個Athlon FX處理器,4GB RAM和250GB慢速旋轉磁碟。它執行的很好!比特幣核心團隊專注於讓任何人都可以執行節點並真正獲得回報。
安裝bitcoind
比特幣網路遵循通訊協議和共識。雖然存在該協議的幾個客戶端,但“規範”和最廣泛使用的版本被稱為比特幣核心 Bitcoin Core
。
要在Ubuntu上安裝 Bitcoin Core
,你有以下幾種選擇:
- 1.從GitHub的儲存庫 原始碼 構建。
- 2.下載並安裝官方 預編譯的二進位制檔案 。
- 3.通過比特幣個人存檔包(PPA)中的apt安裝二進位制檔案。
每種方法都有其權衡。在本指南中,我們將選擇使用apt和PPA,因為它是最簡單的方法,並且還可以輕鬆升級到新版本的軟體。一個缺點是它需要信任來自PPA的軟體,例如,它可能會被攻擊者攻陷。請自行評估這些權衡,並選擇最適合你的方法。
如果你只是使用節點進行開發和修改並希望繼續選項#3,只需執行以下命令並按照相關提示操作:
sudo apt-add-repository ppa:bitcoin/bitcoin sudo apt-get update sudo apt-get install bitcoind
成功完成這些命令後,執行 bitcoind -version
。你應該看到一些輸出顯示你正在使用的bitcoind軟體的版本。
初始塊下載
你現在已經獲得了執行節點所需的最新軟體,但你錯過了10年以上的網路歷史。請記住,這是一個完整的節點!這意味著它儲存並驗證區塊鏈的完整歷史,從Satoshi自己開採的第一個區塊開始。你需要下載該歷史記錄。
不幸的是,這個過程需要一段時間,到目前為止需要大約150GB的磁碟空間。在我快速的網際網路上,我能夠在大約4天內下載完整的區塊鏈。你的時間可能因你的連線和地理位置而不同。
執行以下命令:
bitcoind -daemon -txindex=1
這將在後臺執行bitcoind程序並啟用交易索引。你可能還希望在每次重新啟動時自動啟動此過程。你可以通過執行: crontab -e
並新增以下行來執行此操作:
@reboot bitcoind -daemon
請注意,我們沒有將 txindex
選項新增到 crontab
。在本指南的後面部分,我們將此選項放在配置檔案中,這是為節點設定選項的更好方法。
當節點軟體第一次啟動時,它會建立 ~/.bitcoin/
。讓我們現在看看去:
cd ~/.bitcoin/ ls
你會注意到已建立了許多檔案和目錄。我們現在只研究其中的幾個。首先,執行 tail -f debug.log
。你會注意到一系列日誌訊息,如下所示:
2018-08-10 17:22:15 UpdateTip: new best=00000000000000000011b735b8fde14db39704c446dd2b1ae4b8db198c255e0d height=536128 version=0x20000000 log2_work=89.424049 tx=333938835 date='2018-08-10 17:22:26' progress=1.000000 cache=71.6MiB(529075txo)
(當節點首次開始同步時,這些可能會非常快地飛行。按Ctrl-C退出尾隨檔案並檢查訊息)。
這些訊息表示從網路下載的塊。這裡顯示的是我編寫本教程時挖掘的最新塊,但你將遠遠在此之後。你將注意到每條訊息都顯示了許多引數,包括塊的hash(best= X),塊高度(height=X)以及此塊被挖掘的時間戳(date=X)。
要監控初始下載的進度,你可以拖動此檔案並檢視你已捕獲的歷史日期。請注意,由於網路歷史早期的大多數塊大多是空的,因此早期塊將快速下載。隨著你的進一步發展,下載時間將會增加。我的節點大部分時間花在2017年以後下載塊。
你還可以使用 bitcoin-cli
命令列介面與區塊鏈進行互動。例如,可以執行 bitcoin-cli stop
以安全地關閉你的節點,或執行 bitcoin-cli -getinfo
以獲取節點狀態的摘要:
{ "version": 160000, "protocolversion": 70015, "walletversion": 159900, "balance": 0.00000000, "blocks": 536128, "timeoffset": 0, "connections": 33, "proxy": "", "difficulty": 5949437371609.53, "testnet": false, "keypoololdest": 1531965982, "keypoolsize": 1000, "paytxfee": 0.00000000, "relayfee": 0.00001000, "warnings": "" }
還有一個小插曲。節點下載的塊資料儲存在 ~/.bitcoin/blocks/
目錄中的二進位制檔案中。你通常不會直接與此資料互動,但請嘗試執行此命令:
head -c 210 ~/.bitcoin/blocks/blk00000.dat && echo '\n'`.
你會看到:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
你認出那句話嗎?如果你知道的話,它可能會讓你的脊椎發冷!如果你不知道怎麼回事,那就去Google瞭解一下為什麼要這樣做。
如上所述,初始塊下載至少需要幾天時間。在此階段,守護程式可能會使用大量資源。我的處理器固定在一致的20-30%,使用超過2gigs的RAM,並且通常使我老舊的機器變慢。一旦你的機器合適,執行節點軟體對效能的影響可以忽略不計。
如果你已經做到這一點,請將頁面加入書籤,並在節點同步後的幾天內返回!
伺服器配置
歡迎回來!是時候將節點配置為充當JSON-RPC伺服器,這樣我們就可以用我們喜歡的語言執行和編寫程式碼來與之互動。
回比特幣目錄並建立一個名為 bitcoin.conf
的文字檔案。
cd ~/.bitcoin/ touch bitcoin.conf
此後,當bitcoind啟動時將讀取此檔案,並將用於配置節點的選項。可以設定許多選項,並且每個選項也可以在命令列中設定。要了解可用的選項,請執行:
bitcoind --help
在你喜歡的文字編輯器中開啟 bitcoin.conf
檔案並新增以下行:
## Configuration for the Bitcoin Core Daemon # Accept command line and JSON-RPC commands server=1
這是一個良好的開端,但不足以啟用與我們的節點的RPC互動。為此,我們還必須為將要登入的使用者建立身份驗證憑據。
以前可以在配置檔案中以文字形式指定使用者名稱和密碼,但這種方法顯然不安全且已被棄用。相反,我們必須提供使用者名稱以及密碼的hash值:與hash期間使用的salt一起提供。
要生成此命令,請使用以下命令下載比特幣核心團隊提供的規範Python指令碼,並使用自己的使用者名稱和密碼執行它。
wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py python3 rpcauth.py myusername mysecretpassword
一定要用理智的東西替換使用者名稱和密碼值!該指令碼應該產生如下結果:
String to be appended to bitcoin.conf: rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7 Your password: mysecretpassword
按照說明,將此行新增到你的 bitcoin.conf
檔案中,該檔案現在應如下所示:
## Configuration for the Bitcoin Core Daemon # Accept command line and JSON-RPC commands server=1 # Index all transactions txindex=1 # Auth Credentials For JSON-RPC server rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7
接下來,重新啟動節點以確保配置更改生效:
bitcoin-cli stop bitcoind -daemon
此時,你已準備好向節點發出JSON-RPC請求,只要它們來自節點本身即可。要測試這一點,請嘗試執行以下命令(注意:你可能必須先通過apt安裝curl)。
curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332
請務必使用你實際建立的使用者名稱替換myusername。系統將提示你輸入相關密碼,如果一切正常,你應該看到以下內容:
{ "result": { "chain": "main", "blocks": 536148, "headers": 536148, "bestblockhash": "00000000000000000028fab7a6b5035e2745fe06ef58d817bb32f35924198f97", "difficulty": 5949437371609.53, "mediantime": 1533926692, "verificationprogress": 0.9999864596463776, "initialblockdownload": false, "chainwork": "000000000000000000000000000000000000000002af5dee686cd058c3ec064d", "size_on_disk": 203955272825, "pruned": false, "softforks": ["..."], "bip9_softforks": { "..." : "" }, "warnings": "" }, "error": null, "id": "curltest" }
如果這樣做,你就可以開始使用完整節點來構建/執行與其互動的應用程式。要了解有關可用的全套API呼叫以及包含API的各種庫的更多資訊,請在bitcoin.org上檢視 此參考 。
IP白名單
預設情況下,你的節點配置為僅接受來自localhost的JSON-RPC請求,即執行它的計算機。如果你要在節點所在的同一個裝置上進行開發,這很好,你可以跳過本節。
如果你使用其他計算機(如Windows或macOS計算機)進行開發,則必須使用rpcallowip選項將允許呼叫的IP地址列入白名單,並確保埠 8332
可訪問。(請注意,雖然VM在同一硬體上執行,但實際上確實具有唯一的IP)。
我的本地開發機器執行macOS,所以我可以使用 ifconfig
來確定我的本地ip,然後通過在我的配置檔案中新增類似 rpcallowip=192.168.0.101
的內容將其列入白名單。請注意,你可以多次包含此選項以將多個IP地址列入白名單。
查詢開發機器的IP並在節點上提供埠 8332
的細節取決於你的平臺和網路。這些留給讀者作為練習。這是你的最終 bitcoin.conf
可能是什麼樣子的一個例子。
#### Configuration for the Bitcoin Core Daemon # Keep my daily upload bandwith around 1 GB maxuploadtarget=1024# Note that if your node isn't exposed to the internet on # Port 8333, you're not feeding data to other nodes and this # setting won't matter. # While not required, if you'd like to support the network # by servering data, make sure your router is configured to # forward port 8333 to the machine with your. # Accept command line and JSON-RPC commands server=1 # Index all transactions txindex=1 # Auth Credentials For JSON-RPC rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7 # Whitelist only my Mac's local IP for JSON-RPC calls rpcallowip=192.168.0.101
執行塊資源管理器
在你的完整節點啟動並執行,同步到網路並配置為用作JSON-RPC伺服器之後,是時候執行你自己的本地區塊鏈資源管理器了!我們將使用由 Dan Janosik 建立的開源 btc-rpc-explorer 。
這個資源管理器非常棒,因為它不使用資料庫:它只需要訪問你的節點,它通過我們剛剛配置的RPC介面與之互動。
btc-rpc-explorer
是使用Node.js用JavaScript編寫的,因此你需要安裝最新的穩定版本的node和npm。如果你還沒有這些,請檢視所選 開發平臺 的說明。
一旦Node和npm準備就緒,從GitHub複製repo並使用以下命令構建它(假設Unix dev環境):
git clone https://github.com/janoside/btc-rpc-explorer.git cd btc-rpc-explorer npm install npm run
接下來,在你選擇的文字編輯器中開啟 app/credentials.js
檔案,並將使用者名稱和密碼更新為你在RPC配置期間使用的值。
如果你的開發框與節點不同,則還必須將主機引數更新為節點的IP地址。這可能是區域網IP,除非你的節點託管在LAN之外。(另請注意,你的路由器將來可能會為你的開發箱或你的節點分配一個新IP。請檢視在路由器配置面板中根據MAC地址配置靜態本地IP以解決此問題)。
更新憑據後,你就可以執行資源管理器了。執行以下命令,然後在你選擇的瀏覽器中訪問http://127.0.0.1:3002/。
npm start
如果一切順利,你應該看到這樣的事情:
恭喜,你現在擁有自己的比特幣全節點,以及本地採購的有機塊瀏覽器。快樂的黑客!
======================================================================
分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- tendermint區塊鏈開發詳解 ,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裡是原文 如何執行比特幣完整節點和本地區塊資源管理器