先日、アメリカで上場もしている大手マイナーのMarathon (Marathon Digital Holdings: MARA)が不正なブロックを採掘してしまい、せっかくの運をドブに捨ててしまったことが話題になりました。

この出来事に関して、「マラソンによる攻撃なのか?」という誤解やなぜそんなことが起こるのかという疑問を目にしたので、今日はそれにお答えします。

・マイナーが採掘する「ブロックテンプレート」の作り方

・今回破ってしまったルールは非常に初歩的なもの

・公式の言い分は「収益を最適化する実験のコードにバグがあった」

・もったいない凡ミスを防ぐ方法

マイナーが採掘するブロックテンプレートの作り方

マイニングを行う際、一般的にはマイニングプールが所属するマイナーに採掘すべき「ブロックテンプレート」を配布します。

ブロックテンプレートとは採掘を目指すブロックの中身をおおかた決定したもので、トランザクションの順序やヘッダー内の各変数の多くが代入されています。まだ埋められていない部分を任意のデータに置き換えて少しずつブロックの中身を変化させていきながら、マイナーは大量のハッシュ計算を行います。

実はビットコインノード最大手のBitcoin Coreにもマイニング用の機能が含まれており、その1つにブロックテンプレート生成機能があります。Bitcoin Coreのノードを運用している方は誰でもgetblocktemplateというAPIを使って「手数料を最大化させる」というルールで自分のノードにテンプレートを生成させることができます。Bitcoin Coreは生成したテンプレートを検証するため、これをこのまま使えば問題は起こりません。

「手数料を最大化させるルール」…そう、ここがポイントです。場合によってはマイナーはBitcoin Coreが作るブロックテンプレートとは異なる条件に合ったブロックを作りたいかもしれません。例えばMEVが得られるトランザクションを「MEVで得られる収益を含めた」手数料金額として評価したり、ノードのネットワークを通さず直接提出されたトランザクションを含める場合などです。あるいは特定のUTXOはどれだけ手数料を積まれてもテンプレートに含めたくない場合、つまり検閲したいケースでしょうか。

MEVについては過去記事をご覧ください。

