Reading text-only. View on full site →

自分のノードが拒めるもの

2026-10-15 · articles · ja

Bitcoin Core 30 は 11 年続いた OP_RETURN の 80 バイト既定上限を事実上なくし、反対側は Knots に移ってソフトフォークまで試みた。ポリシーとコンセンサスという二つの層の違い、双方の主張でそれぞれ正しい部分、BIP-110 のチェーン分岐とその後のハードフォーク、いまブロックに実際に入っているデータの量、そしてノード運営者が選べるものと選べないものを整理する。


2026 年 8 月 8 日 19 時 35 分(UTC)、高さ 961,632 のブロックが採掘された。ありふれたブロックだった。ところがこのブロックを受け取ったノードの一部は、それを拒否した。ブロックヘッダーの決められたシグナルビットが立っていないという理由だった。拒否したノードは自分たちの側でビットを立てたブロックが出るのを待ち、そのチェーンは数ブロックで止まったも同然になった。二日後、BIP リポジトリの編集者はその提案のステータスを Closed に変え、こう書いた。新しいチェーンに分岐し、停止した。

分かれていったのは、BIP-110 というソフトフォークを有効にした Bitcoin Knots のノードだった。発端は一つの設定値、OP_RETURN 出力に載せられるデータの既定上限 80 バイトである。

出力を一つ捨てる方法

ビットコイン取引の出力は、ふつう誰かが後で使えるお金だ。出力スクリプトが錠で、その条件を満たした者がコインを持っていく。スクリプト言語の OP_RETURN は、この構造をわざと壊す。スクリプトがこの命令に出会うとその場で失敗するので、OP_RETURN で始まる出力は誰にも使えない。使えないことが証明できるので、ノードはこの出力を UTXO セット、つまりまだ使われていないコインの一覧に入れなくてよい。金額はふつう 0 で、命令の後ろのバイトはそのままブロックチェーンに残るデータになる。

この仕組みが生まれたのは、データを締め出せなかったからだ。2014 年以前にも、人々はブロックチェーンに画像や文書を入れていた。偽のアドレスに少額を送り、アドレスの位置にデータを書く方法である。そうした出力は誰にも使えないが、ノードにはそれを証明する手段がないので、UTXO セットに永遠に残る。すべてのフルノードが手元に置いておかなければならない一覧が、ゴミで膨らんでいく。

2014 年 3 月 19 日の Bitcoin Core 0.9.0 が、初めて OP_RETURN 出力を標準として中継した。リリースノートは誤解を避けるために一段落を割いている。

This change is not an endorsement of storing data in the blockchain. The OP_RETURN change creates a provably-prunable output, to avoid data storage schemes - some of which were already deployed - that were storing arbitrary data such as images as forever-unspendable TX outputs, bloating bitcoin's UTXO database.

この変更はブロックチェーンへのデータ保存を認めるものではなく、すでに使われていた永遠に使えない出力の代わりに、削除してよい出力を用意するものだという意味だ。ノートは続けて、ブロックチェーンに任意のデータを保存するのは依然として悪い考えだと書いている。上限は最初 80 バイトでマージされ、リリース直前に 40 バイトに減り、0.11.0(2015 年)で再び 80 バイトになった。0.12.0(2016 年)からは出力スクリプト全体を基準に、80 バイトに命令の数バイトを足した 83 バイトで測るようになった。

その間の 0.10.0(2015 年)で設定が二つ加わった。OP_RETURN の中継そのものを止める -datacarrier と、サイズ上限を変える -datacarriersize だ。二つを書いたのは Luke Dashjr だった。2014 年の彼のプルリクエストの説明は短い。マイナーが制御したがっているもののようだ、というものだ。11 年後、このオプションが論争のただ中に立つことになる。

拒むルールと受け入れるルール

この論争を読むには、まずノードが持つルールが二層だと知る必要がある。

下の層はコンセンサスルールだ。ブロックが有効かどうかを決める。2,100 万枚の上限、署名検証、ブロックウェイトの上限などである。コンセンサスに反したブロックはすべてのノードが拒否し、このルールを変えるにはソフトフォークかハードフォークが要る。

上の層はポリシー、よく標準性(standardness)と呼ばれるルールだ。まだブロックに入っていない取引を自分の mempool に受け入れるか、隣のノードに渡すかを決める。最低手数料率、取引サイズ、そして OP_RETURN のサイズがここに属する。ポリシーはノードごとに違ってよく、変えるのに誰の同意も要らない。

肝心なのは、OP_RETURN のサイズにコンセンサス上の上限が一度もなかったことだ。80 バイトを超える OP_RETURN を含むブロックも、最初から有効だった。80 バイトの上限は「自分の mempool に入れず、他に渡さない」という意味にすぎず、マイナーがその取引をブロックに入れれば、すべてのノードはそのブロックを受け入れて保存した。ポリシーは取引がマイナーに届く道を狭めることはできても、採掘された後の運命は変えられない。

2025 年春の出来事

