Ethereum基礎学習|アカウントとは?
Ethereumには、2種類のアカウントが存在しています。1つはEOA(Externally Owned Account)、もう1つはContract(コントラクト)アカウントです。また、アカウントに紐づくstateには、Account state(アカウント状態)とWorld state(ワールド状態)が存在しています。
CoinPicka Labでは、BitcoinやEthereum、時事情報に焦点を絞り毎週金曜日レポートを配信しています。
Ethereum基礎学習|アカウントとは?
Ethereumには、2種類のアカウントが存在しています。1つはEOA(Externally Owned Account)、もう1つはContract(コントラクト)アカウントです。それぞれのアカウントは、Gethのコンソール上で新規発行することができます。
EOAはユーザーが管理することのできるアカウントで、トランザクションの作成、トークンの送金、コントラクトの実行、マイニングの実行などを行うことができます。一方Contractアカウントは、アカウント内のコードを実行するためのアカウントです。こっれは自発的に動作することはなく、EOAからContractアカウントにETHを送金することで、Contractアカウント内のコードが実行(フィールドのデータも更新)されるのです。
Account state
Ethereumのブロックチェーンには、トランザクションに基づいた「state(状態)」という概念があります。新たなトランザクションが発生する度に、EOA及びContractアカウントのstateは変化していきます。また、stateはAccount state(アカウント状態)とWorld state(ワールド状態)が存在しています。
Account stateは4つの要素から構成されています。
- nonce(ナンス):EOAの場合は、アカウントによって作成されたトランザクションの数が記録されています。Contractアカウントの場合は、そのアカウントが作ったコントラクトの数が記録されています。
- balance(バランス):アカウントが保有している通貨量が記録されています。その単位はEthereumの最小単位である”Wei”で記録されています。1Wei=0.000000000000000001 ETHです。
- storageRoot(ストレージルート):アカウントが保有するデータのマークルツリーのデータハッシュを持っています。現時点で分かりやすく言うと、データの大きな倉庫に保管しているとして、そのデータを保管している自分だけにしかわからないID番号みたいなものです。
- codeHash(コードハッシュ):EOAの場合は、空文字のハッシュが記録されており、コントラクトアカウントの場合はそのアカウントが持っているコードのハッシュが記録されています。
World state
World stateは、Ethereumネットワーク全体のstateのことを指します。上述したネットワーク上のAccount stateのアドレスに各stateを紐付けたものをMerkle Patricia tree(マークル・パトリシアツリー)として構成したものでWorld stateが成り立ちます。しかし、星の数ほどあるネットワーク上のアカウントのstateを考慮することは複雑である為、World stateはMerkle Patricia tree(マークル・パトリシアツリー)のルートハッシュとして成り立っています。
ツリー上の最上部に位置するルートハッシュは、Account stateのstateデータを分割して「3.storageRoot」のハッシュ値が最終的にMerkle Patricia treeのルートハッシュに記録されています。