【備忘録】スマートコントラクト開発準備

今更ですが、スマートコントラクト開発についての備忘録としてまとめます。

:::note info
はじめに
この備忘録はブロックチェーン、イーサリアムの基本的な性質を理解している前提で書いています。
:::

今回はイーサリアムクライアントとイーサリアムネットワークについてまとめます。

## イーサリアムクライアントについて
Webサーバに対するクライアント（ブラウザ）のように、ブロックチェーンにアクセスする際にもクライアントソフトウェアが必要です。

※InfuraやAlchemyなどのRPCプロバイダを利用し、イーサリアムクライアントを動かさずに通信することもできるがここでは触れません。

イーサリアムクライアントは、イーサリアムネットワークと通信し、イーサリアムブロックチェーンに対して、トランザクションの送受信やブロックの検証、スマートコントラクトの実行などを行います。

### イーサリアムクライアントの役割
1. ブロックチェーンの同期
ネットワークの最新の状態を取得し、ブロックを検証します。
2. スマートコントラクトの実行
Ethereum Virtual Machine (EVM)を使い、Solidityで書かれたスマートコントラクトを実行します。
3. トランザクションの送受信
送金、トークンのやり取り、DeFiアプリの活用します。
4. ネットワークへの貢献
他のノードと通信し、イーサリアムの分散ネットワークを支えます。

## 代表的なイーサリアムクライアント
<table>
  <thead>
    <tr>
      <th>クライアント名</th> <th>言語</th> <th>特徴</th>
    </tr>
  </thead>
  <tr>
    <td>Geth (Go Ethereum)</td> <td>Go</td> <td>最も普及している。公式推奨</td>
  </tr>
  <tr>
    <td>Erigon</td> <td>Rust</td> <td>軽量＆高速、データ圧縮に優れる</td>
  </tr>
    <tr>
    <td>Nethermind</td> <td>C#</td> <td>Windows向けに最適化。企業利用が多い</td>
  </tr>
  <tr>
    <td>Besu</td> <td>Java</td> <td>企業向け、Hyperledger Besuとして有名</td>
  </tr>
</table>

イーサリアムのイエローペーパーを書き、Polkadotの創設者でもあるギャビン・ウッド氏が設立したParity Technologies製のParityも一定の利用者がいました。（私が学習のために使用した参考書はParityを使用）
OpenEthereumというParityの後継クライアントもあったが、2021年3月に終了しています。

イーサリアムが推奨しているので、Gethをインストールしました。
Mac OSでHomebrewがインストールされている場合は以下コマンドでインストールします。
```bash
brew tap ethereum/ethereum
brew install geth
```
インストールできたか確認します。
```bash
geth version
```
2025/2/11時点で最新のバージョンは以下です。
```
Geth
Version: 1.15.0-stable
Architecture: arm64
Go Version: go1.23.6
Operaring System: darwin
```

# イーサリアムネットワーク
イーサリアムネットワークとは、イーサリアムノードガ相互に接続し、ブロックチェーンのデータを共有・検証するP2Pネットワークです。

1. メインネット
実際に運用されているイーサリアムの本番ネットワークで、イーサリアムのすべてのトランザクションとスマートコントラクトが本番環境で実行されます。このネットワークでは実際のETHがやり取りされます。（イーサリアムのレイヤー1に当たります）
2. テストネット
開発やテスト用のネットワークで、ユーザーは実際のETHを使わずにトランザクションやスマートコントラクトをテストできます。
3. レイヤー2
イーサリアムのスケーラビリティを向上させるために、Rollupなどの技術を利用し、トランザクション処理をメインネットの外部で実行し、その結果をメインネットに記録します。
4. プライベートネットワーク
特定のグループや組織内でのみ使用され、コンソーシアムブロックチェーンなどの用途で利用されます。
## 代表的なイーサリアムネットワーク
<table border="1">
  <thead>
    <tr>
      <th>名前</th>
      <th>タイプ</th>
      <th>特徴</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ethereum Mainnet</td>
      <td>メインネット</td>
      <td>実際のETHがやり取りされる、最も安定した本番ネットワーク。</td>
    </tr>
    <tr>
      <td>Goerli</td>
      <td>テストネット</td>
      <td>Proof of Authority (PoA) を使用した安定したテストネット。Goerli ETHを使って無料でテストが可能。</td>
    </tr>
    <tr>
      <td>Rinkeby</td>
      <td>テストネット</td>
      <td>Proof of Authority (PoA) を使用するテストネット。Goerliと同様に無料でETHのテスト送信が可能。</td>
    </tr>
    <tr>
      <td>Sepolia</td>
      <td>テストネット</td>
      <td>Ethereumの最新テストネットで、PoSを採用。今後の主流なテストネットとして推奨。</td>
    </tr>
    <tr>
      <td>Binance Smart Chain (BSC)</td>
      <td>レイヤー１</td>
      <td>高速・低手数料のEイーサリアム互換のネットワーク。Binanceエコシステムと統合されており、スマートコントラクトを利用可能。</td>
    </tr>
    <tr>
      <td>Avalanche</td>
      <td>レイヤー１</td>
      <td>高スループットと低遅延を提供するブロックチェーン。イーサリアム互換のスマートコントラクトをサポート。</td>
    </tr>
    <tr>
      <td>Optimism</td>
      <td>レイヤー２</td>
      <td>イーサリアム上のスケーリングソリューションで、Optimistic Rollups技術を使用して、手数料を削減しトランザクション速度を向上。</td>
    </tr>
    <tr>
      <td>Arbitrum</td>
      <td>レイヤー２</td>
      <td>イーサリアム用のOptimistic Rollup Layer 2スケーリングソリューション。高いセキュリティと低手数料を提供。</td>
    </tr>
    <tr>
      <td>Polygon (Matic)</td>
      <td>レイヤー２</td>
      <td>イーサリアムメインネット上でスケーラビリティを向上させるためのレイヤー2ソリューション。トランザクション手数料を低減し、処理速度を高速化。</td>
    </tr>
  </tbody>
</table>

ネットワークもイーサリアムが推奨しているSepoliaにします。
以下コマンドで接続します。
```bash
geth --sepolia
```
これを実行すると大量に文字が流れ出てきます。緑の文字で[INFO]と書いた文章が出ていればOKです。

厳密に言えば、GethだけではPoSに対応できていないので、ビーコンチェーンに対応したクライアントが必要になります。それは先の課題とします。

これでイーサリアムクライアントからブロックチェーンに接続することができました。

読んでいただきありがとうございました。