メインコンテンツへスキップ
Change page

イーサリアムアカウント

最終更新: 2026年2月23日

イーサリアムアカウントは、イーサ(ETH)残高を持ち、イーサリアム上でメッセージを送信できるエンティティです。 アカウントはユーザーが管理し、スマートコントラクトとしてデプロイすることができます。

前提条件

このページをよりよく理解するために、まずイーサリアム入門を読むことをお勧めします。

アカウントの種類

イーサリアムには2種類のアカウントがあります。

  • 外部所有アカウント(EOA) – 秘密鍵の保有者により管理
  • コントラクトアカウント – ネットワークにデプロイされたスマートコントラクトでコードにより制御される。 スマートコントラクトについて学ぶ

両方のアカウントで次のことができます。

  • ETHやトークンの受信、保有、送信
  • 展開されたスマートコントラクトとのやりとり

主な違い

外部所有アカウント

  • アカウント作成は無償
  • トランザクションの開始が可能
  • 外部所有アカウント間のトランザクションは、ETHやトークンの送金のみ可能
  • アカウントの活動をコントロールする公開鍵と秘密鍵という暗号鍵のペアで構成

コントラクト

  • コントラクト作成は有償(ネットワークストレージを使用するため)
  • トランザクションを受信することに対してのみメッセージを送信可能
  • 外部アカウントからコントラクトアカウントへのトランザクションは、トークンの転送や新しいコントラクト作成まで、さまざまなアクションを実行するコードをトリガー可能
  • コントラクトアカウントには秘密鍵がなく スマートコントラクトのコードのロジックによって制御される

アカウントの詳細

イーサリアムアカウントには4つのフィールドがあります。

  • nonce – 外部所有アカウントから送信されたトランザクションの数、またはコントラクトアカウントによって作成されたコントラクトの数を示すカウンター。 各アカウントは、既定のnonceを持つトランザクションを1回だけ実行するように設計されています。これにより、署名済みのトランザクションが繰り返しブロードキャスト、再実行されるリプレイ攻撃を防いでいます。
  • balance – このアドレスが所有するweiの数。 weiはETHの最小単位で、1ETHは1e+18wei。
  • codeHash – このハッシュは、イーサリアム仮想マシン(EVM)のアカウントの_コード_を指します。 コントラクトアカウントには、さまざまな操作を行えるコードの断片がプログラムされており、 このEVMコードはアカウントにメッセージ呼び出しがあった場合に実行される。 他のアカウントのフィールドとは異なり、変更することはできない。 このようなコードの断片はすべて、対応するハッシュの状態データベースに含まれ、後で取得可能。 このハッシュ値がcodeHashとして知られている。 外部所有アカウントの場合、codeHashフィールドは空の文字列のハッシュとなる。
  • storageRoot – ストレージハッシュとも呼ばれます。 アカウントのストレージ内容(256ビット整数値間のマッピング)をエンコードするマークルパトリシアトライのルートノードの256ビットハッシュであり、256ビット整数キーのKeccak-256ハッシュからRLPエンコードされた256ビット整数値へのマッピングとしてトライにエンコードされます。 このツリーは、このアカウントのストレージコンテンツのハッシュであり、デフォルトは空です。

アカウントの構成を示す図 図はEthereum EVM illustrated (opens in a new tab)を参考に作成

外部所有アカウントと鍵ペア

アカウントは、公開鍵と秘密鍵の暗号鍵のペアで構成されています。 トランザクションが送信者によって実際に署名されていることを証明し、偽造を防ぐためです。 秘密鍵はトランザクションの署名に使用されるもので、アカウントに紐づく資金を管理する権限を与えます。 暗号通貨を実際に保有することはなく、秘密鍵を保有するだけで、資金は常にイーサリアム台帳にあります。

これにより、トランザクションの送信者を常に確認することができるため、悪意のある者により偽のトランザクションをブロードキャストされることを防ぎます。

