見出し画像

ETHEREUM NODEの構築(Go言語編)

参考

初めに

Ethereumノードを構築は、自分のコンピューターでEthereumインターネットワークに直接参加する方法です。これにより、ステーキングやブロックチェーンを構成するトランザクションの検証などができます。


クライアント

Ethereumノードを立ち上げるには、実行クライアントとコンセンサスクライアントの2種類のソフトウェアが必要です。

実行クライアント

「Geth」や「Parity」といったものがあり、イーサリアムの取引を処理し、データを管理します。

コンセンサスクライアント(例:Prysm、Lighthouse)

ネットワークが同意を形成するのを助け、新しいイーサリアムのプルーフ・オブ・ステークモデルで重要な役割を果たします。


推奨環境と性能

すべてのクライアントは、Linux、MacOS、Windowsなどの主要なオペレーティングシステムに対応しています。 自分に最適なオペレーティングシステム(OS)を使って、通常のデスクトップまたはサーバマシンでノードを実行できます。

最小システム要件

  • CPU: デュアルコア以上

  • RAM: 8GB

  • 2TB: SSD

  • 帯域幅: 10MB/秒以上

推奨される仕様

  • 高速CPU: クアッドコア以上

  • RAM: 16GB以上

  • 高速SSD: 2TB以上

  • 帯域幅: 25MB/秒以上


自動設定

Ethereumノードの設定をもっと簡単に、そして迅速に行いたい方には、自動設定を提供するいくつかのプロジェクトがあります。これらのツールは、インストールから設定までを自動化し、より使いやすいインターフェースを提供します。便利なプロジェクトをいくつか紹介します。

  • DappNode:どんなハードウェアでも使えるノードランチャーやコントロールセンターを提供。簡単なセットアップで多機能を楽しめます。

  • eth-docker:Dockerを使った設定を自動化し、簡単かつ安全なステーキングをサポート。基本的なDocker知識が必要ですが、セットアップが簡単です。

  • Stereum:SSH接続を使用してリモートサーバーにクライアントをインストール。GUIセットアップガイドやコントロールセンターなど、多くの機能を備えています。

  • NiceNode:使いやすいインターフェースを持つランチャーで、数回のクリックでノードを実行できます。現在開発中のプロジェクトです。

  • Sedge:CLIウィザードを使ってDocker構成を自動生成するセットアップツール。Nethermindによって開発されました。

これらのツールを使えば、技術的な詳細に深く踏み込まずとも、Ethereumノードのセットアップと運用を簡単に開始できます。


手動設定

クライアントソフトウェアを手動でダウンロードして設定します。 設定にはターミナル等の基本的なスキルが必要となるため、ITに関する業務を行ったことがない方にはハードルが高いかもしれません。ただし、より幅広く柔軟に設定ができるメリットもあります。


Node構築手順

クライアントのインストール

実行クライアント(ELクライアント)

実行クライアントは、イーサリアムのトランザクション(取引)を処理し、イーサリアム仮想マシン(EVM)でスマートコントラクトを実行します。また、イーサリアムの現在の状態とデータベースを保持します。これにより、ネットワークの基本的な運用が可能になります。

主な実行クライアントには以下のものがあります:

  • Geth: イーサリアムの公式クライアントで、Go言語で書かれています。

  • OpenEthereum(以前のParity): Rust言語で開発され、高速で軽量です。

  • Nethermind: .NETベースで開発され、高いパフォーマンスを誇ります。

  • Besu: Javaで書かれたEnterprise向けのクライアントです。

コンセンサスクライアント(CLクライアント)

コンセンサスクライアントは、イーサリアム2.0の導入により重要性を増しています。プルーフ・オブ・ステーク(PoS)に基づいてネットワークの合意形成を行い、セキュリティやネットワークのアップデート管理を担います。これらはネットワークの新しいエポックへの移行をスムーズに行うために必要です。

主なコンセンサスクライアントには以下のものがあります:

  • Prysm: Go言語で書かれたクライアントです。

  • Lighthouse: Rust言語で開発され、効率性とセキュリティに焦点を当てています。

  • Teku: Javaで開発された、企業向けのクライアントです。

  • Nimbus: Nim言語で開発され、リソースが限られたデバイスでも動作するように最適化されています。


Gethのインストール

