EOS多主机多节点环境配置
本文使用了四台同网段的主机,第一台做为eosio创世用户使用,另外三台做为出块者节点使用,最终实现了EOS多主机多节点的配置。最后EOSIO创世用户不再出块,由选举出来的各个节点轮流出块,下面将介绍具体的操作流程。
一.准备工作
1.获取EOS源码
2.修改源码中关于投票的节点数
- top_producers.reserve();
- for ( auto it = idx.cbegin(); it != idx.cend() && top_producers.size() < && < it->total_votes && it->active(); ++it ) {
- top_producers.emplace_back( std::pair<eosio::producer_key,uint16_t>({{it->owner, it->producer_key}, it->location}) );
- }
把21修改为3
- top_producers.reserve(_maxbp);
- for ( auto it = idx.cbegin(); it != idx.cend() && top_producers.size() < _maxbp && 0 < it->total_votes && it->active(); ++it ) {
- top_producers.emplace_back( std::pair<eosio::producer_key,uint16_t>({{it->owner, it->producer_key}, it->location}) );
- }
其中_maxbp在~\eos1\contracts\eosio.system中定义添加定义即可:
- class system_contract : public native {
- private:
- voters_table _voters;
- producers_table _producers;
- global_state_singleton _global;
- eosio_global_state _gstate;
- rammarket _rammarket;
- //Begin: Add by HML Date:2018-06-30
- const uint8_t _maxbp = 3;
- //End: Add by HML Date:2018-06-30
二.修改eosio节点配置文件
1.运行nodeos与keosd
2.修改keosd配置文件
3.修改eosio节点配置文件
eosio用户在机器10.186.11.211 上,其nodeos产生的配置文件路径:~/.local/share/eosio/nodeos/config/config.ini
- bnet-endpoint = 10.186.11.211:
- //for communicatin with cleos
- http-server-address = 10.186.11.211:
- //for sync block
- p2p-listen-endpoint = 10.186.11.211:
- p2p-peer-address = 10.186.11.223:
- p2p-peer-address = 10.186.11.220:
- p2p-peer-address = 10.186.11.141:
- agent-name = "EOS Test Agent"
- //if eosio, this flag must be true, else must be set false, it decide whether or not
- //product block
- enable-stale-production = true
- //producer name
- producer-name = eosio
- //producer key,get by use"cleos ceate key"
- private-key =["EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr", "5K463ynhZoCDDa4RDcr63cUwWLTnKqmdcoTKTHBjqoKfv4u5V7p"]
- unlock-timeout =
- //load plugin
- plugin = eosio::chain_api_plugin
- plugin = eosio::history_api_plugin
- plugin = eosio::chain_plugin
- plugin = eosio::history_plugin
- plugin = eosio::net_plugin
- plugin = eosio::net_api_plugin
三.创建并导入密匙
1.创建密匙
- eosio用户与九个系统用户共用一对密匙
- 三个节点用户与三个普通用户各使用一对密匙
- //eosio key
- EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- 5K463ynhZoCDDa4RDcr63cUwWLTnKqmdcoTKTHBjqoKfv4u5V7p
- //producers
- //lwz
- 5KLGj1HGRWbk5xNmoKfrcrQHXvcVJBPdAckoiJgFftXSJjLPp7b
- EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz
- //hml
- 5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu
- EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC
- //lx
- 5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ
- EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6
- //users
- //usera
- 5JtUScZK2XEp3g9gh7F8bwtPTRAkASmNrrftmx4AxDKD5K4zDnr
- EOS69X3383RzBZj41k73CSjUNXM5MYGpnDxyPnWUKPEtYQmTBWz4D
- //userb
- 5JUNYmkJ5wVmtVY8x9A1KKzYe9UWLZ4Fq1hzGZxfwfzJB8jkw6u
- EOS7yBtksm8Kkg85r4in4uCbfN77uRwe82apM8jjbhFVDgEgz3w8S
- //userc
- 5K6LU8aVpBq9vJsnpCvaHCcyYwzPPKXfDdyefYyAMMs3Qy42fUr
- EOS7WnhaKwHpbSidYuh2DF1qAExTRUtPEdZCaZqt75cKcixuQUtdA
另外,需要特别注意的是这里eosio key 是和创世用户nodeos的配置文件中的private-key是一致的,这里不能弄错,否则会涉及到权限报错的问题。其它的密匙对由 cleos create key 命令随机产生即可。
2.运行eosio的节点程序nodeos
3.创建钱包并导入密匙
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet create
- PW5JkUedyEiWWK1tz4oFcoqRnn2iR9W5U9RhaLyswajLLLJ1xy7sp
导入六个用户的密匙对:
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5JtUScZK2XEp3g9gh7F8bwtPTRAkASmNrrftmx4AxDKD5K4zDnr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5JUNYmkJ5wVmtVY8x9A1KKzYe9UWLZ4Fq1hzGZxfwfzJB8jkw6u
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5K6LU8aVpBq9vJsnpCvaHCcyYwzPPKXfDdyefYyAMMs3Qy42fUr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
还有两个特殊的密匙对,eosio key ,eosio sign,它们都在nodeos的配置文件,我们也导入到default钱包中去:
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet import 5K463ynhZoCDDa4RDcr63cUwWLTnKqmdcoTKTHBjqoKfv4u5V7p
四.创建九个系统用户
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.bpay EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.msig EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.names EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.ram EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.ramfee EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.saving EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.stake EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.token EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 create account eosio eosio.vpay EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
五.加载四大合约,发行代币
使用的命令如下:
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 set contract eosio.token ~/eos/build/contracts/eosio.token/
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 set contract eosio.msig ~/eos/build/contracts/eosio.msig/
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 push action eosio.token create '["eosio", "1000000000.0000 SYS"]' -p eosio.token
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 push action eosio.token issue '["eosio", "1000000000.0000 SYS", "memo"]' -p eosio
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 set contract eosio ~/eos/build/contracts/eosio.system/
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 push action eosio setpriv '["eosio.msig", 1]' -p eosio@active
- 加载系统合约的时候有可能会有一个报错: ......too long. 可以在命令行最后面加上 -x 3000 的选项,3000是一个大概的数字,自行调整这个数据到正确运行为止;
- 智能合约的文件路径必须是全路径,尽量不要使用相对路径;
- 代币发行的大小是用的uint32_t类型,所以代币发行不能超过这个类型的数字,否则会报错;
- 系统合约加载不成功,检查一下九个系统用户是否正确创建,其它三个合约是否正确加载;
六.创建节点用户与普通用户
- //create and transfer to producer
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio lwz EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz --stake-net "100000000.0000 SYS" --stake-cpu "100000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio lwz "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio hml EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC --stake-net "100000000.0000 SYS" --stake-cpu "100000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio hml "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio lx EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 --stake-net "100000000.0000 SYS" --stake-cpu "100000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio lx "20000.0000 SYS"
- //create and transfer to user
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio usera EOS69X3383RzBZj41k73CSjUNXM5MYGpnDxyPnWUKPEtYQmTBWz4D --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio usera "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio userb EOS7yBtksm8Kkg85r4in4uCbfN77uRwe82apM8jjbhFVDgEgz3w8S --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio userb "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system newaccount --transfer eosio userc EOS7WnhaKwHpbSidYuh2DF1qAExTRUtPEdZCaZqt75cKcixuQUtdA --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram "20000.0000 SYS"
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 transfer eosio userc "20000.0000 SYS"
八.配置并运行三个节点用户的进程
- bnet-endpoint = 10.186.11.223:
- //communication with cleos
- http-server-address = 10.186.11.223:
- //for sync block
- p2p-listen-endpoint = 10.186.11.223:
- p2p-peer-address = 10.186.22.220:
- p2p-peer-address = 10.186.11.211:
- p2p-peer-address = 10.186.11.141:
- agent-name = "EOS hml Agent"
- //if not eosio,it must be fasle
- enable-stale-production = false
- //producer name
- producer-name = hml
- //producer key
- private-key = ["EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC","5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu"]
- plugin = eosio::chain_api_plugin
- plugin = eosio::history_api_plugin
- plugin = eosio::chain_plugin
- plugin = eosio::history_plugin
- plugin = eosio::net_plugin
- plugin = eosio::net_api_plugin
- 带有0.0.0.0的IP换成主机IP地址;
- producer-name 换成自己节点的名称;
- producer key 写上自己节点的私匙对;
- agent-name最好参照修改下,暂时不知道其作用;
- p2p-peer-address 可以添加很多个,表示本节点与其它多个节点进行通信,进行区块同步;
2.开启nodeos
九.投票
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system listproducers
开始的时候获得的投票率都为零,现在使用命令进行投票
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system voteproducer prods usera lwz
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system voteproducer prods userb hml
- cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system voteproducer prods userc lx
分别使用usera,userb,userc给节点用户lwz,hml,lx进行投票,再次查看投票率,如下:
我们把视图切到eosio打印的消息上,发现区块产生者已经变成了lwz,hml,lx三个用户轮流出块了,eosio不再出块,只是在简单地进行区块的同步。

2.投票原理
- 所有代币的15%进行投票后eosio会停止出块,主网会自动启动。在这里我们的代币数据数量总共是10亿,那么我们的主网启动需要1.5亿质押的代币进行投票后才能启动,使用如下命令查看我们三个用来投票的普通用户:
- 质押的代币计算方式:staked = cpu + net,所以这里usera有1亿的质押,使用usera投票后只有1/10的投票率,不够主网启动,我们再用userb投票之后,发现主网就开始启动了,出块是由lwz和hml这两个节点用户进行了,当然,最后用userc给lx投票的时候,节点名为lx的用户也会加入到出块者中间。最后有producers标志,说明此用户投票给了名称为lwz的节点。
十.其它相关命令
//查看用户的资金cleos --wallet-url http://127.0.0.1:8900 -u http://10.186.11.211:8888 get currency balance eosio.token eosio//获取用户信息cleos --wallet-url http://127.0.0.1:8900 -u http://10.186.11.211:8888 get account usera//列举候选节点cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 system listproducers//解锁钱包cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 wallet unlock//查看投票数cleos --wallet-url http://127.0.0.1:8900 --url http://10.186.11.211:8888 get table eosio eosio producers运行一下,这里的计票数如何计算暂时还不清楚。
EOS多主机多节点环境配置的更多相关文章
- EOS 多主机多节点配置终极命令
eosio 10.186.11.211 hml 10.186.11.223 lwz 10.186.11.220 lx 10.186.11.141 //eosio private key 5K463yn ...
- Spring Cloud:多环境配置、eureka 安全认证、容器宿主机IP注册
记录一下搭建 Spring Cloud 过程中踩过的一些坑,测试的东西断断续续已经弄了好多了,一直没有时间整理搭建过程,时间啊~时间~ Spring 版本 Spring Boot:2.0.6.RELE ...
- rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装
rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装 待办 https://blog.csdn.net/CSDN_duomaomao/art ...
- 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow
深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...
- (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX10 ...
- 深度学习主机环境配置: Ubuntu16.04+GeForce GTX 1080+TensorFlow
接上文<深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0>,我们继续来安装 TensorFlow,使其支持GeForce GTX 1080显卡 ...
- 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
不多说,直接上干货! 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
- Hadoop学习笔记—1.基本介绍与环境配置
一.Hadoop的发展历史 说到Hadoop的起源,不得不说到一个传奇的IT公司—全球IT技术的引领者Google.Google(自称)为云计算概念的提出者,在自身多年的搜索引擎业务中构建了突破性的G ...
- ubuntu + hadoop2.5.2分布式环境配置
ubuntu + hadoop2.5.2分布式环境配置 我之前有详细写过hadoop-0.20.203.0rc1版本的环境搭建 hadoop学习笔记——环境搭建 http://www.cnblogs. ...
随机推荐
- typedarrays splice
TypedArrays 不是一个典型的 数组类型,所以不存在 splice 方法.但是可以模拟实现 function splice(arr, starting, deleteCount, elemen ...
- ACM学习历程—POJ3565 Ants(最佳匹配KM算法)
Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees ...
- bzoj 3796: Mushroom追妹纸 AC自动机+后缀自动机+dp
题目大意: 给定三个字符串s1,s2,s3,求一个字符串w满足: w是s1的子串 w是s2的子串 s3不是w的子串 w的长度应尽可能大 题解: 首先我们可以用AC自动机找出s3在s1,s2中出现的位置 ...
- 原来问题在这里-我的memory leak诊断历程
自从公司开始将java作为主要开发语言后,C++与java的混合应用日趋增多. java与C++的通信主要也是使用JNI来完成,这并没有什么问题.对于这样的混合应用项目来说,最大的噩梦莫过于memor ...
- 11g RAC OCR,VOTING DISK存储全部损坏,利用自动备份,恢复OCR,VOTING DISK到新存储。
背景: 11g R2 rac 的orc ,voting disk asm存储磁盘全部损坏.通过调查得知 损坏的 OCR磁盘对应为 VOL1 ,voting disk磁盘对应于 VOL2 . 故,添加a ...
- yum配置文件位置
centos的yum配置文件 cat /etc/yum.conf cachedir=/var/cache/yum //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/ ...
- 批量清除过期的binlog释放磁盘空间
方案,总共24台db,一台台进去清理肯定不行,得需要写一个脚本,进行批量操作,方案思路大概如下 1, 建立双master列表masterlist; 一个master一行. 2,远程获取master ...
- JavaScript编写代码时候没有提示
如上图所示如果没有提示可能是箭头所指示的类型不正确.
- Poj1012_Joseph
一.Description The Joseph's problem is notoriously known. For those who are not familiar with the ori ...
- 超牛 猴子补丁,修改python内置的print
猴子补丁一般是用于修改三方包或官方包,也可以用来修改自己或者他人的代码. 但也可以用来修改python 语言内置的关键字. 本篇博客修改python最常用的内置print,使你使用print时候,自动 ...