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创建钱包进行交易。