ダウンロードサイトに移動し、使用するOSに合ったものをダウンロードする。(今回はMacOSを参考にする)

ダウンロードが完了したら、ターミナルを起動しファイルにMD5を実行してハッシュ値の確認を行う。ダウンロードサイトに同じくMD5で実行した際のハッシュ値があるため、比較し差がないことを確認する。(差があれば正規のファイルではない可能性がある)

# LinuxまたはmacOSの場合
md5 example.txt
MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e

# Windowsの場合
CertUtil -hashfile example.txt MD5
MD5 ハッシュ (ファイル example.txt):
d41d8cd98f00b204e9800998ecf8427e
CertUtil: -hashfile コマンドは正常に完了しました。


prysmのインストール

任意の場所に、「ethereum」というフォルダを作成し、その中に「consensus」と「execution」という2つのサブフォルダを作ります。
その後、「consensus」ディレクトリに移動し、以下のコマンドを実行。

curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh

具体的な動作を詳細に説明します。

  1. curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh:

    • curlコマンドは、ウェブからデータを転送するツールです。

    • https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.shは、Prysmのインストールスクリプトが置かれているURLです。

    • --output prysm.shオプションは、ダウンロードしたデータをprysm.shという名前のファイルに保存します。

  2. &&:

    • この記号は、「前のコマンドが成功した場合のみ、次のコマンドを実行する」という意味です。

  3. chmod +x prysm.sh:

    • chmod +xコマンドは、ファイルに実行権限を追加します。

    • この場合、prysm.shファイルが実行可能ファイルとしてマークされます。

つまり、このコマンド全体の意味は、「Prysmのインストールスクリプトをインターネットからダウンロードして、そのスクリプトを実行可能にする」というものです。


実行クライアントを起動

ダウンロードしたGethファイルを「consensus」と「execution」のどちらかに移動しておくと、ファイル移動が少なくなり便利です。

実行クライアントを起動

Gethファイルがあるディレクトリに移動し、以下のコマンドを実行してノードを開始します。ただし、<PATH_TO_IPC_FILE>にはファイルシステム上の任意の空のパス(/tmpなど)を置き換えてください。実行レイヤークライアントは、この場所にIPCファイルを作成します。

hostname % geth --mainnet \
    --datadir "/tmp" \          
    --http --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551
    --authrpc.jwtsecret=jwtsecretの秘密鍵のパス

# テストネットで実行する場合は、--mainnet を --goerliなどに変更してください。
  1. --datadir "/tmp":Ethereumのブロックチェーンデータやアカウント情報など、Gethによって生成または使用されるデータの格納場所を指定します。この例では、一時的なディレクトリである/tmpをデータディレクトリとして使用しています。

  2. --http:HTTPベースのJSON RPC APIサーバーを有効にするオプションです。これにより、ローカルマシンや指定されたネットワーク経由でGethノードに接続し、様々な命令を送信することが可能になります。

  3. --authrpc.addr localhost:認証済みRPC通信を受け入れるアドレスを指定します。この例ではlocalhostが指定されており、これはGethノードが同じマシン上で動作する他のアプリケーションからの接続のみを受け入れることを意味します。

  4. --authrpc.vhosts="localhost":認証済みRPC接続が許可される仮想ホストを指定します。ここでもlocalhostが指定されています。

  5. --authrpc.port 8551:認証済みRPCサーバーが使用するポート番号を指定します。この例では、ポート番号8551が使用されています。

  6. --authrpc.jwtsecret=/Users/ooekenfutoshi/Desktop/Python/Node_operation/jwtsecret:JWT認証に使用されるシークレットファイルのパスを指定します。このシークレットは、Gethと他のクライアント間の認証済みRPC接続において使用される認証トークンを生成するために使われます。

正常動作例

