「目撃者割引:なぜ一部のバイトは他よりも安いのか?」

「目撃者割引:なぜ一部のバイトは他と比べて安いのか?」

今年はビットコインブロック内で利用可能な限られたスペースの需要が急増し、オンチェーンの取引手数料が上昇しています。需要の多くは、銘刻を明らかにする取引に関するものです。これらの銘刻の内容は、ビットコイン取引の証人データ1の一部として公開されます。この証人データ1は、他の取引データのコストの四分の一の割引が適用されます。なぜこれらの銘刻に割引が適用されるのでしょうか?証人ディスカウントをソフトフォークで除外すべきでしょうか?

なぜ一部のバイトは他のバイトよりも安価なのでしょうか?

お金、特にビットコインは、人間のインセンティブに基づいて運営されています。ビットコインは、ネイティブのビットコイントークンを使用して、特定の取引を採用するためにマイナーに報酬を支払うことで、マイナーとトランザクターのインセンティブを一致させています。しかし、ノードランナーとマイナー、トランザクターとのインセンティブの一致は保証されていませんし、送信者と受信者の間のインセンティブの一致もありません。

これまでにビットコインのインセンティブの一致を向上させるために3つの主要な改善が行われています:

1. ブロックサイズの制限

2. 複雑なスクリプトのコストを送信者から受信者に移す(P2SH)

3. ノードランナーとトランザクターのデータのコストを調整する(SegWit)

ブロックサイズの制限

トランザクターは多くの取引を行いたいと思っており、マイナーは多くの取引手数料を集めたいと思っています。しかし、ノードランナーはその取引データを中継し、検証し、保存する必要があり、そのためにマイナーと同様に報酬を受け取ることはできません。ビットコインの歴史の初期において、サトシはこの問題に取り組むために固定のブロックサイズ制限を追加しました(ノードによって強制される)。制限は1メガバイトのブロックあたりであり、ノードがダウンロードと検証する必要があるデータ量に上限を設けました。当時、サトシは「必要があれば後で変更を段階的に導入することもできる」と書いていました。後に制限を増やすためのパッチについて言及する際、サトシは「このパッチを使用しないでください、それはネットワークと非互換になります」と述べました。つまり、ブロックサイズの制限の増加はハードフォークの変更であり、ソフトフォークよりもさらに調整が必要です。それ以降の数年間、ビットコインは互換性のないハードフォークの変更を避け、1メガバイトのブロックサイズ制限を維持し続けることを意味しました。

送信者から受信者への複雑なスクリプトのコストの移行

ビットコインはロックスクリプトによって保護されているため、マルチシグを含む高度なスクリプトでロックすることが常に可能でした。元の設計では、ビットコインの取引の送信者は受信者の完全なロックスクリプトを自分の取引に配置し、そのロックスクリプトをブロックに含めるための手数料を支払いました。開発者たちは、手数料が上昇すると、より大きなロックスクリプトを使用するユーザーに対して支払いたいと思う送信者が減少する可能性があると認識しました。また、これらの複雑なロックスクリプトはアドレスへのエンコーディングやQRコードなどの低帯域幅のメカニズムを介した共有にも問題を引き起こしました。

この問題を解決するために、P2SH(ペイツースクリプトハッシュ)がビットコインにソフトフォークとして追加されました。このフォークのルールでは、取引の出力に受信者の完全なロックスクリプトを配置する代わりに、送信者はそれのハッシュを含めるだけです。受信者が必ずその出力を使う際には、ロック対象のスクリプトのハッシュと合致するかを検証するため、スペンドトランザクションに完全なスクリプトを含めます。この変更により、どのようなサイズの引き換えスクリプトも、固定長のロックスクリプトで表現することができ、送信者は支出条件に基づいて受信者を差別する必要(または能力)がなくなりました。

ノードランナーとトランザクターのデータのコストの調整

ノードがビットコインのトランザクションに行う最も基本的な検証は、使えるビットコイン(未使用取引出力、UTXO)が実際に存在するかどうかを確認することです。これを行うために、各ノードは各単位の未使用取引出力のインデックスを維持します。このインデックスが大きくなるほど、ノードの運営コストと将来のトランザクションの検証コストも増加します。その結果、このインデックスのサイズを増やす取引(出力の数が入力の数よりも大きい)のコストは、同じバイト数の取引よりも時間の経過とともに増加します。

