メインコンテンツまでスキップ

トランザクションその2

· 約4分

ビットコインのトランザクションは、標準的なトランザクションであり、どのアカウントからどのアカウントにどのぐらい送金する かを記録するだけであり、仮想通貨を目指すビットコインの場合これで十分でした。 イーサリアムの場合は、分散アプリケーションのプラットフォーム を目指して設計されたので、スマートコントラクト作成やスマートコントラクト間のやり取りの為、特別なトランザクションが存在しています。

  1. コントラクトを登録するトランザクション
  2. コントラクトの関数を呼び出すトランザクション

標準トランザクションを含めて、各トランザクションに渡すパラメータをまとめました。

トランザクションタイプ毎のパラメータ内容

パラメータ標準トランザクションコントラクト登録するトランザクションコントラクトの関数を呼び出すトランザクション
from送金するアカウントのアドレスコントラクトを登録するアカウントのアドレス呼び出す元のアドレス
to送金の宛先アカウントのアドレス呼び出し先コントラクトのアドレス
value送金の金額
dataコントラクトがコンパイル済みのバイト配列呼び出し先の関数に必要な情報
  • 3つのタイプとも、gas / gas price / nonce パラメータがありますが、違いがないので、上記のテーブルに書いてない
    • gas はそのトランザクションの処理の中、各処理ステップ毎に払う手数料の合計値以上である必要がある ことは既に把握できました。コントラクトの関数を呼び出す場合気をつけないといけないのは、たとえコントラクトAの関数Xを呼び出すだけでも、中の処理で更に呼び出したコントラクトBの関数Y、コントラクトCの関数Zなど、最初の呼び出しを起点として、一連の呼び出しに必要な gas は全部合計されるので、その最終的な合計値の分の手数料を払わないと行けないこと。同じく途中まで gas が足りなくなったら、一連の呼び出すは全部取り戻され、変更がブロックチェーンに適用されないこと。
  • data パラメータは、まさに標準トランザクション以外のトランザクションのためのパラメータなので、標準のトランザクションの場合は空です
  • コントラクトを登録するトランザクションの場合は、
    • to は空(システムというか、ブロックチェーンプラットフォーム宛みたいな感じ
    • value は空
    • data は事前にコントラクトのソースをコンパイルし、できたバイト配列をここに格納する
  • コントラクトの関数を呼び出すトランザクションの場合は
    • to は呼び出す先のコントラクトのアドレス
    • value は空
    • data は、呼び出す関数に必要な、パラメータのデータ型と値をエンコードした内容(詳細は参考記事の2番目を参照ください)

参考記事