この教育・実験用アプリケーションでは、基盤となるERC20トークンはボールトのEVMアカウントに保管される。Midnight上では、ユーザーはそのプールに対する自分の権利を表すシールドされたボールトトークンを保有する。したがって、ネイティブ資産がEthereum上に残るということは、その資産がどこに記録されているかへの答えにはなるが、それだけでは誰が資産を動かせるのかは分からない。

この違いは、バーンの意味も説明する。出金を開始すると、償還対象のシールドされた権利が破棄されるのであり、基盤となるERC20が破棄されるわけではない。外部への送金が成功すれば、償還は完了する。送金が文書化された失敗結果のいずれかになった場合、アプリケーションは権利を復元できる。

出金の手順では、保有者がコインを使用することを承認として扱う。保有者は、トークンと出金額が完全に一致するシールドされたボールトコインを提供し、送金先アドレスを選択する。回路はゼロアドレスを拒否する。

startWithdraw回路はそのコインをバーンし、リクエストをキューに登録する。その後のキューのフラッシュで、ボールトアカウントのトランザクション連番が割り当てられる。これはnonceと呼ばれる。続く送信ステップでは、正確なERC20送金のリクエストを記録し、MPC(マルチパーティ計算)署名サービスに通知する。

その後は、役割が明確に分かれた一連の処理となる。

署名サービスはトランザクションをブロードキャストしない。dAppまたはリレイヤーが検証済みの署名を使ってトランザクションを組み立て、EVMチェーンに送信する。

送金の失敗と、サービスから応答がないことは別の問題

署名後、サービスには別の役割がある。トランザクションを承認した署名とは別に、外部トランザクションの結果を証明するアテステーションを提供する。統合プロトコルでは、その結果をリクエストと返却データに結び付ける方法が説明されている。

ボールトは、決済を許可する前に、設定済みのMPC応答キーを使ってアテステーションを検証する。

出金仕様では、権利を復元できるケースが3つ説明されている。トランザクションがリバートされた場合、別のトランザクションがそのnonceを消費したため実行できなくなった場合、または実行されたERC20送金がfalseを返した場合である。アテステーション付きの結果がキューに登録されてフラッシュされた後、出金者はリクエストを完了し、再ミントされたシールド額を受け取る。

送金が成功してtrueを返した場合、バーンされた状態が維持され、リクエストは終了する。失敗時に復元されるのは、宛先へのネイティブ資産の新たな送金ではなく、Midnight上のボールトに対する権利である。

文書化された返金ルートでは、検証済みでフラッシュ済みのアテステーションが必要となる。署名リクエストへの応答がないことや、結果の応答がないことだけでは、この条件を満たさない。

このサンプルには、ボールトのコードに緊急時の仕組みもある。デプロイヤーは、行き詰まったボールトのトランザクションについてnonce置換リクエストを開始できる。これは、同じnonceでボールトアカウントから自身にゼロ額を送金するものだ。

目的は元のトランザクションを実行不能にすることで、その後、アテステーション付きの結果を失敗時の決済に利用できる。この復旧処理の開始はデプロイヤーに限られるが、すでに確定したリクエストの送信は誰でも行える。MPCサービスを迂回する出口ではなく、署名付きの別のトランザクションを送り、その後にアテステーションを得る仕組みだ。

コードには、MPCが元のリクエストに署名する前に置き換えると、そのリクエストと競合する可能性があり、結果としてアテステーションを得られず、引き渡されたシールド権利がバーンされたままになるおそれがある、という具体的な警告もある。

デプロイヤーは初期のアカウント、チェーン、応答キーの設定も行い、ボールトのガス設定も変更できる。すでに開始されたリクエストには、開始時に複製されたガス値が引き継がれる。

本番環境で確認すべきなのは、出金経路の全工程

メインネット対応は、SIGのロードマップ上でledger v9に結び付いている。10月21日のリポジトリ更新では、SIG Midnight 0.25.0上のボールトパッケージ0.5.0が準備されている。このコードバージョンでは、公開されているアドレスレジストリにstagenetのボールトアドレスが記載されている一方、mainnetの欄は空白で、ファイルには未デプロイまたは未公開と定義されている。

SIGの別のフルスタックデモは、どちらも公開テストネットであるMidnight stagenetとEthereum Sepoliaに加え、「fakenet」MPCレスポンダーを使っている。これはアプリケーションの処理フローを示すものだが、独立した署名者による本番環境相当のクォーラムがそのデモで稼働していることを示すものではない。

SIGの閾値署名の説明は、署名の生成方法を扱っている。実際のデプロイを評価するには、何人の署名者の協力が必要か、誰が署名者を運用するのか、その体制をどう変更できるのか、通常のサービスが利用できない場合にどのような復旧処理を完了できるのかも把握する必要がある。

監査範囲にも同じ精度が求められる。2025年2月21日付のHackenの最終報告書は、EthereumのSolidity製チェーン署名コントラクトを対象としている。その範囲から、新しいCompactボールトやNightmodeシステム全体が監査対象に含まれているとは判断できない。

したがって次のデプロイで示すべき証拠は、新たな拡張発表より重要になる。具体的には、本番環境で使う正確なコードとアドレス、署名およびアテステーションの設定、それらのコンポーネントに対する監査範囲、そしてサービス障害に対応した復旧経路である。