Enumivo (ENU) 超级节点竞选预热

davidfnck
17 min readMay 10, 2018

--

人人都可以参与的超级节点

今天,Enumivo(ENU) 的超级节点竞选预热活动正式开始了。任何有条件的人都以参与到竞选当中来,我们 Enumivo 官方团队将从技术和流程上提供竞选的指导帮助。

我们鼓励每个社区的成员,门槛没有那么高,几乎人人都能参与到超级节点建设与讨论中来,人人参与是 ENU 最大的乐趣。

至于设备,在 ENU 发展的初期,你不需要准备多么豪华的设备,我相信一个中等水平的云服务器就能满足要求,剩下的就是软件操作了,为了让大家能更好地参与其中,我们热心的社区成员制作了精细的实操指南(针对当前单机测试网络),如果你能够成功运行,那说明你可以尝试一下超级节点的竞选,当然,未来的投票也会很关键,不管怎么说,让我们先开始吧!

操作手册(目前基于当前单机测试网络)

代码参考:https://github.com/enumivo

提供者:大福君

怎样在本地搭建Enumivo测试网络

在 Enumivo 主网上线之前,社区需要搭建测试网络(Testnet)以验证节点的功能和性能;而在搭建部署在多个主机上的Testnet之前,区块生产者节点应该首先尝试在单台主机、本地网络的条件下搭建多个节点的测试网络。本文简要介绍了如何部署这样的测试网络。

编译enumivo组件

首先,clone enumivo的master分支代码,而且因为还用到了其他 git 库的代码,所以还要获取 submodule 的代码

git clone https://github.com/enumivo/enumivo.git
cd enumivo
git submodule update — init — recursive

然后,编译 enumivo 组件, 编译过程中会提示安装缺失的库,一路yes就可以了

./enumivo_build.sh

编译耗时比较久,完成后检查./build/program目录中是否有了本文要用到的几个组件: 钱包组件enuwallet,节点组件enunode,访问钱包和节点的客户端组件enucli

启动enumivo钱包Server

cd ./build/program/enuwallet
./enuwallet — http-server-address 127.0.0.1:8899

观察日志,钱包已经成功启动,并监听本地8899端口

2721712ms thread-0 wallet_plugin.cpp:41 plugin_initialize ] initializing wallet plugin
2721712ms thread-0 http_plugin.cpp:247 plugin_initialize ] configured http to listen on 127.0.0.1:8899
2721713ms thread-0 http_plugin.cpp:285 plugin_startup ] start listening for http requests
2721713ms thread-0 wallet_api_plugin.cpp:70 plugin_startup ] starting wallet_api_plugin
2721713ms thread-0 http_plugin.cpp:325 add_handler ] add api url: /v1/wallet/create

换个方式用 netstat 再检查一遍,启动另一个 terminal 执行命令

netstat -plnt

enuwallet已经监听8899端口了,没有问题


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8899 0.0.0.0:* LISTEN 1334/./enuwallet

创建默认钱包

启动一个新的 terminal,使用 enucli 创建一个默认钱包


cd ./build/program/enucli
./enucli — wallet-url http://127.0.0.1:8899 wallet create

命令执行成功,并返回一个用于访问钱包的密码,将这个密码保存好

Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
“PW5K6RH4o9uM5reNT9UzSsnW6pFXm8csSH4PYUrX2MUHhnBWb4DFv”

观察 enuwallet 的日志,可得知钱包文件被保存在了相应的目录中


1690351ms thread-0 wallet.cpp:182 save_wallet_file ] saving wallet to file /root/enumivo-wallet/./default.wallet

启动 bios 生产者节点(Block Producer Node)

在一个全新的 enumivo testnet 启动时,需要建立一个特殊的bios节点(我将它命名为enumivo),这个节点的任务是在其他 Block Producer 还没有产出区块的时候负责生产全部的区块。


cd ./build/program/enunode
./enunode — enable-stale-production — producer-name enumivo — plugin enumivo::chain_api_plugin — plugin enumivio::net_api_plugin

观察日志可知,节点已成功启动并开始产出区块,8888端口是http server,用来接收配置和查询,9876端口是p2p端口,用来传输 enumivo 区块和交易


841753ms thread-0 chain_plugin.cpp:103 plugin_initialize ] initializing chain plugin
841753ms thread-0 http_plugin.cpp:247 plugin_initialize ] configured http to listen on 127.0.0.1:8888
841753ms thread-0 net_plugin.cpp:2797 plugin_initialize ] Initialize net plugin
841753ms thread-0 net_plugin.cpp:2818 plugin_initialize ] host: 0.0.0.0 port: 9876
841754ms thread-0 net_plugin.cpp:2890 plugin_initialize ] my node_id is 1034cdf2a1140e5e50df816a4b329d49da7dd9db33f3dbaa545ce6af05944868

