1. 程式人生 > >EOS 原始碼編譯、連線主網與單節點網路

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

執行上面的命令就會顯示網路的資訊:

網路資訊

我們注意到上圖中 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個不同的部分,它們是: nodeoskeosdcleoseosiocpp,它們分別承擔不同的工作,下面分別進行簡要介紹。

  • nodeos

    通過配置不同外掛,啟動節點,同步EOS網路資料或者自己生成塊,也可作為API節點供呼叫。

  • keosd

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

  • cleos

    命令列互動介面,連線錢包與EOS網路,執行檢視網路資訊,推送交易資訊,部署智慧合約等

  • eosiocpp

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

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

EOS 單節點網路

後記

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

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

比特幣

微信

支付寶

相關推薦

EOS 原始碼編譯連線節點網路

一、從原始碼編譯與安裝 前一章,我們講解了 EOS 在 Docker 環境下的簡單使用,作為一個碼農,不親自從原始碼編譯怎麼對待起碼農這兩個字,本章我們開始從原始碼的獲取開始,依次講解編譯、啟動和外掛系統。 現在 EOS 的編譯比起以前有了很大的改善,幾乎不用費

EOS入門指南-PART2 連線

本文主要介紹了本地的eos程式如何連線主網。 1. 我們在EOS主網上麼 這時我們在命令列中輸入: cleos get info 會顯示如下介面: 注意到裡面有一個chain_id欄位,它的值是cf057...c4f,這是它所在的網

Linux系統下的編譯連線執行

眾所周知,我們程式設計師所寫的程式碼都是英文字母與數字的集合,我們人能看懂,但是電腦只能識別高低電壓,也就是所說的01程式碼,它是如何識別我們程式設計師所寫的程式碼呢,比如c語言、c++。 我們所寫的程式碼又是經過了哪些過程之後,計算機就能識別了呢?也就是本文要講的我們所寫的程式碼是如何變成可執

cubieboard2 android核心原始碼編譯核心配置

