マイニングシミュレーション用のMac環境に基づくEthereumプライベートブロックチェーンの構築

最初のステップ:関連ソフトウェアのインストール

  • go-ethereumクライアントのインストール
  • Go-ethereumクライアントは通常、Gethと呼ばれます。これは、Goに実装された完全なEthereumノードを実行するコマンドラインインターフェイスです。GethはGo言語のマルチプラットフォームの性質から恩恵を受け、複数のプラットフォーム(Windows、Linux、Macなど)での使用をサポートします。Gethは、Ethereumプロトコルの特定の実装に基づいています。Gethを使用すると、新しいアカウントの作成と削除、マイニングの開始、etherコインの転送、スマートコントラクトの展開と実行など、Ethereumのさまざまな機能を実装できます。

Gethは、次の3つのJSON RPCプロトコルを使用して接続できます。

  • 内部プロセス通信(IPC):内部通信。通常、コンピューターで使用されます。
  • リモートプログラムコール(RCP):コンピュータ間の通信。通常、TCPおよびHTTPプロトコルが使用されます。
  • WS(Webソケット):ソケットを使用してGethに接続します。

チェーンIDの意味:

  • チェーンID:1メインネットパブリックチェーン
  • チェーンID:2モーデンネットワーク(一部のユーザーのみが利用可能)
  • チェーンID:3 Ropstenネットワーク
  • チェーンID:4リンケビーネットワーク
  • 4より大きいチェーンIDはプライベートネットワークです
  • Geth --testnetを使用してRopstenネットワークに接続し、Geth --rinkebyを使用してRinkebyネットワークに接続します。
  • インストールコマンドは次のとおりです。
brew tap ethereum/ethereum
brew install ethereum
  • 私の表示インターフェース

  • インストールが成功したかどうかを確認し、次のコマンドを入力します
geth --help
  •  次のインターフェイスが表示されます。つまり、インストールは成功しています

ステップ2:プライベートチェーンを構築する

  • Ethereumはカスタム作成ブロックをサポートしています。プライベートチェーンを実行するには、独自の作成ブロックを定義する必要があります。作成ブロック情報は、json形式の構成ファイルに書き込まれます。まず、次のコンテンツをjsonファイルに保存します。通常、genesis.jsonにちなんで名前が付けられています。
  • 前提となる運用コマンドは以下のとおりです。
