Ubuntuイーサー坊プライベートチェーンマルチノード環境の構築


前言


エーテル坊はオープンソースの公有ブロックチェーンプラットフォームであり、図霊完備のスマート契約Solidityをサポートし、中心化されたDAppsを開発することができる.しかし、直接公網で開発するのは非常に高価です.取引ごとにgasを支払うため、テストチェーンで開発するのは明らかにもっと良い選択です.本編では、ローカルエリアネットワーク環境下で、複数のマシンにイーサ坊テストチェーンを構築する方法について説明します.

環境の準備

  • Ubuntu 16.04.3 LTS
  • 3 Gメモリ
  • geth
  • 複数のコンピュータは同じローカルエリアネットワークにあり、互いにpingして
  • に通じる.

    創世ブロックの作成と初期化


    genesis.json
    {
      "config": {
            "chainId": 14,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
      "alloc"      : {},
      "coinbase"   : "0x0000000000000000000000000000000000000000",
      "difficulty" : "0x05000",
      "extraData"  : "",
      "gasLimit"   : "0x2fefd8",
      "nonce"      : "0x0000000000000042",
      "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp"  : "0x00"
    }
    
  • gasLimitは大きく修正しなければなりません.そうしないと、スマート契約を導入するときに、契約に消費されるgasがlimitを超えると失敗します.
  • chainIdはEIP 155で定義されているどのチェーンに取引を送信するかの方法です(EIPは太坊改善提案です).ここでは14,truffleに設定.jsのnetwork_idも14でなければなりません.そうしないと、取引時にinvalid senderの間違いを報告します.

  • CHAIN_ID
    Chain(s)
    1
    Ethereum mainnet
    2
    Morden (disused), Expanse mainnet
    3
    Ropsten
    4
    Rinkeby
    30
    Rootstock mainnet
    31
    Rootstock testnet
    42
    Kovan
    61
    Ethereum Classic mainnet
    62
    Ethereum Classic testnet
    1337
    Geth private chains (default)
    vadmin@ubuntu:~/fileData$ geth --datadir data0 init genesis.json
    WARN [07-09|19:50:27.769688] Sanitizing cache to Go's GC limits       provided=1024 updated=982
    INFO [07-09|19:50:27.782066] Maximum peer count                       ETH=25 LES=0 total=25
    INFO [07-09|19:50:27.790579] Allocated cache and file handles         database=/home/vadmin/fileData/data0/geth/chaindata cache=16 handles=16
    INFO [07-09|19:50:27.802341] Writing custom genesis block 
    INFO [07-09|19:50:27.802486] Persisted trie from memory database      nodes=0 size=0.00B time=5.677µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
    INFO [07-09|19:50:27.803067] Successfully wrote genesis state         database=chaindata                                  hash=06701b…b7b009
    INFO [07-09|19:50:27.803132] Allocated cache and file handles         database=/home/vadmin/fileData/data0/geth/lightchaindata cache=16 handles=16
    INFO [07-09|19:50:27.812823] Writing custom genesis block 
    INFO [07-09|19:50:27.812924] Persisted trie from memory database      nodes=0 size=0.00B time=3.565µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
    INFO [07-09|19:50:27.814915] Successfully wrote genesis state         database=lightchaindata                                  hash=06701b…b7b009
    

    最初のノードnode 0の起動

    vadmin@ubuntu:~/fileData$ geth --networkid 14 --nodiscover --datadir data0 --rpc --rpcapi net,eth,web3,personal --rpcaddr 192.168.23.193 console
    WARN [07-09|19:53:00.921526] Sanitizing cache to Go's GC limits       provided=1024 updated=982
    INFO [07-09|19:53:00.922131] Maximum peer count                       ETH=25 LES=0 total=25
    INFO [07-09|19:53:00.922839] Starting peer-to-peer node               instance=Geth/v1.8.12-unstable-c95e4a80/linux-amd64/go1.10.1
    INFO [07-09|19:53:00.922951] Allocated cache and file handles         database=/home/vadmin/fileData/data0/geth/chaindata cache=736 handles=512
    INFO [07-09|19:53:00.940248] Initialised chain configuration          config="{ChainID: 14 Homestead: 0 DAO:  DAOSupport: false EIP150:  EIP155: 0 EIP158: 0 Byzantium:  Constantinople:  Engine: unknown}"
    INFO [07-09|19:53:00.940315] Disk storage enabled for ethash caches   dir=/home/vadmin/fileData/data0/geth/ethash count=3
    INFO [07-09|19:53:00.94033] Disk storage enabled for ethash DAGs     dir=/home/vadmin/.ethash                    count=2
    INFO [07-09|19:53:00.940361] Initialising Ethereum protocol           versions="[63 62]" network=14
    INFO [07-09|19:53:00.941793] Loaded most recent local header          number=0 hash=06701b…b7b009 td=20480
    INFO [07-09|19:53:00.941858] Loaded most recent local full block      number=0 hash=06701b…b7b009 td=20480
    INFO [07-09|19:53:00.941872] Loaded most recent local fast block      number=0 hash=06701b…b7b009 td=20480
    INFO [07-09|19:53:00.942016] Regenerated local transaction journal    transactions=0 accounts=0
    INFO [07-09|19:53:00.94256] Starting P2P networking 
    INFO [07-09|19:53:00.943098] RLPx listener up                         self="enode://8424ff6b41be1f6ee2a2e374ba88d12b30466b81f6d8684e9355e65b8a28b58ff0b9f7ec7684f5dc4b697a90f961e86db6dc75186eb283e3619c0fc4c4b7988d@[::]:30303?discport=0"
    INFO [07-09|19:53:00.948868] IPC endpoint opened                      url=/home/vadmin/fileData/data0/geth.ipc
    INFO [07-09|19:53:00.949161] HTTP endpoint opened                     url=http://192.168.23.193:8545           cors= vhosts=localhost
    Welcome to the Geth JavaScript console!
    
    instance: Geth/v1.8.12-unstable-c95e4a80/linux-amd64/go1.10.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
    
  • keyおよびgethストレージディレクトリとしてdata 0を作成する
  • オープンrpc api:net,eth,web 3,personal
  • ブロックチェーンデータ格納ディレクトリ/home/vadmin/.ethash
  • リモート通信のrpcアドレスhttp://192.168.23.193:8545

  • アカウントを作成し、掘削を開始


    personal.newAccount(“123”) “0xd585211734b283f6f290d1e0662b4ecf1166d54d” miner.start()

    前に作成したgenesis.jsonは別の仮想マシンにコピーし、2番目のノードnode 1を起動します。

    vadmin@ubuntu:~/fileData$ geth --datadir data1 init genesis.json
    
    geth --networkid 14  --nodiscover --datadir data1   --port 61911 --rpcapi net,eth,web3,personal --rpc  --rpcaddr 192.168.23.125  --rpcport 8101 console
    

    2番目のノードにアカウントを作成


    personal.newAccount(“123”) “0x22d968f93a63fe35a85daf4ab3c880543150193e”

    ノード0を追加


    ノード0のコンソールで、0ノードのenodeを表示します.
    admin.nodeInfo.enode “enode://8424ff6b41be1f6ee2a2e374ba88d12b30466b81f6d8684e9355e65b8a28b58ff0b9f7ec7684f5dc4b697a90f961e86db6dc75186eb283e3619c0fc4c4b7988d@[::]:30303?discport=0”
    ノード1のコンソールで、ノード0を追加
    admin.addPeer(“enode://8424ff6b41be1f6ee2a2e374ba88d12b30466b81f6d8684e9355e65b8a28b58ff0b9f7ec7684f5dc4b697a90f961e86db6dc75186eb283e3619c0fc4c4b7988d@192.168.23.193:30303”)

    接続ノードの表示


    ノード00と01のコンソールで、接続されているノードの数と接続されているノードのリストを表示できます.
    net.peerCount
    admin.peers
    

    一回振り替えをする


    baseAccount = eth.accounts[0] personal.unlockAccount(baseAccount,“123”)
    eth.sendTransaction({from : baseAccount, to : “0xee1d67b7bfd646e080e18d39c6049a1362177db0” , value : web3.toWei(1,“ether”)}) “0x6a9c25fbe3c16e4a8107c91ab3b1b982e07b3fca7e19749de450db1744ceef47”

    別の端末を現在のノードに接続

    geth attach ipc:/home/vadmin/fileData/data0/geth.ipc