LIVE ADA-- MCAP-- TVL-- STAKE-- EPOCH-- Cardano & Midnight 総合情報ポータル
SIPO
速報 Reeve Release 1.8 が公開、プロジェクト管理機能を拡張 18時間前 速報一覧 →
HOME › Signal › Midnight.js 5.0.0、Ledger 9 フォーク前の移行版を公開
Signal

Midnight.js 5.0.0、Ledger 9 フォーク前の移行版を公開

2026-11-06SIPO #Midnight

Midnight の開発チームは日本時間 11 月 6 日朝、dApp 開発用ライブラリ Midnight.js の 5.0.0 と、ウォレット開発用の wallet SDK 2.0.0 を正式版として公開しました。Ledger 8 から Ledger 9 へのハードフォークの前に、dApp が載せ替えておくための版です。

midnight-js v5.0.0 リリース (GitHub)(GitHub)

リリース文書は移行の難しさを High とし、作業に数日を見込むよう書いています。11 月 5 日の Signal で取り上げた Ledger 9.1.0.0 が台帳の部品なら、今回はそれをアプリから使うための部品です。Midnight で dApp を動かしている開発者が、フォークまでに何を決めて何を書き換えるのかを整理します。

4.1.1 のままフォークを迎えるとどうなるか

移行ガイドの警告は明確です。4.1.1 のままフォークを迎えたビルドは、その後ネットワークを読めなくなり、自分で配備したコントラクトも呼べなくなります。ガイドは、余裕をもって利用者に更新を届けるよう求めています。

5.0.0 は、同じコードでフォークの両側を動けるように作られています。取引やオンチェーンの状態は、'v8' か 'v9' かを示す時代の印を付けたバイト列として受け渡すようになりました。dApp は自分の持つ台帳のコピーでそれを読み解きます。1 つのバンドルに同じ WASM パッケージが 2 つ入ることで起きる種類のエラーをなくす狙いです。

版の番号が少しややこしいので、関係を書いておきます。

  • 台帳 — midnight-ledger の Ledger 9.1.0.0 が、npm では @midnightntwrk/ledger-v9 の 1.0.0 にあたります
  • アプリ向け — Midnight.js 5.0.0。Proof Server 9.0.0、compactc 0.36.0、Indexer 4.4.0-rc.6 以上を前提にします
  • ウォレット向け — wallet SDK 2.0.0。その中の秘匿ウォレットと非秘匿ウォレットのパッケージが、それぞれ 4.0.0 です

コントラクトごとに、どちらの成果物を使うか

最初の判断は、コントラクトごとの扱いです。フォークの前に配備したコントラクトは、Ledger 8 の成果物のまま見つけて呼び続けます。再コンパイルすると検証鍵が変わり、findDeployedContract が拒否します。フォークの後に配備するものは、compactc 0.36.0 で再コンパイルした成果物を使います。Ledger 9 のコントラクトは、ネットワークが Ledger 8 のあいだは配備も呼び出しもできません。

Ledger 8 のコントラクトでできることは、フォークの前後で次のように変わります。

  • 呼び出し — 前後とも可能です
  • 配備 — フォーク後は拒否されます
  • 検証鍵や権限の保守 — フォーク後は拒否されます。再コンパイルした成果物で同じ関数を呼べば実行でき、署名鍵は引き続き有効です
  • コントラクト単位のトランザクション内の呼び出し — フォーク後は拒否されます

フォークの前後どちらでも配備する dApp は、両方のビルドを同梱することになります。保守のときに必要な署名鍵は非公開状態の保存先にしかないので、成果物を切り替えるときも同じ保存先を使い続ける必要があります。

書き換えが広いコード側の変更

破壊的変更の一覧は 23 項目あります。多くの dApp に関わるのは次の点です。

  • パッケージが ESM のみになり、Node.js 22.12 以上と TypeScript 5.8 以上が必要です (CommonJS のプロジェクトは 5.9 以上)
  • プロバイダに config が必須になり、setNetworkId() はなくなりました
  • ZK の成果物は compiler/ ディレクトリと一緒に配信します
  • 非公開状態はコントラクトごとに forContract(address) で扱います
  • オンチェーンの状態はバイト列で返り、自分のランタイムで読み解きます
  • エラーはコード付きの MidnightJsError にそろいました

