見出し画像

【保存版】Gethを使って、EthereumのPrivate Networkを作ってみよう!

本日はEthereumのPrivate Networkを作る手順を記していきたいと思います。ブロックチェーンに興味のある方、ぜひやってみてください!

⓪ 開始前の準備

◎まずは任意の場所に構築用のフォルダを作りましょう。
(コマンドプロンプトの「cd」「mkdir」のコマンドなどが不明の方は最後尾に記載します。)

スクリーンショット (214)

◎Gethをインストールしてください。
https://geth.ethereum.org/docs/install-and-build/installing-geth

①-1 Genesis Block(概要)

『Genesis Block』とはブロックチェーンの一番最初のブロックです。

スクリーンショット (213)

Gethの公式ページを見てみましょう。

まずは、こちらが「Private Networks」のページです。「Public」ではないので自分(のチーム)専用のブロックチェーンについてです。

スクリーンショット (188)

下の方に行ってみると。。

スクリーンショット (189)

「Genesis Block」作成のための説明がありました。

①-2 Genesis Block(genesis.jsonファイルで構成される)

For a private network, you usually want a different genesis block.

⇒「private network」では別の「Genesis Block」が必要とのこと

The genesis block is configured using the genesis.json file.

⇒こちらも大事だと思います。
 genesis blockは「genesis.json」ファイルによって構成される
 ⇒このため「genesis.json」を作る必要があります。

①-3 Genesis Block(genesis.jsonファイル構成)

少し詳しく中身も見てみましょう。

スクリーンショット (190)

下の「genesis.json」の中身と一緒に見るとわかりやすいと思います。

スクリーンショット (192)

Ethereum platform features enabled at launch (config)

⇒どうやら「config」から開始されるようです。確かに一番最初がconfigですね。

Initial allocation of ether (alloc). This determines how much ether is available to the addresses you list in the genesis block.

最初のETHの割り当てが「alloc」のようです。genesis blockで、どのアドレスに最初にいくらのETHを入れるのかを決められるのですね。

では、JSONファイルを作ってみましょう。

JSONファイルの作成は先ほどの「genesis.json」をメモ帳などに貼り付け、「genesis.json」(拡張子を「.json」にしている)で保存するだけです。

①-4 Genesis Block(JSONとは)

なお、JSONとは「Javascript Object Notation」の頭文字を取ったものです。

Javascriptオブジェクトの表記法(notation)で書かれたファイルのことです。

なお、「Javascriptオブジェクトの表記法」とはそれぞれの「プロパティ」と「値」が”(ダブルクォーテーション)で囲まれているような記法です。

スクリーンショット (193)

①-5 Genesis Block(genesis.jsonからGenesis Blockを作る)

では、続いて、この「genesis.json」をGenesis Blockに設定しましょう。

スクリーンショット (194)

Initializing the Geth Database

⇒Geth Databaseを初期化します。

This imports and sets the canonical genesis block for your chain.

⇒(次のコードによって)あなたのチェーンに基準となるgenesis blockをインポート・セットします。

geth init --datadir data genesis.json

せっかくなのでコマンドも見てみましょう。

スクリーンショット (195)

init ⇒ Bootstrap and initialize a new genesis block

「init」 ⇒ 新しいgenesis blockを起動し、初期化する

スクリーンショット (196)

まず、「--datadir」は「Ethereum Option」とのことで、イーサリアム用のメニューなのですね。

Data directory for the databases and keystore 

データベースとキーストア(鍵の保管場所)のためのデータのdirectory(フォルダ)を指定します。

では、やってみましょう。

スクリーンショット (197)

Successfully wrote genesis state

⇒どうやら成功したようです。

そして、「keystore」もフォルダとしてできていました。

スクリーンショット (198)

