Cardano のレイヤー2である Hydra の開発チームが、Mesh SDK を通じた預け入れが Hydra に反映されず、元のウォレットからも動かせなくなる不具合を修正しました。9月14〜20日の週次報告と、9月25日付の IOG の開発週報で明らかにされたものです。
原因は、最低額に満たない出力を自動で増額する処理が、出力に付く記録(datum)のほうを更新していなかったことでした。修正は送信前に預け入れを検証する形で入り、すでに滞った預け入れを手作業で回収するための道具も加わっています。何が起き、何が直り、何がまだ残っているのかを、一次資料に沿って整理します。
3時間たっても、どちらの側にも見えなかった預け入れ
発端は利用者からの報告です。Hydra の週次報告によると、ある利用者が Mesh SDK の incrementalCommitFunds を使い、すでに開いている Hydra ヘッドへ 2 つの UTxO を預け入れました。ところが 3 時間たっても、どちらもレイヤー2 側に反映されません。一方でレイヤー1 のウォレットからは 2 つとも消えており、預け入れ用のスクリプトのアドレスに、使えない状態で留まっていました(課題 #2871)。
「送ったのに届かず、手元にも戻らない」という状態です。資金はスクリプトのアドレスに残っていますが、通常の操作では取り出せない位置に置かれてしまいました。
増額したのに、記録は元のままだった
週次報告は、原因を coverFee という処理に特定しています。
Cardano では、ひとつの出力に最低限の ADA(min ADA)を載せる必要があります。預け入れる額がこの最低額に届かない場合、coverFee は出力の額を足して最低額まで引き上げます。ここまでは想定どおりの動きです。問題は、その出力に付いているインライン datum でした。datum には「何を預け入れたか」が記録されていますが、増額の後も元の値のまま残っていました。
Hydra のノードは、預け入れのトランザクションを見つけると、出力の実際の額と datum に書かれた額が一致するかを確かめます(observeDepositTx)。今回は両者が食い違っていたため、ノードはこの預け入れを正しいものとして扱わず、そもそも「観測しなかった」ことになります。結果として、預け入れはレイヤー2 に取り込まれないまま、スクリプトに残りました。
送る前に確かめ、滞った分は取り出せるようにする
修正(プルリクエスト #2873)は、報告が GitHub に上がった 9月12日から 3 日後の 9月15日(UTC)にマージされました。中身は 2 点です。
- 送信前の検証 — 最終化したトランザクションの下書きに対して、ノードと同じ
observeDepositTxの検査を送信前に実行します。通らなければその場で止め、不足額を示す新しいエラーDepositTooLow(提供された額と必要な最低額)を返します - 手作業での回収 — datum を読み解く処理を観測ロジックから切り出し、
hydra-tx recoverがすでに滞っている預け入れを読み取れるようにしました
前者は再発防止、後者はすでに起きた分への手当てにあたります。とくに後者は、今回報告した利用者のように「いまスクリプトに残っている」資金を取り出す経路になります。
一方で、週次報告は残った課題も書いています。ブループリント経由の預け入れでは、増額の原資がいまも出力自身ではなくノードの燃料(fuel)から出ていること、そしてテスト用に生成する HeadId の長さが実際のポリシー ID と合っていないことです。いずれも「後続の対応」として明記されています。
同じ週に、テストの死角も見つかった
同じ週、チームはテスト基盤にも手を入れています。実際の Cardano ノードと Hydra ノードを起動していた遅い結合テスト 13 本を、同じ論理を直接確かめる単体テスト 30 本に置き換え、テスト時間を約 114 秒から約 1.3 秒に縮めました。
書き直しの過程で、これまでのテストが偶然にしか通っていなかった箇所が 4 つ見つかりました。最も大きいのは、ノード内部のイベントのうちどれがクライアントに届き、どんな形で届くかという 39 通りのケースが、実質的に一度も検証されていなかったことです。今回の預け入れの不具合と同じく、「動いているように見えて、確かめられていなかった」部分を掘り起こした形です。
レイヤー2 は、預けて・使って・戻すという往復が安全に回ってはじめて使い道が生まれます。9月26日の SIPO Daily Intel でもこの件を主役に取り上げましたが、預け入れの入口で資金が止まる種類の不具合は、利用者にとって最も避けたいものです。それが報告から 3 日で原因の特定・修正・回収手段の用意まで進んだことは、実運用に向けた足場固めとして読めます。
次に確かめる場所
この週の Hydra は「リリースなし」と報告されており、GitHub 上の最新リリースは 9月2日の 2.4.1 のままです。修正はメインのコードに入りましたが、利用者の手元に届くのは次のリリースからです。Hydra の GitHub のリリースページで、#2873 を含む版がいつ出るかを確かめるのが次の一点になります。あわせて、9月21〜27日分の Hydra 週次報告(hydra-updates の W39)が、残課題のブループリント経路にどこまで手が入ったかを示すはずです。Mesh SDK から Hydra へ預け入れる開発者は、それまでのあいだ、最低額に届かない少額の預け入れを避けておくのが安全です。
ことば
- Hydra ヘッド — 参加者が ADA などを持ち込み、レイヤー1 の外で高速にやりとりするための個別の「部屋」です。預け入れ(コミット)で資金を入れ、終わればレイヤー1 に戻します。入口で止まると、部屋にも手元にも資金がない状態になります。
- datum — スクリプトのアドレスに置かれた出力に添える記録です。今回は「何を預けたか」を書いておく欄で、ノードはこの記録と実際の額が一致するかを見て、預け入れを受け付けるかどうかを判断しています。
- min ADA — Cardano の出力ひとつに最低限載せなければならない ADA の額です。少額の預け入れではこの下限に届かないことがあり、今回の不具合はその穴埋めの処理から生じました。
一次ソース / 関連リンク
- Hydra 週次報告 Week 38(2026年9月14〜20日)
https://cardano-scaling.github.io/hydra-updates/updates/2026-w38/ - Weekly development report as of 2026-09-25(Essential Cardano)
https://www.essentialcardano.io/development-update/weekly-development-report-2026-09-25 - 修正のプルリクエスト #2873「Fix Deposit output calculation」(GitHub)
https://github.com/cardano-scaling/hydra/pull/2873 - 利用者の報告 #2871(GitHub)
https://github.com/cardano-scaling/hydra/issues/2871 - Hydra のリリース一覧(GitHub)
https://github.com/cardano-scaling/hydra/releases - 📋 Daily Intel 9/26(SIPO.TOKYO)
https://sipo.tokyo/daily-intel-20260926/
