この文書はコンピューター工学知識が一部必要です。
Transaction
Transactionは電子決済やコンピュタ工学のDatabase Transactionをイメージするのができます。
’AがBに$100を支払った’と言うTransactionがあるのら、下の定義が成立します。
- 支払人 (payer)
- 受取人 (payee)
- 資産 $100
Bitcoinは”Payment System”に近いから、上の定義に似ている形を持ちますが、 Ethereumのケースは"World's Computer"と言う言葉通り、”Computing System”に近い、コンピュター工学のDatabase Transactionに似ている定義を持ちます。
Bitcoin Unspent Transaction Output (UTXO)
BitcoinはTransactionを処理する時、UTXOを使用します。
上の内容を改めて見ると、下と同じだと解ることができます。
- 支払人 (payer) : Transaction Input
- 受取人 (payee) : Transaction Output
- 資産 $100 : Transaction Amount
Unspent Transaction Outputはまだ消費していないOutputの意味になります。
一つのTransactionは多数のInputと多数のOutputで構成されて、 Bitcoinの全TransactionはCoinBase(新規発行)を除外すると、Input Amount - Output Amount - Fee = 0にならなければなりません。
- 上の定義に従って,BitcoinはFeeを別のデータで表記していません。代わりに、Input Amount - Output AmountをFeeで扱いします。計算で間違いがある時、過多料金を支払う事になる時も有ります。
Bitcoin Raw Transaction
例はHeight 1のTransaction ( 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098 ) Hexです。
01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000
Name | Byte | Description | Example |
---|---|---|---|
Version | 4 | バージョン | 01000000 |
Input Count | 1 | Input | 01 |
(Countほど繰り返し) | |||
Input - TxID | 32 | どのTxを消費(Spent)するのか | 00000000 ... |
Input - VOut | 4 | ffffffff | |
Input - Script Size | 1 | scriptの長さ | 07 |
Input - Script | Var | script | 04ffff001d0104 |
Input - Sequence | 4 | (非利用) | ffffffff |
(繰り返しエンド) | |||
Output Count | 1 | Output | 01 |
(Countほど繰り返し) | |||
Output - Value | 8 | Little Endian Satoshi | 00f2052a01000000 |
Output - Script Size | 1 | scriptの長さ | 43 |
Output - Script | Var | script | 410496b5 ... |
(繰り返しエンド) | |||
Lock Time | 4 | 0ならば, ロックなし | 00000000 |
- Lock Time :
- 500,000,000 以上なら,Unix Timeで解析になります。
- 500,000,000 以下なら,Block Heightで解析になります。
- Value : Little Endianです。注意しましょう。
- 00f2052a01000000をLittle Endianで読むと000000012a05f200になります。
- 12a05f200 (Hex) = 5000000000 (Decimal) satoshi = 1 BTC.
Bitcoin Transaction Script
Raw Transactionの構成を見ると、payerやpayee定期が有りません。Addressも登場しないです。秘密はScript中に隠れています。
ScriptはBitcoinで動くプログラムで、色んな命令コードで構成されています。 プログラミング的にはBitcoin Machineの上で動くScriptだと表現できます。
Op Code目録はここでは説明しません。Scriptに付いて詳しい内容は Bitcoin Wiki を確認お願いします。
例は有名なscriptの中pay-to-pubkey-hashと言う名前を持っているscriptです。
scriptPubKey (Output Script) : OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig (Input Script) : <sig> <pubKey>
(Reference : Bitcoin Wiki)
例はAがBへ送金するケースを表現します。
- BはAへ自分のAddressを知らせます。
- AはBへ自分のまだ使っていない資産を使用して新しい資産を作ります。
改めて見ると、
- BはAへ自分の”pubKeyHash”を知らせます。
- AはBへ自分のUTXOをInputとして、Bが次Inputで使うことができる新しいOutputを作ります。
- その時、AのUTXOを消費する為、”sig”と”pubKey”を入力します。
- 当たり前ですが、Outputに必要な”sig”と”pubKey”を知らない人はことUTXOを使うことができません。
Outputに必要なInputが提供すると,Bitcoinで実行され,Transactionが処理されます。
Stack | Script |
---|---|
Empty. | <sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG |
<sig> <pubKey> | OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG |
<sig> <pubKey> | <pubKey> OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG |
<sig> <pubKey> | <pubHashA> <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG |
<sig> <pubKey> <pubHashA> <pubKeyHash> | OP_EQUALVERIFY OP_CHECKSIG |
<sig> <pubKey> | OP_CHECKSIG |
true | Empty. |
(Reference : Bitcoin Wiki)
Comparing of Bitcoin and Ethereum Transaction
EthereumはUTXOを使用しません。代わりに、Transactionにsenderとreceiverが明視的に書きされます。
UTXO構成はTransaction互い連結されていますので、別のTransaction実行順序を管理する必要がないメリットが有ります。
- Transactionが所立する為、Transactionがレファレンスしている全てのTransaction Outputがまだ消費していないことが必要です。
- すでに消費しているTransaction Outputを元には他のTransactionを作るのができません。
EthereumはTransaction互いに関係なしです。Addressのstateを利用して、ラースト状態を確認します。
- その代わり、順次に増加するNonceを指定してTransactionを処理番を決めます。
- 例) Nonce 3はNonce 1とNonce 2が処理された後処理できます。次のNonceは4です。
Transaction Propagation (Transaction伝播)
Transactionを作った後にはBlockchain Networkへ伝播して他の参加者から検証と承認を貰うことが必要です。
最初Transactionを作ったNodeと伝播されたNodeは自分と繋がっている他のNodeへTransactionを伝播します。 Transactionを伝播されたNodeも自分と繋がっている他のNodeへTransactionを伝播します。
Reference
- この文書は韓国語文書から翻訳されています。韓国語文書が原文になります。
- Bitcoin Wiki