要約:
- トランザクション処理とは、やりとりを完了させるために必要な、一連の処理のことです。例えば「買い物」というやりとりは、「代金を払う」「商品を受け取る」という2つの処理を経て、はじめて成立します。
- トランザクションとは、ワンセットの処理単位のことです。ブロックチェーンのトランザクションは、ワンセットの処理単位というよりもワンセットの処理を表しています。
- ブロックチェーンでは、トランザクションはユーザーがブロックチェーン上で取引をするために作るものです。ユーザーによって作成・送信されたトランザクションは、「フルノード」というコンピュータに検証され、バリデータやマイナーに承認されると実行されます。
トランザクションとは
一般的な意味の「トランザクション処理」や「トランザクション」の意味を見てみたいと思います。
トランザクション処理
まずトランザクション処理とは、やりとりを完了させるために必要な、一連の処理のことです。例えば「買い物」というやりとりは、「代金を払う」「商品を受け取る」という2つの処理を経て、はじめて成立します。

複数の処理がワンセットになっているので、この2つの処理は、まとめてトランザクション処理と言えます。
買い物でイメージするとわかりやすいように、一連の処理全てが完了して、はじめて完了になります。もし1つ目の処理が完了しても、次の処理が未完了なら、トランザクション処理は失敗になります。
このように、どこか1つでも処理が失敗したら、トランザクション処理も失敗するのも特徴です。
トランザクション
トランザクション処理のポイントは「ワンセット」という点でした。ここから予想できるとおり、トランザクションとは、ワンセットの処理単位のことです。
ただし文脈によっては、トランザクションが処理単位ではなく、処理そのものを指すこともあるようです。
ブロックチェーンのトランザクションとは
ブロックチェーンのトランザクションはどんな意味でしょうか。絶対的な定義はなさそうですが、「ブロックチェーンネットワークにアクセスし、取引を行う手段」と言えます。
ユーザーは、トランザクションを作成しネットワークに送信できます。トランザクションは送信後、ノードに検証され、バリデータやマイナーに承認されると実行されます。
そのため、ネットワークにアクセスし、取引を行う手段です。
ユーザーがトリガーする
また、トランザクションはユーザーがトリガーします。勝手に実行されることはなく、秘密鍵で署名することで実行されます。
以降では、ビットコインとイーサリアムにおいて、トランザクションがどのようなものとして説明されているかを記載してみたいと思います。
ビットコインのトランザクションとは
ビットコインのトランザクションとは、「ビットコインネットワーク上で行われる、あるウォレットから別のウォレットへの価値の移転」です。以下は公式ページの引用です。
A transaction is a transfer of value between Bitcoin wallets that gets included in the block chain.
出典:bitcoin
秘密鍵またはシードフレーズの利用によって、トランザクションに署名ができ、ビットコインネットワークに送られます。そしてマイナーによって承認され、トランザクション(価値の移転)は完了となります。
ウォレットは、ブロックチェーンに記載された情報をもとに残高計算をします。マイナーの承認後、トランザクションはブロックチェーンに記録されるので、ウォレットにも反映されるわけですね。
ブロックチェーンの署名とは、ウォレット保有者本人がトークン送信者であることを証明する手段です。また、署名がされることによって、そのトランザクションが他人に改ざんされていないことも証明できます。
トランザクションの構造
ビットコインのトランザクションは、入力値(input)と出力値(output)で成立します。以下は、基本的なトランザクションが含んでいるデータです。
Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG
出典:Bitcoin Wiki
入力値とは、支払先や差し出す価値などで、商品購入時に差し出すお金のようなイメージです。
出力値とは、主に差し出したお金が分配されたものです。例えば、900円の商品を買うのに1,000円を差し出したとき、900円分はお店に、100円分はおつりとして支払者に渡されます。この900円と100円がoutputです。
出典:Bitcoin Wiki
まとめると、トランザクションとはウォレット間の価値の移転であり、inputとoutputから構成される、ということになります。
イーサリアムのトランザクションとは
イーサリアムのトランザクションとは、「イーサリアムネットワーク上における、なんらかのアクションの実行を指示するもの」です。人間が所有するアカウント(EOA)によって作られます。

