仮想通貨関連の用語:EOA、コントラクトアカウント、アドレス

要約:

  • アカウントは、そのブロックチェーンで取引したり、トークンを保管したりする際に必要なものです。Gmailのアカウントに似ています。アドレスや秘密鍵、EVMコードなどはアカウント情報の一部です。
  • アドレスは、メールアドレスのようなものです。メールアドレスがメール受信を可能にするように、ウォレットアドレスはトークン受信を可能にします。
  • イーサリアムのアカウントは、ユーザーが保有する「EOA」と、スマートコントラクトが存在する「コントラクトアカウント」に分けられます。

ブロックチェーンのアカウントとは

ブロックチェーンのアカウントとは、ブロックチェーン上で取引をしたり、トークン残高を管理したりする際に必要なものです。

取引をしようと思ったら、まずアカウント作成が必要です。Gmailを利用するのに、Googleアカウントが必要なのと似ていますね。

アカウントはウォレットを使い始める際などに作られます。初めてメタマスクを使う際は、シードフレーズをメモしたりしますが、あの一連の作業でアカウントを作っています。

アカウント vs アドレス

アカウントと似た存在に「アドレス」があります。

「ウォレットアドレス」「コントラクトアドレス」などの形でもよく聞きます。

簡単に言えば、アドレスはアカウントの一部で、アカウントはアドレスも含む概念です。

GoogleアカウントとGmailアドレスの関係

アカウントとアドレスの関係を理解するために、GoogleアカウントとGmailアドレスの関係を考えてみたいと思います。

Googleアカウントを作ると、Gmailアドレスなどが自動的に作られます。アカウントはアドレスを含む存在、アドレスはアカウントの一部という関係になっているのです。

メタマスクアカウントとメタマスクアドレスの関係

次にメタマスクのアカウントと、メタマスクのアドレスの関係を考えてみましょう。

メタマスクのアドレスといったら、トークンを送付してもらうときの送り先です。一方でメタマスクのアカウントといったら、アドレスや署名に必要な秘密鍵なども含みます。

メタマスクの例でも、アカウントはアドレスを含む存在、アドレスはアカウントの一部という関係になっています。

アカウント vs ウォレット

ブロックチェーンのアカウントはウォレットともなんとなく似ていますね。しかし、この二つもそれぞれ別物です。

ブロックチェーンアカウントは取引するのに必要なもので、ウォレットアドレスや秘密鍵などを含む存在でした。しかし実は、アカウントを持っているだけでは取引はできません。

たしかに、取引をするにはアカウントが必要です。ただ、取引を実行するには、アカウントを保有した状態で、さらにネットワークにアクセスしなければいけません。このネットワークへのアクセスを可能にするのがウォレットです。

ウォレットは、ブロックチェーンネットワークにアクセスする「インターフェース」などとも説明されますね。

インターフェースとは、とある存在(例:人間)が、別の存在(例:取引所)を操作する際の接点です。例えば、人間がBinanceで取引しようと思ったら、BinanceのWebサイトまたはアプリを操作します。このとき、サイトやアプリ画面がインターフェースです。

イーサリアムのアカウントは2種類

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

  • EOA
  • コントラクトアカウント(CA)

出典:Ethereum EVM illustrated

それぞれの特徴を記載します。

1.EOA

EOAはおそらく、私たちが「アカウント」と聞いてイメージするものです。例えば、私たちがメタマスクで保有しているアカウントは、EOAです。

出典:Ethereum EVM illustrated

このEOAは、ユーザーによって管理されています。

より厳密には、秘密鍵(またはシードフレーズ)の保有者によって管理されています。トランザクションの作成・送信(取引)に秘密鍵が要求される仕組みで、ユーザーが秘密鍵で署名操作を実行すると、トランザクションが作成されます。

2.コントラクトアカウント(CA)

コントラクトアカウントとは、ネットワーク上で利用可能なスマートコントラクトのアカウントですEVMコード(プログラム)によって管理されてます。

出典:Ethereum EVM illustrated

EOAは秘密鍵に管理されていました。一方でCAには秘密鍵がありません。CAには、秘密鍵の代わりEVMコードというプログラムがあり、そのプログラムによって特定の処理を行ったりするのです。

トークンコントラクトとは

