MSTR Cat

ブロックチェーン/レベル IV · プロトコルを深く知る/4.1 Script/レッスン 6

標準性とポリシー

ネットワークが受け入れるものと、あなたのノードが中継するものとの違い

用意するものBitcoin Coreのソースコード(policy/policy.cpp)Bitcoin Optechの「Waiting for confirmation」シリーズ生のスクリプトを表示するブロックエクスプローラー

問い

  1. なぜ有効なトランザクションが、マイナーに届く前にウォレットによって拒否されることがあるのでしょうか?
  2. 相手方が自分とは異なるソフトウェアを使用していても、両者とも「正しい」場合はどうなるのでしょうか?
  3. 未使用のオペコードを中継経路から締め出しておくことで、将来のアップグレードをどのように守れるのでしょうか?

探究

  1. コンセンサスルールは有効性を定義します。つまり、ブロックに何を含めることができ、すべてのノードに受け入れられるかを決めます。標準性はそれとは別のローカルなポリシーで、特定のノードがどのトランザクションをピアに中継し、メモリプールに保持するかを決めます。トランザクションは、コンセンサス上は完全に有効でも、デフォルトの中継ポリシーでは非標準とされることがあります。ユーザーがそのようなトランザクションをブロードキャストすると、マイナーには技術的にはそれをブロックに含めることができるにもかかわらず、ユーザー自身のノードが即座に破棄することがあります。
  2. サービス拒否攻撃やリソース枯渇からノードを守るため、標準的なアウトプットタイプは厳しく限定されています。これにはP2PKH、P2SH、P2WPKH、P2WSH、P2TR、小規模なベアマルチシグスクリプト(鍵3つまで)、特定のサイズ以下のOP_RETURNデータアウトプットが含まれます。予約済みまたは未知のオペコードを使うスクリプトや、サイズ制限を超えるスクリプトは、デフォルトでは中継されません。このフィルタリングによってメンプールが管理可能な状態に保たれ、悪意ある者が複雑で計算コストの高いゴミデータでネットワークを溢れさせることを防ぎます。
  3. ポリシーは固定されたものではなく、ノードの実装ごとに変化します。2025年、Bitcoin Coreの開発者はOP_RETURNデータアウトプットのデフォルトのサイズ制限を緩和することを決めました。この変更はノード運用者の間で議論を呼び、拡大に反対した一部の人々は、従来のより厳しい制限を維持するためにBitcoin Knotsなどの代替ソフトウェアに乗り換えました。この分岐は、標準性がローカルな設定であることを示しています。異なるバージョンやフォークを動かす2つのノードは、コンセンサスに違反することなく、有効なトランザクションのうち異なる部分集合を中継できるのです。
  4. 非標準だが有効なトランザクションでも、デフォルトの中継ネットワークを完全に迂回すれば承認されることがあります。マイナーは直接提出サービスを提供してきており、ユーザーはノードのポリシーに関係なく、トランザクションをマイナーのブロックに直接送り込めます。ウォレットが、無効に見えるスクリプトは決して伝播しないと想定して、安全性を標準性による拒否に頼っている場合、リスクを抱えることになります。マイナーに直接アクセスできる相手方が、そのトランザクションを承認させてしまう可能性があるのです。これは真実ではなく挙動の分岐を生み、予期しない資金の移動や損失につながるおそれがあります。
  5. 標準性は、将来のソフトフォークアップグレードのための安全弁として機能します。予約済みのアップグレード可能なNOPオペコードを中継時に非標準として扱うなど、今のうちにより厳しいルールを適用しておくことで、アップグレードがコンセンサスルールを厳格化する際の円滑な移行を確保しています。予約済みオペコードを使うトランザクションはデフォルトでは中継もマイニングもされないため、ソフトフォークでそれらのオペコードに意味が与えられる時点では、そうしたトランザクションはほとんど、あるいはまったく存在しません。そのため新しいルールが、人々が依存していたものを無効にすることはなく、アップグレードしていないマイナーが新ルールで拒否されるブロックをマイニングする可能性も低くなります。
  6. ポリシーのチェックを自分で読んでみてください。Bitcoin Coreのソースでは、policy/policy.cppにIsStandardとIsStandardTxがあり、受け入れられるアウトプットタイプとサイズ制限が列挙されています。Bitcoin Optechの「Waiting for confirmation」シリーズでは、その背景にある考え方が解説されています。これらを検証コード内のコンセンサスルールと比較し、中継ルールの範囲がいかに狭いかに注目してください。

重要な事実

  • コンセンサスルールは有効性を定義し、標準性は中継の挙動を定義します。
  • 標準的な出力タイプには、P2PKH、P2SH、P2WPKH、P2WSH、P2TR、および小規模なベアマルチシグがあります。
  • ポリシーは、複雑なスクリプトや大きなスクリプトをフィルタリングすることで、ノードをサービス拒否攻撃から守ります。
  • 非標準のトランザクションでも、マイナーへの直接提出サービスを通じて承認されることがあります。
  • Bitcoin Coreは2025年にOP_RETURNのサイズ制限を緩和し、一部のユーザーがソフトウェアを乗り換えるきっかけとなりました。
  • 標準性は、将来のソフトフォークアップグレードを円滑にするため、予約済みオペコードを除外します。

演習 九・六・三・一

9集めるビットコインの歴史において使用された9つの異なる出力スクリプトタイプまたはフォーマットを挙げてください。それぞれについて、現在、デフォルトのノードポリシーによって標準と見なされているかどうかも記載してください。
6まとめる構造的な複雑さに基づき、9つを6つのカテゴリーに分類してください:シンプルな鍵ハッシュ、ラップされたスクリプト、ネイティブウィットネス、複雑なマルチパーティ、データ埋め込み、レガシー/実験的。
3絞り込む6つのグループを、ノードがこれらの特定の構造に標準性の制限を課す3つの根本的な理由に絞り込んでください。
1結晶化するローカルポリシーの違いによって、コンセンサス上は有効でも中継されないトランザクションが、どのようにしてマイナーへ直接届くようになるのかを1文で説明してください。

事実確認

日付、数字、主張は、下記に記載された公表資料と照合して確認しました。

インタラクティブ版で開く →

EN PT ES ZH KO RU DE FR MS