署名が付与された指示、などとも説明されます。
トランザクションの種類
イーサリアムのトランザクションとは、「イーサリアムネットワーク上における、なんらかのアクションの実行を指示するもの」でした。ここでの「指示」にはさまざまな種類があり、指示内容によってトランザクションは以下の2つに分かれます。
- コントラクトクリエーション
- メッセージコール
コントラクトクリエーションは、新しいスマートコントラクトを実装(利用可能な状態として追加)するという指示です。メッセージコールには、トークンの送付や、スマートコントラクトの利用などの指示があります。
トランザクションの中身
イーサリアムネットワークに送信されたトランザクションは、以下のような情報を含んでいます。
- トランザクション送信者のアドレス
- 送信先またはコントラクトのアドレス
- 送信者の署名
- ナンス(nonce)
- 移転する価値
- その他任意のデータ
- gas limit(許容できるgasの量)
- 最大のpriority fee(バリデータに払うチップの最大額)
- max gas fee(最大のgas price)
実際のトランザクションは以下のように書かれます。
{
from: “0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8”,
to: “0xac03bb73b6a9e108530aff4df5077c2b3d481e5a”,
gasLimit: “21000”,
maxFeePerGas: “300”,
maxPriorityFeePerGas: “10”,
nonce: “0”,
value: “10000000000”
}
出典:Ethereum
dataフィールド
上記に加えて「data」フィールドにも情報が入っています。そこには、スマートコントラクトで実行する関数(処理)を呼び出すデータなどが含まれます。関数の呼び出しデータは、関数の種類と宛先、金額を含みます。

dataフィールドには、任意のデータを含めることもできます。上記のようなフォーマットに沿わないデータは、EVMの状態を変化させることはありませんが、単純にメッセージとしてや、そのトランザクションのメタデータとして入力できます。

出典:Etherscan
イーサリアムのトランザクションをもっと詳しく
イーサリアムブロックチェーンも、ビットコインと同じ分散型台帳であり、過去の取引内容が記録されるデータストレージです。
しかしビットコインとは違い、ネットワーク全体の状態を保管する「ステートマシン」とも表現されます。ステートマシン(または有限ステートマシン)とは、いくつかの「状態(ステート)」を持ち、それらが互いに移り変わるようなシステムのことを指します。
その様な観点から考えると、トランザクションは状態を変化させるトリガーだと言えます。
ネットワーク全体の状態とは、アドレスごとの状態のことです。アドレスにはEOA(ユーザーが保有するアドレス)の他にも、コントラクトアドレスも存在します。
コントラクトアドレスとは、スマートコントラクトのアドレスのことです。コントラクトのアドレス状態とは、利用者が与えたApproveの状態や利用者のアカウントの残高、スマートコントラクトの所有者などです。
アドレス | 状態 |
アドレス1(EOA) | 残高〇〇 |
アドレス2(EOA) | 残高×× |
アドレス3(コントラクト) | コントラクトの状態 |
スマートコントラクトが分散型アプリ(dApps)の一部である場合、スマートコントラクトの状態に、アプリケーションの状態が表されることがあります。
例えば賭博ゲームなら、現在の賭けの状態(賭けている人、賭けられた金額)がスマートコントラクトの状態として保存されたりします。
トランザクションの種類
イーサリアムのトランザクションは、以下の2つに分かれるのでした。
- コントラクトクリエーション
- メッセージコール
これらをそれぞれ、より詳しく見てみたいと思います。
コントラクトクリエーション
コントラクトクリエーションは、新しいスマートコントラクトを実装(利用可能な状態として追加)するためのトランザクションでした。
コントラクトアドレスは、独自にEVMコード(EVMで実行されるプログラム)やストレージを備えています。コントラクトクリエーションが承認されると、それらが追加されることになります。
メッセージコール
メッセージコールには4種類あります。
- EOA⇨EOA
- EOA⇨CA(コントラクトアドレス)
- CA⇨EOA
- CA⇨EOA
EOAでは、ユーザーが秘密鍵を使って署名することでメッセージコールの処理ができます。CAはEVMコードを含んでおり、このEVMコードもメッセージコールを実行してくれます。
ただし、一番最初のメッセージコールを引き起こせるのは、ユーザー(EOA)のみです。CAがメッセージコールを送るのは、例えば「EOA⇨CA⇨CA⇨EOA」といったトランザクションのみで、必ず最初のトリガーはEOAが引きます。
EVMで実行される
イーサリアムのトランザクションは全て、「EVM」という環境で実行されます。EVMにはスマートコントラクトのコードがあります。またスマートコントラクトごとにMemoryやStack、Storageがあり、それらを使ってトランザクションを処理しています。
より具体的には、MemoryとStackを使ってトランザクションを処理します。これらはどちらも一時的なデータ保管場所ですが、違いもあります。Memoryは順序や位置に関係なくデータにアクセスしたり、複数の計算を同時に行ったりもできます。これに対し、Stackは一連の計算を順序正しく行うのに適しています。