INFO [03-28|15:42:00.123] Starting Geth on Ethereum testnet: Goerli 
INFO [03-28|15:42:00.124] Maximum peer count                       ETH=50 LES=0 total=50
INFO [03-28|15:42:00.124] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [03-28|15:42:00.125] Set global gas cap                       cap=50,000,000
INFO [03-28|15:42:00.125] Allocated trie memory caches             clean=154.00MiB dirty=256.00MiB
INFO [03-28|15:42:00.125] Allocated cache and file handles         database=/tmp/geth/chaindata cache=512.00MiB handles=2048
INFO [03-28|15:42:00.152] Opened ancient database                  database=/tmp/geth/chaindata/ancient
INFO [03-28|15:42:00.153] HTTP server started                      endpoint=[::]:8545 cors= vhosts=localhost
INFO [03-28|15:42:00.153] IPC endpoint opened                      url=/tmp/geth.ipc
INFO [03-28|15:42:00.154] WebSocket enabled                        url=ws://[::]:8546
INFO [03-28|15:42:10.000] Block synchronisation started 
INFO [03-28|15:42:12.345] Downloader queue stats                   receiptTasks=0 blockTasks=95 itemSize=25.67KiB throttle=8192
INFO [03-28|15:42:15.678] Imported new chain segment               blocks=1 txs=142 mgas=12.345 elapsed=8.901s    mgasps=1.386 number=5,678,901 hash=0x...
INFO [03-28|15:42:15.678] Unindexed transactions                   blocks=1 txs=45  tail=4,567,890 elapsed=1.230ms
  • Gethの起動:Goerliテストネット上でGethが起動されています。

  • ピア数の設定:Ethereumの最大ピア数が設定されています。

  • キャッシュとデータベースの割り当て:トライメモリキャッシュとファイルハンドルが割り当てられ、データベースの場所が指定されています。

  • HTTPサーバーの開始:HTTPサーバーが指定された設定で開始されています。

  • ブロック同期の開始:ネットワークからのブロック同期が開始されています。

  • 新しいチェーンセグメントのインポート:新しいブロックが同期され、その詳細(ブロック番号、トランザクション数、ガス使用量など)が報告されています。

これらのログは、Gethが問題なく起動し、ネットワークとの同期を開始したことを示しています

jwtsecretについて

jwtsecretは、JSON Web Token (JWT) の生成と検証に使用される秘密鍵です。Webアプリケーション間で安全に情報を交換するためのコンパクトで自己完結型の方法を提供します。これらのトークンは、デジタル署名されているため、受信者はそのメッセージが改ざんされていないことを確認できます。
特にEthereumクライアントやその他のブロックチェーン関連のアプリケーションにおいて、Ethereumの実行クライアントとコンセンサスクライアント間の認証済み接続を確立するために使用されます。この秘密鍵は、両クライアント間で共有され、一方のクライアントがもう一方のクライアントからの接続要求を検証するために用いられ、クライアント間の通信が正規のものであることを保証します。
jwtsecretファイルは、安全な場所に保管する必要があります。

jwtsecretの作成

上記のリンクにアクセスし、ヘッダー(Header)、ペイロード(Payload)、署名(Signature)を変更する。

ヘッダーは、トークンのタイプ(通常はJWT)と、使用されている署名アルゴリズム(例えば、HMAC SHA256やRSA)を宣言します。

{
  "alg": "HS256",
  "typ": "JWT"
}

alg フィールドは、署名やトークンの検証に使用されるアルゴリズムを指定します。
typ フィールドは、トークンのタイプを宣言します。JWTの場合は"JWT"が一般的です。

ペイロードは、トークンに含めたい実際の情報(クレーム)を含む部分です。これには、トークンの発行者、有効期限、ユーザー識別情報など、多くの予約されたクレームがありますが、必要に応じて独自のクレームを追加することもできます。

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

sub(主題): トークンの主題(ユーザーIDなど)。
name: ユーザーの名前やその他の情報。
admin: ユーザーが管理者かどうかのブール値。
iat(Issued At): トークンの発行時間。UNIXタイムスタンプ形式。

※注意点
ペイロードはエンコードされているだけで暗号化されていないため、機密情報をこの部分に含めるべきではない。誰でも内容をデコードして読むことが可能です。機密性が要求される情報を安全に送信する必要がある場合は、JWTを暗号化するJWE(JSON Web Encryption)を使用するか、他の暗号化手段を検討してください。

署名は、トークンの整合性と認証を保証するための重要な部分で、ヘッダー(Header)とペイロード(Payload)が正しく、改ざんされていないことを確認するために使われます。
上記画像の赤丸部分に任意のシークレットキーを挿入します。その後、「Secret Base64でエンコードされた」にチェックを入れることで、左記部分にエンコードされたトークンが表示されます。署名の流れは以下になります。

