@TOC
一、Ethereum クライアントのインストール#
brew tap ethereum/ethereum
Ethereum の Homebrew ソフトウェアリポジトリを追加し、今後のインストールの準備をします。
brew install ethereum
Ethereum リポジトリから Ethereum クライアント(主に Geth)をインストールします。
二、必要なフォルダを作成し、genesis.json ファイルを設定する#
- blockchain フォルダを新規作成し、ローカルの geth を保存します。その中に data0、geth フォルダ、および genesis.json ファイルを作成します。以下の図のように。
data0 フォルダ:
ブロックチェーンデータ(ブロック、トランザクション、アカウントの状態など)および関連設定を保存します。
geth フォルダ:
Geth が生成するサブディレクトリで、具体的なブロックデータ、ログ、キーストアなどの情報を保存します。
genesis.json ファイル:
創世ブロックの設定ファイルで、プライベートチェーンの初期状態(難易度、gasLimit、プリセットアカウントなど)を定義します。
以下は genesis.json ファイルのコードです。
{
"config": {
"chainId": 1337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"shanghaiTime": 0,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true
},
"nonce": "0x0",
"timestamp": "0x0",
"extraData": "0x",
"gasLimit": "0xaf79e0",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0000000000000000000000000000000000000004": {
"balance": "0x1"
},
"0000000000000000000000000000000000000005": {
"balance": "0x1"
},
"0000000000000000000000000000000000000006": {
"balance": "0x1"
},
"0000000000000000000000000000000000000007": {
"balance": "0x1"
},
"0000000000000000000000000000000000000008": {
"balance": "0x1"
},
"0000000000000000000000000000000000000009": {
"balance": "0x1"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"baseFeePerGas": "0x3b9aca00",
"excessBlobGas": null,
"blobGasUsed": null
}
三、ブロックチェーンの創世ブロックを生成する#
- ブロックチェーンデータディレクトリを初期化し、創世ブロックを生成します。
geth --datadir data0 init genesis.json
ここで geth/chaindata にはブロックデータが保存され、keystore にはアカウントデータが保存されますが、現在はまだ空です。
- ローカルプライベートチェーンを起動します。
geth --datadir data0 --networkid 10 --http --http.port 8545 --http.api personal,db,eth,net,web3,miner,admin console
3. アカウントを照会します。
eth.accounts
4. アカウントを作成します。
右クリックして新しいターミナルを開きます。
geth --datadir data0 account new
 5. 再度アカウントを照会します。
eth.accounts
6. アカウントの残高を照会します。
eth.getBalance(eth.accounts[0])
残高が 0 であり、マイニング後も残高が変わらないことがわかります。
== ここでアカウントの金額を初期化する必要があります。なぜなら、geth の 13 バージョン以降、genesis.json 内でアカウントの金額を設定する必要があるからです。したがって、genesis.json ファイルに戻り、コードを再度修正します。私たちは先ほど作成したアカウントの秘密鍵に置き換え、金額を設定します ==
なぜ最初に genesis.json ファイル内で設定しなかったのかというと、まずアカウントを作成する必要があるからです。
- genesis.json ファイルを再度修正します。
{
"config": {
"chainId": 1337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"shanghaiTime": 0,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true
},
"nonce": "0x0",
"timestamp": "0x0",
"extraData": "0x",
"gasLimit": "0xaf79e0",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"8f3D6d2d65948cFE4470cCD478F14194f630e813": {
"balance": "0x100000000000000000000000000"
},
"0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0000000000000000000000000000000000000003": {
"balance": "0x1"
},
"0000000000000000000000000000000000000004": {
"balance": "0x1"
},
"0000000000000000000000000000000000000005": {
"balance": "0x1"
},
"0000000000000000000000000000000000000006": {
"balance": "0x1"
},
"0000000000000000000000000000000000000007": {
"balance": "0x1"
},
"0000000000000000000000000000000000000008": {
"balance": "0x1"
},
"0000000000000000000000000000000000000009": {
"balance": "0x1"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"baseFeePerGas": "0x3b9aca00",
"excessBlobGas": null,
"blobGasUsed": null
}
8. 再度初期化します。
== geth フォルダを削除することで、データディレクトリを空にします。なぜなら、data0 データディレクトリにはすでに創世ブロック(genesis)が存在するからです。==
再度初期化します。
geth --datadir data0 init genesis.json
- 再度ローカルプライベートチェーンを起動し、アカウントの残高を照会します。
geth --datadir data0 --networkid 10 --http --http.port 8545 --http.api personal,db,eth,net,web3,miner,admin console
残高を照会します。
eth.getBalance(eth.accounts[0])
これで、macOS 上に自分の Geth プライベートチェーンを構築することに成功しました。環境のインストールからプライベートチェーンの初期化、ノードの起動、アカウントの照会まで。
このチュートリアルがあなたの助けになり、ブロックチェーン開発の重要な一歩を踏み出すことができることを願っています!問題が発生した場合は、ぜひ多くの試行を行い、学び続けてください。あなたは必ず Geth を使いこなせるようになるでしょう!