MEVはビットコインの脅威になりうるか?
この頃ビットコイン開発者の間ではドライブチェーンと呼ばれる技術の話題が(悪い意味で?)盛り上がっています。というのも、昔からドライブチェーン推しだった人たちが急に「ドライブチェーンを使えるようにするソフトフォークをしよう!」とSNSで積極的に主張しだしたためです。 これに対して技術的な中身をあまり把握せずに反論してボロが出てしまう開発者がいたり、支持者も反対者も不誠実なレトリックを応酬したりと泥沼化しています。ビットコインにおいて大きな変更を積極的に押し出していくのは反発を招きやすく、Jeremy Rubin氏のOP_CTVなども似たような議論が巻き起こり結局実現しませんでした。(その後、技…

「ノンスタンダードなトランザクション」とそれをマイナーに直接提出する方法については以下の記事で詳しく触れています。

Mempool.spaceの「トランザクションアクセラレーター」はマイニングやメモリプールにどういう影響を与えるのか
Bitcoin 2023カンファレンスではビッグな発表がいくつかありました。その中でも3本の指に入るものにmempool.spaceエクスプローラーを運営するMempool社が「トランザクションアクセラレーター」サービスの提供を開始するという発表がありました。 これはユーザーがMempool社に手数料を払うことで、Mempool社と提携したマイナーが任意のトランザクションを(トランザクション内で支払った手数料に関わらず)次のブロックに入れてくれる、というものです。 このサービスの存在意義について、RBFやCPFPといった方法でトランザクションの手数料を後から追加することができるのになぜ?と…

マイニングにおけるブラックリストUTXOの検閲については以下の記事で。おっと、ここにもMarathonが出てきましたね。

OFAC規制遵守マイニングのコスト
米国企業Marathon Digital Holdingsが運営するMara Poolというビットコインマイニングプールが、今月初旬に「OFAC規制遵守のブロック」を採掘したとして話題になりました。ビットコインに関して、「クリーンな電力で採掘されたビットコインしか買いたくない」など、仕組み上無理がある要望がなされることがありますが、マイニングプールが特定のトランザクションをあえて検閲することは必ずしも無理ではありません。今日はそれにどれくらいのコストがかかるのか、実際に行われているのかを見ていきましょう。 OFAC規制とは OFACとは米国の財務省外国資産管理室のことで、この米国政府機関は…

初歩的なルールを破ってしまった

カスタムのブロックテンプレートを生成する場合、誤って不正なブロックをマイナーに採掘させないように気をつける必要があります。なぜなら不正なブロックの採掘にどれだけエネルギーを使おうと当然のようにそれはネットワークに受け入れられず、骨折り損になるためです。

理想的にはカスタムのブロックテンプレートを生成した後にそのテンプレートを検証してから採掘開始すべきですが、今回はその検証ステップが不十分だったようでMarathonは「あるルール」を破るブロックを採掘してしまいました。

そのルールとは、互いに依存関係にあるトランザクションが同じブロックに入っている場合、時系列順に含まれる必要があることです。(A→B、B→Cのトランザクションが同じブロックにある場合、隣接する必要はありませんが含まれているのはこの順番である必要があります。)

ちなみに数日前にはTestnetでも同じ問題を起こしていたようで、カスタムのブロックテンプレート生成にバグがある状態でメインネットで採掘してしまったと推察されます。採掘報酬6.619 BTC (約2600万円)が白紙になる手痛いミスです。

公式発表で火消しを図る

このミスに対し、Marathonは比較的迅速に公式アカウントからツイートしました。

ただのミスだったのに一部のビットコイナーが「陰謀」を感じてしまっていたことに対して火消しを図るとともに、自社がミスしようがビットコインには影響ない!とポジティブに昇華させようとするツイートです。

ただテストネットで前日に6回も同じミスを犯していたようで、それに気づかずメインネットで無駄なことをしてしまったという意味でMarathonの技術的な評判には傷がついてしまったかもしれません。

凡ミスを防ぐには

Ordinal InscriptionsやBRC-20のように追加収益をもたらしてくれるプロトコルの流行や規制の懸念によってマイナーはかつてないほどカスタムのブロックテンプレートを生成するインセンティブがあるといえるでしょう。今回Marathonはどうしたらよかったのでしょうか。

本当はBitcoin Coreに「ブロックテンプレート検証機能」があれば今回のような凡ミスは防げました。しかしBitcoin Coreが生成したブロックテンプレートを自主的に検証するコードは内部的なものであり、それをフォークして再利用したり、カスタムのAPIにして利用するには割と高い技術力が必要になります。

これからはrust-bitcoinやBDKなどを利用した、ブロックテンプレートの検証に特化したオープンソースソフトウェアなどが出てくるかもしれません。というかその需要はあると思います。(競争力という面ではマイナーには企業秘密として内製化するインセンティブがあるのかもしれませんが。)

また、仮にそのようなソリューションがあっても検証が終わるまでの数秒間は「検証前のテンプレートで採掘」「空っぽのテンプレートで採掘」「Bitcoin Coreのデフォルトで採掘」といった選択肢があります。ブラックリストを気にするなら前者2つから選ぶことになりますが、事故が起こる確率を含めて期待値計算して不正ブロック採掘リスクを許容するか排除するか選ぶことになると思います。まあ本当は不正になりうる(検証が必要な)テンプレートを生成しないことが一番なんですけどね。

以上、Marathonが凡ミスで2600万円分のビットコインを入手し損ねた話でした。

余談ですが、Marathonは上場企業なので株を持っている方もいらっしゃると思います。発行済株式は約1.5億株なので、今回の出来事は1株1300円あたりでは0.16円くらいの損失でしょうか。Marathonの事業規模が伺えます。