Midnight 向けウォレットを手がける 1AM が、日本時間 11 月 12 日 13 時半すぎ、MetaMask や Phantom など手持ちのウォレットから Midnight のアカウントを開ける開発者向けの接続キット「NightKit」を、テストネットのベータとして公開しました。アプリは鍵に一切触れず、Midnight 標準の DApp コネクタ API をそのまま受け取れるため、Midnight のアプリを作るチームにとって「利用者がまだ Midnight のウォレットを持っていない」という最初の関門を下げる道具になります。
同じ発表のスレッドで、1AM は Ethereum のテストネット Sepolia と Midnight の公開テストネット stagenet の間で ETH を入出金できる橋渡しも、今日から試せると告知しています。Ethereum の利用者がふだんのウォレットのまま Midnight に入ってくる導線を、接続と資金の両面から用意した形です。本記事では、公式サイトと開発者向けガイドに書かれている仕組みと制約を整理します。
署名 1 回で Midnight のアカウントが開く流れ
NightKit の公式サイトが示す利用者側の流れは 4 段階です。
- 接続ボタンを押す。1AM が入っていれば、そのまま 1AM につながる
- 入っていなければ、ふだん使っているウォレットを選ぶ
- メッセージに 1 回だけ署名する。サイトは「無料で、何も送らない」署名だと説明している
- 以後の送金や署名の依頼は、すべて保管ページ (vault) に表示され、利用者が承認してから実行される
対応ウォレットとして名前が挙がっているのは、Ethereum 系の MetaMask・Coinbase Wallet・Rabby・Rainbow・Brave Wallet・OKX Wallet・Trust Wallet、Ethereum と Solana の両方に対応する Phantom、Solana 系の Solflare と Backpack、そして 1AM をはじめとする Midnight のウォレットです。Ethereum 系はウォレットを自動で見つける標準 (EIP-6963)、Solana 系は Wallet Standard で検出するため、一覧に無いウォレットでも動く場合があるとしています。
一方で、できないことも明記されています。スマートコントラクト型・パスキー型・MPC 型 (秘密鍵を分割して複数の当事者で署名する方式) のウォレットではアカウントを開けず、モバイルのウォレットを WalletConnect でつなぐ方式にもまだ対応していません。
開発者の側から見ると、接続後にアプリが受け取るのは Midnight の標準の DApp コネクタ API です。サイトは NightKit を「Midnight 版の RainbowKit」と紹介しています。RainbowKit は Ethereum のアプリで使われている接続ボタンの部品で、それと同じように、アプリを包んでボタンを置けば、どのウォレットがつながっても同じ API で残高の取得や送金の依頼ができ、midnight-js もそのまま動くという説明です。
鍵はアプリとは別のアドレスに置く
NightKit の設計の中心は、鍵の置き場所です。アカウントの鍵は、アプリとは別のウェブアドレスで動く保管ページの中で作られ、使われます。npm に公開された nightkit-vault パッケージの説明には、このページがアカウントの鍵を「導出し、保持し、使う」と書かれています。ブラウザは別のサイトの中身を読ませないため、アプリ側で動くコードからは鍵に届かない、というのがサイトの説明です。
サイトは、アプリが持つものと持たないものを分けて示しています。
- アプリが持つもの: アドレスと残高、送金や署名を「依頼する」権利
- アプリが持たないもの: 鍵、リカバリーフレーズ、ウォレットの署名
- 保管ページ: 鍵をメモリ上にだけ置き、秘密情報を保存しない。Midnight のネットワーク以外とは通信しない
攻撃の想定も具体的です。アプリに悪意のあるコードが入り込んでも、できるのは送金を依頼するところまでで、利用者は保管ページで内容を見て承認する必要があります。保管ページを半透明にしたり覆い隠したりしてクリックを盗む手口に対しては、依頼の全体が画面に見えているあいだしか承認ボタンが効かない作りにしています。アプリのブラウザ保存領域に残るのは、前回どのウォレットを使ったかだけです。
ただし、サイトがはっきり「防げない」と書いている場面が一つあります。サインイン用のメッセージを偽サイトに写し取られ、利用者がそこで署名してしまうと、アカウントは露出します。最初の署名がアカウントを開く鍵の役を担っている以上、その署名を誰に向けて出すかが利用者の側の守りどころになります。サイトは、ウォレットがサイトの不一致を警告すること、そしてこのために 1AM を最初の選択肢として出していることを添えています。
Sepolia から ETH を入れる橋渡し
NightKit には、1AM のブリッジを通じて資産を Midnight に移す nightkit-bridge という部品があります。公式サイトによると、Ethereum のテストネット Sepolia と Base のテストネット Base Sepolia から ETH または USDC を受け取れ、どの通貨を受け付けるかはアプリの開発者が選びます。1AM の X の告知では、11 月 12 日の時点で稼働しているのは Sepolia と Midnight stagenet の間の ETH の入金と出金だと書かれています。
開発者向けガイドには、使う前に知っておきたい手触りの情報も並んでいます。
- 入金には数分かかり、Ethereum 側のウォレットと Midnight 側のウォレットで 1 回ずつ、計 2 回の承認がいる
- Midnight 側での受け取りには、同期を終えたアカウントと、手数料に使う DUST が必要
- 公開のテストネットでは、新しいアカウントの最初の同期に 20 分ほどかかる。アドレスはすぐ使えるが、残高の表示と送金は同期を待つ
- 手数料は、アプリ側で肩代わりの設定をしない限り、アカウント自身の NIGHT から払う
手数料の扱いは、Midnight の仕組みそのものに由来します。持っている NIGHT を DUST の生成に登録すると、取引手数料に使う DUST が時間をかけて生まれます。ガイドによれば、NightKit のアカウントでも NIGHT を持った後にこの登録を一度行う必要があります。Ethereum から来たばかりの利用者が最初の一歩でつまずくとすれば、この DUST の準備の段階になりそうです。
監査前のプレビューで、メインネットにはつながない
NightKit は、開発者向けガイドの冒頭で自らを「プレビュー」と位置づけ、セキュリティ監査をまだ受けていないこと、本番運用の準備が整ったものとして扱わないこと、メインネットにつながないことを明記しています。動くのは台帳の仕様が ledger 9 以降の Midnight のネットワークで、ガイドが挙げているのは stagenet と手元で動かす開発用ネットワークの二つです。ブリッジもテストネット専用で、メインネットを指定すると拒否する作りです。
パッケージは nightkit・nightkit-react・nightkit-vault・nightkit-bridge・create-nightkit の 5 つで、npm の記録では日本時間 11 月 12 日の告知の前後に公開され、現在の版は 0.1.3、ライセンスは Apache-2.0 です。サイトによると、開発は Webisoft が担っています。
Midnight のアプリに人を呼び込む道具は、ここ 1 か月で性格の違うものが並びました。10 月 22 日に取り上げた Dynamic の対応は、メールやソーシャルログインから MPC 型の組み込みウォレットを作る方式でした。NightKit は逆に、利用者がすでに持っている Ethereum や Solana のウォレットを入口にし、MPC 型のウォレットではアカウントを開けないと明記しています。メールしか持たない人と、すでに暗号資産のウォレットを使っている人とで、アプリが選べる入口が分かれてきたことになります。
次に確かめる一点
確かめる先は、NightKit の開発者向けガイド (nightkit.1am.xyz/agent.md) の冒頭にある状態の節です。いまは「監査を受けていない」「メインネットにつながない」の 2 行が書かれており、npm の nightkit の版が 0.1.3 から上がったときに、この 2 行が書き換わっているかどうかが、メインネットのアプリで使えるようになるかの目安になります。それまでは、stagenet で Sepolia の ETH を入れてみる段階の道具として触れるのが、1AM 自身の「壊して、見つけたことを教えてほしい」という呼びかけにも沿った使い方です。
ことば
- DApp コネクタ API — Midnight のアプリがウォレットに残高の取得や送金を依頼するための標準の窓口です。NightKit はどのウォレットでつないでもこの同じ窓口を返すため、アプリはウォレットごとの作り分けをせずに済みます。
- stagenet — Midnight の公開テストネットの一つで、NightKit のガイドが対応先に挙げているネットワークです。ledger 9 以降を動かしていることが NightKit の動作条件で、今回のブリッジもこの stagenet と Sepolia の間をつなぎます。
- EIP-6963 — ブラウザに入っている複数の Ethereum ウォレットを、アプリが取り合いにならずに見つけるための標準です。NightKit はこれを使うため、対応一覧に名前の無いウォレットでも接続できる場合があります。
一次ソース / 関連リンク
- 1AM 公式 X の告知 (11 月 12 日・NightKit の公開)
https://x.com/OneAmXYZ/status/2120736549411475764 - 1AM 公式 X の続きの投稿 (11 月 12 日・テストネットのベータと Sepolia ↔ stagenet の ETH 入出金)
https://x.com/OneAmXYZ/status/2120736553979007346
1AM NightKit 公式サイト(nightkit.1am.xyz)
NightKit 開発者向けガイド (agent.md)(nightkit.1am.xyz)
npm: nightkit(npmjs.com)
npm: nightkit-vault(npmjs.com)
npm: nightkit-bridge(npmjs.com)

