コンテンツへスキップ
0%

Geth ノードとは何か、実行方法

Alchemy team headshot

執筆者 Alchemy

2022年4月18日 公開読了時間 1 分

GethとNodeの入門

Ethereumノードとは、Ethereumブロックチェーンネットワークの一部を構成するコンピュータです。これらのノードは、ブロックを検証し、保存し、時にはブロックを生成するソフトウェアを実行する実際のコンピュータです。

「クライアント」とは、実際のソフトウェアの名称です。これにより、JSON-RPC APIを通じてブロックチェーンとやり取りし、ブロックチェーンを読み取り検証し、スマートコントラクトの読み書きを行うことができます。

Gethはこれらのクライアントの1つであり、最も広く使われているものの1つです。Go言語で書かれており、Ethereum Foundationで働く人々やその他の協力者によって開発が続けられています。

Gethの特徴:

  • 「geth console」で実行できるJavaScriptコンソールが付属しています。
  • 他のJavaScriptクライアント(web3js)と連携できます。
  • Rinkebyテストネットが組み込まれています(または独自のプライベートEthereumネットワークを構築できます)
  • 他のEthereumノードの標準として扱われることが多いです。

このAlchemyの最新ブログでは、Gethノードのインストールと実行方法を学びます。

ネットワーク(MainnetとTestnet)とGeth

Gethノードを理解するには、Ethereumのさまざまなネットワークを理解する必要があります。

Ethereumには、すべてのトランザクションが行われる単一のコアネットワーク(Mainnet)がありますが、動作確認のために構築された他のテストネットワーク(Testnet)も利用されています。ローカルホスト以外でブロックチェーンの機能を試すには、こうした「実験用」ブロックチェーンの使用を検討してください。

1. Mainnet

Ethereum mainnetは、Ethereumを生成するために使われるネットワークです。ETHはマイニングしたり取引所で取引したりでき、常に利用可能です。

2. Ropsten

Ropstenは、mainnetに最も近い挙動をするテストネットワークです。同じProof of Workをベースにしています。このRopsten test networkは、テストETHがMainnet ETHと同じ方法でマイニングされ、価値のないものを容易に入手できるため、スパム攻撃に対して脆弱です。

3. Rinkeby

RinkebyのテストネットはProof of Authorityを使用しており、本人であることを証明できない限りテストETHを入手できません。これは、FacebookなどのソーシャルメディアアカウントとEthereumアドレスを紐付けることで行われます。これにより、大量のETHを得るには相当な労力が必要になるため、ネットワークへの攻撃がはるかに困難になります。RinkebyはGethノードからのみアクセス可能です。

Rinkebyテストネットでの構築を開始し、無料のfaucetからRinkeby Etherを入手してください。

4. Kovan

主な違いは、Kovanがparityノードでのみ利用可能であり、GitHubを使って本人確認を行う必要がある点です。

5. Goerli

GoerliはProof-of-Authorityフレームワークの下でデプロイされました。ChainsafeとAfri Schoedonによって最初に開発されたCliqueコンセンサス手法を採用しています。Goerliネットワークは、Geth、Parity、Nethermind、Hyperledger Besuに支えられ、Goerliコミュニティによって維持されています。GoerliはKovanやRinkebyよりも、ネットワーク規模、ノード数、クライアントの種類が多くなっています。

Goerli Etherの入手方法を学び、AlchemyのGoETH faucetを使ってGoerliテストネットワークで始めましょう。

6. Kiln

この記事の執筆時点では、Ethereumが今年後半にProof of Stakeへのマージに向けて全速力で進んでいることに伴い、上記のテストネットの多くが非推奨または移行されることになります。現時点では、KilnテストネットがProof of Stakeへの移行前の最終的なパブリックテストネットとなっています。

このマージは、Ethereumネットワークにとって、その誕生以来最も大きな変化の1つを迎える重要な達成です。Kilnで問題が起きなければ、現行のEthereumテストネット(Goerli、Ropstenなど)は中断することなく進行できるはずです。

Kilnテストネットについて詳しく学び、偽のKiln Etherを入手してKilnでの構築を始めましょう。

Gethノードとは

Gethノードの種類を示す図: Ethereumのlightノード、fullノード、archiveノード

Gethを使えば、独自のプライベートEthereumネットワークを構築できます。Ethereumネットワークのブロックチェーンは、genesisブロックと呼ばれるルートブロックから始まります。genesisブロックにはトランザクションは含まれていません。

Ethereumノードにはさまざまな種類がありますが、Gethノードはlightノード、fullノード、archiveノードの3種類に分類されます。

Lightノード

