読者です 読者をやめる 読者になる 読者になる

Great just isn't good enough.

毎日が楽しいなんて、毎日楽しくないのと同じ

ビットコインのトランザクションについて

昨日、ビットコインとか勉強会#6に参加してきました。

ビットコインにおける手数料の考え方や、スクリプトの考え方について発表があり、

勉強となりましたので、両発表の中で出てきたトランザクションについて纏めようと思います。

 

cryptocurrency.connpass.com

 

トランザクションとは

簡略的に説明すると、ビットコインをあるアドレスから他のアドレスに送信することです。つまり、価値の移転を表しています。価値を移転するわけなので、トランザクションには、宛先のアドレスや送金するビットコインの量などが含まれています。トランザクションとはそれらを署名したデータ構造となります。

 

トランザクションのライフサイクル

トランザクションはまずトランザクションの生成から始まります。

生成されたトランザクションは署名することにより、生成されたトランザクションが参照する資金を使用できることを許可しています。

署名されたトランザクションビットコインネットワークにブロードキャストされます。個々のネットワーク(ノード)は受け取ったトランザクションを検証しながら、他のノードへ伝搬します。全てのノードに行き渡ったトランザクションはマイニングノードによりマイニングされます。マイニングに成功すると、ブロックチェーン内のブロックに書き込まれます。

一度承認されたトランザクションは以後、有効なものとして受け入れられます。

有効なトランザクション(資金)は次の新しいトランザクションの中で使用することができるようになり、所有者が変わって再びトランザクションのライフサイクルが始まります。

 

トランザクションの構造

f:id:seika0pom:20170412113813p:plain

 

上記の図がトランザクションの構造となります。

 

サイズ フィールド 説明

4バイト

バージョン

このトランザクションが従うルールを指定する

1〜9バイト(VarInt)

入力カウンター

含まれる入力の数

変数

入力

1つ以上の取引入力

1〜9バイト(VarInt)

出力カウンタ

含まれる出力数

変数

出力

1つまたは複数のトランザクション出力

4バイト

ロックタイム

Unixのタイムスタンプまたはブロック番号

 

ビットコイントランザクションの基本的な構成要素は、未使用トランザクション(UTXO:unspent transaction output)です。未使用トランザクションとは、特定の所有者が利用することを許した分割出来ないビットコイントランザクションです。

ビットコインは、実際にはアドレスまたは口座の残高情報を記録しているわけではなく、ビットコインネットワーク上にトランザクションとUTXOが散らばっているだけなのです。普段ウォレット等で目にしている残高というのは、あなたが利用できるUTXOをブロックチェーンからかき集めて集計した結果になります。

ビットコインの送金を一つ例にしてみます。

例)

Aさんは10btc保有しています。Bさんに5btcを送金したい場合

Aさんは10btcのUTXOを持っている場合分割することが出来ません。ですので、2つのアウトプットを持ったトランザクションを生成します。

一つ目は、Bさんに支払う5btcのアウトプット、二つ目は自分へのお釣りとなる5btcのアウトプットとなります。

 

トランザクションによって消費されたUTXOをトランザクションインプットと呼ばれます。また、トランザクションによって作成されたUTXOをトランザクションアウトプットと言います。上記の例では、Aさんの保有する10btcのUTXOがトランザクションインプットとなり、Bさんに支払う5btcと自分へのお釣りとなる5btcのUTXOがトランザクションアウトプットとなります。AさんBさんは次回から5btcを使用する場合、5btcのUTXO(トランザクションアウトプット)をインプットとしてトランザクションの生成をすることになります。

 

トランザクションアウトプット

トランザクションアウトプットの構成は以下となります。

・satoshi単位で表されたビットコインの量

・アウトプットを使用するために満たす必要のある解除条件

 

トランザクションアウトプットの構造

サイズ フィールド 説明

8バイト

量(Amount)

サトシのビットコイン値(10 -8ビットコイン

1〜9バイト(VarInt)

ロックスクリプトのサイズ

(Locking-Script Size)

ロッキングスクリプトの長さ(バイト単位)

変数

ロックスクリプト

(Locking-Script)

出力を使うために必要な条件を定義したスクリプト

 Locking-Scriptにトランザクションアウトプットを使用するために満たす必要のある解除条件が記載されています。

 

 トランザクションインプット

トランザクションインプットの構造

サイズ フィールド 説明

32バイト

トランザクションハッシュ

(Transaction Hash)

UTXOが使用されるトランザクションへのポインタ

4バイト

アウトプット・インデックス

(Output Index)

UTXOの索引番号。最初は0です

1〜9バイト(VarInt)

ロック解除スクリプトのサイズ

(Unlocking-Script Size)

ロックを解除する - バイト単位のスクリプト長。

変数

ロック解除スクリプト

(Unlocking-script)

UTXOのロックスクリプトの条件を満たすスクリプト

4バイト

シーケンス番号

(Sequence Nember)

現在無効になっているTx置換機能は0xFFFFFFFFに設定されています

 トランザクションインプットは、トランザクションハッシュとUTXOが記録されているブロックチェーン内の場所を示すシーケンス番号を使って、特定のUTXOを指定します。

UTXOを使用するためには、unlocking scriptというUTXOのロックを解除するスクリプトが含まれています。unlocking scriptは通常、locking script内にあるビットコインアドレスの所有権を証明する署名です。

 

ここで、先ほどの例に当てはめると、

Aさんが作成した2つのトランザクションアウトプットには、Bさんのアドレスでロックしたlocking scriptとお釣りようにAさんのアドレスでロックしたlocking scriptが含まれています。Bさんは受けたっと5btcを使用する際は、トランザクションインプットに対して署名をしたunlocking scriptを含めます。このunlocking scriptがAさんが5btc渡した際に作成したトランザクションアウトプットに含まれるlocking scriptの条件を満たすため、トランザクションが使用可能となるわけです。

 

このように頭のいい人は価値の移転を定義しているわけですが、

トランザクションにはまだ手数料であったりマルチシグネチャ、Scriptなど

ここで説明していない内容がたくさんあります。

それらについては、別な記事として更新して行こうと思います。

 

ビットコイン初心者の私がなんとなく掴んだ内容を記載していますので、

誤解を招くような表現であったり、誤った記載があるかもしれません。

その場合は、以下の書籍に目を通すことをオススメします。

  

 

ビットコイン関連の情報は全て以下に掲載されているので、ここのオススメです。

Bitcoin Wiki

 

 

 以上。

 

ビットコインの購入を考えている方は以下の取引所をオススメします。

 zaifビットコインはもちろん、MONAコインやXEMなども取り扱っています。

その他にも面白いアセットも取り扱っていますので、楽しいですよ。

 

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

 coincheckは様々な暗号通貨を取り扱っています。

 

 

ここまで読んで頂きありがとうございました。

最後に、寄付いただけると今後の私の燃料となります。

頂いた方には、お礼でNEKOKOコインを贈呈しています。

NEKOKOコインは全く価値がありません。。。。。 

Donate with IndieSquare

広告を非表示にする
日本で一番簡単にビットコインが買える取引所 coincheck bitcoin