如何快速部署一条Simplechain子链
我们都知道Simplechain是一种主子链架构,主链Simplechain是POW共识算法的公链。那如何快速创建一条属于自己的子链呢?下面我们就是快速部署一条子链流程。首先clone 源码, 然后按照下面流程操作。
部署DPOS共识子链网络
- 创世区块
{
"config": {
"chainId": 10388,
"dpos": {
"period": 3,
"epoch": 300,
"maxSignersCount": 21,
"minVoterBalance": 100000000000000000000,
"genesisTimestamp": 1554004800,
"signers": [
"3d50e12fa9c76e4e517cd4ace1b36c453e6a9bcd",
"f97df7fe5e064a9fe4b996141c2d9fb8a3e2b53e",
"ef90068860527015097cd031bd2425cb90985a40"
],
"pbft": false,
"voterReward": true
}
},
"nonce": "0x0",
"timestamp": "0x5ca03b40",
"extraData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"3d50e12fa9c76e4e517cd4ace1b36c453e6a9bcd": {
"balance": "0x21e19e0c9bab2400000"
},
"ef90068860527015097cd031bd2425cb90985a40": {
"balance": "0x21e19e0c9bab2400000"
},
"f97df7fe5e064a9fe4b996141c2d9fb8a3e2b53e": {
"balance": "0x21e19e0c9bab2400000"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
perioddpos出块间隔时间,单位为秒epochdpos间隔多少个块定期清除投票(清除后需要投票者重新发起投票交易)maxSignersCountdpos最大允许的生产者数量minVoterBalancedpos最小允许的投票额度,单位为WeivoterRewarddpos投票者能否获得奖励(若开启,则在生产者出块时投票者也能获得分红)genesisTimestampdpos允许初始块出块的时间,并通过此时间计算后续出块的时间与生产者signersdpos初始生产者列表pbftdpos是否在每轮出块后使用pbft的方式确认每一个区块allocdpos初始生产者抵押投票数额
- 子链初始化流程 方式一. 使用sipe初始化 1.创建或导入生产者账户
sipe --datadir=dposdata account new
2.将创建或导入的生产者地址写入genesis.json中,同时写入初始投票数额(参考1.创世区块)
3.初始化子链节点
sipe --datadir=dposdata --role=subchain init genesis.json
方式二. 使用consensus工具一键初始化集群 在cmd/consensus目录下运行init_dpos.sh
cd cmd/consensus
./init_dpos.sh --numNodes 3
numNodes生成集群节点数量
初始化完成后,会在cmd/consensus/dposdata目录下建立对应节点文件
- 子链启动流程
- 启动节点
sipe --datadir=dposdata --mine --etherbase=<生产者地址> --unlock=<生产者地址> --password=<密码文件> --port=30303 --role=subchain --v5disc
- 连接其他节点
sipe --datadir=dposdata --mine --etherbase=<生产者地址> --unlock=<生产者地址> --password=<密码文件> --port=30304 --role=subchain --v5disc --bootnodesv5={enode1} --bootnodesv4={enode1}
- 投票与提案
4.1 发起投票交易
> eth.sendTransaction({from:"<投票地址>",to:"<被投票地址>",value:0,data:web3.toHex("dpos:1:event:vote")})
4.2 发起取消投票交易
> eth.sendTransaction({from:"<投票地址>",to:"<投票地址>",value:0,data:web3.toHex("dpos:1:event:devote")})
4.3 发起更改矿工奖励的提案
- 将矿工区块奖励比例改为
666‰
> eth.sendTransaction({from:"<提案地址>",to:"<提案地址>",value:0,data:web3.toHex("dpos:1:event:proposal:proposal_type:3:mrpt:666")})
4.4 发起更改最小允许投票额度的提案
- 将最小允许投票额度改为
10ether
> eth.sendTransaction({from:"<提案地址>",to:"<提案地址>",value:0,data:web3.toHex("dpos:1:event:proposal:proposal_type:6:mvb:10")})
4.5 通过或反对提案
yes通过提案,no反对提案
> eth.sendTransaction({from:"<投票地址>",to:"<投票地址>",value:0,data:web3.toHex("dpos:1:event:declare:hash:<提案hash值>:decision:yes")})
- 查看共识状态
> dpos.getSnapshot()
candidates矿工候选者名单confirmedNumber确认的区块高度historyHash最近两轮出块的块hash,用来计算新一轮的生产者出块顺序minerReward每个块生产者获得的奖励千分比,若开启voterReward,剩下的为投票者的奖励signers列举生产者名单与出块顺序punished列举每个生产者因未按时出块受到的惩罚信息tally列举每个候选人的总得票数votes列举投票信息voters投票人发起投票的区块高度proposals提案列表
部署PBFT共识子链网络
- 创世区块
{
"config": {
"chainId": 10388,
"istanbul": {
"epoch": 30000,
"policy": 0
}
},
"nonce": "0x0",
"timestamp": "0x0",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f843f83f941c46d10e91eafaac430718df3658b1a496b827bd94b67ee9395542b227c99941eb4168e3f3c6502dd8949d6510b637970085962c908c69e63e9d36a36cb480c0",
"gasLimit": "0xe0000000",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
epochpbft间隔多少个块定期清除投票policypbft提议者轮询方式,0为roundRobin(按顺序更换),1为sticky(提议者未出错时不更换提议者)mixHashpbft区块须将mixHash指定为0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365extraDatapbft初始生产者计算后得到的header.extraallocpbft暂无区块奖励,因此需要提前分配代币
- 子链初始化流程 方式一. 使用sipe初始化 1.创建或导入生产者账户
sipe --datadir=pbftdata account new
2.使用consensus工具生成extraData,写入到genesis.json中(参考1.创世区块)
cd cmd/consensus
./init_pbft.sh --numNodes 1 --validator <生产者地址>
3.初始化子链节点
sipe --datadir=pbftdata --role=subchain init genesis.json
- 将节点的nodekey写入到pbftdata/static-nodes.json中(nodekey公钥为生产者公钥)
方式二. 使用consensus工具一键初始化集群 在cmd/consensus目录下运行init_pbft.sh
cd cmd/consensus
./init_pbft.sh --numNodes 3 --ip 127.0.0.1 127.0.0.2 127.0.0.3 --port 21001 21002 21003
numNodes生成集群节点数量ip指定节点的ip列表(默认ip为127.0.0.1)port指定节点的端口列表(默认端口为21001~2100x,x为numNodes)
初始化完成后,会在cmd/consensus/pbftdata目录下建立对应节点文件
- 子链启动流程
sipe --datadir=pbftdata --istanbul.requesttimeout=10000 --istanbul.blockperiod=5 --syncmode=full --mine --minerthreads=1 --port=21001 --role=subchain
port需要和static-nodes.json中配置的enode保持一致istanbul.requesttimeoutpbft每个view的过期时间,单位毫秒,默认值为10000istanbul.blockperiodpbft出块间隔,单位秒,默认值为1
4.查看共识状态
> istanbul.getSnapshot()
validatorspbft区块生产者名单votes新增validator或移除validator的投票tally总投票情况
部署RAFT共识子链网络
- 创世区块
{
"config": {
"chainId": 10,
"raft": true
},
"nonce": "0x0",
"timestamp": "0x0",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0xe0000000",
"difficulty": "0x0",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"1e69ebb349e802e25c7eb3b41adb6d18a4ae8591": {
"balance": "0x21e19e0c9bab2400000"
},
"73ce1d55593827ab5a680e750e347bf57485a511": {
"balance": "0x21e19e0c9bab2400000"
},
"b8564a5657fa7dc51605b58f271b5bafad93b984": {
"balance": "0x21e19e0c9bab2400000"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
rafttrue为使用raft共识allocraft共识只有存在交易的时候才打包区块,因此需要提前分配代币
- 子链初始化流程 方式一. 使用sipe初始化 1.创建或导入生产者账户
sipe --datadir=raftdata account new
2.初始化子链节点
sipe --datadir=raftdata --role=subchain init genesis.json
4.将节点的nodekey写入raftdata/static-nodes.json中(nodekey公钥为生产者公钥)
方式二. 使用consensus工具一键初始化集群 在cmd/consensus目录下运行init_pbft.sh
cd cmd/consensus
./init_raft.sh --numNodes 3 --ip 127.0.0.1 127.0.0.2 127.0.0.3 --port 21001 21002 21003 --raftport 50401 50402 50403
numNodes生成集群节点数量ip指定节点的ip列表(默认ip为127.0.0.1)port指定节点的端口列表(默认端口为21001~2100x,x为numNodes)raftport指定节点的raft通信端口列表(默认端口为50401~5040x,x为numNodes)
初始化完成后,会在cmd/consensus/raftdata目录下建立对应节点文件
- 子链启动流程
sipe --datadir=raftdata --raft --port=21001 --raftport=50401 --role=subchain
port需要和static-nodes.json中配置的enode保持一致raft使用raft模式raftportraft端口号,需要和static-nodes.json中配置的enode保持一致
4.查看共识状态
> istanbul.getSnapshot()
validatorspbft区块生产者名单votes新增validator或移除validator的投票tally总投票情况
上面就是部署不同共识子链的流程,不久我们的区块链管理平台将支持一键部署子链,届时我们的社区开发者和爱好者可以更方便的部署一条子链,加入到Simpelchain的生态中
如何快速部署一条Simplechain子链的更多相关文章
- Hexo快速部署教程
一直有建立博客的需要,使用过Wordpress动态博客,一直访问速度比较慢,刚开始以为是空间域名的解析的问题,尝试使用Hexo静态博客,部署后感觉速度正常很多,特意发文快速部署教程 准备 本文是在wi ...
- Docker+Nextcloud快速部署个人网盘
各位大佬好,,,萌新顾北清又回来更新了,今天要快速部署一个人网盘. 有多快呢,,,5分钟吧,因为我们使用Docker部署. Docker基础可以看看我之前的博文.(点这里点这里) 那么,,,开始吧. ...
- •搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机
本节所讲内容: 实战:搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机 LAMP架构:??? Linux+Apache+Mysql+PHP Linux+Apache+Mysql/MariaDB ...
- 使用Docker快速部署ELK分析Nginx日志实践(二)
Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- [转帖]centos7 使用kubeadm 快速部署 kubernetes 国内源
centos7 使用kubeadm 快速部署 kubernetes 国内源 https://www.cnblogs.com/qingfeng2010/p/10540832.html 前言 搭建kube ...
- 快速部署ldap服务
快速部署ldap服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LDAP概述 .什么是目录服务 ()目录是一类为了浏览和搜索数据二十几的特殊的数据库,例如:最知名的的微软公 ...
- 【k8s】kubeadm快速部署Kubernetes
1.Kubernetes 架构图 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Mast ...
- 以windows服务方式快速部署免安装版Postgres数据库
目录 以windows服务方式快速部署免安装版Postgres数据库 1.下载Postgresql数据库免安装包 2.安装环境准备及验证 解压文件 测试环境依赖 3.创建并初始化数据目录 创建数据目录 ...
随机推荐
- java实现第七届蓝桥杯骰子游戏
骰子游戏 PS: 骰子哪有从0开始的只能是1-6,而他i j k的范围都是0-5,所以都要加1 题目描述 我们来玩一个游戏. 同时掷出3个普通骰子(6个面上的数字分别是1~6). 如果其中一个骰子上的 ...
- java实现第四届蓝桥杯梅森素数
梅森素数 题目描述 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 ...
- 团体天梯赛L1-041.寻找250
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字. 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”. ...
- 小程序-你不得不知的Promise封装请求
放在开头 这是一个小程序的轮播图,但是为我们在请求api数据时,将请求wx.request代码封装调用 效果展示 代码篇 页面wxml 这里需要注意的是我们设置swiper和image标签时,有默认属 ...
- linux下使用tcpdump抓包分析tcp的三次握手
首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...
- css3图片防止变形
1.object-fit 由于图片原始大小都不一样,强行设定大小值会导致拉伸,如果不设定大小则参差不齐. 之前我们大多数用的 大多数都是利用background-size: cover 来避免对图片造 ...
- DedeCms 首页、列表页调用文章body内容的方法
[第一种方法] arclist标签使用如下: {dede:arclist row='1' typeid='1' addfields='body' idlist='1' channelid='1'} [ ...
- EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算
至此,我们已经了解了诸多概念: RD (报告距离). CD (计算距离). FD (可行距 离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的.能够导致拓 ...
- @codeforces - 674G@ Choosing Ads
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定长度为 n 的序列,m 次询问以及参数 p.共有两类询问: ...
- excel 如何制作带下拉框的动态折线图表
首先我们需要有个类似下图产品销量的基础数据表. 首先将光标放入表格中任意位置,然后插入一个不带点标记的折线图,然后将折线的颜色设置为灰色. 第一次设置成灰色后,一定善用f4快捷键进行快速的折线颜色设置 ...