イーサリアムのトランザクションの仕組み
私は現在ブロックチェーン技術について勉強をしており、その中で気になったことを、記事として整理していければと思います。
※ 投機目的ではなく、あくまで純粋に技術を勉強しています。
※ 参考図書: 「ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書」
今回は、イーサリアムのトランザクション周りの仕組みについて整理していきます。
まずはイーサリアムにできることについてです。
イーサリアムのできること
ビットコインと同じく、通貨のやり取りができることに加え、より用途が汎用的になっています。(DeFi、ゲーム、独自トークン発行など)
それは、下記の点によるところになります。
- 複雑なプログラムを記述して実行できる
- プログラムの実行環境(EVM: イーサリアム仮想マシン)を備えている
- 状態を保存できる(ステートフル)
ノードが持つ機能
先に、ノードについても整理をしておきます。
トランザクションの説明において、重要となるためです。
ネットワークを構成するノードには4つの機能を持っています。
- ルーティング
- ネットワーク上にある他のノードを見つけて接続する
- ブロックチェーンデータベース
- ブロックチェーンのコピーを保存しておく
- マイニング
- マイニングを行う
- ウォレット
- 秘密鍵の管理、アドレス生成、トランザクションの発行などを行う
イーサリアムが記録するもの
ビットコインのブロックチェーンでは、基本的に通貨(BTC)のトランザクション(取引記録)のみをブロックに記録しています。
これに対して、イーサリアムでは、通貨だけでなく汎用データストア(キー・バリュー型で表現できるデータ)の状態遷移も記録しています。
イーサリアムの状態は、ネットワークを構成する各ノードのデータベースとして格納されています。
データベースには、トランザクションと状態がハッシュデータ構造(マークルツリーと呼ばれる)で保管されます。全てのトランザクションをマークルツリーを用いてハッシュ化を繰り返すことで、最終的に1つのハッシュ値を導き出します。それにより、わずか256bitでブロック内のトランザクションを要約することが可能になります。
トランザクションの流れ
トランザクションを作成してから、ネットワークに浸透するまでの流れは下記となります。
- トランザクションの生成
- ノード(ウォレット等のクライアント)
- ネットワークへのブロードキャスト
- 同じトランザクションの情報を、他の複数のノードに対して同時に転送する
- ノードによるトランザクション検証
- トランザクションを受け取ったら有効かを検証する。有効と確認できれば全てのピアにトランザクションを転送します。
- マイニングとブロックのブロードキャスト
- トランザクションは、最終的にマイナーによって新規ブロックに集積されます。マイナーはマイニングに成功すると、ピアに新規ブロックを転送します。
- ノードは新規にブロックが生成されたという連絡をピアから受け取ると、自身の持つブロックチェーンに、そのブロックが追加されているかを確認します。
このように、トランザクションやブロックの正当性はそれぞれのノードが独立して検証しています。
不正なトランザクションやブロックについては破棄され、正当なブロックのみが伝播される仕組みになっています。
未承認のトランザクション
マイナーがどのような基準で未使用トランザクションからマイニング対象を選んでいるかを整理してみます。
未承認トランザクションを一時的に保管しておく領域を「メモリプール」と呼びます。メモリプールの中でマイニング対象になるのを待ち、やがてブロックに追加されます。
マイニング対象となるための優先順位については、「トランザクションの年齢」と「トランザクション手数料」が関係してきます。
手数料が高いものが人気であるため、古いトランザクションがマイニングされない状態になってしまうことを防ぐため、手数料だけでなく年齢も加味して優先度を判定しています。
Discussion