文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.3. 使用 DBFT 创建区块链
使用DBFT共识算法
使用共识算法dbft
的DApp是src/coin3
。 DBFT例子,我们使用了BuckyCloud开发的下一代P2P协议,而不是使用TCP协议。由于使用了BDT协议,因此在BlockChain运行之前需要先启动一个超级节点(SuperNode, SN)。BDT协议请参考:https://buckycloud.com/bdt.html
此外,DBFT协议的特性,挖矿节点出块的时间与上一个块之间的时间间隔有时序关系。为了快速测试,建议下面两个步骤顺序同步操作:
- 创建创世块
- 启动超级挖矿节点
在src/coin3/chiain/config.json
里配置了超级挖矿节点:
{
"handler":"./handler.js",
"type": {
"consensus":"dbft",
"features":[]
},
"global": {
"minValidator": 1,
"maxValidator": 21,
"reSelectionBlocks": 5,
"blockInterval": 10,
"minWaitBlocksToMiner": 1,
"systemPubkey": "0309d4c1abb011bcbeabd46cdfbd19eb734c7110e6d94cb08d2418ac1251f0421f",
"superAdmin": "13CS9dBwmaboedj2hPWx6Dgzt4cowWWoNZ", // 超级挖矿节点,也就是miner1
"agreeRateNumerator": 2,
"agreeRateDenominator": 3
}
}
在src/coin3/chain.json
里,我们配置了两个挖矿节点的启动参数:
"miner1":{
"program": "chain_host",
"args":[
"miner",
"--genesis", "./data/coin3/genesis",
"--dataDir", "./data/coin3/miner1",
"--minerSecret", "e109b61f011c9939ac51808fac542b66fcb358f69bf710f5d11eb5d1f3e82bc3",
"--net", "bdt",
"--host", "127.0.0.1",
"--port", "12312",
"--peerid", "13CS9dBwmaboedj2hPWx6Dgzt4cowWWoNZ",
"--sn", "SN_PEER_DBFT@127.0.0.1@12405@12406",
"--bdt_log_level", "info",
"--rpchost", "localhost",
"--rpcport", "18089",
"--loggerConsole",
"--loggerLevel", "debug",
"--feelimit", "10"
]
},
"miner2":{
"program": "chain_host",
"args":[
"miner",
"--genesis", "./data/coin3/genesis",
"--dataDir", "./data/coin3/miner2",
"--minerSecret", "c07ad83d2c5627acece18312362271e22d7aeffb6e2a6e0ffe1107371514fdc2",
"--net", "bdt",
"--host", "127.0.0.1",
"--port", "12313",
"--peerid", "12nD5LgUnLZDbyncFnoFB43YxhSFsERcgQ",
"--sn", "SN_PEER_DBFT@127.0.0.1@12405@12406",
"--bdt_log_level", "info",
"--rpchost", "localhost",
"--rpcport", "18089",
"--loggerConsole",
"--loggerLevel", "debug",
"--feelimit", "10"
]
},
从配置里,也可以看到BDT相关的参数配置。src/coin3/chain.json
里也添加了启动超级节点(SN)的配置:
"startSN":{
"program": {
"windows": "./node_modules/.bin/startSN.cmd",
"linux": "./node_modules/.bin/startSN"
},
"args":[
"peerid=SN_PEER_DBFT",
"out_host=127.0.0.1",
"tcpPort=12405",
"udpPort=12406"
]
}
最后,配置了一个按顺序一次性执行创建创世块以及启动超级挖矿节点:
"fastStart":{
"type":"group",
"groups":[
{
"session": "create", // 创建创世块
"sync": true // 通过sync字段可以指定是否同步执行
},
{
"session": "miner1", // 启动超级挖矿节点1
"sync": true // 异步执行
},
]
}
下面是构建基于DBFT的BlockChain的操作步骤:
gulp build
- 单独打开一个终端,启动超级节点:
node run.js -chain coin3 -session startSN
- 单独打开一个终端,按顺序一次性执行创建创世块、启动两个挖矿节点:
node run.js -chain coin3 -session fastStart
- 观察并等待
data/coin3/miner1/Block
下有两个Block数据后再执行下一个步骤
- 观察并等待
- 单独打开一个终端,启动另一个挖矿节点:
node run.js -chain coin3 -session miner2
- 单独打开一个终端,启动交互式钱包客户端:
node run.js -chain dbft -session wallet
- 在wallet的交互式命令行里,注册miner2,加入参与dbft的共识算法:
chain.register('12nD5LgUnLZDbyncFnoFB43YxhSFsERcgQ', '1');
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论