美文网首页区块链区块链学习区块链-EOS
EOS开发系列(一)从源码搭建一个EOS测试节点

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

作者: 王巨 | 来源:发表于2017-09-17 16:40 被阅读2694次

    引言

    从本周开始,我要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创建钱包进行交易。

    相关文章

      网友评论

      • 叶非叶:官方更新了文档。 data-dir的目录无法产生,nodeos 跑不起来
      • 恩复:跑起来了

        plugin = eos::producer_plugin
        应该改为
        plugin = eosio::producer_plugin
      • 八十万禁军:我老是build失败,用docker装的,不知道和你这种有什么区别?不知道怎么跟着学了
      • Harken:./build.sh darwin 执行脚本后跑了很久 但最后还是说什么没找到 具体是
        Password:
        sudo: cmake: command not found
        make: *** No rule to make target `install'. Stop.
        ./build.sh: line 101: cmake: command not found
        make: *** No targets specified and no makefile found. Stop.
      • Simth:在执行eosd命令的时候失败,genesis文件配置如下,git clone eos官方仓库的时候下载的genesis.json
        genesis-json = /Users/sss/dev/eos/genesis.json

        报错信息如下
        166890ms main.cpp:61 main ] 10 assert_exception: Assert Exception
        fc::exists( my->genesis_file ): unable to find genesis file '', check --genesis-json argument
        {"f":""}
        chain_plugin.cpp:228 plugin_startup

        {"my->genesis_file.generic_string()":""}
        chain_plugin.cpp:257 plugin_startup
        子键_北京不眠夜:“可以看到里面有一个eosd的可执行文件直接使用命令执行./eosd会得到一个错误(注意这一步是要做的,因为eosd会在当前目录产生一个data-dir的目录),使用ctrl+c停掉eosd之后,进入data-dir目录修改config.ini ” 这个文件找不到啊 也没有data-dir这个目录
        Simth:genesis文件有的,缺少一些插件,安装就好了
        王巨:应该就是没找到genesis.json这个文件。在电脑是确认一下文件里面是不是这个
      • 布衣三少:我支持你 ! 我也准备学EOS 而且 eos 严重被套。
      • chinawzck:厉害,期待更多关于eos的文章

      本文标题:EOS开发系列(一)从源码搭建一个EOS测试节点

      本文链接:https://www.haomeiwen.com/subject/zmxmsxtx.html