1. 程式人生 > >兄弟連區塊鏈入門教程EOS源碼分析(2)運行

兄弟連區塊鏈入門教程EOS源碼分析(2)運行

成功 單個 peer config 多節點 個數 put ddr 端口

EOS安裝完畢後,就可以運行EOS程序了。目前支持三種方式的運行,分別是:

-?本地私有節點運行
????在本地局域網中部署EOS節點,提供EOS服務,節點可以單個,也可以部署多節點
-?在測試公網下運行
????Block.One 公司提供了測試的公網環境,你可以使自己部署的節點連接公網測試環境
-?Docker 中運行
????
本地私有節點運行
EOS為了能夠方便開發者測試,目前在公網環境下部署了一套測試網絡。如果你部署的節點不與這套公網測試環境連接,那就成為本地私有節點部署。在進行本地部署的時候,可以只部署單一節點,也可以部署多個節點,下面我們會分別介紹這兩種情況:

單節點的部署與運行
當成功編譯項目後,就可以在build/programs/eosiod

?目錄下運行程序了。調用eosiod?命令可以運行EOS 節點程序,當你第一次運行時,很有可能會出現錯誤而停止運行,不管是否出現錯誤,都通過?Ctrl-C?停止程序,你需要先對程序做一些配置後,系統才能真正運行。當第一次運行程序後,會自動生成?data-dir?目錄,裏面包含了默認的配置文件(config.ini)和一些其他文件。你需要對配置文件做如下的修改:

-?添加創世紀的block
genesis-json = /path/to/eos/genesis.json

-?在測試鏈上設置producers,並通過他們生產區塊
????
????producer-name = inita
????producer-name = initb

????producer-name = initc
????producer-name = initd
????producer-name = inite
????producer-name = initf
????producer-name = initg
????producer-name = inith
????producer-name = initi
????producer-name = initj
????producer-name = initk
????producer-name = initl
????producer-name = initm
????producer-name = initn
????producer-name = inito
????producer-name = initp
????producer-name = initq
????producer-name = initr
????producer-name = inits
????producer-name = initt
????producer-name = initu
????``<br/>-?加載區塊生產插件,從而系統可以生產區塊<br/>plugin = eosio::producer_plugin<br/>-?加載錢包插件,從而支持錢包服務<br/>plugin = eosio::wallet_api_plugin`
-?加載RPC和API插件,從而可以通過這兩種接口訪問EOS服務

????
????plugin = eosio::chain_api_plugin
????plugin = eosio::http_plugin
????

再次運行?eosiod?命令,當你看到如下日誌的時候,說明你已經成功啟動EOS服務了。

1575001ms thread-0 chain_controller.cpp:235 _push_block ] initm #1 @2017-09-04T04:26:15 | 0 trx, 0 pending, exectime_ms=0
1575001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initm generated block #1 @ 2017-09-04T04:26:15 with 0 trxs 0 pending
1578001ms thread-0 chain_controller.cpp:235 _push_block ] initc #2 @2017-09-04T04:26:18 | 0 trx, 0 pending, exectime_ms=0
1578001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initc generated block #2 @ 2017-09-04T04:26:18 with 0 trxs 0 pending
...

部署多節點網絡
在你EOS項目的?build/programs/eosio-launcher?目錄下,有一個專門用於EOS節點啟動的應用,名稱為?eosio-launcher,下面的命令運行了兩個可以相互交互的節點:

sh
cd?~/eos/build
cp ../genesis.json ./
./programs/eosio-launcher/eosio-launcher -p2 --skip-signature

上面的命令將會建立兩個數據目錄,每個節點對應其中一個目錄,目錄名稱分別是:tn_data_00?和tn_data_01

你可以在命令行終端中看到如下的日誌輸出, 日誌表示系統生成了兩個子進程,每個進程對應一個運行節點:

spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_0
spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_1

為了進一步驗證這兩個節點確實在正常運行,你可以使用eosioc客戶端工具分別連接這兩個節點,如下:

cd path-to-eos/build/programs/eosioc
./eosioc -p 8888 get info
./eosioc -p 8889 get info

上面的兩條eosioc?分別連接兩個節點,可以看到,這兩個節點端口號分別是8888和8889,連接後,調用?get info命令,獲取到不同節點的區塊鏈信息。

在測試公網下運行
Block.One 為測試人員和開發者提供了公網測試環境,如果你已經在本地體驗過EOS節點的運行,希望能夠在公網下測試你的代碼,那你可以把本地的EOS節點連接到公網環境,具體操作如下:

cd path-to-eos/build/scripts
./start_npnode.sh

系統編譯後,會生成start_npnode.sh?腳本文件,此腳本其實也是調用了eosd程序,不過其使用的默認數據目錄參數是testnet_np,此目錄的config.ini文件中的設置了公網環境下p2p節點的連接地址,因此,程序啟動後就會直接與公網進行連接了,這也是連接公網環境和在私有鏈下運行的主要區別,這行配置如下:
p2p-peer-address = p2p-testnet1.eos.io:9876

p2p-testnet1.eos.io這個域名就指向Block.One 公網環境的一個節點。start_npnode.sh?命令運行後,可以得到如下日誌輸出:

Launched eosd.
See testnet_np/stderr.txt for eosd output.
Synching requires at least 8 minutes, depending on network conditions.

如果希望了解節點運行和同步的具體情況,可以運行如下命令查看:

tail -F testnet_np/stderr.txt

當連接公網環境時,節點首先需要從公網中同步已有的區塊鏈數據,這需要一定的時間,當你看到如下日誌信息的時候,說明數據正在同步:

3439731ms chain_plugin.cpp:272 accept_block ] Syncing Blockchain --- Got block: #200000 time: 2017-12-09T07:56:32 producer: initu
3454532ms chain_plugin.cpp:272 accept_block ] Syncing Blockchain --- Got block: #210000 time: 2017-12-09×××3:29:52 producer: initc

當同步全部完成後,你將看到如下的信息:
42467ms net_plugin.cpp:1245 start_sync ] Catching up with chain, our last req is 351734, theirs is 351962 peer ip-10-160-11-116:9876
42792ms chain_controller.cpp:208 _push_block ] initt #351947 @2017-12-12T22:59:44 | 0 trx, 0 pending, exectime_ms=0
42793ms chain_controller.cpp:208 _push_block ] inito #351948 @2017-12-12T22:59:46 | 0 trx, 0 pending, exectime_ms=0
42793ms chain_controller.cpp:208 _push_block ] initd #351949 @2017-12-12T22:59:48 | 0 trx, 0 pending, exectime_ms=0

Docker 中運行

兄弟連區塊鏈入門教程EOS源碼分析(2)運行