MemoryもStackも1つのトランザクションが処理されるごとにクリアされます。
Storageは、MemoryやStackとは違って一時的なデータ保管場所ではありません。つまり、永続的にデータを保管できる場所です。
また、MemoryとStackがトランザクションの処理のために使われていたのに対して、Storageは以下のようなスマートコントラクトの状態を保存するために使われます。
- トークンの承認の状態
- 利用者のアカウントの残高
- スマートコントラクトの所有者
- dAppsの状態
イーサリアムはネットワーク全体の状態を表します。そのため、スマートコントラクト単位で状態を記録するStorageは、その一部という位置づけです。
トークン送付もスマートコントラクトで処理
単純なトークン送付のトランザクションも、スマートコントラクトに含まれるプログラム(EVMコード)によって実行されています。
トークン送付に使われるスマートコントラクトは「トークンコントラクト」と呼ばれ、「transfer」や「transferFrom」などの関数を定義するEVMコードを含んでいます。
このように、トークン送付もスマートコントラクトのプログラムによって実行されています。しかし、「トークン送付のトランザクション」と呼ばれ、「スマートコントラクトの実行」と区別されることも少なくないかと思います。
なぜ、トークン送付をスマートコントラクトの実行と区別するのでしょうか。
トークン送付とスマートコントラクトの実行を区別する理由
トークン送付は、単純なプログラムの実行によって処理できるため区別されるようです。また、「transfer」のような標準的な関数を持つため、これらの操作を「トークン送付」と一般化して説明されることも要因です。
一方、スワップなどのスマートコントラクトの実行は、より複雑な操作を含みます。例えばスワップ操作では、複数のトークンコントラクトを関与させ、複数の状態変更を引き起こします。また、市場価格、流動性提供者の情報など、より多くの情報を考慮する必要もあります。
これらの操作は、単純な送金操作と比べて、より多くのガスを消費し、より高度なロジックを含むため、一般的にはスマートコントラクトの「実行」と区別されます。
ETHの送付はちょっと特殊
ERC20トークンの送付については、上記に書いた通りです。しかし、ETHの送付はちょっとだけ事情が違います。ERC20トークンの送付は、EVM上でスマートコントラクトの一部機能(transfer関数)を利用することで行われました。
一方でETHの送付は、スマートコントラクトを介しません。EVMを介して行われますが、特定のスマートコントラクトを呼び出すという形ではなく、EVMが直接アカウント間でETHの移動を処理します。
具体的には、送金元のアカウントから送金先のアカウントへETHが移動するという状態変化をEVMが直接行っています。
参照
一般的な意味のトランザクションについて

ビットコインのトランザクション

イーサリアムのトランザクション

https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

コメント