天天看點

EOS 源碼編譯、連接配接主網與單節點網絡後記

一、從源代碼編譯與安裝

前一章,我們講解了 EOS 在 Docker 環境下的簡單使用,作為一個碼農,不親自從源碼編譯怎麼對待起碼農這兩個字,本章我們開始從源代碼的擷取開始,依次講解編譯、啟動和插件系統。

現在 EOS 的編譯比起以前有了很大的改善,幾乎不用費什麼麻煩就可以從源代碼編譯成功。從本章,假設你用的系統為 Mac OS,如果不是請遵守各自系統的規定。

首先,我們來安裝相關的信賴,對于 Mac 系統來說,當然是安裝神器

brew

了。在 Shell 下輸入下面的指令,即可以安裝所有必需的依賴:

brew install automake
brew install libtool
brew install llvm
brew install cmake
brew install gmp
brew install mongodb
brew install doxygen
brew install graphviz
brew install lcov
           

如果系統中已經安裝過

gettext

,那麼需要執行下面的指令來重新生成連接配接。

brew unlink gettext && brew link --force gettext
           

在 Mongodb 安裝後,我們可以使用下面兩個指令之一來啟動它

brew services start mongodb
mongod --config /usr/local/etc/mongod.conf
           

接下來,就要 github 下載下傳 EOS 源了代碼,Shell 中輸入以下指令:

git clone https://github.com/EOSIO/eos --recursive
           

具體下載下傳時間要取決于你的網絡。在代碼下載下傳完成之後,就可以進行編譯了,指令如下:

cd eos
./eosio_build.sh
           

如果沒有什麼意外,一段時間之後,你就會看到下圖:

EOS 源碼編譯、連接配接主網與單節點網絡後記

如果你能看到上面和圖檔,那麼恭喜你,你的 EOS 編譯成功了。

當編譯成功之後,接下來我們就開始安裝 eos,輸入以下指令:

sudo ./eosio_install.sh
           

幾分鐘之後,你就會看到下圖:

EOS 源碼編譯、連接配接主網與單節點網絡後記

在上面的圖檔中我們注意到 EOS 相關的可執行指令被放入

/usr/local/eosio/bin

目錄,我們把這個目錄加入系統

PATH

變量中,然後就可以在 Shell 中執行相關的指令了。

二、啟動 EOS 節點

對于同步主網、測試網,外加自己單節點測試的,可以不執行上面的安裝,而是單獨執行

build

目錄下面的各個程式。

cd build/programs/nodeos
./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin 
           

其中,參數

-e

的作用是開始生成區塊,

-p eosio

是指定節點的名稱,

--plugin

指定了兩個插件,第一個插件可以擷取鍊上的資訊,送出交易資訊,提供了

/v1/chain

開頭的各種 RPC,第二個插件提供了擷取指定賬号的交易曆史記錄,這些 API 以

/v1/history

為開頭,

--hard-replay-blockchain

參數是為了

注意:

如果啟動時候出現

dirty-flag

這樣的錯誤,需要加上

--hard-replay-blockchain

參數。

如果啟動時候出現

3190003 block_log_not_found: block log can not be found

錯誤,需要把

--hard-replay-blockchain

參數去掉。

執行上面的指令可以看到如下圖所示的内容:

EOS 源碼編譯、連接配接主網與單節點網絡後記

注意紅框中的内容,這個表示節點已經在産生區塊了。

既然本地節點已經運作,并且開始生成區塊了,那我們就另起一個終端,執行

cleos

來檢視目前網絡資訊:

cd build/programs/cleos
./cleos get info
           

執行上面的指令就會顯示網絡的資訊:

EOS 源碼編譯、連接配接主網與單節點網絡後記

我們注意到上圖中

chain_id

等于

cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f

這個代表了目前我們運作的是本地測試網,對于公共測試網絡的網絡 id 是

038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca

連接配接到主網

預設情況下,我們連接配接到的是自己單節點的私網。如何連接配接到 EOS 主網?在回答這個問題之前,我們先要想一下為什麼要連接配接到主網。因為,隻有連接配接到主網,我們才有可能注冊成為生産區塊的節點,并拉票成為超級節點,獲得真正出塊的權力。既然連接配接到主網這麼重要,那麼如何才能連接配接到主網呢,下面我們就來研究這個問題。

如何連接配接到主網,其實非常簡單,隻需要主網的一份創世區塊和主網的節點清單就可以了。

為了友善大家,這裡我們提供一份主網的創世區塊。

{
  "initial_timestamp": "2018-06-08T08:08:08.888",
  "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 200000,
    "target_block_cpu_usage_pct": 1000,
    "max_transaction_cpu_usage": 150000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  }
}
           

我們在目前目錄,即

build/programs/cleos

目錄下,建立一個檔案

genesis.json

,内容為上面的 JSON 内容。

接下來,我們要在配置檔案

config.ini

中增加主網的節點清單,這個檔案位于

~/Library/Application\ Support/eosio/nodeos/config