mkdir myeth
cd myeth
vi genesis.json
  • jsonファイルの内容は次のとおりです。直接コピーするだけです。
{
  "config": {
        "chainId": 666999, 
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}
  • 上記のパラメータの説明

  • 注、私は多くの記事に文eip150Block:0が欠落していると言及していますが、これは誤りです。
  • エラー条件は、Genesisブロックのwirteに失敗しました:サポートされていない順序です

ネットワークの初期化

  • geth initコマンド、genesis.jsonファイル、初期化するブロックデータとキーストアを格納するフォルダーを入力します。
geth init "/Users/chy/Desktop/myeth/genesis.json" --datadir "/Users/chy/Desktop/myeth/chaindata"
  • ジェネシスブロックが生成され、Gethノードを開始できます。Gethの起動時に、デフォルトでIPCプロトコルが使用されます。PRCプロトコルを介してGethノードにアクセスできるようにするには、コマンドにRPCパラメータを含める必要があります。 
  • コマンド操作は以下の通りです

 ノードが実行される環境をセットアップする

geth --datadir "/Users/chy/Desktop/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15 –allow-insecure-unlock
  • コマンドの説明
  • –Datadir:ブロックチェーンデータの保存場所を指定します。これにより、実際の状況に応じて調整し、独自のパスを置き換える必要があります
  • –Rpc:HTTP-RPCサービスを有効にすることを示します。
  • –Rpcapi「eth、web3、miner、admin、personal、net」:このコマンドは、RPC経由のアクセスを許可するコマンドを示します。デフォルトでは、Gethはweb3を許可します。
  • –Nodiscover:ノード検出メカニズムをオフにして、同じ初期構成で奇妙なノードに参加しないようにします。
  • –ID:ノードIDを指定して、大きなノードグループから自分のノードを識別しやすくします。
  • –Rpcport:HTTP-RPCサービスの待機ポート番号を指定します(デフォルトは8545)。
  • –Rpcaddr:IPアドレスを指定します。
  • –ポート:他のノードとの接続に使用するポート番号を指定します(デフォルトは30303)。
  • –Maxpeers 0テストチェーンへの接続を望まない場合は、maxpeers 0を使用します。または、接続するノードの数が正確にわかっている場合は、パラメーターを調整できます。
  • -allow-安全でないアンロックコマンドなしで使用ロック解除はエラーエラーになります:アクセスがされたHTTPのアカウントのロック解除 、禁じられたセキュリティ上の理由であることが判明し、HTTPチャネルは、デフォルトのロック解除してアカウントを無効にされ、問題関連資料を
  • 上記のコマンドを実行した後、Fatal:Error starting protocol stack:datadir already used by another process。この問題は、実行中のgethプロセスを強制的にシャットダウンする必要があるためです。コマンドは次のとおりです。54148はgethプロセスのID番号です
  • パラメータ-allow-insecure-unlockを再度追加して、gプライベートチェーンを再起動します。次に、アカウントのロック解除コマンドを実行して成功します。

geth --datadir "/Users/chy/Desktop/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15 --allow-insecure-unlock
ps aux | grep "geth"
kill -9 54148
  • enode情報は、ネットワーク上のノードのIDです。他のノードがこのネットワークに参加する準備ができている場合、独自のenode値を提供する必要があります。RPCアクセスはhttp://127.0.0.1:8545またはhttp:// localhost:8545を介して行うことができ、IPCアクセスは** \。\ Pipe \ geth.ipc **コマンドを介して行うことができます。サービスの形式でコマンドが実行され続け、私たちのようにする必要があり、再オープンし、コマンドラインウィンドウしかし、元のウィンドウは閉じられません次のようにコマンドを入力します。

Geth attach rpc:http://localhost:8545
  • 次のページが表示されるので、制御ページに入ります。IPCプロトコルを使用してノードに接続し、他のコマンドを実行できるようにします。

インタラクティブな実行環境

  • これは、JavaScriptコードを実行できるインタラクティブなJavaScript実行環境です。ここで、>はコマンドプロンプトです。この環境では、Ethereumを操作するためのJavaScriptオブジェクトもいくつか組み込まれており、これらのオブジェクトを直接使用できます。これらのオブジェクトには、主に次のものが含まれます。
  • eth:ブロックチェーンの操作に関連するいくつかのメソッドが含まれます。
  • net:p2pネットワークステータスを表示するいくつかのメソッドが含まれています。
  • admin:ノードの管理に関連するいくつかのメソッドが含まれています。
  • miner:マイニングを開始および停止するためのいくつかのメソッドが含まれています。
  • 個人:主にアカウントを管理するためのいくつかの方法が含まれます。
  • txpool:トランザクションメモリプールを表示するいくつかのメソッドが含まれています。
  • web3:上記のオブジェクトが含まれており、いくつかの単位変換メソッドも含まれています。

一般的なコマンド:

  • personal.newAccount():アカウントを作成します。
  • personal.unlockAccount():アカウントのロックを解除します。
  • eth.accounts:システムのアカウントを列挙します。
  • eth.getBalance():アカウントの残高を表示します。戻り値の単位はWeiです(Weiは、ビットコインのSatoshiに似た、Ethereumの最小の通貨単位で、1 ether = 10 ^ 18 Wei);
  • eth.blockNumber:ブロックの総数をリストします。
  • eth.getTransaction():トランザクションを取得します。
  • eth.getBlock():ブロックを取得します。
  • miner.start():マイニングを開始します。
  • miner.stop():マイニングを停止します。
  • web3.fromWei():WeiをEtherに変換します。
  • web3.toWei():EtherをWeiに変換します。
  • txpool.status:トランザクションプールのステータス。
  • admin.addPeer():他のノードに接続します。

ステップ3:アカウントを設定する

  • Gethノードに接続したら、次のステップは、coinbaseまたはetherbaseアカウントを設定することです。アカウントを作成するには、個人オブジェクトのnewAccoutメソッドを使用してパスワードを設定できます(パスワードは表示されません)。コマンドは以下の通りです。
personal.newAccount()
  • 元のcoinbaseアカウントのアドレスを変更する必要がある場合は、address.minerオブジェクトのsetEtherBase関数を使用して操作できます。この操作により、元のcoinbaseアカウントが新しいアカウントに置き換えられます。コマンドは次のとおりです
miner.setEtherbase("0x19b4029dad20824db6dc201437f9cac2a7e1fc5c")
  • queryコマンドを実行すると、設定したアドレスが有効になったことがわかります。これでマイニングを開始できます。すべてのマイニング報酬を受け取るマイナーは1人だけなので、coinbaseアカウントのEtherは徐々に増加します。
eth.coinbase
  • 同じ方法で別のアカウントを作成します
  • 現在のユーザーを表示
eth.accounts
  • コードは次のように実行されます

ステップ4:マイニングを開始する

  • startのパラメーターは、マイニングに使用されるスレッドの数を表します。コマンドは次のとおりです
miner.start(8)
  • この時点で、以前にプライベートチェーンを作成したコマンドラインウィンドウに切り替えると、マイニングプロセスの出力を確認できます。これは、そのときに作成した最初のウィンドウを指します。

  • マイニングが初めての場合は、DAG関連のファイルを生成する必要があり、これにはある程度の時間がかかります。2回目以降は必要ありません。

  • 2回目の採掘なので、上記のファイルはありません。

  • ログ入力方式を使用する場合、コマンドtail -f geth.logを入力して、マイニングの進行状況を追跡できます。
  • マイニングされたアカウント0とマイニングされていないアカウント1のEther残高を表示します。ウォレットの残高を表示するコマンドは次のとおりです。0を1に変更して、2番目のアカウントの残高を表示します。
eth.getBalance(eth.accounts[0])
  • 実装は次のとおりです。


 

  • ブロックをマイニングすると5エーテルが報酬され、マイニングからの報酬はマイナーのアカウントに入ります。このアカウントはコインベースと呼ばれます。デフォルトでは、コインベースはローカルアカウントの最初のアカウントです。

  • getBalance()の戻り値の単位はweiであり、weiはEtherの最小単位です。1Ether = 10からweiの18乗です。イーサリアムの数を確認するには、web3.fromWei()を使用して戻り値をイーサリアムに変換します

  • マイニングを停止し、コマンドは次のとおりです

miner.stop()
  • 全体的な操作レイアウト、左側はユーザーの入力を動的に監視し、右側のウィンドウはEthereum JavaScriptコンソールです。ページレイアウトは以下の通りです

ステップ5:取引を行う

  • アカウント0からアカウント1に転送したいと思います。転送する前にアカウントのロックを解除する必要があります。ロックしないとエラーが発生します。
  • ロック解除コマンドは次のとおりです
personal.unlockAccount(eth.accounts[0])
  • トランザクションを開始し、アカウント0からアカウント1に200 Etherを転送します。コマンドは次のとおりです。
personal.unlockAccount(eth.accounts[0])
amount = web3.toWei(200,'ether')
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
  • この時点で、トランザクションはブロックチェーンに送信されており、トランザクションのハッシュが返されていますが、まだ処理されていません。ローカルトランザクションプールで確認されるトランザクションがあります。eth.getBlock( "pending"、true).transactionsを使用して、現在の保留を表示できます取引を確認します。
eth.getBlock("pending", true).transactions
  • トランザクションを処理するには、マイニングを実行する必要があります。ここでは、マイニングを開始し、ブロックがマイニングされるのを待ってからマイニングを停止します。コマンドは次のとおりです。

miner.start(1);admin.sleepBlocks(1);miner.stop();
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
  • この時点で、トランザクションは有効になり、アカウント1は200イーサを受け取っているはずです。

参考資料

 

公開された76元の記事 ウォンの賞賛2 ビュー3773

おすすめ

転載: blog.csdn.net/CHYabc123456hh/article/details/105588927