署名のプロセス

  1. ヘッダーペイロードをBase64Urlエンコードします。

  2. エンコードされたヘッダーとペイロードをピリオド(.)で連結します。

  3. 連結された文字列に対して、ヘッダーで指定された署名アルゴリズム(例:HS256、RS256)を使用して、秘密鍵を使って署名を行います。

  4. この署名もBase64Urlエンコードされ、最終的なJWTの3番目の部分としてトークンの最後に追加されます。

作成したJWTトークンの検証

以下のようなコードを実行できるPythonファイル(.py)を作成する。

import jwt

# 任意のJWTシークレットキー
jwt_secret = '***'


# エンコードされた検証するトークン
token = '***'

try:
    # JWTトークンの検証
    decoded = jwt.decode(token, jwt_secret, algorithms=['HS256'])
    print(decoded)
except jwt.ExpiredSignatureError:
    print('トークンの有効期限が切れています。')
except jwt.InvalidTokenError:
    print('無効なトークンです。')
  1. jwtライブラリをインポートします。このライブラリは、JSON Web Token (JWT) のエンコードとデコードを扱うためのものです。

  2. jwt_secretには、トークンの署名に使用されたシークレットキーを指定します。このキーはトークンの発行者と検証者が共有している必要があります。

  3. tokenには、検証したいエンコードされたJWTトークンを指定します。

  4. jwt.decodeメソッドを使用してトークンをデコードし、その有効性を検証します。ここでは、トークン、シークレットキー、そして使用されるアルゴリズム(この例ではHS256)を指定しています。

  5. トークンが正常にデコードされ、有効である場合は、デコードされたペイロードがdecoded変数に格納され、その内容が出力されます。

  6. トークンの有効期限が切れている場合、ExpiredSignatureError例外が発生し、「トークンの有効期限が切れています。」というメッセージが出力されます。

  7. トークンが無効であるその他の理由(フォーマットの問題、署名の不一致など)である場合、InvalidTokenError例外が発生し、「無効なトークンです。」というメッセージが出力されます。

出力例

{'userId': 1, 'exp': 1711638619}

この出力は、ペイロードに含まれるクレーム(この例ではuserIdとexp)を示しています。
userIdはユーザーの識別子、expはトークンの有効期限(UNIXタイムスタンプ形式)です。


seculityを考慮

秘密鍵を直接ファイル内に書くことはセキュリティ上避けなければいけない。そのため、別ファイルに記載した秘密鍵をスクリプト内から呼び出すコードを記す。また、トークンを引数として渡すようにしている。

import jwt
import sys

# コマンドライン引数からトークンを取得
if len(sys.argv) != 2:
    print("使用方法: python script.py [JWTトークン]")
    sys.exit(1)

token = sys.argv[1]

# 秘密鍵を外部ファイルから読み込む
secret_file = 'path/to/your/secret_key_file.txt'
try:
    with open(secret_file, 'r') as file:
        jwt_secret = file.read().strip()
except FileNotFoundError:
    print(f"秘密鍵ファイルが見つかりません: {secret_file}")
    sys.exit(1)

# JWTトークンの検証
try:
    decoded = jwt.decode(token, jwt_secret, algorithms=['HS256'])
    print("デコードされたトークン:", decoded)
except jwt.ExpiredSignatureError:
    print('トークンの有効期限が切れています。')
except jwt.InvalidTokenError:
    print('無効なトークンです。')

ファイル作成後、以下のコマンドをファイル名などに応じて変更し実行する。

python script.py your_jwt_token_here



コンセンサスクライアントの起動

コマンド例

hostname% ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --goerli --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.infoOekn % ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --goerli --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info

