ビットコイン用語集 & Script入門
ビットコインの重要用語とScript言語を解説。ブロック、ノード、PoW、UTXO、opcodeまで網羅。
基本用語
- ブロック(Block):取引の検証をまとめたリンク。約10分ごとに新しいブロックが生成され、前のブロックと暗号学的に連結されます。
- ブロックチェーン(Blockchain):各ブロックが前のブロックのハッシュを含むことで形成される連鎖。取引の検証と不可逆性を保証します。
- ノード(Node):ビットコインネットワークに接続されたソフトウェア。フルノードはブロックチェーン全体を保持し、すべてのルールを検証します。
- マイナー(Miner):新しいブロックを生成するためにハッシュ計算を繰り返すソフトウェア。成功するとブロック報酬を得ます。
- メモリプール(Mempool):ブロックに含まれるのを待っている未確認トランザクションの一時保管場所。ノードごとに独立して管理されます。
暗号学関連用語
- ハッシュ(Hash):暗号学的ハッシュ関数の出力。任意のデータから固定長の「指紋」を生成します。同じ入力からは常に同じ出力が得られますが、出力から入力を逆算することは不可能です。
- Proof of Work(作業証明):「高コストだが検証は容易」なデータ。ビットコインではHashcashシステムを採用し、ブロックのハッシュが特定の閾値を下回ることを要求します。
- ナンス(Nonce):ハッシュの結果を変えるために使われる、それ自体は意味のない数値。マイナーはナンスを変えながら条件を満たすハッシュを探します。
- マークルルート(Merkle Root):ブロック内の全トランザクションのハッシュを再帰的にまとめた単一のハッシュ値。ブロックヘッダーに含まれ、データの改ざん検出に使われます。
- 難易度(Difficulty):2,016ブロックごと(約2週間)に調整される、ブロック生成の難しさを表すパラメータ。ネットワーク全体のハッシュレートに応じて自動調整されます。
トランザクション関連用語
- トランザクション(Transaction):ビットコインの送金記録。入力(UTXOの消費)と出力(新しいUTXOの作成)で構成されます。
- UTXO(Unspent Transaction Output):未使用のトランザクション出力。ビットコインの「残高」は、あるアドレスに紐づく全UTXOの合計です。口座残高モデルとは根本的に異なります。
- コインベース(Coinbase):ブロックの最初のトランザクション。マイニング報酬を含み、入力にはマイナーが自由にデータを埋め込めます。ジェネシスブロックのタイムズ見出しもここに記録されました。
- 確認(Confirmation):トランザクションがブロックに含まれた後、その上に積まれたブロックの数。6確認で「最終的に確定」とみなされるのが慣例です。
- 二重支払い(Double Spending):同じコインを2回使おうとする行為。ビットコインのコンセンサスメカニズムがこれを防止します。
- 取引手数料(Transaction Fee):トランザクションに添付する任意の手数料。手数料が高いほどマイナーに優先的に処理されます。
ネットワーク関連用語
- メインチェーン(Main Chain):最も計算量が積まれた(最長の)有効なブロックチェーン。
- オーファンブロック(Orphan Block):親ブロックが不明なブロック。ステイルブロック(Stale Block)は、かつてメインチェーンの一部だったが現在は含まれないブロックです。
- 再編成(Reorg):より長い(難易度が高い)チェーンが見つかった時にブロックチェーンが切り替わること。通常は1〜2ブロック程度の小規模な再編成が自然に発生します。
- シードノード(Seed Node):ビットコインクライアントに初期状態でハードコードされたIPアドレスを持つノード。新規インストール時のネットワーク接続に使用されます。
- Satoshi(サトシ):ビットコインの最小単位。1 satoshi = 0.00000001 BTC。ビットコインの創始者にちなんで名付けられました。
- ヴァージンビットコイン(Virgin Bitcoin):マイニングで生成されてから一度も使用されていないブロック報酬。規制上の理由から、取引履歴のないコインとして注目されることがあります。
Bitcoin Script とは
- Bitcoin Scriptはビットコインのトランザクションを制御するプログラミング言語です。Forth言語に似たスタック型の言語で、意図的にチューリング不完全(ループなし)に設計されています。
- スクリプトは2つの部分で構成されます。scriptPubKey(送金先の条件を設定)と scriptSig(条件を満たす入力を提供)。実行が完了し、スタックの先頭がtrue(非ゼロ)であればトランザクションは有効です。
- この設計により、「特定の秘密鍵の所有者だけがコインを使える」「複数人の署名が必要」「一定時間が経過しないと使えない」など、柔軟な送金条件をプログラムできます。
- チューリング不完全な設計は意図的です。無限ループやリソース枯渇攻撃を防ぎ、すべてのスクリプトが有限時間で完了することを保証しています。
標準トランザクションタイプ
- P2PKH(Pay-to-Public-Key-Hash):最も一般的な形式。公開鍵のハッシュと一致する公開鍵と、対応する署名を要求します。ビットコインアドレスが「1」で始まるものがこのタイプです。
- P2SH(Pay-to-Script-Hash):スクリプトのハッシュに対して送金する形式。マルチシグやより複雑な条件を実現できます。アドレスは「3」で始まります。
- P2WPKH / P2WSH(SegWit):Segregated Witnessを利用した形式。署名データをトランザクション本体から分離し、ブロック容量の効率化を実現。アドレスは「bc1q」で始まります。
- P2TR(Taproot):2021年に導入された最新形式。Schnorr署名とMAST(Merkelized Alternative Script Trees)を組み合わせ、プライバシーと効率を向上。アドレスは「bc1p」で始まります。
- OP_RETURN:使用不可能な出力を作成するオペコード。データの埋め込みに使用されます(最大80バイト)。UTXOセットを汚染しない方法でメタデータをブロックチェーンに記録できます。
主要なオペコード
- 暗号操作:OP_SHA256(SHA-256ハッシュ)、OP_HASH160(SHA-256 + RIPEMD-160の二重ハッシュ)、OP_CHECKSIG(署名検証)、OP_CHECKMULTISIG(マルチシグ署名検証)。
- スタック操作:OP_DUP(スタック先頭の複製)、OP_DROP(先頭の破棄)、OP_SWAP(先頭2つの入れ替え)。
- フロー制御:OP_IF / OP_ELSE / OP_ENDIF(条件分岐)、OP_VERIFY(検証失敗時にスクリプト中断)。
- タイムロック:OP_CHECKLOCKTIMEVERIFY(絶対時刻ロック)、OP_CHECKSEQUENCEVERIFY(相対時間ロック)。Lightning Networkの基盤技術です。
- 無効化されたオペコード:OP_CAT(文字列連結)やOP_MUL(乗算)など、過去のバグにより無効化されたオペコードがあります。新しいオペコードの追加はソフトフォークにより慎重に行われます。
セキュリティ概念
- 51%攻撃:ネットワークの計算力の過半数を支配する攻撃。自分の取引を巻き戻したり、他の取引の確認を妨げたりできますが、他人のコインを盗むことはできません。
- シビル攻撃(Sybil Attack):大量の偽ノードを作成してネットワークを操作する攻撃。ビットコインはサブネット単位の接続制限で緩和しています。
- フィニー攻撃(Finney Attack):ゼロ確認取引に対する二重支払い攻撃。少額取引では数秒待つことでリスクを低減できます。
- タイムジャッキング:ノードの時計を操作して、ブロックの有効性判定に影響を与える攻撃。改良された時刻計算方式で対策可能です。
- DoS攻撃(サービス妨害):ノードに大量のデータを送信して機能を妨害する攻撃。ビットコインクライアントには20以上の防御策(レートリミット、ピアスコアリング、IPバンなど)が実装されています。