*********************************
* *
* — — — — NEW CHAIN — — — — *
* — Welcome to Enumivo! — *
* — — — — — — — — — — — — — *
* *
*********************************
Your genesis seems to have an old timestamp
Please consider using the — genesis-timestamp option to give your genesis a recent timestamp
841823ms thread-0 producer_plugin.cpp:176 plugin_startup ] producer plugin: plugin_startup() end
842001ms thread-0 producer_plugin.cpp:239 block_production_loo ] enumivo generated block 3c3d4fc8… #1 @ 2018–05–09T15:14:02.000 with 0 trxs, lib: 0
842501ms thread-0 producer_plugin.cpp:239 block_production_loo ] enumivo generated block f1bb51ba… #2 @ 2018–05–09T15:14:02.500 with 0 trxs, lib: 1
843000ms thread-0 producer_plugin.cpp:239 block_production_loo ] enumivo generated block 34f6abcd… #3 @ 2018–05–09T15:14:03.000 with 0 trxs, lib: 2

启动第二个生产者节点

为了启动额外的节点,我们需要加载 enumivo.bios 合约

cd ./build/enucli
./enucli — wallet-url http://127.0.0.1:8899 set contract enumivo ../../contracts/enumivo.bios

执行成功,输出如下:

Reading WAST/WASM from ../../contracts/enumivo.bios/enumivo.bios.wast…
Assembling WASM…
Publishing contract…
executed transaction: 03cf938ce5842f854fdca1555147886246ebbbe04638970df457d350c1c084a2 3288 bytes 2200576 cycles
# enumivo <= enumivo::setcode {“account”:”enumivo”,”vmtype”:0,”vmversion”:0,”code”:”0061736d0100000001581060037f7e7f0060057f7e7e7e…
# enumivo <= enumivo::setabi {“account”:”enumivo”,”abi”:{“types”:[],”structs”:[{“name”:”set_account_limits”,”base”:””,”fields”:[{…

正式开始创建第二个节点,首先创建一对ENU密钥:

./enucli create key
Private key: 5JT5QAdDVQR57nyxR2mkxwetmRt6FanA6fuuZQfgBbqTWGzAvKe
Public key: ENU7fw5ZgoqmnUSgmGDGxk9HZoMAuYS6ypX9sJ9znfyn55YN3Q4yv

输出的密钥首先要保存好,再导入到钱包中

./enucli — wallet-url http://127.0.0.1:8899 wallet import 5JT5QAdDVQR57nyxR2mkxwetmRt6FanA6fuuZQfgBbqTWGzAvKe

接着,创建一个名为daifuku的账号,成为第二个区块生产者,创建命令需要用到两个公钥,在本文范围内,我们只需要将刚刚生成的公钥使用两次就可以了

./enucli — wallet-url http://127.0.0.1:8899 create account enumivo daifuku ENU7fw5ZgoqmnUSgmGDGxk9HZoMAuYS6ypX9sJ9znfyn55YN3Q4yv ENU7fw5ZgoqmnUSgmGDGxk9HZoMAuYS6ypX9sJ9znfyn55YN3Q4yv
executed transaction: da7cd4cf3b2162f23d46e3bb8ef6be9f9c2ba4e8eab32e4ca99e368909d0276d 352 bytes 102400 cycles
# enumivo <= enumivo::newaccount {“creator”:”enumivo”,”name”:”daifuku”,”owner”:{“threshold”:1,”keys”:[{“key”:”ENU7fw5ZgoqmnUSgmGDGxk9…

至此,我们可以正式启动第二个节点了,启动命令需要用到之前生成的密钥对,需要注意的是因为这是我们启动的第二个节点,所以http server和p2p server需要更换监听端口,否则会和第一个节点冲突。启动一个新的terminal,执行如下命令:

cd ./build/enunode
./enunode — producer-name daifuku — plugin enumivo::chain_api_plugin — plugin enumivo::net_api_plugin — http-server-address 127.0.0.1:8889 — p2p-listen-endpoint 127.0.0.1:9877 — p2p-peer-address 127.0.0.1:9876 — config-dir node2 — data-dir node2 — private-key [\”ENU7fw5ZgoqmnUSgmGDGxk9HZoMAuYS6ypX9sJ9znfyn55YN3Q4yv\”,\”5JT5QAdDVQR57nyxR2mkxwetmRt6FanA6fuuZQfgBbqTWGzAvKe\”]

启动成功后,daifuku节点会开始同步已产出的区块,并持续更新第一个节点新产出的区块


