EthereumとBitcoinそれぞれについて、トランザクションがどういう構造をしているか調べてみたいと思います。
Ethereum
- nonce
- メッセージの受領人
- 送信者を特定する署名
- 送受信されるEtherの量
- オプショナルなデータフィールド。Contractに送られるmessageを格納できる。
- STARTGAS値
- GASPRICE値
Ethereumのトランザクションは、「誰から誰にどれだけのEtherを送る」という情報を単純に持っているようです。nonceは、マイニングのときに求めるあれなのかどうかは、まだ不明です。
Bitcoin
- バージョン
- トランザクションインプット数
- トランザクションインプット
- トランザクションアウトプット数
- トランザクションアウトプット
- Locktime
一方Bitcoinは、トランザクションインプットとトランザクションアウトプットの集合体です。これは「Bitocin+トランザクションアウトプット」のキーワードで検索してくるとたくさん出てきますが、誰かにビットコインを送金したいアカウントは、
- 自分が使える未使用トランザクションアウトプットをかき集める(トランザクションインプット)
- それを送り先アカウントの使える未使用トランザクションアウトプットとして生成する(トランザクションアウトプット)
という手順で送金を行います(間違っていたら指摘してください)。Locktimeはトランザクションの処理にまつわるUNIXタイムスタンプか、またはブロック高です。
手数料
トランザクションをブロックチェーンに取り込むには、マイナーに対して支払う手数料が必要です。
Ethereumは、STARTGAS値とGASPRICE値から手数料が求められます。Bitcoinは、トランザクションアウトプットとインプットの差額が手数料になっています。それぞれどういう計算で手数料が求められるのかは、詳しく調べていません。Ethereumについては、
Estimating transaction costs
ここを見るとよいかと思います。
Contract間通信のためのトランザクション
Ethereumの場合は、送金だけではなくContractでいろいろな処理を行うことができます。Contractのメソッドを呼び出すためにはMessageを投げますが、EthereumのトランザクションはMessageをそのデータフィールドに格納できます。