用語集 / 開発者向けリファレンス
OP_RETURN
- OP_RETURNとは?
- OP_RETURNは、トランザクションのアウトプットを支払い不能であることが証明できる形にするオペコードであり、これにより有効なコインの集合を膨らませることなく、少量の任意のデータをブロックチェーンに書き込めます。
スクリプトが0x6aで始まるアウトプットは誰も使うことができないため、フルノードは常時保持しておく必要のあるUTXOセットからそのアウトプットを除外します。Bitcoin Core 0.9.0は2014年3月に40バイトの許容量でこうしたアウトプットを標準化し、0.11.0でペイロードを80バイトへ引き上げました。購入して保有するだけなら、作成する必要は決してありませんが、手数料市場を通じて他人の分を負担することになります。
仕組み
OP_RETURNは到達した瞬間にスクリプトを失敗させます。そのようにロックされたアウトプットを満たすことはできず、鍵を持つ者がいないハッシュへコインを送るバーンアドレスとは異なり、その不可能性は単に高い確率ではなくソフトウェアから見て明らかです。この可視性こそが要点です。ノードは支出可能なすべてのアウトプットのインデックスを維持しており、死んでいることが証明できるアウトプットはそこに入る必要がありません。
これを構築するウォレットはその値をゼロに設定し、オペコードの後ろに、通常は1回のプッシュとしてペイロードを置きます。その結果、誰かへ支払う通常のアウトプットと、バイトを運び金銭を伴わない2つ目のアウトプットを持つトランザクションになります。
このオペコードの最初のバージョンは大失敗でした。2010年、入力スクリプトと出力スクリプトは連結して実行され、OP_RETURNは成功を報告して評価を終了したため、支払者はこれを末尾に追加して他人に属するコインを持ち去ることができました。その年の修正は実行の2つの部分を分離すると同時に、オペコードを無条件の失敗へと変えました。データキャリアとしての現代的な用途は4年後に訪れました。開発者がすでに、ノードが決して剪定できない偽の公開鍵にデータを詰め込んでいた頃です。
その後、リレーの制限が続きましたが、そのいずれもコンセンサスルールではありませんでした。Bitcoin Coreはバージョン0.9.0で標準の40バイトのキャリアを出荷し、0.11.0(2015年7月)で許容量を80バイトに倍増させ、1トランザクションにつきそのようなアウトプットを1つまで許可しました。バージョン30.0は、長く辛辣な公開論争の末に既定のサイズ上限と1アウトプットのルールを撤廃しました。その理由は、制限が容易に迂回され、データをより悪い場所へ押しやっていたというものでした。Bitcoin Knotsはより厳格な既定値を維持し、ノードポリシーのこの分裂は今日のビットコインにおける生きた意見対立の1つです。
ビットコインを購入するときにこれが重要な理由
OP_RETURNアウトプットの作成を求められることは決してなく、あるウェブサイトがビットコインをそこへ送れと言うなら、それは詐欺です。送る先が何もありません。一部の取引所やチェーンはメモ欄を使いますが、ビットコインの出金にそれが必要なことは決してありません。
あなたに届くのは手数料です。オンチェーンに書き込まれたデータは、同じ限られたスペースをめぐってあなたの出金と競合し、その影響は測定できます。2024年4月20日にマイニングされたブロック840,000は、手数料としておよそ37.6BTCを集め、これまでのあらゆるブロックの中で最高額となりました。新しいトークンプロトコルがまさにその高さで有効化され、何千人もの人がそこへ書き込もうと競ったためです。その午後にたまたま取引所から出金した人は、その特権のために相場の数倍を支払いました。
防御策は憤ることではなくタイミングです。手数料は1週間のうちに桁が変わるほど振れるため、コインをまとめる、取引所から移す、緊急性のない送金を静かな週末に行うといったことの費用は、同じ送金をデータの殺到時にした場合のごく一部で済みます。手数料率をあなたの代わりに推測するのではなく、自分で設定できるウォレットは、まさにこの理由で優先する価値があります。ポリシーの問題について強く意見を持つなら、Bitcoin Coreの代わりにBitcoin Knotsを実行することが直接的な意思表示の方法です。リレーポリシーは各ノード運営者が個別に選ぶためです。
具体例:80バイトの費用
最大サイズのレガシーキャリアアウトプットは、回線上で92バイトです。ゼロに設定された値の8バイト、スクリプト長の1バイト、そしてオペコード、プッシュ命令、長さの1バイト、80バイトのペイロードからなる83バイトのスクリプトです。いずれもウィットネスデータではないため、各バイトが4つの重量単位として数えられ、368重量単位、すなわち92仮想バイトになります。仮想バイトあたり10サトシでは、トランザクションの残りを数える前の時点で920サトシです。
比較すると、通常のネイティブSegWitアウトプットは31バイト、すなわち31仮想バイトであるため、データアウトプットの費用は誰かへの支払いの3倍になります。データはかつて無料だったことはなく、手数料市場はビットコインが持つ唯一の割り当ての仕組みです。
OP_RETURN vsヌルデータトランザクション
OP_RETURNはオペコードであり、ヌルデータトランザクションとは、こうしたアウトプットが1つ現れたときにBitcoin Coreがトランザクションのパターン全体を呼ぶ名称です。ソフトウェアはデコードされたJSONでアウトプットの種類を"nulldata"として報告し、ブロックエクスプローラーが通常表示するのはこの文字列です。区別は小さいものですが、よくある誤読を防ぎます。ヌルデータトランザクションは金銭を動かさないトランザクションではありません。ほとんどの場合、誰かへも支払い、データは2つ目のアウトプットに乗って同行します。
OP_RETURN vsインスクリプション
インスクリプションはOP_RETURNをまったく使いません。これがビットコインのデータ保存をめぐる終わりのない混乱の源です。2023年1月に公開されたordinalsの仕組みは、決して実行されないTaprootスクリプトのブランチの中にコンテンツを隠し、そのブランチはウィットネスの中に存在します。そこでは各バイトが4ではなく1つの重量単位の費用で済みます。実際上の帰結は規模です。OP_RETURNのペイロードは10年間にわたりリレーポリシーによって80バイトに上限を設けられていましたが、1つのインスクリプションはバイトあたり4分の1の重量費用でブロック全体のサイズに近づくことができます。2024年4月に開始されたRunesは逆方向へ進み、プロトコルメッセージを意図的にOP_RETURNにエンコードしています。ビットコイン上のデータをめぐる2つの議論が、実際には2つの異なる仕組みについての議論であるのはそのためです。