②-1 プライベートネットワークを起動する(networkidコマンド

こちらのコマンドを見てみましょう。

スクリーンショット (199)

「networkid value 」
⇒ Explicitly set network id (integer)(For testnets: use --ropsten, --rinkeby, --goerli instead) (default: 1)

⇒「networkid value 」で明示的にnetworkIDをセットします。
 こちらはgenesis.jsonで指定した「chainID」と同じにする必要があります

スクリーンショット (200)

なのでここでは「15」を指定します。

また、次のサイトも参考にしました。

スクリーンショット (201)

# geth --networkid 10 --datadir ~/geth/ console 2>> ~/geth/error.log

②-2 プライベートネットワークを起動する(JavaScript Console

⇒ここの「console 2>>」は何だろう、ということで調べてみます。

スクリーンショット (202)

Gethの公式サイトにありました。

まず一番上の部分は

JavaScript Console
The Geth JavaScript console exposes the full web3 JavaScript Dapp API and further administrative APIs.

⇒GethのJavascriptコンソールは次の2つAPIを出すようです。
 ①完全なweb3 Javascript DappのAPI
 ②管理上のAPIs ←こちらはsが付いているので、複数ありそう

(note: the web3 version bundled within geth is very old, and not up to date with official docs)

⇒ちなみに、gethと一緒に出されるweb3バージョンは古いようですね。

そして、JavaScript Consoleには次の3種類があるようです。

① Interactive Use(対話形式の使用)
 ⇒The Console
②Non-interactive Use(非対話形式の使用)
 ⇒Script Mode
③Caveats(注意書き、警告)

スクリーンショット (205)

②-3 プライベートネットワークを起動する(console 2コマンド

さて、本題に戻ります。

「console 2>>」はここにいました。

スクリーンショット (206)

まずこちらは①のInteractive use(対話形式の使用)のコマンドの一つになります。

その上で

If you need log information, start with:
⇒ログ情報が必要なら下のコード
geth console --verbosity 5 2>> /tmp/eth.log
Otherwise mute your logs, so that it does not pollute your console:
⇒コンソールを汚さず、ログをミュートするならこちら
geth console 2> /dev/null

ということは、ログを出す方法は2つあり、

①普通に出す   ⇒ console
②ミュートにする ⇒ console 2 

となっており、今回はミュートにしてlogを吐き出したいので、console 2が使われていました。

では、console 2 も理解できたので、実行してみましょう。

スクリーンショット (207)

できました!

Welcome to the Geth JavaScript console!
(Geth JavaScriptのconsoleへようこそ!)

⇒「Console 2」を利用して、GethのJavascript Consoleを利用したのでまさに想定通りの文言です。

ここも気になりました。

datadir: C:\Users\ytaka\1.programing\Docker勉強用\geth

⇒このパスに格納されているようですが。。

スクリーンショット (209)

ありました!うれしいです。

③-1 Blockchainが出来たかどうかの確認(Block(0))

では、最後にブロックがネットワークに構築されたので、コマンドを使って確かめてみましょう。

こちらの記事にコマンドがまとまっていました。

では、Block番号0番のGenesis Blockを確認してみましょう。

スクリーンショット (210)

できました

スクリーンショット (211)

③-2 Blockchainが出来たかどうかの確認(Block(1))

ちなみにGenesis Blockの次のブロックも確認してみましょう。

スクリーンショット (212)

⇒null(無い、無効ななど)

となっていますね。

これは現在、マイニングを行っていないため、Genesis Blockまでのみが出来ている状態を表しています。


いかがだったでしょうか。

次回の記事では、今回できたBlockchainのネットワークをよりくわしく見ていきたいと思います。

最後にBlockBaseでは、Blockchainについての勉強会などを行っています。ご興味のある方はぜひ下から見に行ってみてください!

以上です。

【補足】(初学者の方向け)のコマンドプロンプトについて

================

「cd」とは「direcroty(フォルダ)」を移動するためのコマンドです。

コマンドプロンプトを立ち上げ、(検索窓で「cmd」など)「cd」の後ろに半角スペースを空けて、移動したい場所を指定すれば移動します。

スクリーンショット (184)

例えばこの場所に移動したければ、「cd」の後ろに、このピンク部分をコピーすれば移動します。こんな感じです。

スクリーンショット (185)

「mkdir」はdirectoryを作るためのコマンドです。

次のように作成します。

mkdir ディレクトリ名

スクリーンショット (186)

↑このようなコマンドを入力することで、「geth」という名前のdirectory(フォルダ)が出来ます。

================

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