区块链(3):在以太坊私有链建立节点集群并发生交易

区块链(1)开发环境搭建及Hello World合约展示
区块链(2)以太坊开发框架Truffle教程(Windows)
区块链(3):在以太坊私有链建立节点集群并发生交易

第一篇中介绍了如何建立以太坊私有节点,并部署了HelloWorld智能合约,本章记录一下建立多个节点并产生集群的方法。

概述

为了在本地网络(一台机器上)运行多个以太坊节点的实例,必须确保以下几点:
1. 每个实例都有独立的数据目录(–datadir)
2. 每个实例运行都有独立的端口.(eth和rpc两者都是)(–port 和 –rpcprot)
3. 在集群的情况下, 实例之间都必须要知道彼此.(networkid 一致)
4. 唯一的ipc通信端点或者禁用ipc.(只能有一个节点启用ipc,其他节点禁用)

建立两个私有节点

进入geth.exe 目录下,运行下面两个命令,建立两个私有节点,具体请看区块链(1)开发环境搭建及Hello World合约展示

geth --datadir "%cd%\chain1" init genesis.json
geth --datadir "%cd%\chain2" init genesis.json

启动要建立集群的节点

启动第一节点

geth --identity "shusheng007eth1" --rpc --rpccorsdomain "*"
--datadir "%cd%\chain1" --port "30303" --rpcapi "db,eth,net,web3" --rpcaddr "192.168.10.34" --rpcport "8545" --networkid 95518 console

启动第二个节点

geth --identity "shusheng007eth2" --datadir "%cd%\chain2"

建立集群

在第一个节点shusheng007eth1的cmd窗口中输入admin.peers查看其所属的集群,可以看到当前没有加入任何集群
[]
我们准备将第二个节点shusheng007eth2加入第一节点中:
在节点shusheng007eth2所属cmd窗口中输入admin.nodeInfo.enode命令来查看其节点信息

"enode://1b4237f05270ddc54fd2bc64fa67fbe7e3c48f1390328eec323cd4d6655ef27c7672cf7
508d55510f3eac79f01acb6a0d5d531e357718473916f4e9fc3f91848@0.0.0.0:30304"

在第一个节点shusheng007eth1所属cmd窗口中输入命令

admin.addPeer("enode://1b4237f05270ddc54fd2bc64fa67fbe7e3c48f1390328eec323cd4d
6655ef27c7672cf7508d55510f3eac79f01acb6a0d5d531e357718473916f4e9fc3f91848@0.0.0.
0:30304")

如果返回值为true则说明添加成功了。

接着输入admin.peers查看集群信息

[{
    caps: ["eth/63"],
    id: "1b4237f05270ddc54fd2bc64fa67fbe7e3c48f1390328eec323cd4d6655ef27c7672cf7
508d55510f3eac79f01acb6a0d5d531e357718473916f4e9fc3f91848",
    name: "Geth/shusheng007eth2/v1.7.3-stable-4bb3c89d/windows-amd64/go1.9",
    network: {
      localAddress: "127.0.0.1:55300",
      remoteAddress: "127.0.0.1:30304"
    },
    protocols: {
      eth: {
        difficulty: 16384,
        head: "0x6e92f8b23bcdfdf34dc813cfaf1d84b71beac80530506b5d63a2df10fe23a66
0",
        version: 63
      }
    }
}, {
    caps: ["eth/63"],
    id: "9aad661fcfefe032299c42f9e6a403d8dfadc4490d7a3ad58abedf82d93ecbb01234b75
6edad3631752b30927661e2a644e73e9fa0c116dbbbc45187d640ee5c",
    name: "Geth/v1.8.1-stable-1e67410e/linux-amd64/go1.9.4",
    network: {
      localAddress: "192.168.10.34:55371",
      remoteAddress: "212.92.127.8:30303"
    },
    protocols: {
      eth: "handshake"
    }
}]

可见已经添加成功了

在第二个节点所属cmd窗口中输入admin.peers查看结果

[{
    caps: ["eth/62", "eth/63"],
    id: "ebaf9d1817e7e6ceab10f1e046ef2ffc771bd8b08c50af59943df189c9a88233de24890
6b2ae040e6388b80036b3dce0baf78c0838841ae8a6998b889b309abf",
    name: "Geth/shusheng007eth/v1.7.3-stable-4bb3c89d/windows-amd64/go1.9",
    network: {
      localAddress: "127.0.0.1:30304",
      remoteAddress: "127.0.0.1:55300"
    },
    protocols: {
      eth: {
        difficulty: 48885005,
        head: "0xc4da03de3a2ceb7c0bd2ae3845e0cce71af4eec488560a750f062f1e9499c84
4",
        version: 63
      }
    }
}]

交易

  1. 从第一个节点的账户向第二个节点转以太坊 如果两个节点都是新建的则需要创建新的账户,使用命名
    eth.accounts
    查看庄户列表,如果输出[]说明没有账户,使用命令personal.newAccount()来创建账户。输入命令后需要两次输入密码,则可以创建账户。如果账户里面没有钱则可以通过命令miner.start()来挖矿,通过miner.stop()来停止挖矿。
  2. 在第一个节点窗口输入eth.getBalance(eth.accounts[1])查看庄户余额
    10456923480000000000
  3. 解锁账户personal.unlockAccount(eth.accounts[1],"wangben123")
  4. 向第二个节点中账户

    0x8cd913aa13f1f0e885b5cd0d3909c08ff7e08765"发送0.5个以太坊

    eth.sendTransaction({from:"0x82d1889786711ac0efe8de112f32a7c66fb8b256",to:"0x8
    cd913aa13f1f0e885b5cd0d3909c08ff7e08765",value:
    web3.toWei(0.5,"ether")})

    出现如下信息,说明交易提交成功,等待确认

    INFO [02-27|16:30:36] Submitted transaction 
    fullhash=0x6bf586
    5d83c16fdb793c0d26f8dc12eb17eed7491cab2f19d6dd2b22bc330278
    recipient=0x8cD913aA1 3f1F0e885b5cD0d3909c08FF7e08765
查看即将确认的交易` eth.pendingTransactions` 
    [{
        blockHash: null,
        blockNumber: null,
        from: "0x82d1889786711ac0efe8de112f32a7c66fb8b256",
        gas: 90000,
        gasPrice: 36000000000,
        hash: "0x6bf5865d83c16fdb793c0d26f8dc12eb17eed7491cab2f19d6dd2b22bc330278",
        input: "0x",
        nonce: 5,
        r: "0xde67435a15f794b29660f90c9fc0ca0cb2d2080e5f1c267c9fb42890163bd688",
        s: "0xb0f9c2e6ab0ec029e51333f374786fd6e6082c4843ef868d4b427282f478a98",
        to: "0x8cd913aa13f1f0e885b5cd0d3909c08ff7e08765",
        transactionIndex: 0,
        v: "0x1b",
  1. 挖矿确认miner.start(3); admin.sleepBlocks(1); iner.stop();
  2. 在第二条节点窗口查看账户余额eth.getBalance(eth.accounts[0])
    结果:500000000000000000 确实成功接收了0.5个以太坊,不过单位是wei

猜你喜欢

转载自blog.csdn.net/shusheng0007/article/details/79391105
今日推荐