仮にAliceが自分のアカウントからEtherをBobのアカウントに送金するとしましょう。Aliceはトランザクションリクエストを作成し、検証するためネットワークに送信する必要があります。 イーサリアムの公開鍵暗号により、Aliceが元々トランザクションリクエストを開始したことを証明できます。 暗号化メカニズムがなかったとすると、 悪意のある者により「Aliceのアカウントから5 ETHをEveのアカウントに送信」のような要求を公に送信することができ、それがAliceからのリクエストでないことを確認することができなくなります。

アカウントの作成

アカウントを作成したいとき、多くのライブラリはランダムな秘密鍵を生成します。

秘密鍵は64文字で構成されており、パスワードで暗号化することができます。

例:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

公開鍵は、楕円曲線デジタル署名アルゴリズム (opens in a new tab)を用いて秘密鍵から生成されます。 アカウントの公開アドレスは、公開鍵のKeccak-256ハッシュの最後の20バイトを取り出し、先頭に「0x」を付加することで得られます。

これは、外部所有アカウント(EOA)のアドレスが42文字(20バイトのセグメントである40の16進文字に、プレフィックス「0x」を加えたもの)であることを意味します。

例:

0x5e97870f263700f46aa00d967821199b9bc5a120

以下の例では、Clef (opens in a new tab)という署名ツールを使って新しいアカウントを生成する方法を説明します。 Clefは、イーサリアムクライアントであるGeth (opens in a new tab)にバンドルされているアカウント管理・署名ツールです。 clef newaccountコマンドは、新しい鍵ペアを作成し、暗号化されたキーストアに保存します。

1> clef newaccount --keystore <path>
2
3作成する新しいアカウントのパスワードを入力してください:
4> <password>
5
6------------
7INFO [10-28|16:19:09.156] 新しい鍵が生成されました address=0x5e97870f263700f46aa00d967821199b9bc5a120
8WARN [10-28|16:19:09.306] 鍵ファイルをバックアップしてください path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
9WARN [10-28|16:19:09.306] パスワードを忘れないでください!
10生成されたアカウント 0x5e97870f263700f46aa00d967821199b9bc5a120
すべて表示

Gethドキュメンテーション (opens in a new tab)

秘密鍵から新しい公開鍵を生成することは可能ですが、公開鍵から秘密鍵を生成することはできません。 秘密鍵を安全に保管し、その名の通り秘密にしておくことが極めて重要です。

署名を出力するメッセージとトランザクションに署名するには秘密鍵が必要です。 他者はそのメッセージの発信者を証明するための署名を取り出すことができます。 アプリケーション内では、JavaScriptライブラリを使用してネットワークにトランザクションを送信できます。

コントラクトアカウント

コントラクトアカウントも、 42文字の16進数のアドレスを持っています。

例:

0x06012c8cf97bead5deae237070f9587f8e7a266d

通常、コントラクトアドレスは、コントラクトがイーサリアムブロックチェーンにデプロイされるときに与えられます。 アドレスは作成者のアドレスとそのアドレスから送信されたトランザクション数(nonce)から作られます。

バリデータキー

イーサリアムにはもう1種類の鍵があり、これはイーサリアムがプルーフ・オブ・ワークからプルーフ・オブ・ステークに基づくコンセンサスに切り替えた際に導入されたものです。 「BLS」鍵で、バリデータを識別するために使用されます。 これらの鍵は効率的に集約され、ネットワークがコンセンサスに至るまでに必要な帯域幅を削減できます。 この鍵集約がなければ、バリデータの最小ステーク額ははるかに高くなってしまいます。

バリデータキーの詳細

ウォレットに関する注記

アカウントはウォレットではありません。 ウォレットは、イーサリアムのアカウント(外部所有アカウントまたはコントラクトアカウント)とやり取りするためのインターフェースやアプリケーションです。

ビジュアルデモ

ハッシュ関数と鍵ペアに関するAustinの説明動画をご覧ください。

参考リンク

役に立つコミュニティリソースを知っていますか? Edit this page and add it!

この記事は役に立ちましたか?