ほとんどのビットコインのアンロックスクリプトで最も大きな部分を占めるのは暗号署名です。これらの署名は対応する公開鍵の約2倍のサイズです。そのため、アンロックスクリプト(P2SHを使用しない場合でも)はロックスクリプトよりも大きくなります。

消費するUTXOと作成するUTXOの間でかなりの差があるため、ノードランナーとトランザクターの間にはインセンティブの対立が生じます。トランザクターは小さなUTXOを使うことに消極的です(特に手数料の高い時期には)、代わりに大きなUTXOを使って小銭のUTXOを作成します。一方で、ノードランナーはすべてのトランザクションの検証コストが増加するため、この小さなUTXOの蓄積のコストを負担します。

奇妙なことに、過去のブロックチェーン内でトランザクションによって使われた各UTXOが対応するアンロッキングスクリプトによって満たされていることを検証することは実は重要ではありません。実際、デフォルトのビットコインコア 26.xを実行しているビットコインノードは、ブロック 804,000(2023年8月19日)以前のトランザクションの完全なロックスクリプトの実行を検証しません。

上記のすべてのことから、ビットコインノードにはブロックチェーンのさまざまな部分によって異なるコストが課せられることがわかります。各トランザクションの影響を決定するために必要なデータは、ジェネシスブロックから同期する各ノードによって検証される必要があります。長期的には、トランザクションのアウトプットの方がインプットよりもコストがかかります(特にそれらが長寿命である場合)、そしてウィットネスデータの大部分は、最新のトランザクション以外ではチェックされません。

セグリゲーテッドウィットネスへの移行

セグリゲーテッドウィットネス(SegWit)のソフトフォークは、これまでに行われた最も野心的なビットコインの変更です。この変更の最大の動機は、ビットコインにおける長年の問題であるTXID4の操作可能性を修正することでした。この操作可能性を修正するために、アンロッキングスクリプトは新しく作成された「ウィットネス」で置き換えられます。これにより、トランザクションの影響を変えずに第三者によって頻繁に変更される認証データを(例:ライトニングなどに依存する)TXIDから削除することが可能になります。

元のトランザクション構造から認証データが移動したため、それはもはや1,000,000バイトのブロック制限にカウントされません。新しい制限が必要です。その当時、セグリゲーテッドウィットネスデータの制限についてはさまざまなアプローチが議論されました:別々のウィットネスバイトの制限6、< 1,000,000バイトの組み合わせ制限7、または重み付けの組み合わせ制限。最終的には、重み付けの組み合わせ制限が選ばれました。セグリゲーテッドウィットネスデータは1ユニット、トランザクションデータは4ユニット、4,000,000のウェイト制限を持つブロックです。各ウェイトユニットは手数料計算のために1/4のバーチャルバイト(vByte)とみなされます。

なぜこれらのウェイトが必要なのでしょうか?セグリゲーテッドウィットネスの有無に関係なく、トランザクションのインプットとアウトプットのコストを見てみましょう:

タイプ8 アウトプットバイト数 インプットバイト数 ウィットネスバイト数 インプットvByte
P2PK 44 112 0 112
Bare 2-of-3 106 186 0 186
P2PKH 34 146 0 146
P2SH(2-of-3) 32 293 0 293
P2WPKH 31 41 107 67.75
P2WSH(2-of-3) 43 41 252 104

このテーブルから最初に注目すべき点は、ウィットネススクリプトの種類(P2WPKH、P2WSH)が入力と出力のバイト数がほとんど同じであることです(それぞれフルのvByteが請求されます)。ウィットネススクリプトの利用者は、支出を許可するためのデータに対して1/4のvByteの料金が請求されますが、そのほとんどは最新のトランザクション以外では検証されませんし、それ自体がUTXOインデックスに継続的なコストを生じさせるものではありません。ここでもう一つ注目すべき点は、より安全な2-of-3マルチシグを利用する場合のコストが、147 vByteから36.25 vByteに削減されていることです。

タプルートとインスクリプションは全てを変える(または何も変えない)

まず言っておきますが、ビットコインは人間のインセンティブに乗っています。そしてここでは、ネットワークを利用する当事者間のインセンティブの整合性を改善するために、ビットコインに何度も変更が加えられてきたことがわかります。

