Floc Basics Vol.3:ブロックの構造を知る

ブロックの基本構造

ブロック

ブロックサイズBlockSize4バイト
ブロックヘッダBlockHeader80バイト
ブロックに含まれるトランザクション数TransactionCounter1-9バイト
トランザクションリストTransactions可変

※ブロックサイズは最大1MB

ブロックヘッダ

バージョンVersion4バイト
前ブロックのハッシュPreviousBlockHash32バイト
マークルルートMerkleRoot32バイト
タイムスタンプTimestamp4バイト
PoWの難易度DifficultyTarget4バイト
ナンスNonce4バイト
次のブロックができる仕組みがいまいち分からない。。。分散環境で本物や偽物の多くのTXがある?のにどのタイミングでブロックを生成し、Nonceを計算し出すのか・・・

分岐も当然発生するが、その配下に繋がるブロックが増えていって、最長チェーンが正当なチェーン。後ろに6ブロックできれば基本的には変更される心配はほとんどないとされる。

https://tomokazu-kozuma.com/block-structure-of-bitcoin-blockchain/

ブロックヘッダの詳細

Version(バージョン)

Bitcoinのルールセットを表す。

PreviousBlockhash(前ブロックのハッシュ)

SHA256でダブルハッシュ+バイト単位で反転させたもの。

※ハッシュ関数

BitcoinではSHA2(SHAー256)、RIPEMD(RIPEMD160)を利用。不可逆性ハッシュ関数でも総当たり攻撃で突破される可能性はある。すでにMD5やSHA1は突破されている。ハッシュを2回重ねるダブルハッシュを利用することでさらに総当たり攻撃の耐性を強化できる。量子コンピュータで突破される可能性もあるがそもそもその場合はインターネット自体が脅威にさらされることになる。

MerkleRoot(マークルルート)

ブロック内のTXをようやくした値。TXはMerkleTreeというデータ構造を経て出力されたハッシュ値としてまとめられ、そのRoot。

TXをそれぞれハッシュ化して、隣合うハッシュをさらにハッシュ化していって、MerkleTreeを作っていき、最終的に1つのハッシュ値が生成される。これがMerkleRoot。ブロック内のTXの数は、1 – 3000なので深い階層構造となる。

このMerkleTreeを利用してMerkleRootマークルルートにたどり着く経路をMerklePathという。これを利用することで、TXがそのブロックにあるかどうかを検証できる。

トランザクションデータを要約する技術「マークルツリー」

ブロックチェーンは、各ブロックが鎖(チェーン)のように繋がることでデータを連続的に保管する台帳技術です。さらに各ブロックには、多くのトランザクション(取引)データが格納されています。 ブロックチェーン では、その多くの取引データを「マークルツリー」という技術を利用することでブロックヘッダに要約して書き込んでいます。今回は、マークルツリーについて見ていきましょう。 …

Timestamp(タイムスタンプ)

中央集権的なタイムスタンプ:事業者が管理
ブロックチェーンのタイムスタンプ:現実世界のタイムスタンプも記録されるが正確さは求められない。ブロックをチェーンでつなげているためそれがタイムスタンプとして機能する。

※「bits」がマイニングの難易度との記載があったが正しかったのか・・・Difficultyの方が正しそうなのでDiffifultyで統一。

Difficulty(難易度)

マインニングの難易度。

Nonce(ナンス)

PoWによって求められる値。

※SPVノード

ブロックヘッダ情報だけを持つノード。モバイルで利用するようなウォレットに多い。

ブロックチェーンを制する上で重要な「ブロックヘッダ」を解説

ブロックチェーンにおいてブロックヘッダは理解しておきたい内容になります。ブロックチェーンは、いくつかの取引データをまとめてブロックというものを作っています。このブロックに関するメタデータを含んでいるのがブロックヘッダとなっています。 ブロックチェーンは、トランザクション単位での取引をしており、トランザクションに関する情報もブロックヘッダに含まれているのです。 …

TX(トランザクション)の詳細

1つのTXには複数のInputとOutputを含めることが可能で、Inputの合計値≧Outputの合計値となっていいて、差額はマイナーが受け取る手数料となる。
手数料がゼロの場合、ブロックに取り込まれない。Inputの合計値が多い場合は、お釣りとして自分宛のOutputを作らないと全てがマイナーの手数料になってしまう。

Version(バージョン情報)

TXのルールセット。

Input(インプット)

