EOSForce超级节点部署与测试网搭建指南

当前位置:首页 > 区块链 > 区块链知识 发布时间:2018-09-14编辑:来源:www.chgold.com阅读数: 手机阅读
EosForce节点部署指南注意事项·一般服务器最低配置为2核cpu4G内存 50G ssd硬盘,系统推荐64位ubuntu 16.04操作系统·部署过程中原力eos主网不可和联盟eos主网同时部署在一台服务器上,即一台服务器只能部署一套EOS主网,主要防止使用过程中出现奇怪的错误·原力eos生态的第三方应用插件不可和联盟eos主网混合使用,比如联盟的eosjs插件不可和原力eos主网直接对接·部署原力eos节点前,最好需要之前有过eos的相关的基础知识学习,比如命令行客户端及RPC API使用·部署BP节点,是部署同步节点的基础上修改下配置,就变成BP节点

·注册bp时,需要钱包账户最低充值100个eos作为注册费

1.同步节点部署基于linux操作系统 ubuntu 16.04版本 原力eos源码部署方案,docker部署请参考https://github.com/eosforce/genesis1. 下载源码apt-get update && apt-get install -y git wgetgit clone https://github.com/eosforce/eosforce.git eosforce

2. 执行如下命令安装原力eoscd eosforce && git submodule update --init --recursive && ./eosio_build.shmkdir -p ~/.local/share/eosio/nodeos/configcurl https://raw.githubusercontent.com/eosforce/genesis/master/genesis.json -o ~/.local/share/eosio/nodeos/config/genesis.jsoncp build/contracts/eosio.token/eosio.token.abi build/contracts/eosio.token/eosio.token.wasm ~/.local/share/eosio/nodeos/configcp build/contracts/System/System.abi build/contracts/System/System.wasm ~/.local/share/eosio/nodeos/configcp build/contracts/eosio.bios/eosio.bios.abi build/contracts/eosio.bios/eosio.bios.wasm ~/.local/share/eosio/nodeos/configcp build/contracts/eosio.msig/eosio.msig.abi build/contracts/eosio.msig/eosio.msig.wasm ~/.local/share/eosio/nodeos/configcd build && make install

3. config核心配置文件获取并修改(若想修改p2p地址请参考第二节)wget http://download.aitimeout.site/config.inicp config.ini ~/.local/share/eosio/nodeos/config/

config.ini文件需要修改2个地方:第一个修改地方:p2p-server-address = ip:7894 (ip为公网服务器ip,端口自行修改,注意防火墙要放行该端口)第二个修改的地方,修改成自己的genesis.json路径,用绝对路径防止出错:

genesis-json = "/root/.local/share/eosio/nodeos/config/genesis.json"4. 启动节点并测试

cd build/programs/nodeos && ./nodeos

打开另一个终端查看本地区块高度及对比eos原力官方主网的出块高度查看本地高度命令如下,并多次执行如下命令区块高度为不断增加,说明同步正常,直到高度和原力主网高度接近时,同步完成

cleos get info

打开浏览器输入如下地址查看原力eos主网区块高度https://w1.eosforce.cn/v1/chain/get_info其中head_block_num为区块高度