lightノードはすべてのブロックを検証しないため、Ethereumブロックチェーンのコピーを保持しません。そのため、fullノードのデータに依存します。lightノードを実行することには、起動の高速化、ストレージ使用量の削減、計算・メモリ要件の軽減など、いくつかの利点があります。lightノードは信頼レベルが低く、多くの場合fullノードに依存しているため、問題になることがあります。

Lightノード:

  • ヘッダーチェーンを保存し、それ以外はすべてリクエストします。
  • ブロックヘッダー内のstate rootに照らしてデータの有効性を検証します。
  • 埋め込みデバイスや携帯電話など、ギガバイト単位のブロックチェーンデータを保存する余裕がない低容量デバイス向けの用途を提供します。

Fullノード

fullノードは、ブロック内のトランザクションがEthereum Yellow Paperに定められた基準に従っていることを検証します。これは、ネットワークを介して転送されるブロックが正当なものであることを保証するために行われます。その取り組みは信頼できるものです。この検証手法により、fullノードはネットワークをEthereumの要件に沿った状態に保ちます。

Fullノード:

  • ブロックチェーンの全データを保存します。
  • ブロック検証に参加し、すべてのブロックとstateを検証します。
  • すべてのstateを導出します。
  • ネットワークに対応し、要求に応じてデータを提供します。

Archiveノード

archiveノードとは、トランザクション履歴全体を保存するノードです。ネットワークの健全性と構造はこれらのノードに依存しています。

Archiveノード:

  • fullノードに保存されるすべての内容を保存し、過去のstateのアーカイブを構築します。これは、アカウント残高やオンチェーンデータを照会したい場合、あるいはOpenEthereumを使って自分のトランザクションセットをマイニングせずに簡単かつ確実にテストしたい場合に必要です。
  • テラバイト単位のデータを提供します。このため一般ユーザーにはあまり適していませんが、ブロックエクスプローラー、ウォレットベンダー、チェーン分析サービスなどには便利です。
ネットワーク全体でProof of Workのコンセンサスに達するEthereumノードを示す図
source: https://ethereum.org/en/developers/docs/nodes-and-clients/

Gethのインストール要件

  • マルチコアCPU(7GB以上のRAM)
  • 空き容量約600GB以上のローカルSSDドライブ
  • OPTIONAL キャッシングによる最適化されたパフォーマンスのために16/32GB以上のCPUを使用します。キャッシング機能(つまり'--cache'フラグの使用)を利用することで、Gethはハードドライブではなくメモリからstateを取得できるようになります。
  • Macユーザー向けのHomebrew
  • Linux/Ubuntu向けのPPA
  • OPTIONAL Parity(詳細については、parityからGethへの移行方法を学ぶ)‍

Gethのインストール方法

Gethは、パッケージマネージャー経由(MacOSではhomebrew、UbuntuではPPA)でインストールしたり、直接ダウンロードしたり、dockerで実行したり、あるいはゼロから構築することもできます。

MacOSターミナルでのHomebrew:

text
Copied
$ brew tap ethereum/ethereum $ brew install ethereum

さまざまな便利なコマンドの一覧はこちら(abigen、bootnode、checkpoint-admin、clef、devp2p、ethkey、evm、faucet、gethなど)、または以下を実行することもできます:

text
Copied
$ geth --help

Linux/UbuntuでのPPA:

text
Copied
$ sudo add-apt-repository -y ppa:ethereum/ethereum

go-Ethereumの安定版をインストール:

text
Copied
$ sudo apt-get update $ sudo apt-get install ethereum

Docker:

Dockerをこちらからダウンロードします。その後、以下を実行します:

text
Copied
$ docker pull ethereum/client-go:latest

そして次を実行します:

text
Copied
$ docker run ethereum/client-go:latest

Gethを実行する

Gethフォルダ/ルートフォルダを解凍した場所でターミナルから以下のコマンドを実行し、Gethを実行します:

text
Copied
$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"

これによりすぐにGethコンソールに移動します。

netと入力することで、peerがあるかどうかを確認できます。eth.syncingと入力することで、ノードが現在同期中かどうかを確認できます。ノードは再起動するまで同期を開始しない場合があります。

例えば、eth.syncingを実行すると、以下のようなサンプルクエリが出力されます:

ブロック同期の進行状況を示すeth.syncingクエリのGethコンソール出力

最後に

Gethは、一般消費者向けに広く利用されているweb/拡張機能ウォレット(MetaMaskCoinbase、Rainbowなど)の大部分にすでに組み込まれていることが多いです。

しかし、マイニングを試したり独自のカスタムEthereumソフトウェアを開発したりしたい場合、Gethのインストールと実行にはそれだけの価値があります。また、自分のノードとウォレットの鍵を自分で管理したい(サードパーティ製ソフトウェアに頼らず自分でトランザクションに署名したい)場合にも役立ちます。Gethを使えば、Ethereum開発の世界全体を開くことができます!

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。