・トランザクション内のインプット数
・使用するUTXOが含まれるTXのID
・使用するUTXOのインデックス
・ScriptSig(送信者の秘密鍵による署名値:解除条件/送信者の公開鍵
 →「UnlockingScript」とも呼ばれる。

Output(アウトプット)

・トランザクション内のアウトプット数
・各アドレスへの送金額
・ScriptPubKey(受信者のアドレス/受信者の公開鍵ハッシュ)
 →「LockingScript」とも呼ばれる。

Mastering Bitcoin: 5章 トランザクション のまとめ

現在、翻訳とまとめ中です。 以下のMastering Bitcoinを参考にして、個人的に重要なところをまとめたものです。 Mastering Bitcoin Chapter 5. Transactions 小切手のようだ トランザクション: 300 – 400 bytes のデータ 送信者を信用する必要がない 安全でないネットワーク上でも送信可能(WiFi, Bluetooth, NFC, Chirp, バーコード, Webフォームへのコピペ) トランザクションが、invalidの場合、ノードはリジェクトして、リジェクトメッセージを送信者に送り返す データ構造: input, output inputs, outputsは、アカウントやIDとは関係がない inputs, outputs は、ビットコインの量として考えるべき トランザクションの構造 トランザクション・ロックタイム トランザクションが、ブロックチェーンに追加されうる最も早い時間を定義する ほとんどのトランザクションでは、即時に実行させるため0をセットする ロックタイムが、0でなく5億以下の場合、ブロックの高さという意味に訳される それが意味することは、指定したブロックの高さより前にブロックチェーンに含まれない、ということ ロックタイムが、5億以上の場合、Unix Epochタイムスタンプに訳される 指定した時間より前にトランザクションがブロックチェーンに含まれないということ 未使用出力: UTXO (unspent transaction output) ユーザがビットコイン受け取った時は、その量がUTXOとしてブロックチェーンに記録される ユーザのビットコインは、トランザクションやブロックのあちこちに散らばっているかもしれない 事実上、ビットコイン・アドレスや口座の残高のようなものはない。あるのは、特定所有者にロックされているあちこちに散らばったUXTOだけ ユーザのビットコイン残高は、ウォレット・アプリケーションから作れれている ウォレットは、ブロックチェーンをスキャンし、ユーザ所有の全UXTOををまとめることで、ユーザの残高を計算している 20ビットコインのUXTOを持っていて、1ビットコインを支払いたい場合は、20ビットコインを消費して、2つの出力を作らないといけない。一つは、1ビットコインを送信者へ、もう一つは、19ビットコインをお釣りとして自分のウォレットへ。 結果、ほとんどのビットコイン・トランザクションは、お釣りを生成する トランザクションにより消費されたUTXOを、トランザクション入力と呼ぶ トランザクションにより作られたUTXOを、トランザクション出力と飛ぶ 現在の所有者の署名でアンロックすることで、トランザクションはUTXOを消費する 新しい所有者のビットコイン・アドレスに対してロックすることで、UTXOを作り出す 出力、入力への例外は、コインベース・トランザクションと呼ばれる特殊な種類のトランザクション。各ブロックの最初のトランザクション Tip: どちらが先か?入力か、出力か?

GenerationTX

マイナーに支払われる成功報酬。Script部がCoinbase Dataとなっている。コインベーストランザクションとも言われる。

送金

OutputはScriptでLockされている。送金するためにはUTXOを集めてUnlockして、Inputとする。Outputは送金相手の公開鍵を使ってLockする。TXを送信する場合は電子署名を利用してなりすまし対策をする。

ウォレット

Bitcoinは残高がない。ウォレットによって表現される。

スクリプト言語

スタック構造をベースとして順番に処理される。Opcodeが利用される。P2PKHなど。マルチシグも導入可能。スクリプトは価値の所有権移転に関わる重要なものなので不具合があるとロックが解除できず、2度と使えなくなるので、「テストネット」という開発用のブロックチェーンで確認することが推奨されている。
送金以外にも利用可能。OP_RETURNというスクリプトを使うことで80バイトまでなら関係ないデータをアウトプットに記録可能。Bitcoinは複雑な処理ができないので、Ethereumなどのブロックチェーンを使うべき。

Bitcoin Script P2PKHの解説 – ブロックチェーンエンジニアとして生きる

Bitcoinをはじめ、BitcoinからハードフォークしてできたBitcoinCash、BitcoinSV、LitecoinなどでBitcoin Scriptが動作しています。 Bitcoin Scriptの基本動作はスタックマシンです。OP_CODEというオペレータをスタックに積んで順番に処理するようになっています。BitcoinはBitcoin …

UTXO(Unspent Transaction Output)

未使用のOutputのことで、Bitcoinでの残高を表すもの。

デジタル通貨の管理方法

・残高管理
 →Ethereum

・トランザクションのIN/OUT管理(残高は計算にて求められる)=UTXO
 →Bitcoin、Corda

UTXO は分割不可能なため、利用したい額より大きなUTXO を持っている場合は、自分宛のOutput を作る必要がある。

※ただし、厳密にはInput/Outputの合計値は一致しない。Input/Outputの差額はPoWのマイナーへの手数料として支払われる。Generationトランザクションを作る際に、マイニング報酬と手数料を自分宛のアウトプットの含めている。
手数料が少ないとマイナーのモチベーションにつながらないため、TXが取り込まれない。

二重支払の問題解決

従来の非中央集権型ネットワークでは、二重支払のような不正を防止する管理者がいないため、経済活動を成立させるのは難しいとされてきた。

・UTXO
・PoW
・最長チェーンを正当とみなす
・ブロックチェーンが公開されている

ことによりそれを解決することが可能となっている。