美文网首页
以太坊多节点私有链部署

以太坊多节点私有链部署

作者: yuluxs | 来源:发表于2019-11-14 16:17 被阅读0次

    假设两台电脑A和B
    要求:
    1、两台电脑要在一个网络中,能ping通
    2、两个节点使用相同的创世区块文件
    3、禁用ipc;同时使用参数--nodiscover
    4、networkid要相同,端口号可以不同

    1.4 搭建私有链
    1.4.1 创建目录和genesis.json文件
    创建私有链根目录./testnet
    创建数据存储目录./testnet/data0
    创建创世区块配置文件./testnet/genesis.json

    {
      "config": {
        "chainID": 1024,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
      },
      "alloc": {},
      "coinbase": "0x0000000000000000000000000000000000000000",
      "difficulty": "0x0400",
      "extraData": "0x00",
      "gasLimit": "0x2100000",
      "nonce": "0x0000000000000042",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x00"
    }
    

    1.4.2 初始化操作
    cd ./eth_test
    geth --datadir data0 init genesis.json

    1.4.3 启动私有节点

    geth --networkid="1024" --identity "geth0" --rpc --rpcapi "db, eth, net, web3,debug, admin,personal, miner" --rpcport "8545" --datadir data0 --port "30303" --rpccorsdomain="*" console 2>>geth0.log
    

    1.4.4 创建账号
    personal.newAccount()
    1.4.5 查看账号
    eth.accounts
    1.4.6 查看账号余额
    eth.getBalance(eth.accounts[0])
    1.4.7 启动&停止挖矿
    启动挖矿:
    miner.start(1)
    其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
    停止挖矿,在 console 中输入:
    miner.stop()
    挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。

    1.4.8 转账
    目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:

    # eth.getBalance(eth.accounts[0])
     15000000000000000000
     eth.getBalance(eth.accounts[1])
     0
    

    我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:

    # personal.unlockAccount(eth.accounts[0])
     Unlock account 0x3443ffb2a5ce3f4b80080791e0fde16a3fac2802
     Passphrase:
     true
    

    发送交易,账户 0 -> 账户 1:

    # amount = web3.toWei(5,'ether')
     "5000000000000000000"
     eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
    

    需要输入密码 123456

     INFO [09-12|07:38:12] Submitted transaction fullhash=0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce recipient=0x02bee2a1582bbf58c42bbdfe7b8db4685d4d4c62
    "0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce"
    

    此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。

    使用 miner.start() 命令开始挖矿:
    miner.start(1);admin.sleepBlocks(1);miner.stop();

    新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
    web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

    1.4.9 连接到其他节点

    用同样的genesis.json初始化操作
    cd ./eth_test
    geth --datadir data1 init genesis.json

    启动私有节点一,修改 rpcport 和port

    geth --networkid="1024" --identity "geth1" --rpc --rpcapi "db, eth, net, web3,debug, admin,personal, miner" --rpcport "8546" --datadir data1 --port "30304" --rpccorsdomain="*" console 2>>geth1.log
    

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

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

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

    admin.nodeInfo.enode
    "enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@[::]:30303"

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

    admin.addPeer("enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@127.0.0.1:30304")
    

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

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

    除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点

    参考:https://cloud.tencent.com/developer/article/1332424

    相关文章

      网友评论

          本文标题:以太坊多节点私有链部署

          本文链接:https://www.haomeiwen.com/subject/jvohictx.html