Opcode は命令バイトであり、秘密鍵や独立したトランザクションではない。使用の成功には有効なスクリプトとトランザクションの全コンテキストが必要で、操作名の存在だけでは足りない。
Script は命令とデータ要素にデコードされる。OP_PUSHDATA はバイトを積むことを指定する。積まれたデータ内のバイトが再び opcode として解釈されることはない。 [Bitcoin Core v29.0 — Script interpreter] [Bitcoin Core v29.0 — Opcode definitions]
OP_DUP はスタック最上部を複製し、OP_DROP はそれを除去する。引数の不足は失敗を招き得る。要素の順序と符号化も条件の一部である。 [Bitcoin Core v29.0 — Script interpreter] [Bitcoin Developer Guide — Transactions]
OP_EQUAL は二要素を比較して結果を積む。OP_EQUALVERIFY は不一致で失敗し、一致なら結果を除去する。どちらも単独で鍵の支配を検証しない。 [Bitcoin Core v29.0 — Script interpreter] [Bitcoin Core v29.0 — Opcode definitions]
OP_CHECKSIG は公開鍵とトランザクション由来のメッセージに対して署名を検証する。Legacy と SegWit v0 は ECDSA、Tapscript の通常の 32 バイト鍵は Schnorr を使う。sighash も拘束範囲を決める。 [Bitcoin Core v29.0 — Script interpreter] [BIP 342 — Validation of Taproot Scripts]
OP_IF と OP_ELSE はスタックで分岐を選ぶ。Script に汎用ループはないが、未実行分岐の規則も opcode の種類とバージョンに依存する。 [Bitcoin Core v29.0 — Script interpreter] [BIP 342 — Validation of Taproot Scripts]
OP_CHECKLOCKTIMEVERIFY は絶対ロック、OP_CHECKSEQUENCEVERIFY は対象入力の相対条件を調べる。自ら待機・送金したり署名条件を代替したりはしない。 [Bitcoin Core v29.0 — Script interpreter] [Bitcoin Developer Guide — Transactions]
Tapscript は署名規則を変え、OP_CHECKSIGADD を追加し、実行された OP_CHECKMULTISIG を拒否する。バージョンのない命令一覧は完全な検証手順ではない。 [BIP 342 — Validation of Taproot Scripts]
BIP 342 は拡張用に OP_SUCCESSx を予約する。Tapscript のデコード中に遭遇すると、その規則で成功となる。新操作の提案が有効化済み、あるいは意図した条件を安全に強制するという意味ではない。 [BIP 342 — Validation of Taproot Scripts] [Bitcoin Core — Segregated Witness benefits]
ネットワーク方針はコンセンサス上ブロック内で許される取引の中継を拒める。Bitcoin Core v29.0 は既定で OP_SUCCESSx の使用を抑制する。ノード方針は新しいコンセンサス規則ではない。 [BIP 342 — Validation of Taproot Scripts] [Bitcoin Core v29.0 — Standard script flags]
スクリプトを読む際はバージョン、初期スタック、署名メッセージ、全失敗経路を特定する。有効な構文や魅力的な opcode 名は正しい保管を保証せず、利用全体が重要である。 [Bitcoin Core v29.0 — Script interpreter] [Bitcoin Developer Guide — Transactions]
理解を深めるには、この項目とあわせて次もお読みください Bitcoin Script, CHECKLOCKTIMEVERIFY, CHECKSEQUENCEVERIFY, Taproot.