文章前言
区块链技术已经逐渐成为了当今世界上最炙手可热的技术之一,在众多应用场景中私有链的应用越来越受到关注,特别是在企业级应用中,然而传统的私有链解决方案存在一些问题,例如:节点不可扩展、性能不足等。因此单机多节点私有链成为了一种备受关注的新型解决方案,本文将介绍单机多节点私有链的基本概念、实现方法以及应用场景,希望能够为读者提供一些有价值的参考和帮助
搭建流程
新建node2节点
上一节搭建了一个单节点以太坊网络,这次我们在原来的基础上再增加一个节点网络,命名为node2,使用eth2为data目录:
备注:因为我们只是简单的增加节点所以我们的创世区块文件保持不变,创世区块文件保持不变,创世区块文件保持不变!重要的话说三遍!
初始化创世区块
geth --datadir /home/blockchain/private_eth/eth2 init genesis.json
启动节点node2
查看node1的enoded url信息,这是节点01与其他节点互动的唯一id:
admin.nodeInfo
enode: \\\"enode://f7db3b343b9dc8a5fabd1502829bb8fcb2fb16033aa8b401cbd8f2d00aad8935feb9c1a7c010c57e4e9c6be9a408edea720744a5d957622aef0155da6a397bbe@127.0.0.1:30303?discport=0\\\"
启动node2,由于是单机多节点,所以节点node2的port以及rpcport应与节点node1的不同并通过enoded url与节点01相关联
#方式一:
sudo geth --networkid 111 --datadir /home/blockchain/private_eth/eth2 --identity \\\"node2\\\" --http --http.port \\\"8546\\\" --http.addr \\\"192.168.204.139\\\" --authrpc.port \\\"8552\\\" --port \\\"30304\\\" --nodiscover --bootnodes \\\"enode://979c918631f66e8bbaeea75d9f20ce83707b162d88093b823a7db24413ee383a0875f8c5d89379717777bd63d0c974c6ced8302f55f01996c2e0c979d847c410@127.0.0.1:30303?discport=0\\\" --http.api \\\"eth,net,web3,admin,txpool,debug,miner\\\" --rpc.enabledeprecatedpersonal --allow-insecure-unlock console
#方式二:
sudo geth --networkid 111 --datadir /home/blockchain/private_eth/eth2 --identity \\\"node2\\\" --http --http.port \\\"8546\\\" --http.addr \\\"192.168.204.139\\\" --authrpc.port \\\"8552\\\" --port \\\"30304\\\" --nodiscover --http.api \\\"eth,net,web3,admin,txpool,debug,miner\\\" --rpc.enabledeprecatedpersonal --allow-insecure-unlock console
我们除了可以通过bootndoes的值来链接节点01也可以先不设置bootnodes直接启动节点,之后进入命令行后通过admin.addPeer(enodeUrl)来添加节点01,使其和节点01相连,下面是添加节点前节点数量:
执行以下指令来添加节点
admin.addPeer(\\\"enode://f7db3b343b9dc8a5fabd1502829bb8fcb2fb16033aa8b401cbd8f2d00aad8935feb9c1a7c010c57e4e9c6be9a408edea720744a5d957622aef0155da6a397bbe@127.0.0.1:30303?discport=0\\\")
多节点信息查看
1、查询链接的其他节点的个数
node1:
> net.peerCount
1
> admin.nodeInfo
node2:
3、查询节点node2中的区块高度,这时你会发现node2初始高度为0,但是在同步过程中最终node2会与node1完成同步,这也验证了我们所述的区块链中的每个节点都是一个\\”区块链数据库\\”的副本
多节点挖矿模式
因为node2中默认账户为0,所以我们先在node2中创建两个新账户:
personal.newAccount(\\\"12345678\\\")
personal.newAccount(\\\"12345678\\\")
之后进行一次转账操作:
1、node1查询账户account[0]的余额
eth.getBalance(eth.accounts[0])
web3.fromWei(eth.getBalance(eth.accounts[0]),\\\"ether\\\")
注意:1 ether = 1e18 wei,使用eth.getBalance()获取到的账户余额默认返回的单位是wei,你也可以使用ether作为单位,返回账户余额,与上面的常结果相对应
2、解锁账户account[0]
personal.unlockAccount(eth.accounts[0],\\\"12345678\\\",0)
3、在node2中获取eth.account[0]的账户地址
> eth.accounts[0]
\\\"0xa2dc992dadfed7cfa92fff159ef0a96ea321cfa4
4、从node1的account[0]地址向node2的account[0]地址进行转账4eth
eth.sendTransaction({from:eth.accounts[0],to:\\\"0xa2dc992dadfed7cfa92fff159ef0a96ea321cfa4\\\",value:web3.toWei(4,\\\'ether\\\')})
5、在node2中查看当前带确认的交易消息
eth.getBlock(\\\"pending\\\",true).transactions
6、现在我们开始挖矿,2个节点同时挖掘将交易打包
miner.start(10)
7、停止挖矿,node1上查看待确认的交易:
eth.getBlock(\\\"pending\\\",true).transactions
node1余额(很多人很奇怪这里为啥每减少反而增加了,这是因为这里默认将accouts[0]作为了币基地址,所以在挖矿中获取到的奖励直接给予了accouts[0]):
web3.fromWei(eth.getBalance(eth.accounts[0]),\\\"ether\\\")
node2余额——成功收取到转账的4eth额度
web3.fromWei(eth.getBalance(eth.accounts[0]),\\\"ether\\\")
文末小结
通过本文的介绍,我们学习了如何在一台计算机上搭建以太坊私有链,同时创建多个节点,实现节点之间的互相通信和数据同步,在创建节点时我们使用了IPC和RPC通信协议,同时也学习了如何在不同节点之间进行数据同步,通过本文的学习相信读者已经掌握了以太坊私有链的搭建可以在实际应用中灵活运用
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34322.html