メタマスクに新しい銘柄を表示させているとき、「トークンコントラクトアドレス」の入力を求められますよね。

このトークンコントラクトアドレスとは、そのトークンの仕様を管理する「コントラクトアカウント」のアドレスのことです。各トークンはスマートコントラクトによって規定されており、固有のコントラクトアカウントを持っているのです。

例えばトークンコントラクトは、トークンを別の人に送るときに作動しています。別の言い方では、トークンを送付するトランザクションは、トークンのスマートコントラクトのプログラムを動かすことで、残高変更を行っています。

EOAとCAの共通点と違い

EOAとコントラクトアカウントについて、以下の点で比較してみたいと思います。

何によってコントロールされるか

EOAは、秘密鍵を保有する人間によってコントロールされています。

一方でコントラクトアカウントは、EVMコード(プログラム)によってコントロールされています。コントラクトアカウントは、書かれたプログラムの通りにしか動きません。

作成コスト

EOAは無料で作成できます。メタマスクでは、無料でいくつものアカウントを作成できますよね。一方でコントラクトアカウントの作成には、ガス代がかかります。

コントラクトアカウントは、スマートコントラクトを処理するのに使うMemoryやStackや、スマートコントラクトの状態を保管するStorageを含みます。そのため、コントラクトアカウントが増えると、それだけネットワーク上のコンピュータの容量を使います。無料だとアカウント作り放題で、コンピュータの容量的に厳しくなる恐れがあり、その抑制のためガス代がかかります。

コントラクトアカウント作成のトランザクションが承認されれば、作成(デプロイ)完了です。

トランザクションのトリガー可否

EOAはトランザクションをトリガーできます。つまり、トランザクションを開始させられます。

一方でコントラクトアカウントはトランザクションをトリガーできません。基本的に受け身であり、EOAからの要請に従って動きます。

ただし、EOAが開始したトランザクションを受け、別のCAやEOAに働きかけるトランザクション(内部トランザクション)を開始させることはあります。

対応するトランザクションの種類

EOAからEOAに向けたトランザクションでは、厳密にはETHの送信しかできません。(※)

一方で、EOAからコントラクトアドレスに送るトランザクションでは、いろんな種類の処理を実行できます。例えば、EOAのトークンでDEXに流動性を提供したり、ERC20トークンを送付したり、トークンをスワップしたりできます。

ERC20トークンの送付は、EVM上でスマートコントラクトが動くことで実行されます。一方でETHの送付では、「送金元から送金先へETHを移動させる」という状態変化をEVMが直接っており、スマートコントラクトでの処理は不要です。

※上記の通り、EOA間で行えるトランザクションはETHの送信のみです。ただ、ユーザー視点ではERC20トークンの送付も「EOAからEOAへのトークンの送信」に見えます。

構造の違い

前提としてイーサリアムのアカウントの状態は、以下のように「アドレス 対 アカウントの状態」といった形でアドレスごとに保存されます。

アドレスアカウントの状態
xxxxxXXXXX
yyyyyYYYYY
zzzzzZZZZZ

「アカウントの状態」は、さらに以下の4つのフィールドによって規定されています。

  • nonce:そのアカウントが取引するごとに1ずつ増える、取引数をカウントする数字です。
  • 残高:アカウントの残高です。
  • storage hash:スマートコントラクトの状態をハッシュ値に直した値です。
  • code hash:スマートコントラクトのEVMコードをハッシュ値に直した値です。

以下はイメージです。

出典:Ethereum EVM illustrated

EOAの場合、nonceと残高には現在の値が入力されますが、storage hashとcode hashには、空白をハッシュ値に直した値が入力されます。EOAはStorageもEVMコードも持っていないためです。

一方でコントラクトアカウントの場合、4つのフィールドに各値が入力されます。

コントラクトアカウントはstorageを持っており、そこにはスマートコントラクトの状態の保存されています。そのスマートコントラクトの状態をハッシュ値に直したものがstorage hashに入ります。

また、コントラクトアカウントはEVMコードも含んでいます。そこで、code hashにはEVMコードをハッシュ値に直した値が入力されています。

参照

Ethereum accounts | ethereum.org
An explanation of Ethereum accounts – their data structures and their relationship with key pair cryptography.
https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

コメント

タイトルとURLをコピーしました