Prysmクライアントを使用してEthereum 2.0のビーコンチェーンノードを起動するものです。それぞれのオプションの意味は以下の通りです:

  • ./prysm.sh beacon-chain: これは、Prysmのビーコンチェーンクライアントを起動するためのコマンドです。./prysm.shは、Prysmクライアントのシェルスクリプトで、beacon-chainオプションを付けることでビーコンチェーンノードを起動します。

  • --execution-endpoint=http://localhost:8551: このオプションは、ビーコンチェーンクライアントが接続する実行クライアント(例えばGeth)のHTTPエンドポイントを指定します。この場合、http://localhost:8551と指定されており、ローカルホスト上の8551ポートで実行されている実行クライアントに接続します。

  • --goerli: このフラグは、ビーコンチェーンクライアントをGoerliテストネットワークに接続することを指示します。Goerliテストネットは、Ethereumの公開テストネットワークの一つで、実際のメインネットと同じように動作しますが、テスト用途に使われます。

  • --checkpoint-sync-url=https://beaconstate.info: このオプションは、ビーコンチェーンクライアントがチェックポイント同期のために使用する外部のURLを指定します。チェックポイント同期は、ネットワークの特定の状態から同期を開始するための機能で、同期時間を短縮できます。

  • --genesis-beacon-api-url=https://beaconstate.info: このオプションは、ビーコンチェーンの起源(ジェネシス)情報を取得するためのAPIエンドポイントを指定します。この情報は、ネットワークに参加するための初期同期に必要です。

正常動作例

Latest Prysm version is v5.0.2.
Beacon chain is up to date.
Verifying binary integrity.
beacon-chain-v5.0.2-darwin-amd64: OK
gpg: 水  3/27 23:28:29 2024 JSTに施された署名
gpg:                RSA鍵***を使用
gpg: "Preston Van Loon <preston@pvl.dev>"からの正しい署名 [不明の]
gpg:                 別名"Preston Van Loon <preston@prysmaticlabs.com>" [不明の]
gpg:                 別名"Preston Van Loon <preston90@gmail.com>" [不明の]
gpg:                 別名"Preston Van Loon (0xf71E9C766Cdf169eDFbE2749490943C1DC6b8A55) <preston@machinepowered.com>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
 主鍵フィンガープリント: 0AE0 051D 647B A3C1 A917  AF40 72E3 3E4D F1A5 036E
