Open1

コントラクトはどこに保持されるか

YuheiNakasakaYuheiNakasaka

コントラクトはどこに保持されるか

リソース

やること

  • コントラクトはどこに保持されるかソースコードレベルで知りたい

メモ

  • go-ethereum/core at master · ethereum/go-ethereumを読むとstateに関するコードが見える。とはいえでかいコードなのでちゃんと全部読むのは厳しい...
  • ソースコード(bytecote)もコントラクトのstate(storage)も全てEthereumのdbに保持されてる
    • levelDBとmemoryDB(map[string][]byteのstruct)を使ってる
  • storage
    • blockchainで永続化されるkey-valueのmap形式(levelDBか?)
    • 自分自身のコントラクトから自分自身のStorageにしかアクセスできない
  • memory
    • 呼び出し(コントラクトへのメッセージコール)ごとに初期化されるメモリ領域
    • 使用領域が大きいとgas代が多くかかる
  • stack
    • EVMはスタックマシーン。計算結果とかを積む。一番上のstack要素しかアクセスできない。