タプルート自体は、セグリゲーテッドウィットネスを使ってビットコインをロックする「ただの」代替手法です。これによってインセンティブが大幅に変わるわけではありません。タプルートと共に行われた変更の一つは、スクリプトサイズに関する特定の制限を削除することでした。これはビットコインスクリプトの解析ツールの複雑さを減らすために行われましたし、異なるタイプのデータの相対的なコストを認識するためのものでもありました。これらの制限を削除することで、インスクリプションは以前よりも単純になりましたが、ネットワークのインセンティブ構造を根本的に変えるものではありませんでした。

話を本題に戻しましょう。インスクリプションはウィットネスで公開されるため、インスクリプションデータのバイト数毎に1/4のvByteが請求されます。これはウィットネスのディスカウントの乱用でしょうか?真実は、インスクリプションデータはネットワーク上のノードにとって検証するための最も安価なデータの一つです。インスクリプションにより使用されるスクリプト構造は、インスクリプションデータの実行を明示的にスキップします。そのため、インスクリプションデータに対して行われるのは単一のハッシュチェック(公開されたインスクリプションがインスクライバが計画したものであることを確認する)のみです。このデータはノードによって一度ハッシュ化され、その後は二度と見られません。これは非常に低い計算コストを持っています(等価なサイズのマルチシグスクリプトと比べて桁違いに低いコストです)。

でも、インスクリプションによって手数料が上がり、他のユーザーが排除されてしまう。

そうです!現在ビットコインネットワークとのやり取りに利用可能なソフトウェアにより、インスクリプションを作成する方が他のトランザクションを作成するよりも経済的なインセンティブが大きいのです。

これはビットコイントランザクションの経済的密度を高める価値を鮮明に浮かび上がらせます。ライトニングネットワークは、数百、数千、または数百万の経済トランザクションを1つのビットコイントランザクションに詰め込むことで、これに大きく貢献しています。トランザクションのバイト毎の経済的密度が高ければ高いほど、その経済活動に支払われる手数料は低くなります。ビットコイントランザクションの経済的密度が増加するにつれて、ブロックスペースの他の使用方法は価格競争から取り残されてしまうことがあります。

インスクリプションが驚くほどどれだけ費用がかかるのかもしれませんが、もしもMuSig2FROSTといったオフチェーンのマルチシグプロトコルやアダプタシグネチャが普及する場合、ウィットネスのディスカウントを減らすか廃止するのは理にかなっているかもしれません。これらのプロトコルによって、通常は大きな支出条件が単一の署名によって表現されることができるようになります。これに加えてタプルートの効率的なキーパス支出と組み合わせることで、ほぼ任意の複雑な条件を持つインプットのコストをわずか105バイトまで削減できるかもしれません。

まとめ

インスクリプションによる高い手数料への対応は、ビットコインの歴史における他の「天が落ちる」とされるシナリオに対する対応と同じです。ゆっくりと築いていくことです。ビットコイントランザクションの経済的密度を高めるために、ライトニングウォレットの改良からArk離散対数契約など、私たちが行えることはたくさんあります。ウィットネスのディスカウントを(早まって)削除したり、タプルートを取り消したり、同様の逆効果な行動を取ることは、現在のビットコイントランザクションの経済的密度を減少させ、問題を悪化させるだけです。

謙虚であり、satsを積み重ねて、築いていきましょう。

脚注

  1. ウィットネスという用語は、ビットコインに暗号技術のジャーゴンから採用されたもので、効率的に暗号的な証明を検証するために必要なデータを指します。BIP141では、「トランザクションの有効性を確認するために必要なデータであり、トランザクションの効果を決定するためには必要ないデータ」と定義されています。暗号学者たちは、効率的にコンポーネントの配置を検証するために使用されるウィットネスマークの製造から用語を取り入れた可能性があります。
  2. Utreexoプロジェクトは、一部のビットコインノードがUTXOの包含ルートを効率的に蓄積し、それらのUTXOの支出と共にそれらの包含パスを受け取ることを可能にすることで、これを変えることを目指しています。もしビットコインの一般的な使用方法となれば、より多くのUTXOのコストはノードからそのUTXOの保持者へ移ることになります。
  3. ZeroSyncプロジェクトは、一部のノードが特定のコンテキストでこれを変えることを目指しています。
  4. トランザクションID:セグウィット以前のネットワーク形式のトランザクションの逆バイト順ダブルSHA256です。
  5. 同じ入力と出力を持

    これはブランドン・ブラックによるゲスト記事です。表明された意見は、BTC IncやBitcoin Magazineの意見と必ずしも一致するわけではありません。