1、原始碼下載及解壓 2、android開發環境搭建: (1)Vmware虛擬機器、64位ubuntu12.04、至少34G的磁碟空間、2G記憶體 (2)安裝JDK (3)安裝android SDK (4)安裝eclipse、ADT、NDK和CDT (5)安裝核心移植(

操蛋的EOS,蛋疼的“映射”

eos主網映射EOS眾籌將在北京時間2018年6月2日06:59:59結束。由於官方之前有明確要求用戶進行映射的說法,所以隨著EOS主網上線日期越來越近,EOS用戶盡早完成“映射”的心情也越來越迫切。但苦於EOS官方“映射”指導的繁瑣操作,眾多EOS用戶對“映射”倍感困難。更有甚者,知道“映射”這個事情,但”

實驗 3 程式設計編譯連線跟蹤

     實驗任務 練習1   第一步,編寫彙編源程式t2.asm,源程式程式碼如下圖所示。        第2步,對源程式 t1.asm 進行彙編、連線、執行、除錯   (1) 執行程式,觀察程式輸出結果是什麼?            

redis原始碼編譯啟動停止

下載原始碼 直接在官網https://redis.io/下載最新原始碼,本文下載原始碼 redis-5.0.0.tar.gz,解壓後目錄如下: 編譯原始碼 在目錄中執行: $make 程式編譯完成後在src目錄中會有這幾個檔案redis-cli、redis-server。在

1.EOS原始碼編譯執行

目前網路上都是針對老版EOS2.0原始碼編譯的文章,我在mac上參考這些文章編譯,最後發現根本就不對,最新版本只需一條命令(./eosio_build.sh,依賴庫會自動安裝的)即可。我根據這些文章手動安裝的庫還導致如下問題,最後大部分時間都花在解決這個問題上。【官網安裝文件傳送門】 ItleaksDeMa

【實驗三】程式設計編譯連線跟蹤

四、實驗結論     1.任務一:   (1) ①用edit命令開始編輯。 ②出現如圖介面,按下回車。 ③出現此介面,按下alt鍵,選單欄的每個單詞首字母會變成白色,在鍵盤上按F鍵,展開File欄。 ④出現如圖介面,按下N鍵,新建一個檔案。 ⑤用游

|實驗 3 程式設計編譯連線跟蹤

實驗 3 程式設計、編譯、連線、跟蹤 一、實驗結論 1.練習 1 對源程式 t1.asm 進行彙編、連線、執行、除錯 (1)     執行程式,觀察程式輸出結果   (2)     將 line4 和 lin

實驗叄 程式設計編譯連線跟蹤

南京資訊工程大學實驗報告 實驗名稱   實驗3 程式設計、編譯、連線、跟蹤   實驗日期  11.12             

實驗三程式設計編譯連線跟蹤

實驗結論: 1、練習1 (1) (2) 將值分別都改為7之後 (3)  不滿足 PSP的頭兩個位元組不是CD 20     2、練習2 (1) (2) (3) 總結與體會: 通過本章的學習,我知道了怎麼編輯,編譯、

InfluxDB原始碼編譯安裝配置及主從同步實現

先扯點蛋 公司有個專案要求使用InfluxDB時序資料庫儲存點東西。第一次聽說還有這種資料庫,哈哈哈,孤陋寡聞了,先從各位大佬的部落格看起,慢慢學習,逐漸瞭解了之後在伺服器上進行安裝。直接使用官方包進行安裝很簡單,檢視官方說明即可。安裝之後使用才發現,開源的只支援單機版的,但是公司用不能

apue.3e原始碼編譯環境配置

1.從官網上下載apue.3e原始碼:http://www.apuebook.com/src.3e.tar.gz 2.解壓原始碼至指定位置:tar -zxv -f src.3e.tar.gz -C /usr/src/ 3.轉到解壓後的apue.3e/目錄下: cat REA

eosjs連線節點旳例項程式碼

用eosjs連線主網節點很簡單,只需要在建立JsonRpc物件時,指定要連線主網節點的地址 就可以了。 如果要深入系統地學習EOS開發,推薦這個課程:EOS智慧合約與DApp開發入門 例如,下面的程式碼將建立一個使用eosnewyork.io節點RPC旳[JsonR

linux下編譯連線及執行時環境變數設定(boost庫為例)

以boost庫的存放目錄/usr/boost為例, 開啟/etc/profile, 追加以下內容(前兩行為編譯時路徑): export CPLUS_INCLUDE_PATH=/usr/boost/include:$CPLUS_INCLUDE_PATH export LIB

Apache Tomcat 8_原始碼編譯安裝及除錯

步驟一、JDK、Ant 的安裝請參考其他教程。本次 Tomcat 8.0.37 原始碼編譯使用的 JDK、Ant 版本如下所示: 步驟三、解壓 apache-tomcat-8.0.37-src.tar.gz 並對 ./apache-tomcat-8

二分(二分答案二分搜尋)調性

經典二分搜尋是二分空間範圍。 二分答案又叫二分猜值,是二分解的值空間。 其實可以統一,普通的二分搜尋也是二分答案值域——下標空間,也是猜值。 二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if (j > i)

HyperLedger Fabric v1.1.0-alpha 版本原始碼編譯節點網路搭建

本文主要參考:https://blog.csdn.net/honganboy/article/details/78714578 的介紹,十分感謝作者。但是安裝版本和環境不同,安裝過程也遇到了一些小問題,因此也再寫一篇供大家參考。安裝環境:作業系統-64位Centos7.2,F

【問鏈-EOS公開課】第十五課 用cleos註冊EOS賬戶投票和發幣

第一步: 安裝docker https://www.docker.com/community-edition #install docker for CentOS. (其他作業系統看上面連結) sudo yum install -y yum-utils device-mapper-