2025 年 4 月 17 日、Antoine Poinsot がビットコイン開発者メーリングリストに、OP_RETURN の標準性制限を緩めようという投稿をした。きっかけは Citrea というプロジェクトのブリッジだった。このブリッジは 80 バイトでは足りないデータをビットコインに残す必要があり、使えない Taproot 出力にデータを分けて載せていた。0.9.0 が防ごうとしたまさにその方法、UTXO セットを永遠に膨らませる方法に戻ったわけだ。Poinsot の論理はこうだった。上限は有用な活動を止められず、データをより有害な場所に押しやるだけだ。

十日後、Peter Todd が上限と設定オプションを丸ごと消すプルリクエストを出した。彼は、この上限は簡単に回避されると書いた。MARA の Slipstream のように取引をマイナーへ直接送るサービスがあり、上限なしで中継する Libre Relay のようなフォークもある、と。この PR はオプションを残そうという意見がまとまり、5 月 12 日にマージされずに閉じられた。代わりに Greg Sanders の別の PR が 6 月 9 日にマージされた。オプションは残しつつ、既定値を事実上無制限に引き上げる案である。

その間の 6 月 6 日、Bitcoin Core の貢献者 31 人が中継ポリシーに関する共同声明を出した。

Knowingly refusing to relay transactions that miners would include in blocks anyway forces users into alternate communication channels

マイナーがどうせブロックに入れる取引を、知りながら中継しないことは、利用者を別の通信経路に追いやるという意味だ。声明は、これが非金融的なデータ利用を支持したり容認したりするものではないと明記した。0.9.0 のリリースノートと同じ但し書きである。

オプションの行方はもう一度揺れた。マージされた PR は二つのオプションを廃止予定(deprecated)としたが、これがノード運営者の選択肢そのものをなくす動きと受け取られ、反発を強めた。9 月 30 日に廃止予定の表示を取り下げる PR がマージされ、この修正はリリース版にも入った。

2025 年 10 月 10 日、Bitcoin Core 30.0 が出た。リリースノートの該当箇所はこうだ。

-datacarriersize is increased to 100,000 by default, which effectively uncaps the limit (as the maximum transaction size limit will be hit first). It can be overridden with -datacarriersize=83 to revert to the limit enforced in previous versions.

既定値が 100,000 バイトに上がり、取引サイズの上限に先に当たるので事実上上限がなくなること、そして -datacarriersize=83 を指定すれば以前の上限に戻ることを述べている。一つの取引に OP_RETURN 出力を複数置くこともこのとき許可され、上限はすべての OP_RETURN 出力の合計に適用される。

双方がそれぞれ正しいこと

Core 側の主張は、ほとんどがコスト計算だ。SegWit 以降、ウィットネスのデータは重さを 4 分の 1 に数える。Ordinals のインスクリプションがウィットネスにデータを入れるのはそのためだ。OP_RETURN は出力にあるので、同じデータを入れるのに 4 倍かかる。上限を外してもデータを入れる最も安い方法は依然としてウィットネスで、上限を守ってもその道はふさがらない。上限が防ぐのは OP_RETURN を使わざるを得ない場合だけで、そうした利用者は偽の公開鍵や使えない出力に移って UTXO セットを膨らませる。また、採掘される取引をノードが前もって持っていないと損失が出る。新しいブロックが届くと、ノードは mempool にすでにある取引を除いた残りだけを受け取ってブロックを組み立て直す(compact block)ので、知らない取引が多いほど伝播が遅くなる。手数料の推定も実際のブロックとずれる。マイナーへの直接送信の経路が大きくなれば、それを運営できる大手マイナーに有利になる。

Knots 側の主張は原則から始まる。Luke Dashjr は Poinsot の最初の投稿に "utter insanity" と返した。直すべきはバグであって、悪用を受け入れることではないというのだ。データの埋め込みが実際に回避されているとしても、それを標準として認めれば、ビットコインをデータ保存に使ってよいという合図になる。ノードを動かす人には、自分のディスクに保存され自分の回線を通るものを選ぶ権利がある。違法なコンテンツを保存させられる法的リスクも挙げられた。これに対しては、すでにウィットネスや有料の回避経路で可能なことで上限とは関係がないという反論と、法律家が誇張された懸念だと見ているという報道が並んだ。

二つの主張は別の問いに答えている。Core は「上限はデータを減らすか」と問い、答えはほとんど減らさない、だった。Knots は「ビットコインはデータを歓迎するか」と問い、答えは歓迎しない、だった。Ordinals の論争がそうだったように、双方は同じ事実を見て互いを無責任だと呼んだ。

ポリシーからコンセンサスへ

Core 30 が出る頃、Knots を動かす公開ノードの比率は大きく上がっていた。集計サイトは 2025 年 9 月の一時期、20% を超えたと報告している。しかしノードの数は、ブロックに何が入るかを決められない。それを決めるのはマイナーで、マイナーにはポリシーのフィルターを迂回する道が開いている。ポリシーで負ける戦いをコンセンサスに移そうという提案が出てきたのは、そのためだ。

