在以太坊私有网络中建立节点集群,并发生交易
2017-06-28 15:30
399 查看
为了在本地网络运行多个以太坊节点的实例,必须确保一下几点:
1. 每个实例都有独立的数据目录(–datadir)
2. 每个实例运行都有独立的端口.(eth和rpc两者都是)(–port 和 –rpcprot)
3. 在集群的情况下, 实例之间都必须要知道彼此.
4. 唯一的ipc通信端点,或者禁用ipc.
启动第一个节点(指定端口,并禁用ipc),运行命令和结果如下:
上面的命令以命令行的(console)的方式启动了节点, 所以我们可以通过继续输入下面的命令获取节点实例的enode url:
获取本机IP地址
再打开一个终端,初始化第二个节点:
启动节点, 加上console 表示启动后,启用命令行:
上面的命令中,–bootndoes 是设置当前节点启动后,直接通过设置–bootndoes 的值来链接第一个节点, –bootnoedes 的值可以通过在第一个节的命令行中,输入:admin.nodeInfo.enode命令打印出来.
也可以不设置 –bootnodes, 直接启动,启动后进入命令行, 通过命令admin.addPeer(enodeUrlOfFirst Instance)把它作为一个peer添加进来.
为了确认链接成功,第二个节点输入:
第一个节点输入:
从得到的结果可以看出,第一个节点有1个peer链接, 链接的node id为:
“769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09”
这个id,正好就是第二个节点的id.
按照这样的方式继续扩展,可以非常容易就可以建立本地节点集群.这些工作都可以写成脚本代码来完成, 里面还可以包含创建账户,挖矿等..
请参考:https://github.com/ethersphere/eth-utils下的gethcluster.sh脚本,以及README中的使用方法和示例.
链接成功后,使用我们在上一篇文章中挖矿的账户,向第二个节点发送 “ether”(以太币的货币单位,还有一种叫”Wei”).
首先查看第二个节点的Wei数量和整个网络的区块号,还有接收货币的账号id:
在第一个节点命令行中,执行下面的操作:
再在第二个节点的命令行输入:
再打开一个终端,初始化第三个节点:
启动节点, 加上console 表示启动后,启用命令行:
这样这条链就有三个节点了
1. 每个实例都有独立的数据目录(–datadir)
2. 每个实例运行都有独立的端口.(eth和rpc两者都是)(–port 和 –rpcprot)
3. 在集群的情况下, 实例之间都必须要知道彼此.
4. 唯一的ipc通信端点,或者禁用ipc.
启动第一个节点(指定端口,并禁用ipc),运行命令和结果如下:
root@i-ct5y7t0o:/home/ubuntu/private-geth# geth --datadir ./data0 --networkid 31459 --ipcdisable --port 619 --rpcport 8200 console INFO [06-28|14:52:52] Starting peer-to-peer node instance=Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 INFO [06-28|14:52:52] Allocated cache and file handles database=/home/ubuntu/private-geth/data0/geth/chaindata cache=128 handles=1024 INFO [06-28|14:52:52] Initialised chain configuration config="{ChainID: 666 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Metropolis: <nil> Engine: unknown}" INFO [06-28|14:52:52] Disk storage enabled for ethash caches dir=/home/ubuntu/private-geth/data0/geth/ethash count=3 INFO [06-28|14:52:52] Disk storage enabled for ethash DAGs dir=/root/.ethash count=2 INFO [06-28|14:52:52] Initialising Ethereum protocol versions="[63 62]" network=31459 INFO [06-28|14:52:52] Loaded most recent local header number=546 hash=a511c3鈥40ac8 td=79201418 INFO [06-28|14:52:52] Loaded most recent local full block number=546 hash=a511c3鈥40ac8 td=79201418 INFO [06-28|14:52:52] Loaded most recent local fast block number=546 hash=a511c3鈥40ac8 td=79201418 WARN [06-28|14:52:52] Blockchain not empty, fast sync disabled INFO [06-28|14:52:52] Starting P2P networking INFO [06-28|14:52:54] UDP listener up self=enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@[::]:619 INFO [06-28|14:52:54] RLPx listener up self=enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@[::]:619 Welcome to the Geth JavaScript console! instance: Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 coinbase: 0x66c62f1afa08eae5343bd2b3129e0ae9aa141fc3 at block: 546 (Wed, 28 Jun 2017 14:08:50 CST) datadir: /home/ubuntu/private-geth/data0 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
上面的命令以命令行的(console)的方式启动了节点, 所以我们可以通过继续输入下面的命令获取节点实例的enode url:
> admin.nodeInfo.enode "enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@[::]:619"
获取本机IP地址
ubuntu@i-ct5y7t0o:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:0f:63:73:66 brd ff:ff:ff:ff:ff:ff inet 192.168.0.3/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:fff:fe63:7366/64 scope link valid_lft forever preferred_lft forever
再打开一个终端,初始化第二个节点:
root@i-ct5y7t0o:/home/ubuntu/private-geth# geth --datadir ./data1 init ./genesis.json WARN [06-28|14:55:45] No etherbase set and no accounts found as default INFO [06-28|14:55:45] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/chaindata cache=16 handles=16 INFO [06-28|14:55:45] Writing custom genesis block INFO [06-28|14:55:45] Successfully wrote genesis state database=chaindata hash=e492a5鈥0420d INFO [06-28|14:55:45] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/lightchaindata cache=16 handles=16 INFO [06-28|14:55:45] Writing custom genesis block INFO [06-28|14:55:45] Successfully wrote genesis state database=lightchaindata hash=e492a5鈥0420d
启动节点, 加上console 表示启动后,启用命令行:
root@i-ct5y7t0o:/home/ubuntu/private-geth# geth --datadir ./data1 --networkid 31459 --ipcdisable --port 6191 --rpcport 8101 --bootnodes "enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@192.168.0.3:619" console WARN [06-28|15:01:27] No etherbase set and no accounts found as default INFO [06-28|15:01:27] Starting peer-to-peer node instance=Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 INFO [06-28|15:01:27] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/chaindata cache=128 handles=1024 WARN [06-28|15:01:27] Upgrading chain database to use sequential keys INFO [06-28|15:01:27] Initialised chain configuration config="{ChainID: 666 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Metropolis: <nil> Engine: unknown}" INFO [06-28|15:01:27] Disk storage enabled for ethash caches dir=/home/ubuntu/private-geth/data1/geth/ethash count=3 INFO [06-28|15:01:27] Disk storage enabled for ethash DAGs dir=/root/.ethash count=2 WARN [06-28|15:01:27] Upgrading db log bloom bins INFO [06-28|15:01:27] Bloom-bin upgrade completed elapsed=198.75碌s INFO [06-28|15:01:27] Initialising Ethereum protocol versions="[63 62]" network=31459 INFO [06-28|15:01:27] Database conversion successful INFO [06-28|15:01:27] Loaded most recent local header number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Loaded most recent local full block number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Loaded most recent local fast block number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Starting P2P networking INFO [06-28|15:01:29] UDP listener up self=enode://769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09@[::]:6191 INFO [06-28|15:01:29] RLPx listener up self=enode://769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09@[::]:6191 Welcome to the Geth JavaScript console! instance: Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 然后他会自动同步区块链的数据
上面的命令中,–bootndoes 是设置当前节点启动后,直接通过设置–bootndoes 的值来链接第一个节点, –bootnoedes 的值可以通过在第一个节的命令行中,输入:admin.nodeInfo.enode命令打印出来.
也可以不设置 –bootnodes, 直接启动,启动后进入命令行, 通过命令admin.addPeer(enodeUrlOfFirst Instance)把它作为一个peer添加进来.
为了确认链接成功,第二个节点输入:
> admin.nodeInfo { enode: "enode://769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09@[::]:6191", id: "769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09", ip: "::", listenAddr: "[::]:6191", name: "Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1", ports: { discovery: 6191, listener: 6191 }, protocols: { eth: { difficulty: 79750339, genesis: "0xe492a51ac029fd78d9c27dd1ff018b233231d15aa795d90aab1bd7d1ebc0420d", head: "0xdeeb2bc33146dccc9b5a3f02c56735d4fa4cb562fb92b3966053ede8880db8bf", network: 31459 } } }
第一个节点输入:
> admin.nodeInfo.enode "enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@[::]:619"
> admin.nodeInfo
{
enode: "enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@[::]:619",
id: "fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7",
ip: "::",
listenAddr: "[::]:619",
name: "Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1",
ports: {
discovery: 619,
listener: 619
},
protocols: {
eth: {
difficulty: 79750339,
genesis: "0xe492a51ac029fd78d9c27dd1ff018b233231d15aa795d90aab1bd7d1ebc0420d",
head: "0xdeeb2bc33146dccc9b5a3f02c56735d4fa4cb562fb92b3966053ede8880db8bf",
network: 31459
}
}
}
> net.peerCount
1
> admin.peers
[{
caps: ["eth/63"],
id: "769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09",
name: "Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1",
network: {
localAddress: "192.168.0.3:619",
remoteAddress: "192.168.0.3:38620"
},
protocols: {
eth: {
difficulty: 1024,
head: "0xe492a51ac029fd78d9c27dd1ff018b233231d15aa795d90aab1bd7d1ebc0420d",
version: 63
}
}
}]
从得到的结果可以看出,第一个节点有1个peer链接, 链接的node id为:
“769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09”
这个id,正好就是第二个节点的id.
按照这样的方式继续扩展,可以非常容易就可以建立本地节点集群.这些工作都可以写成脚本代码来完成, 里面还可以包含创建账户,挖矿等..
请参考:https://github.com/ethersphere/eth-utils下的gethcluster.sh脚本,以及README中的使用方法和示例.
链接成功后,使用我们在上一篇文章中挖矿的账户,向第二个节点发送 “ether”(以太币的货币单位,还有一种叫”Wei”).
首先查看第二个节点的Wei数量和整个网络的区块号,还有接收货币的账号id:
personal.newAccount() Passphrase: Repeat passphrase: "0xd600f5622024bb8f53ca3f0506cf1a13c811e17b" > INFO [06-28|15:07:38] New wallet appeared url=keystore:///home/ubuntu/private鈥[32mstatus=Locked > > eth.getBalance(eth.accounts[0]) 0
在第一个节点命令行中,执行下面的操作:
personal.unlockAccount(eth.accounts[0]) Unlock account 0x66c62f1afa08eae5343bd2b3129e0ae9aa141fc3 Passphrase: true > ^C > eth.sendTransaction({from: "0x66c62f1afa08eae5343bd2b3129e0ae9aa141fc3", to: "0xd600f5622024bb8f53ca3f0506cf1a13c811e17b", value: web3.toWei(1, "ether")}) > miner.start()
再在第二个节点的命令行输入:
eth.getBalance(eth.accounts[0])就可以查看转账成功
再打开一个终端,初始化第三个节点:
root@i-ct5y7t0o:/home/ubuntu/private-geth# geth --datadir ./data2 init ./genesis.json WARN [06-28|14:55:45] No etherbase set and no accounts found as default INFO [06-28|14:55:45] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/chaindata cache=16 handles=16 INFO [06-28|14:55:45] Writing custom genesis block INFO [06-28|14:55:45] Successfully wrote genesis state database=chaindata hash=e492a5鈥0420d INFO [06-28|14:55:45] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/lightchaindata cache=16 handles=16 INFO [06-28|14:55:45] Writing custom genesis block INFO [06-28|14:55:45] Successfully wrote genesis state database=lightchaindata hash=e492a5鈥0420d
启动节点, 加上console 表示启动后,启用命令行:
root@i-ct5y7t0o:/home/ubuntu/private-geth# geth --datadir ./data2 --networkid 31459 --ipcdisable --port 6192 --rpcport 8100 --bootnodes "enode://fc96d5fb078c82f33092c4944b31b3a8b9201ddec88b880ae245a131e1107b33f3d7833f5f6992d7c9ffdb557fbdd9ad2ab5b2ead2492f0bdb5690a0392c50f7@192.168.0.3:619" console WARN [06-28|15:01:27] No etherbase set and no accounts found as default INFO [06-28|15:01:27] Starting peer-to-peer node instance=Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 INFO [06-28|15:01:27] Allocated cache and file handles database=/home/ubuntu/private-geth/data1/geth/chaindata cache=128 handles=1024 WARN [06-28|15:01:27] Upgrading chain database to use sequential keys INFO [06-28|15:01:27] Initialised chain configuration config="{ChainID: 666 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Metropolis: <nil> Engine: unknown}" INFO [06-28|15:01:27] Disk storage enabled for ethash caches dir=/home/ubuntu/private-geth/data1/geth/ethash count=3 INFO [06-28|15:01:27] Disk storage enabled for ethash DAGs dir=/root/.ethash count=2 WARN [06-28|15:01:27] Upgrading db log bloom bins INFO [06-28|15:01:27] Bloom-bin upgrade completed elapsed=198.75碌s INFO [06-28|15:01:27] Initialising Ethereum protocol versions="[63 62]" network=31459 INFO [06-28|15:01:27] Database conversion successful INFO [06-28|15:01:27] Loaded most recent local header number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Loaded most recent local full block number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Loaded most recent local fast block number=0 hash=e492a5鈥0420d td=1024 INFO [06-28|15:01:27] Starting P2P networking INFO [06-28|15:01:29] UDP listener up self=enode://769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09@[::]:6191 INFO [06-28|15:01:29] RLPx listener up self=enode://769c6de9b913f40edac8a037bbc697242097c4fa8f1574240bd2aeb930c049fd0d85310b9ba04bf6027c9d1a36a13789210140c9f2e38525deff87e28c8f5a09@[::]:6191 Welcome to the Geth JavaScript console! instance: Geth/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 然后他会自动同步区块链的数据
这样这条链就有三个节点了
相关文章推荐
- 区块链入门(3):在以太坊私有网络中建立节点集群,并发生交易
- 在以太坊私有网络中建立节点集群,并发生交易
- 区块链入门(3):在以太坊私有网络中建立节点集群,并发生交易
- (转)在以太坊私有网络中建立节点集群,并发生交易
- 在以太坊私有网络中建立节点集群,并发生交易
- 区块链(3):在以太坊私有链建立节点集群并发生交易
- 以太坊建立节点集群
- 网络问题有台集群节点起不来
- 区块链学堂(6):以太坊生产网络/测试网络/私有网络
- Docker容器化快速构建多集群以太坊网络并部署智能合约
- 测试docker建立以太坊集群
- 以太坊源码(01):P2P网络及节点发现机制
- linux网络数据传输的加密,解密以及基于openssl的私有CA的建立
- 发生网络问题;在建立连接时发生错误;管理员已结束会 (远程连接)
- EntityFramework.SqlServer.dll 中发生 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)
- 闪电网络与以太坊结合建立支付渠道的构想及其前景
- Ubuntu下Geth客户端搭建私有网络集群
- 如何在oracle 集群中更换私有网络的网卡
- VirtualBox集群建立和网络配置
- CentOS 7.2 Mitaka云平台计算节点部署脚本(VLAN+VXLAN+DVR私有网络)