Ethereum Transaction
Accounts
Externally Owned Account(EOA)
外部所有のアカウント
Contract Account
スマートコントラクト これがつくられる時に作成されるアドレス
アカウントの構造
- nonce -> メッセージ実行時にインクリメントされる値
- balance -> このアカウントが保有しているWeiの量
- storageRoot -> 状態dataのMerkle Patricia tree のルートハッシュ 256bit
- codeHash -> このアカウントのcodeのhash値. 検索に利用される
これらの4つの要素が内包されている
EOA と Contract Account の見分け方
codeHashがnilのHash値の時はEOA
Transactionの構造
受取手が EOAの場合は 送金トランザクション 受取手が Contract の場合は、execution トランザクション(スマートトランザクションのコードを何かしら実行するトランザクションとなる)
構造
- nonce
- gasPrice
- gas
- to
- value(何かしらのetheを送る場合)
- このtransaction全体に対する署名
- data(仕様上は無限の値を入れれる)
Transaction is Message
- nodeの中ではMessage Callとして扱われる
- TransactionもMessage Callに変換される
- Contract -> Contract の呼び出しも EOA -> Contract の呼び出しも同じように扱える
- Messaage Callの発生源はEOAであるため、発生源を示すフィールドも用意されている
Message Callの構造
- sender -> messageを投げたAddress
- originator -> messageの発生源のAddress
- recipient -> messageの受信Address
- execute account -> messageを受けとって、codeを実行する人.recipient = exexute account
- available gas -> 利用可能なgasの量
- gas price
- data
- depth of stack -> 実行時のcontextの深さ
- state modification -> 実行時にこのアカウントのstateの変更を許可するフラグ
送金トランザクションの流れ
- Transactinが有効かチェック
- 送金対象のアカウントがなければ作成
- 送金を実行
- evmを起動してcodeを実行