Midnight の改善提案を管理する GitHub のリポジトリに日本時間 11 月 11 日未明、MIP-0033「Scoped Grants and dApp Connection for Custody Accounts」が草案 (Draft) として加わりました。資産を預かるコントラクトの口座について、持ち主が DApp (分散型アプリ) などの第三者に、使える操作・金額・期限を絞った権限だけを渡し、いつでも取り消せるようにする仕組みを定めるものです。
MIP-0033 を追加したコミット (GitHub・midnight-improvement-proposals)(GitHub)
11 月 10 日の記事では、Ledger 9 で Midnight が Ethereum と同じ ECDSA の署名を扱えるようになったことをお伝えしました。MIP-0033 はその ECDSA の鍵も権限の受け手として扱う設計で、Midnight の口座を外のアプリとつなぐ入口を、規格として形にしようとする提案です。この記事では、草案の本文から、何ができるようになり、何が課題として残されているのかを整理します。
「全権を渡すか、何も渡さないか」を解く
ここでいう custody account は、事業者の口座のことではありません。Compact で書いたコントラクトが NIGHT などの資産を預かる口座で、預かり方を MIP-0012、誰が引き出しを承認できるかを MIP-0013 が定めています。MIP-0033 はこの 2 つと、ECDSA などの署名方式を定める MIP-0030 の上に乗る提案です。
草案はまず、いまの仕組みの穴を指摘します。MIP-0013 では、口座に鍵を追加すると、その鍵は口座の全権を持ちます。そのため第三者に口座を操作させる方法は、その第三者を自分の端末と同じ扱いにすることしかありません。DApp は全権の鍵を持つか (DApp が侵害されれば資産の引き出しを丸ごと許す)、何も持たないかの二択だった、と草案は書いています。
MIP-0033 が加えるのは、その中間にあたる「範囲付きの権限 (scoped grant)」です。受け手の鍵 1 つに、口座の操作のうち限られた部分だけを許します。
権限は回路の中で毎回確かめる
草案によると、1 つの権限で絞れるのは次の項目です。
- 引き出しの操作 3 種 (公開の資産の引き出し、秘匿した資産の引き出し、秘匿した資産のコントラクトへの引き出し) のどれを許すか
- 扱えるトークンの種類 (1 種類)
- 1 回あたりの上限額と、累計の上限額
- 受け手が触れられるコインの額の上限
- 送り先の固定 (任意)
- 期限 (必ず明示する。無期限にするときは 0 を明示する)
これらの範囲は、操作のたびにゼロ知識証明の回路の中で確かめられ、口座の持ち主の端末であればどれからでも、チェーン上の記録をもとに権限を取り消せます。受け手の鍵は、MIP-0013 の端末の鍵と同じ JubJub 上の Schnorr 署名、Bitcoin や Ethereum と同じ secp256k1 の ECDSA、パスキーで使われる secp256r1 の ECDSA の 3 系統から選べる設計です。
権限の記録そのものも、口座の秘密を漏らさないように作られています。記録には、預かっている資産の種類や取引相手、引き出した額、受け手の DApp のドメインといった項目が、ランダムな値を混ぜた形 (コミットメント) で保存され、そのままの形では載りません。一方で、チェーンを見ている人には、どの操作が許されているか、上限額や期限、呼び出された回数といった情報は見えると草案は明記しています。
DApp が権限を受け取る手順は、Web の認可の仕組み OAuth 2.0 が長年かけて直してきた弱点を取り込んだものだと説明されています。DApp が鍵を持っていることの証明や、ブラウザが確かめた接続元のドメイン、戻り先の URL の完全一致を求め、DApp に口座の鍵の一覧を渡さないようにしています。
閲覧の権限は、範囲で縛れない
草案が「最も大きな残るリスク」として挙げるのは、台帳が縛れるのは引き出しの範囲であって、閲覧の範囲ではないという点です。閲覧の権限 (read) を渡すと、DApp は口座の秘匿した資産を、種類を問わず、現在の分も今後の分も、暗号の鍵を入れ替えるまで見られるようになります。引き出しの上限はこの閲覧には効きません。
そのため草案は、閲覧の権限を渡す前に暗号の鍵を入れ替え、過去の使用履歴までは見せないようにすることを求めています。DApp との接続を承認する画面でも、この閲覧の範囲を最初に説明する決まりです。
草案の状態は文字どおり Draft です。冒頭には、実装による裏付けはまだ一部にとどまり、未チェックの項目は採用に向けたこれからの作業だと書かれています。採用の条件の欄では、外部の共著者を立てる項目は済んでいる一方、独立した暗号の専門家によるレビューや、関連する規格との整合など多くの項目が未完了のままです。
確認できる次の一点は、Midnight の改善提案リポジトリで MIP-0033 の Status の欄が Draft から次の段階へ変わるときと、その前提となる独立した暗号の専門家のレビュー結果が草案に反映されるときです。そこで初めて、Midnight の口座を DApp やエージェントに安心してつなげる規格として扱えるようになります。
ことば
- MIP (Midnight Improvement Proposal) — Midnight の仕様の変更や新しい規格を提案する文書。番号つきで GitHub に置かれ、Draft から段階を踏んで採用されます。
- scoped grant (範囲付きの権限) — 口座の全権ではなく、操作・額・期限を絞った権限だけを第三者の鍵に渡す仕組み。MIP-0033 はこれを口座のコントラクトの中で確かめる形で定めます。
- secp256k1 — Bitcoin と Ethereum の署名に使われる楕円曲線。Ledger 9 で Midnight はこの曲線の ECDSA 署名を扱えるようになり、MIP-0033 もこの鍵を権限の受け手として扱う設計にしています。
一次ソース / 関連リンク