1592501ms thread-0 chain_controller.cpp:176 push_block ] push block #8349 from enumivo 2018–05–09T16:26:32.500 0000209d9bf2f44d5e0fab860b69675528e155bbbe8a90f9a81b8a5b770497a8 lib: 8348 success
1593001ms thread-0 chain_controller.cpp:176 push_block ] push block #8350 from enumivo 2018–05–09T16:26:33.000 0000209ebefef4c4dfa91744906d3bf5767ccc0612d234c1e0ab619170fc8900 lib: 8349 success
1593501ms thread-0 chain_controller.cpp:176 push_block ] push block #8351 from enumivo 2018–05–09T16:26:33.500 0000209fe4c8f198376b5af05dbe3cd8ddda935efc1048a4843a5a429aede71d lib: 8350 success

但此时,节点daifuku并不会产生新的区块,要将其激活,需要使用enumivo这个bios节点将其注册为区块生产者节点

cd ./build/enucli
./enucli — wallet-url http://127.0.0.1:8899 push action enumivo setprods “{ \”version\”: 1, \”producers\”: [{\”producer_name\”: \”daifuku\”,\”block_signing_key\”: \”ENU7fw5ZgoqmnUSgmGDGxk9HZoMAuYS6ypX9sJ9znfyn55YN3Q4yv\”}]}” -p enumivo@active
executed transaction: c5dd95d14e7628a32470544932d68040f3407bc562764810e29173349d7b0c09 272 bytes 105472 cycles
# enumivo <= enumivo::setprods {“version”:1,”producers”:[{“producer_name”:”daifuku”,”block_signing_key”:”ENU7fw5ZgoqmnUSgmGDGxk9HZo…

观察节点daifuku的日志输出,可见它已经在生产区块了


2810001ms thread-0 producer_plugin.cpp:239 block_production_loo ] daifuku generated block a7866b37… #10277 @ 2018–05–09T16:46:50.000 with 0 trxs, lib: 10276
2810501ms thread-0 producer_plugin.cpp:239 block_production_loo ] daifuku generated block ec316abe… #10278 @ 2018–05–09T16:46:50.500 with 0 trxs, lib: 10277
2811001ms thread-0 producer_plugin.cpp:239 block_production_loo ] daifuku generated block d91c0746… #10279 @ 2018–05–09T16:46:51.000 with 0 trxs, lib: 10278
2811500ms thread-0 producer_plugin.cpp:239 block_production_loo ] daifuku generated block 5a516bfc… #10280 @ 2018–05–09T16:46:51.500 with 0 trxs, lib: 10279
2812001ms thread-0 producer_plugin.cpp:239 block_production_loo ] daifuku generated block 33f8ecc1… #10281 @ 2018–05–09T16:46:52.000 with 0 trxs, lib: 10280

总结

这样,一个基于单台主机、本地网络的Enumivo Testnet就搭建好了,下一步就是尝试在多主机上部署有更多生产者节点的Testnet,我会继续介绍如何实现这一目标。

参考

  1. [EOS Wiki: Testnet Single Host Multinode](https://github.com/EOSIO/eos/wiki/Testnet-Single-Host-Multinode).

Enumivo (ENU) 潜在超级节点电报群

如果你对成为 ENU 超级节点感兴趣,希望第一时间跟进超级节点的后续信息,尤其是后续一系列的代码更新,紧跟每一轮测试,欢迎加入电报群 Enumivo Block Producer:https://t.me/EnumivoBP

如果你希望成为超级节点,务必填写该表单,让我们更好地了解你:https://goo.gl/forms/JFlCywNhD65WY7pf1

Enumivo (ENU) 超级节点论坛讨论专区

如果你对 ENU 超级节点有自己的想法,欢迎在我们的论坛发表自己的看法,核心团队将与你一同交流:https://enumivo.com/forum/16-block-producers/

Enumivo (ENU) 技术开发微信群(中文)

如果你对基于 Enumivo 的一系列开发感兴趣,包括但不限于超级节点、dApp 开发等,欢迎添加我的微信 fromfriend020 ,注明 ENU 开发,我会把你拉入 ENU 技术交流群,大福君也在里面。

关于 ENU

论坛:https://enumivo.com/
官网:https://www.enumivo.org
源码:https://github.com/enumivo
推特:https://twitter.com/EnuMivo
中文电报:https://t.me/enumivo_zh
英文电报:https://t.me/enumivochat
官方公告:https://t.me/enumivo
论坛:https://bitcointalk.org/index.php?topic=2903323.0
交易所:
https://forkdelta.github.io/#!/trade/ENU-ETH
www.kkex.com
https://web.bixin.im/

官方微信群:Enumivo官方交流群,要加群的,加牧羊人(xuanxs)好友,备注 enu 拉群。
官方QQ群:715840564
官方bixin群:12714

--

--