目錄下,打開這個檔案,增加如下節點清單:

p2p-peer-address = p2p.prod.eosgravity.com:80
p2p-peer-address = eu-west-nl.eosamsterdam.net:9876
p2p-peer-address = p2p.mainnet.eosgermany.online:9876
p2p-peer-address = 54.38.250.15:19878
p2p-peer-address = p2p.genereos.io:9876
p2p-peer-address = mainnet.eospay.host:19876
p2p-peer-address = 130.211.59.178:9876
p2p-peer-address = 54.153.59.31:9999
p2p-peer-address = 94.130.250.22:9806
p2p-peer-address = peer.main.alohaeos.com:9876
p2p-peer-address = peer.eosn.io:9876
p2p-peer-address = prod.mainnet.eos.cybex.io:9888
p2p-peer-address = p2p-1.eosnetwork.io:9876
p2p-peer-address = p.jeda.one:3322
p2p-peer-address = eosbattles.com:9877
p2p-peer-address = 34.226.76.22:9876
p2p-peer-address = mainnet.eosoasis.io:9876
p2p-peer-address = node.eosflare.io:1883
p2p-peer-address = p2p.eosio.cr:1976
p2p-peer-address = p2p.eosio.cr:5418
p2p-peer-address = eno.eosvan.io:19866
           

然後,執行下面的指令:

./nodeos -e --genesis-json ./genesis.json --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

注意:

1、如果出現

Incorrect plugin configuration Genesis state can only be set on a fresh blockchain.

這個錯誤,請在指令行上加入

--delete-all-blocks

參數,或者删除

~/Library/Application\ Support/eosio/nodeos/data

這個目錄。

2、如果出現

Not producing block because I don't have the private key for EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3

這個錯誤,請把指令上的

-p eosio

參數去掉。

3、為了本地開發,不建議直接修改

config.ini

檔案,而是應該通過增加

--p2p-peer-address

參數來指定主網的節點。上面的節點轉化為

--p2p-peer-address p2p.prod.eosgravity.com:80 --p2p-peer-address eu-west-nl.eosamsterdam.net:9876 --p2p-peer-address p2p.mainnet.eosgermany.online:9876 --p2p-peer-address 54.38.250.15:19878 --p2p-peer-address p2p.genereos.io:9876 --p2p-peer-address mainnet.eospay.host:19876 --p2p-peer-address 130.211.59.178:9876 --p2p-peer-address 54.153.59.31:9999 --p2p-peer-address 94.130.250.22:9806 --p2p-peer-address peer.main.alohaeos.com:9876 --p2p-peer-address peer.eosn.io:9876 --p2p-peer-address prod.mainnet.eos.cybex.io:9888 --p2p-peer-address p2p-1.eosnetwork.io:9876 --p2p-peer-address p.jeda.one:3322 --p2p-peer-address eosbattles.com:9877 --p2p-peer-address 34.226.76.22:9876 --p2p-peer-address mainnet.eosoasis.io:9876 --p2p-peer-address node.eosflare.io:1883 --p2p-peer-address p2p.eosio.cr:1976 --p2p-peer-address p2p.eosio.cr:5418 --p2p-peer-address eno.eosvan.io:19866

4、隻有第一次啟動主網時,需要指定創世區塊,随後啟動時不需要指定。

如果一切正常,那麼在另一個 Shell 中執行指令:

./cleos get info
           

就能看到下面類似的圖,之所說是類似,因為截屏的時間不同,顯示的區塊頭部數量和最後一個區塊的數量也不一樣。

EOS 源碼編譯、連接配接主網與單節點網絡後記

這次我們看到的網絡 id 是

aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906

,也就是主網絡。

三、單節點網絡

當我們啟動本地節點進行開發、調用時,其實啟動了一個本地的單節點網絡,在這個網絡中包括 4個不同的部分,它們是:

nodeos

keosd

cleos

eosiocpp

,它們分别承擔不同的工作,下面分别進行簡要介紹。

  • nodeos

    通過配置不同插件,啟動節點,同步EOS網絡資料或者自己生成塊,也可作為API節點供調用。

  • keosd

    管理錢包,錢包中包含EOS公私鑰對資訊

  • cleos

    指令行互動接口,連接配接錢包與EOS網絡,執行檢視網絡資訊,推送交易資訊,部署智能合約等

  • eosiocpp

    編譯智能合約,生成wasm檔案及abi檔案

它們構成的網絡如下圖所示:

EOS 源碼編譯、連接配接主網與單節點網絡後記

後記

由于本人水準所限,文中錯誤在所難免,歡迎您踴躍指出錯誤,在下感激不盡。我的微信聯系方式:joepeak。

原創不易,尤其寒冬,歡迎贊助我一杯咖啡。

EOS 源碼編譯、連接配接主網與單節點網絡後記
EOS 源碼編譯、連接配接主網與單節點網絡後記
EOS 源碼編譯、連接配接主網與單節點網絡後記

版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享4.0許可證)

繼續閱讀