2.BP节点部署准备工作生成一对公私钥给BP节点使用,执行如下命令生成cleos create key执行结果如下:Private key: 5KidVdxbLKbJo9QiTyrbYULNTdKFTzdCb9oZgdaWye2CZfXz2hCPublic key: EOS6Z4fD6isTKZwaeH6Req7QXZLK3Yvb2rQoTxefVcsGXaXsFrBap其中 Private key为私钥 Public key为公钥, Private 注意Public key在后面注册bp时用到,即执行updatebp基于以上部署好的同步节点进行修改,只需修改2个地方:config.ini修改如下:第一修改的地方:producer-name = bpname (bpname为你的bp的名称)第二修改地方:signature-provider = EOSpubkey=KEY:EOSprivkey (其中EOSpubkey准备工作中生成的公钥,EOSprivkey为准备工作中生成的私钥)启动节点,执行如下命令删除旧的数据rm -rf ~/.local/share/eosio/nodeos/data启动cd build/programs/nodeos && ./nodeos3.BP节点注册准备工作: 首先要注册一个原力eos账户名,并需要给这个账户转100个eos,注册时需要注册费,账户名必须和bp的名字一样,也为bpname,这样 就有了公钥pub_key,私钥pri_key,账户名 bpname(和bp的名字同名),这个步骤就不详细介绍创建一个钱包cleos wallet create结果如下:Creating wallet: defaultSave password to use in the future to unlock this wallet.Without password imported keys will not be retrievable."PW5HwhcFEfN2Up63iK5LfQwXX7FmkUNkwV1t4TG73tMNxj59YeQws"生成默认的钱包,最后一行为钱包的密码导入账户私钥到钱包cleos wallet import pri_key执行命令进行注册cleos -u https://p1.eosforce.cn push action eosio updatebp '{"bpname":"bpname","block_signing_key":"block_signing_key","commission_rate":"commission_rate","url":"https://eosforce.io"}' -p bpname注册成功返回如下结果:executed transaction: 34dbe8bb08d0f7c3d5a4453d1e068e35f03c96f25d200c4e2a795e6aec472d60 160 bytes 6782 us# eosio <= eosio::transfer {"from":"eosforce","to":"user1","quantity":"10.0000 EOS","memo":"my first transfer"}warning: transaction executed locally, but may not be confirmed by the network yet其中bpname 为bp的名称。block_signing_key为BP的公钥,commission_rate为佣金比例,设置3000,就是给用户分红70%,bp为30%,详细介绍可以参考 https://github.com/eosforce/contracts/tree/master/System最后如何检验出块出块的2个条件:·投票后排名前23名,可出块·本地bp节点同步已完成可以下载我们的eosforce钱包并安装,查看自己的BP有没有出块 (钱包下载地址:https://github.com/eosforce/wallet-desktop/releases)

EOSForce测试主网搭建说明在很多时候为了方便开发测试,需要自己单独启动一套主网,这里是一个启动主网的说明,也可以作为超级节点运维的参考。对应eosforce提交: 0e10da90619e05296f166b11e5a7536c5fa78e71TODO : 添加使用config.ini启动说明 TODO : 添加docker启动说明 TODO : 添加多机器启动说明0. eosforce 与 eos.io官方版本的区别eosforce为了保证链的安全性,关闭了很多官方版本中未经验证的功能, eosforce中只添加了最小需求的系统用户和合约,这些用户和合约是内置在代码中的,在节点初始化区块链时加载的, 这样eosforce启动时不需要向官方版本中的bios流程中有大量的创建用户和加载系统合约的步骤。eosforce在bios时会指定genesis.json中配置的23个初始超级节点,这和eos.io官方版本不同, 所以不需要注册超级节点步骤, 开始启动时,直接启动23个对应的节点即可。1. eosforce bios基本步骤1 编译eosforce2 通过program/genesis工具生成23个节点的公私钥配置和对应的genesis.json3 启动23个超级节点(也可以少于23个)步骤要比官方启动少很多,需要注意的就是保证配置正确即可。注意 这里示例中使用的是ubuntu 18.04版本,需要 python 3.6.2. 配置说明nodeos 可以通过指定config.ini配置启动信息, 也可以通过命令行参数指定, 一般来说配置文件比较适合生产环境或者容器启动,如果是测试用的节点可以使用命令行参数,便于脚本启动.这里我们使用命令行参数启动nodeos,便于脚本启动.nodeos 参数如下:

这里要特别注意的是 --config-dir eosforce要求这个目录下包含以下文件:

config├── System.abi├── System.wasm├── eosio.token.abi├── eosio.token.wasm├── config.ini└── genesis.json

因为我们使用命令行参数,所以config.ini留一个空文件即可以下是个例子:

./nodeos \ --blocks-dir ./nodes/20-biosbpt/blocks \ --config-dir ./nodes/20-biosbpt/../../config \ --data-dir ./nodes/20-biosbpt \ --http-server-address 127.0.0.1:8020 \ --p2p-listen-endpoint 127.0.0.1:9020 \ --max-clients 33 \ --p2p-max-nodes-per-host 33 \ --enable-stale-production \ --producer-name biosbpt \ --signature-provider=EOS5bijTJg8ZkGNTuL3VfMcMc3bYdLtZ1faJJPYHRB1ShDZLtkeRY=KEY:5Jgau5mVjCiGrTGrvLr9YcyWfWdWWTrPYVwxUhgaRc5ixKWCCff \ --plugin eosio::http_plugin \ --plugin eosio::chain_api_plugin \ --plugin eosio::producer_plugin \ --p2p-peer-address localhost:9001

