Jeidy

Jeidy

hihihi

手取り足取り教える macOS で自分の Geth プライベートチェーンを構築する方法

@TOC


一、Ethereum クライアントのインストール#

brew tap ethereum/ethereum
Ethereum の Homebrew ソフトウェアリポジトリを追加し、今後のインストールの準備をします。
ここに画像の説明を挿入
brew install ethereum
Ethereum リポジトリから Ethereum クライアント(主に Geth)をインストールします。
ここにはすでに geth がインストールされています


二、必要なフォルダを作成し、genesis.json ファイルを設定する#

  1. 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
}

三、ブロックチェーンの創世ブロックを生成する#

  1. ブロックチェーンデータディレクトリを初期化し、創世ブロックを生成します。
    geth --datadir data0 init genesis.json

ここに画像の説明を挿入
ここに画像の説明を挿入
ここで geth/chaindata にはブロックデータが保存され、keystore にはアカウントデータが保存されますが、現在はまだ空です。

  1. ローカルプライベートチェーンを起動します。
    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
ここに画像の説明を挿入
![ここに画像の説明を挿入](https://i-blog.csdnimg.cn/direct/61bdad54161747d58ecd48187cdeef84.png#pic_center =300x) 5. 再度アカウントを照会します。
eth.accounts
ここに画像の説明を挿入
6. アカウントの残高を照会します。
eth.getBalance(eth.accounts[0])

残高が 0 であり、マイニング後も残高が変わらないことがわかります。

== ここでアカウントの金額を初期化する必要があります。なぜなら、geth の 13 バージョン以降、genesis.json 内でアカウントの金額を設定する必要があるからです。したがって、genesis.json ファイルに戻り、コードを再度修正します。私たちは先ほど作成したアカウントの秘密鍵に置き換え、金額を設定します ==

なぜ最初に genesis.json ファイル内で設定しなかったのかというと、まずアカウントを作成する必要があるからです。
ここに画像の説明を挿入

  1. 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

  1. 再度ローカルプライベートチェーンを起動し、アカウントの残高を照会します。
    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 を使いこなせるようになるでしょう!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。