Verified /Users/ooekenfutoshi/tmp/ethereum/consensus/./dist/beacon-chain-v5.0.2-darwin-amd64 has been signed by Prysmatic Labs.
Starting Prysm beacon-chain --execution-endpoint=http://localhost:8551 --goerli --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info
[2024-03-28 23:33:29]  INFO flags: Running on the Prater Testnet
[2024-03-28 23:33:29]  WARN node: In order to receive transaction fees from proposing blocks, you must provide flag --suggested-fee-recipient with a valid ethereum address when starting your beacon node. Please see our documentation for more information on this requirement (https://docs.prylabs.network/docs/execution-node/fee-recipient).
[2024-03-28 23:33:29]  INFO node: Checking DB databasePath=/Users/ooekenfutoshi/Library/Eth2/beaconchaindata
[2024-03-28 23:33:29]  INFO db: Opening Bolt DB path=/Users/ooekenfutoshi/Library/Eth2/beaconchaindata/beaconchain.db
[2024-03-28 23:33:29]  WARN genesis: database contains genesis with htr=0x7e76880eb67bbdc86250aa578958e9d0675e64e714337855204fb5abaaf82c2b, ignoring remote genesis state parameter
[2024-03-28 23:36:07]  INFO beacon: Detected supported config in remote finalized state fork=deneb name=mainnet
[2024-03-28 23:36:11]  INFO beacon: Downloaded checkpoint sync state and block. blockRoot=0x40b68b0cbac2143d228723948ad42d8c3cb24044de7d9faa682306458ea8f6ed blockSlot=8734272 stateRoot=0x08693729e61bb422d4201d743835f4401d5d94e99d7b252dbc5f54231ea14611 stateSlot=8734272
[2024-03-28 23:36:11] FATAL main: unable to start beacon node: could not start modules: could not start DB: config mismatch, beacon node configured to connect to prater, detected state is for mainnet

このメッセージはPrysmクライアントのバイナリファイルが最新であり、整合性の検証が成功したことを示していますが、ファイルの署名を完全に信頼するための情報が不足していることを警告しています。
各行の意味は以下の通りです:

  • Latest Prysm version is v5.0.2.: 現在のPrysmクライアントの最新バージョンがv5.0.2であることを示しています。

  • Beacon chain is up to date.: ビーコンチェーンが最新の状態であることを示しています。つまり、ソフトウェアやデータが最新版に更新されています。

  • Verifying binary integrity.: バイナリファイル(Prysmクライアント)の整合性を検証していることを示しています。これは、ファイルが改ざんされていないことを確認するためのプロセスです。

  • beacon-chain-v5.0.2-darwin-amd64: OK: バイナリファイルがMac OS用の64ビット版であり、整合性の検証が成功したことを示しています。

以下のメッセージは、GPG(GNU Privacy Guard)を使った署名検証の結果です:

  • gpg: 水 3/27 23:28:29 2024 JSTに施された署名: 署名が2024年3月27日に行われたことを示しています。

  • gpg: RSA鍵***を使用: 署名の検証に使用された公開鍵のIDです。

  • gpg: "Preston Van Loon preston@pvl.dev"からの正しい署名 [不明の]: 署名がPreston Van Loonによって行われ、検証されたことを示していますが、署名者の信頼レベルが「不明」であることを意味します。

  • gpg: 警告: この鍵は信用できる署名で証明されていません!: この公開鍵が信頼できると証明されていないため、署名の真正性について完全な確信が持てないことを警告しています。

  • gpg: この署名が所有者のものかどうかの検証手段がありません。: 署名が本当に署名者によるものであるかどうかを確認する方法がないことを示しています。これは、署名者の公開鍵がローカルの信頼データベースにないか、信頼パスが確立されていないためです。

信用できる署名が使用されている場合、GPG(GNU Privacy Guard)を使用した署名検証の出力は異なり、署名の信頼性に関する警告が表示されなくなります。(署名がローカルの信頼データベースに登録など)

Latest Prysm version is v5.0.2.
Beacon chain is up to date.
Verifying binary integrity.
beacon-chain-v5.0.2-darwin-amd64: OK
gpg: 水  3/27 23:28:29 2024 JSTに施された署名
gpg:                RSA鍵***を使用
gpg: "Preston Van Loon <preston@pvl.dev>"からの正しい署名 [最も信頼]


エラー対応

以下のようなエラーが出た場合、GPGをインストールする。

#エラー文
gpg is not available. Either install it or run with PRYSM_ALLOW_UNVERIFIED_BINARIES=1.

#GPGをインストール
brew install gnupg

エラーメッセージは、「gpgが利用可能ではない。それをインストールするか、PRYSM_ALLOW_UNVERIFIED_BINARIES=1で実行してください。」と指示しています。このメッセージから、Prysmを安全にダウンロードして実行するためには、GPG(GNU Privacy Guard)がシステムにインストールされている必要があります。GPGは、ダウンロードしたファイルの真正性を確認するために使用され,ダウンロードファイルがPrysmatic Labsによって署名された正式なものであることを確認できます。


以下のようなエラーが出た場合、既存のデータベースをクリアするか、--datadirフラグで新しいデータディレクトリを指定する。

unable to start beacon node: could not start modules: 
could not start DB: could not check and save deposit contract: 
database contract is 0x... but tried to run with 0x... This likely means you are trying to run on a different network than what the database contains. 
You can run once with --clear-db to wipe the old database or use an alternative data directory with --datadir

このエラーは、ビーコンチェーンノードの起動に失敗したことを示しています。特に、データベースに保存されているデポジットコントラクトのアドレスと、実際に使用しようとしているネットワークのデポジットコントラクトのアドレスが異なるために発生しています。これは、異なるネットワーク(例えば、メインネットとGoerliテストネット)のデータが混在している場合によく見られます。

対処するには、エラーメッセージで提案されているように、--clear-dbフラグを使用して既存のデータベースをクリアするか、--datadirフラグで新しいデータディレクトリを指定してください。これにより、正しいネットワークのデータでノードを起動できます。

# データベースをクリアする
# 既存のデータベースを完全にクリアし、新しいネットワークでノードを起動する場合は、
# --clear-dbオプションを使用します。
# これにより、既存のデータが削除され、新しいネットワークでの同期がゼロから開始されます。

./prysm.sh beacon-chain --clear-db --execution-endpoint=http://localhost:8551 --goerli --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info
# 別のデータディレクトリを使用する
# もし現在のデータディレクトリを保持したい場合や、
# 異なるネットワークのデータを分けて管理したい場合は、
# --datadirオプションを使用して新しいデータディレクトリを指定できます。

./prysm.sh beacon-chain --datadir=/path/to/new/data/directory --execution-endpoint=http://localhost:8551 --goerli --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info







よろしければサポートお願いします!よりいい情報を発信します。