Istanbul BFT解读(中)

这篇文章主要介绍了Istanbul BFT解读(中) ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/17462.html

Istanbul BFT解读(中)是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,Istanbul BFT解读(中)学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉Istanbul BFT解读(中)比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

Istanbul BFT解读(中)

Istanbul BFT实战

前端时间写了Istanbul BFT的一些原理,以及逻辑详情。今天想写一篇实战的技术文章,所以底层原理就不赘述了。

1、构建节点身份参数,以及创始区块

  • 下载并编译istan…

Istanbul BFT实战

前端时间写了Istanbul BFT的一些原理,以及逻辑详情。今天想写一篇实战的技术文章,所以底层原理就不赘述。下一篇我们将介绍Istanbul BFT的信息存储。

1、构建节点身份参数,以及创始区块

  • 下载并编译istanbul-tools工具
// 参考文档https://github.com/getamis/istanbul-tools git clone https://github.com/getamis/istanbul-tools.git cd /Path/to/your/istanbul-tools/ make istanbul
  • 利用istanbul-tools生成节点参数以及创始区块

执行:

./build/bin/istanbul setup --num 4 --nodes --verbose 

生成:

validators {         "Address": "0x4b143cd4ddd264fe472b0b308fa968523f2b5c8b",         "Nodekey": "9e9adc3b2d801fbb3410e4c50067c513cad247c7c8ef82c491aebbe8693576be",         "NodeInfo": "enode://af0b65802b745c10fcc476f42e41084b62f1208f56a6e2a32f3104a0ff8751d394a784caec321edd9b9cf5e4bb70da2a73d74f00284fea42900361ec9f87ccff@0.0.0.0:30303?discport=0" } {         "Address": "0x11bc449be1cad5b68f0b7a9a207142b2306a3ff8",         "Nodekey": "46e79f8da7d4e7462df73b812e6f5db10f7b7525bed38b4347dad9edadc3b503",         "NodeInfo": "enode://ca75f485e1f3f98d6f6e0c75535134376312a2454946ad283f3aba6000faba41adf20a50f9d286f237fcb5495863b5e07470fc9acff4ff3e40a1766ce87e27bf@0.0.0.0:30303?discport=0" } {         "Address": "0xb9e292fffa811ec765e9b716d86f9f985870c688",         "Nodekey": "216b99fd388a26d90de92ca6c45df8c07138f13413f4946986d49c4cf50593d1",         "NodeInfo": "enode://bc3ab0eb5efe336151c57e361bd0c59fe23b391bdbec1dd55c5952156f7bdc089cb7293cc2ac11f52b8f9727dc1d27001f159ed6c8d4391850670ac5c537adb5@0.0.0.0:30303?discport=0" } {         "Address": "0x35187775b6ef2597b32b93548546560de65ef4f5",         "Nodekey": "24e86c4df24c1842b4a0a97ce234e6d87f632c18c2a7db0586d77b0bba5a9ae0",         "NodeInfo": "enode://518e07daa6b546a417e105c8a66905bf78b0d7c7784e120e5e9a30a9dbdb2de3c9fcb55685cee2405e434553ef0b0e43cb462c494388cf1b2d49532ccadbba12@0.0.0.0:30303?discport=0" }  static-nodes.json [         "enode://af0b65802b745c10fcc476f42e41084b62f1208f56a6e2a32f3104a0ff8751d394a784caec321edd9b9cf5e4bb70da2a73d74f00284fea42900361ec9f87ccff@0.0.0.0:30303?discport=0",         "enode://ca75f485e1f3f98d6f6e0c75535134376312a2454946ad283f3aba6000faba41adf20a50f9d286f237fcb5495863b5e07470fc9acff4ff3e40a1766ce87e27bf@0.0.0.0:30303?discport=0",         "enode://bc3ab0eb5efe336151c57e361bd0c59fe23b391bdbec1dd55c5952156f7bdc089cb7293cc2ac11f52b8f9727dc1d27001f159ed6c8d4391850670ac5c537adb5@0.0.0.0:30303?discport=0",         "enode://518e07daa6b546a417e105c8a66905bf78b0d7c7784e120e5e9a30a9dbdb2de3c9fcb55685cee2405e434553ef0b0e43cb462c494388cf1b2d49532ccadbba12@0.0.0.0:30303?discport=0" ]  genesis.json {     "config": {         "chainId": 2017,         "homesteadBlock": 1,         "eip150Block": 2,         "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",         "eip155Block": 3,         "eip158Block": 3,         "istanbul": {             "epoch": 30000,             "policy": 0         }     },     "nonce": "0x0",     "timestamp": "0x5f65a55d",     "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f89af854944b143cd4ddd264fe472b0b308fa968523f2b5c8b9411bc449be1cad5b68f0b7a9a207142b2306a3ff894b9e292fffa811ec765e9b716d86f9f985870c6889435187775b6ef2597b32b93548546560de65ef4f5b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",     "gasLimit": "0x47b760",     "difficulty": "0x1",     "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",     "coinbase": "0x0000000000000000000000000000000000000000",     "alloc": {         "11bc449be1cad5b68f0b7a9a207142b2306a3ff8": {             "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"         },         "35187775b6ef2597b32b93548546560de65ef4f5": {             "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"         },         "4b143cd4ddd264fe472b0b308fa968523f2b5c8b": {             "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"         },         "b9e292fffa811ec765e9b716d86f9f985870c688": {             "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"         }     },     "number": "0x0",     "gasUsed": "0x0",     "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }

2、生成节点数据

用之前生成好的geneis.json(创始区块配置文件)生成节点数据库

build/bin/geth  --datadir "node1" init "genesis.json" build/bin/geth  --datadir "node2" init "genesis.json" build/bin/geth  --datadir "node3" init "genesis.json" build/bin/geth  --datadir "node4" init "genesis.json"

下图展示了node1生成后的效果,node1文件夹中包含了keystoregeth(存储链上数据)目录: Istanbul BFT解读(中)


3、启动节点

build/bin/geth --identity "validator1" --datadir "node1" --nodekeyhex "9e9adc3b2d801fbb3410e4c50067c513cad247c7c8ef82c491aebbe8693576be" --mine --debug --metrics --syncmode="full" --istanbul.blockperiod 5 --gasprice 0 --port 30303 --nat any console  build/bin/geth --identity "validator2" --datadir "node2" --nodekeyhex "46e79f8da7d4e7462df73b812e6f5db10f7b7525bed38b4347dad9edadc3b503" --mine --debug --metrics --syncmode="full" --istanbul.blockperiod 5 --gasprice 0 --port 30304 --nat any console  build/bin/geth --identity "validator3" --datadir "node3" --nodekeyhex "216b99fd388a26d90de92ca6c45df8c07138f13413f4946986d49c4cf50593d1" --mine --debug --metrics --syncmode="full" --istanbul.blockperiod 5 --gasprice 0 --port 30305 --nat any console  build/bin/geth --identity "validator4" --datadir "node4" --nodekeyhex "24e86c4df24c1842b4a0a97ce234e6d87f632c18c2a7db0586d77b0bba5a9ae0" --mine --debug --metrics --syncmode="full" --istanbul.blockperiod 5 --gasprice 0 --port 30306 --nat any console

下图展示了启动node1后的效果: Istanbul BFT解读(中)


4、链接节点

节点的通过enode进行p2p链接,每个节点至少链接一个其他节点,节点取得串起来后,会通过p2p机制互相进行链接。

// 在每个节点的命令行中输入以下指令 admin.addPeer("anotherNode'sEnode") // enode在第1步时已经生成,也可以在节点的控制台用命令行显示 admin.nodeInfo.enode

下图展示了node2添加node1节点: Istanbul BFT解读(中)

查看本节点的enode以及链接的节点 Istanbul BFT解读(中)

当有2f+1个节点串起来后,便会正常出块 Istanbul BFT解读(中)


5、节点可扩展性

Istanbul BFT可通过节点提议来进行添加或去除validator,当有超过一半的节点投票后,再经过一个区块结果便会生效。

5.1 添加validator

针对新的validator节点,参考之前的1-3步,分别为:1、生成节点配置;2、生成节点数据;3、启动节点。操作略。

之前的4个节点中至少3个节点(既超过一半节点)执行以下: istanbul.propose("newValidatorAddress", true)

添加绑定地址为0x216b593dc69068f56ba3a37823b7fa622b843a05的validator后,会成为一个candidate: Istanbul BFT解读(中) 当有超过半数节点propose此candidate后,会多出一个validator: Istanbul BFT解读(中)

5.2 去除validator

istanbul.propose("newValidatorAdd", false)

具体查看方式,参考上一步。

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/17462.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 !
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » Istanbul BFT解读(中)

提供最优质的资源集合

立即查看 了解详情