注意 启动测试节点的时候,我们可以不是特别的注意安全问题,所以这里启动plugin都是全节点,生产环境中的超级节点需要注意安全问题。这么长的命令肯定不适合手动输入,可以写脚本来启动,最后我们使用python做一个启动脚本。

3. 启动步骤3.1 编译eosforce获取代码:git clone https://github.com/eosforce/eosforce.git编译:cd eosforce ./eosio_build.sh注意脚本执行过程中会有几次确认,注意通过。成功会有以下提示:

( ____ \( ___ )( ____ \\__ __/( ___ ) | ( \/| ( ) || ( \/ ) ( | ( ) | | (__ | | | || (_____ | | | | | | | __) | | | |(_____ ) | | | | | | | ( | | | | ) | | | | | | | | (____/\| (___) |/\____) |___) (___| (___) | (_______/(_______)\_______)\_______/(_______) EOSIO has been successfully built. 00:12:35 To verify your installation run the following commands: export PATH=${HOME}/opt/mongodb/bin:$PATH /home/fy/opt/mongodb/bin/mongod -f /home/fy/opt/mongodb/mongod.conf & cd /home/fy/projects/eosforce_gen/build; make test For more information: EOSIO website: https://eos.io EOSIO Telegram channel @ https://t.me/EOSProject EOSIO resources: https://eos.io/resources/ EOSIO Stack Exchange: https://eosio.stackexchange.com EOSIO wiki: https://github.com/EOSIO/eos/wiki

这里要注意的是,如果要执行test,最好确认关闭所有 nodeos 进程,否则会引起冲突编译结果默认的位置是 eosforce/build为了不污染全局环境而引起一些错误,不建议使用 make install。3.2 配置为了方便启动,这里把节点工作目录设置为 eosforce/build/testrun/, 相应的配置文件目录为 eosforce/build/testrun/config/cd ./buildmkdir testrun首先生成 genesis.json 这里eosforce提供了一个工具,便于随机生成所有超级节点的keycd testrun../programs/genesis/genesis这时目录下会生成以下文件:·config.ini 生成的超级节点key,便于复制到config.ini中·genesis.json 生成的创始配置,我们后续就使用这个配置·key.json 对应超级节点账户公钥的私钥·sigkey.json 超级节点签名用的公钥对应的私钥,后面会使用这个来启动nodeos这里注意区分超级节点 账户key 和 sign_key, 启动超级节点需要使用sign_key作为signature-provider配置。对于genesis.json,我们直接移动进config目录下:mkdir ./configmv ./genesis.json ./config/复制需要的合约文件进入config,同时创建一个空的config.ini, 注意 : eosforce所使用的合约是 eosforce/contracts/System 和 eosforce/contracts/eosio.token, 不是 不是 不是 eosforce/contracts/eosio.systemcp ../contracts/eosio.token/eosio.token.abi ./config/cp ../contracts/eosio.token/eosio.token.wasm ./config/cp ../contracts/System/System.abi ./config/cp ../contracts/System/System.wasm ./config/echo "" > ./config/config.ini这时config下有如下文件config.ini eosio.token.abi eosio.token.wasm genesis.json System.abi System.wasm3.3 启动超级节点完成配置之后可以启动超级节点,这里我们启动三个节点, 由于第0届超级节点是由genesis.json中指定的,我们启动时需要对应genesis.json中的sign_key启动超级节点, 这里我们启动 biosbpa biosbpb biosbpc三个节点。在genesis.json中配置如下:{ "initial_timestamp": "2018-05-28T12:00:00.000", "initial_key": "EOS1111111111111111111111111111111114T1Anm", ... "initial_configuration": { ... }, "initial_account_list": [{ "key": "EOS5XLWw7xu6qR1yqCCYqxYEMggCyKPWUTDyAjA1pgECFtcd39G41", "asset": "1.0000 EOS", "name": "biosbpa" }], "initial_producer_list": [{ "name": "biosbpa", "bpkey": "EOS63o5TEdLsQrxFTUobiDupHQMX8K5pEs7PPk91afmpkrkiprokc", "commission_rate": 0, "url": "" }]}initial_account_list中是初始账号的列表,key是账号公钥,对应之前生成的key.json中的私钥 initial_producer_list是超级节点的列表,bpkey对应的私钥在之前生成的sigkey.json中需要注意的是,eosforce启动之后会处理b1账户,所以为了防止一直报错,需要在initial_account_list中添加一个name为b1的账户。 否则会报以下错误:2861606ms thread-0 controller.cpp:875 push_transaction ] -------call onfee function tx2862013ms thread-0 wasm_interface.cpp:933 eosio_assert ] message: b1 is not found in accounts table 2862013ms thread-0 controller.cpp:888 push_transaction ] ---trnasction exe failed--------trace: {"id":"13a4c6b68425acb4fa4aae0d2e92fcb557939fa1f4b2e46228025bc8560b597f","elapsed":0,"net_usage":0,"scheduled":false,"action_traces":[{"receipt":{"receiver":"","act_digest":"0000000000000000000000000000000000000000000000000000000000000000","global_sequence":0,"recv_sequence":0,"auth_sequence":[],"code_sequence":0,"abi_sequence":0},"act":{"account":"","name":"","authorization":[],"data":""},"elapsed":0,"cpu_usage":0,"console":"","total_cpu_usage":0,"trx_id":"0000000000000000000000000000000000000000000000000000000000000000","inline_traces":[]}],"failed_dtrx_trace":null,"except":{"code":3050003,"name":"eosio_assert_message_exception","message":"eosio_assert_message assertion failure","stack":[{"context":{"level":"error","file":"wasm_interface.cpp","line":934,"method":"eosio_assert","hostname":"","thread_name":"thread-0","timestamp":"2018-07-13T03:47:42.013"},"format":"assertion failure with message: ${s}","data":{"s":"b1 is not found in accounts table"}},{"context":{"level":"warn","file":"apply_context.cpp","line":60,"method":"exec_one","hostname":"","thread_name":"thread-0","timestamp":"2018-07-13T03:47:42.013"},"format":"","data":{"_pending_console_output.str()":""}}]}}2862014ms thread-0 controller.cpp:875 push_transaction ] -------call onfee function tx也可以启动主网之后手动创建一个b1账户这里我们启动超级节点需要对应超级节点的name,bpkey和在sigkey.json中的sig_key, 分别在下面的{name},{bpkey},{sig_key}./nodeos --blocks-dir ./nodes/biosbpa/blocks --config-dir ./config --data-dir ./nodes/biosbpa --http-server-address 127.0.0.1:8021 --p2p-listen-endpoint 127.0.0.1:9021 --max-clients 64 --p2p-max-nodes-per-host 64 --enable-stale-production --producer-name biosbpa --signature-provider={biosbpa-bpkey}=KEY:{biosbpa-sig_key} --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin./nodeos --blocks-dir ./nodes/biosbpb/blocks --config-dir ./config --data-dir ./nodes/biosbpb --http-server-address 127.0.0.1:8022 --p2p-listen-endpoint 127.0.0.1:9022 --max-clients 64 --p2p-max-nodes-per-host 64 --enable-stale-production --producer-name biosbpb --signature-provider={biosbpb-bpkey}=KEY:{biosbpb-sig_key} --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --p2p-peer-address localhost:9021./nodeos --blocks-dir ./nodes/biosbpc/blocks --config-dir ./config --data-dir ./nodes/biosbpc --http-server-address 127.0.0.1:8023 --p2p-listen-endpoint 127.0.0.1:9023 --max-clients 64 --p2p-max-nodes-per-host 64 --enable-stale-production --producer-name biosbpc --signature-provider={biosbpc-bpkey}=KEY:{biosbpc-sig_key} --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --p2p-peer-address localhost:9021 --p2p-peer-address localhost:9022注意其中的 --p2p-peer-address 依照启动顺序监听已经启动的节点如果启动成功,可以看到节点出块日志需要注意的是,EOS中如果要出块的节点没有启动,则这一块会轮空,依然会等待出块的间隔,直到能出块的节点出块, eosforce代码中默认出块间隔是3s,这意味着a,b,c三个节点各自出块之后,会等待 20 * 3 = 60s之后,a节点才会出下一个块

上一篇区块链共识类型:POC、DBFT、POA、POB

下一篇从当年 PPCoin 的 PoS 模式看 PoS 的演化

区块链知识本月排行

区块链知识精选