BIP-110「Reduced Data Temporary Softfork」は 2025 年 12 月に番号を得た。1 年間に限ってコンセンサスルールを狭める案である。新しい出力スクリプトは 34 バイトまで(OP_RETURN は 83 バイトまで)、データを積む命令とウィットネス項目は 256 バイトまでに制限し、Taproot の annex と OP_SUCCESS、スクリプト内での OP_IF の実行を無効にする。有効化以前に作られたコインはこのルールの対象外だ。文書自身、この制限が BitVM のような契約を難しくしうること、そうした用途はソフトフォークの終了まで待たなければならないかもしれないことを書いている。

Knots は 2026 年 5 月 9 日の 29.3 版にこのソフトフォークを入れた。設定で有効にする方式で、これを除いた版も別に出した。有効化は一定期間シグナルを集め、義務期間に入るとシグナルのないブロックを拒否する方式だった。義務期間直前の 2,016 ブロックのうち、シグナルを入れたブロックは 51 個、約 2.5% で、すべて OCEAN プールが掘ったものだった。義務期間の最初のブロックが、冒頭の 961,632 である。ハッシュパワーの大半が従わないソフトフォークは多数派のチェーンを変えられず、それを強制するノードだけが離れていく。

Knots の次の版は、そこからさらに一歩進んだ。2026 年 9 月 2 日に出た 29.4.1 のリリースノートは、8 月 8 日の出来事をこう描いている。

On August 8th, most former miners abandoned Bitcoin en masse and together with other bad actors have been falsely promoting a new altcoin as "Bitcoin".

大半のマイナーがビットコインを捨て、新しいアルトコインを「ビットコイン」と偽って宣伝している、というのだ。この版はプルーフ・オブ・ワークのアルゴリズムを SHA-256 から BLAKE2b に変えるハードフォークを含み、同じ時点で BIP-110 のルールを有効にした。既存の採掘機ではこのチェーンを掘れなくしたわけだ。ノートは、これが 13 年ぶりの後方互換性のない変更だと書いている。どちらが去ったのかという問いに双方は正反対の答えを出すが、事実関係は一つだ。この版を動かすノードは、いまや別のチェーンを検証している。

いまブロックに入っているもの

2026 年 10 月 14 日朝から 15 日朝まで(UTC)に採掘されたブロック 144 個(971,383〜971,526)を自分で解析して数えると、全取引 694,840 件のうち 83 バイトを超える OP_RETURN を持つ取引は 877 件だった。最大は 15,507 バイト、合計で約 727KB である。OP_RETURN のバイトは割引なしで 1 バイト 4 ウェイト単位と数えるので、一日のブロック空間(ブロックあたり 400 万ウェイト単位)の 0.5% 余りだ。プール別では Foundry 332 件、F2Pool 237 件、ViaBTC 129 件、SpiderPool 80 件、MARA 67 件で、AntPool は 31 ブロックを掘る間 0 件だった。大きな OP_RETURN を受け入れるかどうかはプールごとに違う。これもポリシーである。

ノード側の数字は数え方で変わる。同じ日、coin.dance は接続を受け付ける公開ノード 25,453 台のうち Knots を 4,074 台(16.0%)と集計し、Luke Dashjr が運営する集計は接続を受け付けないノードの推定まで含めて約 105,000 台中 12.8% とした。その Knots ノードのうち BLAKE2b ハードフォーク版を動かすものをビットコインのノードと数えるかは、解釈の問題だ。Bitcoin Core の最新版は 2026 年 7 月 8 日の 31.1 で、31.0 に OP_RETURN ポリシーの変更はなかった。

自分のノードが選べるもの

ノードを自分で動かす人にとって、この話が残すものは具体的だ。

Core 30 以降も、設定ファイルに -datacarriersize=83 と書けば以前の上限に戻る。廃止予定の表示が取り下げられたので、当分なくなるオプションでもない。この設定がすることは正確に二つだ。大きな OP_RETURN 取引を自分の mempool に入れず、隣に渡さない。その取引が別の経路で採掘されれば、自分のノードはそのブロックを受け取り、検証し、保存する。ブロックが届いたときにその取引を新たにダウンロードしなければならないので、ブロックの組み立て直しが少し遅くなり、手数料の推定も実際のブロックと少しずれる。ディスクが心配なら、上限よりもプルーニング(prune)が直接の手段だ。古いブロックを削除して、ディスク使用量を決めたサイズ以下に抑える。

ポリシーは自分の mempool を守り、コンセンサスは全員の台帳を守る。2014 年に Luke Dashjr が書いたオプションは各自が自分の mempool を選べるようにし、2025 年に Core が変えたのはそのオプションの既定値だった。2026 年の BIP-110 はその選択を全員に強制しようとし、そのためにはハッシュパワーがついてくる必要があった。ついてこなかったとき、残った道は別のチェーンだけだった。ブロックサイズ戦争のときと同じく、ビットコインのルールは誰かが決めて変わるのではなく、ノードとマイナーと利用者がそれぞれ何を動かすかで決まる。自分のノードが拒めるのは、自分のノードに入ってくるものだけだ。

Read on the full site: https://learn.txid.uk/ja/articles/op-return-debate/