Ethereumを使用して独自のプライベートブロックを作成する


このポストではEthereumを使用して複数のノードでGethプライベートブロックを構築します.
EthereumのプライベートブロックはEthereumのようなブロックですが、使用するネットワークはEthereum mainではありません.プライベートネットワークを使用すると、すべてのブロックは完全にEthereumのブロックチェーンから離れている、それは可能な変更マイニングのような構成は難しい、アクセスおよびその他の側面.
最後に、あなたは、このネットワークで利用できる取引、スマート契約と他のようなすべてのEthereum機能で、EVM (Ethereum Virtual Machine)で実行しているあなた自身の個人的な封鎖を持ちます.

ゲットスタート


次の手順に従って、プライベートブロックを構築します.
  • geth
  • をインストールします
  • ジェネシスブロック
  • を定義する
  • が最初のブロックチェーンノード
  • を開始する
  • は第2のブロックチェーンノード
  • を開始する
  • は、ピアツーピア接続
  • を作成します
  • マイニングブロックと作成トランザクション
  • gethのインストール


    GETHはEthereumネットワークに接続するいくつかのリソースを持つCLIです.これは、ローカル環境でプライベートネットワークを起動するために使用されます.
    Ubuntu/Debianでgethをインストールするには、次の手順に従います.
    sudo add-apt-repository -y ppa:ethereum/ethereum
    sudo apt-get update
    sudo apt-get install ethereum
    
    他のプラットフォームhereにインストールを見ることができます.
    gethが正常にインストールされているかどうかチェックします.geth -hgethを使用するすべてのコマンドを示します.

    発生ブロック


    すべてのブロックは、ジェネシスブロックから始まります.このブロックは、初期設定をブロックチェーンに定義します.ジェネシスブロックへの設定は、ジェネシスで定義されます.JSONファイル.
    そこで、プライベートネットワークを起動して創世記を作成するフォルダーを作成しましょう.JSONファイル.
    mkdir my-blockchain
    cd my-blockchain
    touch genesis.json
    
    次のコンテンツをジェネシスに追加します.JSONファイル
    {
      "config": {
        "chainId": 1234,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0,
        "petersburgBlock": 0,
        "ethash": {}
      },
      "difficulty": "4",
      "gasLimit": "8000000",
      "alloc": {}
    }
    
    解説

  • Chaid :プライベートネットワークの一意のIDを定義するゼロより大きい整数.メインネットワークはID 1です.あなたが主なネットワークと異なっているあなた自身のカスタムネットワークIDを供給するならば、あなたのノードは他のノードに接続していなくて、私設ネットワークを形成しません..あなたはhttps://chainid.networkでEthereumネットワークのコミュニティ実行レジストリを見つけることができます.

  • HomesteadBlock:HomesteadはEthereumプロトコルの最初の公式安定版です.このリリースを使用する場合は、属性を0に設定します.

  • 難易度:ブロックを生成するの難しさを決定します.

  • ガス制限:単位あたりの現在のネットワーク全体のガス消費限度を示します.ガスはEthereumネットワーク上のトランザクション手数料を支払うために使用される燃料です.

  • Alloc :ネットワークの正のバランスでいくつかのアカウントを開始するために使用されます.この場合、我々はどんなアカウントも定義しません.
  • 他の属性はネットワークで使用されるプロトコルと属性を参照します、我々はEthereumネットワークのためにデフォルト値を設定しました.
  • データベースを起動する


    BootNodeは、ブロックチェインが開始されたときに生成される最初のノードです.データベースを最初のノード実行に開始するには、次の手順に従います.geth init --datadir node1 genesis.jsonフォルダnode 1は、ブートノードにデータベースを作成します.
    端末の結果は次のようになります.

    ディレクトリの結果は次のようになります.

    スタートノード

    geth --datadir node1 --networkid 1234 --http --allow-insecure-unlock --nodiscoverこのコマンドはID 1234でプライベートネットワークのノードを起動します.旗-- HTTPはウェブアプリケーションアクセスを可能にするのに用いられます、我々はこのプライベートネットワークでMetamaskを接続するために次のポストでこれを使用します.フラグ-- insecure unlockを許可すると、Webアプリケーションなしで実行を実行できるようになります.フラグ-- noDiscoverは、ノードが自動的に他に接続しようとするのを防ぐのに用いられます.
    端末の結果は次のようになります.

    完了!プライベートネットワークのブロックは実行中です.これを確かめるテストをしましょう.同じフォルダの他のターミナルウィンドウを開き、以下のコマンドを実行します.geth attach node1/geth.ipcこれは対話的なJavaScript端末を開き、このノードにいくつかのタスクを実行します.端末の結果は次のようになります.

    ノードの情報を見るには、次のコマンドを実行します.admin.nodeInfoこのコマンドはこのノードに関するすべての情報を示し、ノードがアクティブであることを確認できます.このウィンドウを先にテストしておく.

    メンバーピアの追加


    第2のノードを我々のblockchainに始めましょう.以下のコマンドを実行します.
    geth init --datadir node2 genesis.json
    geth --datadir node2 --networkid 1234 --port 30304
    
    コマンドは、いくつかの小さな違いがある前のものと非常によく似ています.
  • この場合のデータベースへのフォルダはnode 2です.
  • フラグ-- http -- -- allow insecure unsecureロックは必要ありません.
  • 旗--ポートそれは前のものからこのノードを区別するのに必要です.最初のノードはデフォルトポート30303上で動作します.
  • 新しいJavaScript端末を作成した2番目のノードに開き、実行する情報を確認します.
    geth attach node2/geth.ipc
    admin.nodeInfo
    
    結果は次のようになります.

    接続ピア


    さて、ブロックチェーン内の2つのノード間のピアツーピア接続を作成しましょう.
    第2ノードのNodeInfoからENODEをコピーし、次のコマンドを実行します.
    admin.addPeer("enode://431fa50a676b35dd750a68656cf8a822edb2c083ddf2359b6c246216dfbef0f1dad517b53b9ba0a35f4d2f1d44274ae4fc4b2bdf69e774af892b097d082eff1c@127.0.0.1:30304?discport=0")
    
    そして、すべてのピア接続が両方のノードに実行されるのを見ます.
    admin.peers
    
    どのノードも1つのピアを接続しなければならない.
    ネットワークの第2のノードを参照している30304ポートに注意してください.結果は次のようになります.

    完了!あなたのブロックは、複数のノードのruningと接続で作成されます.アカウントを作成して、両方のノードで更新されたデータを見るためにマイニングを開始しましょう.

    マイニング


    私のブロックには、基本的なアカウントが必要です.これをしましょう.最初のノードのJavaScriptターミナルでは、新しいアカウントを作成し、このアカウントに必要なパスワードを定義するコマンドを実行します.
    personal.newAccount()
    

    アカウント・バランスの実行を見ることができます.
    eth.getBalance("0xbd3156b239e2bb8d073406e67eba59a651be18f0")
    
    さて、最初のノードでマイニングを開始できます.ブロックの現在の高さを参照するコマンドを実行する前に、ブロックがまだ割り当てられていないので、0にする必要があります.
    eth.blockNumber
    
    マイニングを開始し、数秒後に更新されたブロックを参照して停止します.
    miner.start() // Start Mining
    miner.stop() // Stop Mining
    
    アカウントのブロックと残高を再度確認します.いくつかのブロックが作成されている必要がありますし、値は報酬として獲得されている必要があります.

    また、いくつかの秒後に2番目のノードのJavaScriptターミナルでブロック番号を確認することができます値は、最初のノードで示されている同じでなければなりません.これは、実際には、ノードが接続され、更新されることを意味します.

    ブロック鎖構造



    次の手順


    他のコマンドを実行して、両方のノードでテストを行うことができます.すべてのgeth CLIオプションhereを見てください.探検Geth Documentation.
    続行するには、あなたのブロックチェーンのプライベートネットワークにMetamaskし、いくつかのトランザクションを実行します.

    リファレンス


    Geth Documentation
    Ethereum