直前の rc から今回の正式版までに入った機能が、Ledger 8 のネットワークでのコントラクト単位のトランザクションです。フォークの前にこの機能を使う場合は、関数の引数の型を Ledger8TransactionContext にするか、withLedger8ContractScopedTransaction を使います。追加機能では、コントラクト間の呼び出し、MIP-0002 のコントラクトイベント、ネットワークごとの定義済みエンドポイントなどが入りました。

ウォレット側で変わること

wallet SDK は、チェーンの forks.v9 より前は Ledger 8、それ以降は Ledger 9 で動き、残高やコインをフォークの向こうへ運びます。秘匿ウォレットの 4.0.0 では、取引を組み立てる関数が秘密鍵を受け取らなくなり、起動時に両方の時代の鍵を渡す形に変わりました。

利用者の画面に関わる点もあります。フォークをまたいだ後、最初の同期が終わるまでは、残高と利用可能なコインが空として読まれます。この瞬間に「残高がゼロになった」と見えないよう、ウォレットや dApp の表示を先に確かめておくと安全です。パッケージのスコープが @midnight-ntwrk から @midnightntwrk に移った点にも注意が必要で、古い側の ledger-v8 で作ったオブジェクトをウォレットは受け付けません。

修正では、送信されなかった取引のためにコインが確保されたままになる不具合が直りました。TTL を過ぎるか、同期が最初に見てから 14 日で解放されます。

順番としては、日程より先に手元の棚卸し

今回読んだ文書に、ハードフォークの日付は書かれていません。確認先は GitHub の midnight-node のリリース面で、この記事の時点で新しい正式版は 10 月 6 日の node-1.0.400、2.1.0 系は 9 月 30 日の rc.4 までです。Ledger 9 を組み込んだ正式版とフォークの案内がここに出るのを待つことになります。

ただ、作業に数日かかり、利用者への配布にも時間がかかる以上、日付を待ってからでは遅くなります。配備済みのコントラクトの一覧と、それぞれの署名鍵の保存先をいまのうちに確かめ、試験環境での動作確認へ進めておくのが安全です。

ことば

  • Midnight.js — Midnight の dApp を TypeScript で作るためのライブラリ群。コントラクトの配備や呼び出し、証明の依頼をまとめて扱い、5.0.0 で Ledger 8 と 9 の両方に対応しました。
  • コントラクト単位のトランザクション — 複数の呼び出しを 1 つの取引にまとめる機能。今回の版で Ledger 8 のネットワークでも動くようになりましたが、Ledger 8 のコントラクトではフォーク後に拒否されます。
  • compactc — Midnight のコントラクト言語 Compact のコンパイラ。Ledger 9 向けは 0.36.0 で、作り直すと検証鍵が変わるため、配備済みのものには使えません。

一次ソース / 関連リンク

タグ: #Midnight
Delegate to SIPO · 委任ガイド

ADA を手元に置いたまま、
SIPO に委任する

SIPO は Cardano ステークプール 3 基 (SIPO / SIPO2 / SIPO3) を運用しています。Midnight のバリデータ運用は開始後に参加予定です。

  • 預けない・ロックなし
  • 約 5 日ごとに報酬
  • DRep も SIPO に
ステーキングをはじめる → はじめての方は、この 3 本を順に読むと迷いません。
  1. 1
    📘 Learning ステーキングとは、ADA を手元に置いたまま報酬を受け取る仕組み 仕組みを知る →
  2. 2
    📘 Learning DRep への委任とは、13.7 億 ADA の国庫の使い道に一票を託す仕組み ガバナンスに参加する →
  3. 3
    📘 Learning 委任マニュアル 2026 年版、Lace と Daedalus でプールと DRep を選ぶ手順 手順どおりに委任する →