EOS开发系列(一)从源码搭建一个EOS测试节点

引言

从本周开始,我要EOS一条道走到黑了。一边学习EOS开发,一边记录,今天算是开篇。这个系列不知道会有几篇,看后面的学习情况吧。理想情况是在EOS主链上线前能对EOS开发有一个非常深刻的理解。今天是第一篇,从源码搭建一个EOS节点。

从源码编译EOS

打开EOS在github上的网址https://github.com/EOSIO/eos,其Readme.md中讲的比较清楚,对于目前EOS支持ubuntu16.10和MacOS Sierra的自动化编译安装的脚本。我电脑是MacOS Sierra上面也装了最新的XCode所以按照说明执行自动化脚本即可。如果你的Mac系统中没有按照brew那么执行下面的脚本可以先安装brew

xcode-select –installruby -e”$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

安装完成后就可以执行自动化脚本了,在运行前先cd到你想要编译的目录下,我是直接在用户的home目录下也就是cd ~后执行以下脚本的

git clone https://github.com/eosio/eos –recursive #从github上clone eos项目到本地

cd eos #进入eos目录

./build.sh darwin #执行编译脚本,如果是ubuntu系统则执行 ./build.sh ubuntu

接下来就是漫长的等待,我忘记看时间了,用macbook4核的i7 cpu我感觉要用了大概半小时以上。

运行一个单节点网络

eos软件编译完成,按照Readme.md上的描述就可以启动一个单节点的网络了。先到eos/build/progrems/eosd目录下,如果你中途没有变更过目录那么使用以下命令即可进入

cd build/progrems/eosd

可以看到里面有一个eosd的可执行文件直接使用命令执行./eosd会得到一个错误(注意这一步是要做的,因为eosd会在当前目录产生一个data-dir的目录),使用ctrl+c停掉eosd之后,进入data-dir目录修改config.ini

# Load the testnet genesis state, which creates some initial block producers with the default key

genesis-json = /path/to/eos/source/genesis.json #注意这个地方要填genesis.json文件的真实路径像在我电脑上就是/Users/wjfree/eos/genesis.json

# Enable production on a stale chain, since a single-node test chain is pretty much always stale

enable-stale-production = true

# Enable block production with the testnet 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

# Load the block producer plugin, so you can produce blocks

plugin = eos::producer_plugin

# Wallet plugin

plugin = eos::wallet_api_plugin

# As well as API and HTTP plugins

plugin = eos::chain_api_plugin

plugin = eos::http_plugin

注意如果上述在config.ini有默认值,需要将该配置该成与上述一致,同时不能有重名配置项出现在配置文件中。

修改完成保存退出,再回到eosd目录执行./eosd就可以运行起来。可以看到在该测试网络中每3秒就会产生一个块

2073005ms thread-0  producer_plugin.cpp:210      block_production_loo ] initr generated block #7804 @ 2017-09-17T08:34:33 with 0 trxs  0 pending

2076006ms thread-0  chain_controller.cpp:235      _push_block          ] initl #7805 @2017-09-17T08:34:36  | 0 trx, 0 pending, exectime_ms=1

2076006ms thread-0  producer_plugin.cpp:210      block_production_loo ] initl generated block #7805 @ 2017-09-17T08:34:36 with 0 trxs  0 pending

2079008ms thread-0  chain_controller.cpp:235      _push_block          ] initg #7806 @2017-09-17T08:34:39  | 0 trx, 0 pending, exectime_ms=2

2079008ms thread-0  producer_plugin.cpp:210      block_production_loo ] initg generated block #7806 @ 2017-09-17T08:34:39 with 0 trxs  0 pending

2082005ms thread-0  chain_controller.cpp:235      _push_block          ] inits #7807 @2017-09-17T08:34:42  | 0 trx, 0 pending, exectime_ms=1

2082005ms thread-0  producer_plugin.cpp:210      block_production_loo ] inits generated block #7807 @ 2017-09-17T08:34:42 with 0 trxs  0 pending

2085005ms thread-0  chain_controller.cpp:235      _push_block          ] initd #7808 @2017-09-17T08:34:45  | 0 trx, 0 pending, exectime_ms=1

EOS客户端

区块运行起来后就可以使用eos的客户端eosc进行一些操作了,比如说查看区块链的信息

先进入eos/build/progrems/eosc目录,执行以下命令

./eosc get info

就可以得到下面类似的结果

{

“head_block_num”: 7877,

“last_irreversible_block_num”: 7861,

“head_block_id”: “00001ec50519f2d44ecf77f431a2bb0a665d25529746deb4a83552b6c9c55380”,

“head_block_time”: “2017-09-17T08:38:12”,

“head_block_producer”: “initl”,

“recent_slots”: “1111111111111111111111111111111111111111111111111111111111111111”,

“participation_rate”: “1.00000000000000000”

}

结语

好了,今天就先讲到这里,下一篇会是通过eosc创建钱包进行交易。

作者:王巨
链接:https://www.jianshu.com/p/47ea4d11d997
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注