Gloria Zhao は Bitcoin Core の開発者で、BIP 331 と BIP 431 の著者です。各ノードが未承認の取引を一時的に保存する mempool と、取引を受け入れて中継するルールを扱っています。目立たない部分ですが、ノードがどの支払いを知り、他へ伝えるかを左右します。その開発には、コードを書くことに加え、丁寧なレビューや悪用を防ぐ工夫が欠かせません。
Gloria Zhao は 2021 年 1 月 4 日、Brink 初のフェローとして参加しました。2022 年には Bitcoin Core のメンテナーとなり、ソースコードや開発手順の保守を担う一員になりました。特定のソフトウェアを支える役割であり、Bitcoin 全体の責任者への就任ではありません。今回の改訂で確認した Brink の過去の参加者紹介では、元メンテナーと記されています。経歴を読む際には日付が重要です。過去の就任記事だけでは、現在も同じ役職にあるとはいえません。 [1] [2]
よいコードにも、他の人による確認が必要です。Zhao は Bitcoin Core PR Review Club に関わり、新しい貢献者が変更案を読み、その影響を考える学びを支えました。PR、つまり pull request は、変更をプロジェクトに取り込んでもらうための提案です。クラブでは解決しようとする問題や確認方法を学びますが、特定の PR の統合を実現することが主目的ではありません。議論は学習と準備の場であり、コードやリリースが自動的に承認されるわけではありません。 [2] [3]
Mempool はネットワーク全体で共有する単一の待ち行列ではありません。各ノードは、手数料や過負荷への対策などを考慮し、未承認の取引を受け入れて中継するか判断します。これはローカルなポリシーで、ブロックの有効性を検証するコンセンサスルールとは異なります。Zhao は、利用者によるソフトウェアの選択を重視する 2025 年 6 月 6 日の開発者声明に署名しました。開発者は別のポリシーを提案できますが、署名やリポジトリの管理権限だけで、他の人のノードを書き換えることはできません。 [4]
取引は、まだ承認されていない別の取引から資金を使うことがあります。先の取引を親、それに依存する取引を子と呼びます。Zhao の BIP 331 が提案する Package Relay は、関連取引をパッケージとして伝える仕組みです。ノードは sendpackages で対応を確認し、必要な祖先取引の情報を得てから実際の取引データを取得します。欠けた取引を一つずつ探す手間を減らす狙いです。文書の状態は Draft、つまり草案です。文書の存在だけで、ネットワーク全体への完全な導入を意味するわけではありません。 [5]
手数料が低すぎる未承認の支払いを受け取ったとします。その出力を使えるなら、より高い手数料を付けた後続の取引を作れます。これが CPFP、Child Pays for Parent です。マイナーは子の手数料を得るために親も含める必要があるので、まとめて採算を判断できます。ただし、親を知らないノードは通常、子だけを受け入れられません。BIP 331 はこうした中継上の障害を扱います。高い手数料でも、有効な署名や入力の代わりにはならず、期限までの承認を保証もしません。 [5]
Bitcoin Core 28.0 は、親と子がそれぞれ一つの限定的な 1P1C の手順を導入しました。既存の P2P 通信、つまりノード同士の直接のやり取りを使い、適切な取引を組み合わせて評価できます。具体的な改善ですが、BIP 331 の完全な導入ではありません。リリースノートは、このネットワーク上の手順では複数の未承認の親を持つ子に対応せず、攻撃下での信頼性もまだ十分ではないと明記しています。中継に依存するウォレットを作るなら、リリースの限定的な機能と広い提案を区別する必要があります。 [5] [6]
攻撃者は mempool の制限を利用し、取引の置き換えや手数料の引き上げを妨げることがあります。これを pinning と呼びます。TRUC ポリシーは、承認前の取引同士の依存関係を制限し、受け入れや置き換えを判断しやすくします。Bitcoin Core 28.0 は nVersion=3 の取引にこの仕組みを導入しました。Zhao の BIP 431 は、その方法を Draft 状態の情報提供文書として記述しています。未承認の祖先や子孫を制限することは役立ちますが、保護の効果は他のノードによる採用にも左右されます。あらゆる pinning を防ぐ保証でも、時間どおりに採掘される約束でもありません。 [6] [7]
アプリケーションは submitpackage で自分のノードへパッケージを渡せます。Bitcoin Core 28.0 の文書によると、ノードと通信する RPC インターフェースのこのコマンドは、コンセンサスルールと mempool ポリシーの両方を検査します。パッケージの一部が失敗しても、検査を通過した取引は受け入れられる場合があります。したがって、エラーが全体の結果を取り消すとは限りません。全体の package_msg と個々の tx-results の両方を読む必要があります。ローカルで成功しても、パッケージがネットワーク全体に届いたことや、取引がブロックに入ったことは証明できません。 [8]
理解を深めるには、この項目とあわせて次もお読みください Mike Hearn, Mempool, Package Relay. 次の項目からも参照されています Package Relay, Mike Hearn, Sergio Demian Lerner.