区块链(二)windows 以太坊私有链搭建连接多节点

连接到其他节点

所有的节点创建都是一样的。

创建节点二:

geth --datadir data1 init genesis.json

启动节点二

geth --identity "TestNode2" --datadir "data1" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --ipcpath "data1\geth\geth.ipc" --rpcport "8487" --port "30305" --networkid "29382" console

3. 给新节点创建一个账户,否则无法启动挖矿

>personal.newAccout(“123”)

连接节点:

可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。

假设有两个节点:节点一和节点二,chainID 都是 29382 ,通过下面的步骤就可以从节点一连接到节点二。

首先要知道节点二的 enode 信息,在节点二的 JavaScript console 中执行下面的命令查看 enode 信息:

>admin.nodeInfo.enode

"enode://0ce4dc3066664bd2de57bd5c9eec8e002d21079c133394884517f5a8c24e77ef6ef3c80eb9ad628e3b93a114d7db638e8b16c60198ed703912cb9700f8ddba1a@192.168.1.3:30305"

>

注意:此处不能使用显示的IP,需要用启动私有链时候指定的IP(127.0.0.1)才行

然后在节点一的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点二:

>admin.addPeer("enode://0ce4dc3066664bd2de57bd5c9eec8e002d21079c133394884517f5a8c24e77ef6ef3c80eb9ad628e3b93a114d7db638e8b16c60198ed703912cb9700f8ddba1a@127.0.0.1:30305")

true

>

addPeer() 的参数就是节点二的 enode 信息,注意要把 enode 中的 [::] 替换成节点二的 IP 地址。连接成功后,节点二就会开始同步节点一的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。

挖矿的时候,哪个节点的矿工启动了,它的账户就会增加eth,链块数据会同步到其他节点。

同时开两个命令行工具可以看到两个工具同时在进行链块同步。

>eth.blockNumber 查阅两个节点的块个数,是一样的,完成同步

通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。

除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。

注意:

​ 1、对于操作过程中存在的问题网上基本上都有解决方法,可以参考错误信息自己解决

​ 2、如果使用的服务器或者虚拟机需要注意防火墙和端口的配置

上面转账动作发生在同一个节点内,下面完成跨节点的账户转账动作。

在节点二而新建账户:

>personal.newAccount("123456")

"0x9b78c5766ddbb55c4414ff5f441b4cea0c7a72a4"

查询新账户余额

>eth.getBalance("0x9b78c5766ddbb55c4414ff5f441b4cea0c7a72a4")

0

在节点一的accounts[0]向外给节点二的账户转5个。

转账之前的余额

> eth.getBalance(eth.accounts[0])

370000000000000000000

解锁账户

> personal.unlockAccount(eth.accounts[0])

Unlock account 0x781ea3fbf05476db5d259c833347705d6ca770f2

Passphrase:

true

定义5个ether

> amount = web3.toWei(5,'ether')

"5000000000000000000"

转账给节点二

>eth.sendTransaction({from:eth.accounts[0],to:"0x9b78c5766ddbb55c4414ff5f441b4cea0c7a72a4", value:amount})

INFO [07-31|12:48:20.509] Submitted transaction                    fullhash=0x298d16ec44cdfe0df81a73fd14c1d649789e3d6ce6806bbae50bc021654b5180 recipient=0x9b78C5766DdbB55C4414ff5F441B4cEa0C7a72a4"0x298d16ec44cdfe0df81a73fd14c1d649789e3d6ce6806bbae50bc021654b5180"

没有矿工工作,数据仍然在交易池中卫待确认交易,需要启动矿工,在哪个节点启动都可以。本例在节点二中启动。

> eth.getBalance(eth.accounts[0])

370000000000000000000

节点而启动矿工以后,自动同步到节点一的新区块数据

> INFO [07-31|12:48:43.918] Imported new chain segment              blocks=1  txs=1 mgas=0.021 elapsed=5.004ms  mgasps=4.197 number=87 hash=1026c6…285caa cache=21.65kB

INFO [07-31|12:48:44.843] Imported new chain segment              blocks=1  txs=0 mgas=0.000 elapsed=4.002ms  mgasps=0.000 number=88 hash=1b3798…934171 cache=22.04kB

INFO [07-31|12:48:45.009] Imported new chain segment              blocks=1  txs=0 mgas=0.000 elapsed=6.004ms  mgasps=0.000 number=89 hash=68059b…dff0ae cache=22.43kB

INFO [07-31|12:48:47.123] Imported new chain segment              blocks=1  txs=0 mgas=0.000 elapsed=5.004ms  mgasps=0.000 number=90 hash=a8cf3e…7a64ba cache=22.83kB

查询节点一的账户余额,已经减少,

> eth.getBalance(eth.accounts[0])

364999622000000000000

同时节点二的余额已经增加。

注意:

每个节点可以管理多个账户。

账户之间余额也是相互独立的

总结:

到目前为止,大家应该对以太坊如何转账有了清楚的了解,本教程是基于同一条私链的两个节点之间进行的转账。转账过程中有几点需要注意:

(1)两节点要加入同一条私链,即这两个节点初始化的创世区块必须要一模一样。

(2)两个节点转账前,需要确定两个节点之间的网络是否能够互通。

(3)A节点在添加B节点的enode字符串时需要手动将enode字符串中的ip地址设为B节点的IP地址,因为命令admin.nodeInfo获取的enode字符串中ip地址不一定是正确的。

(4)想要实现转账,私链网络中至少要有一个节点在挖矿。

(5)以太坊api中输入的最小单位都是wei,1ether=1000000000000000000wei。

至此我们的节点钱包里有不少eth,可惜是私有链上的。

你可能感兴趣的:(区块链(二)windows 以太坊私有链搭建连接多节点)