Midnight、Ledger 9.1.0.1のセキュリティ修正の詳細を公開
メインネットで有効化されたこのバージョンは、トランザクション手数料、ブロック上限、ウォレット残高に関する問題に対処。さらに、Midnight上で開発する開発者向けにより厳格なバリデーションを導入。
By SongMarketCap
Updated:
Midnightは、11月6日のネットワークアップグレード中にメインネットで有効化されたバージョンであるLedger 9.1.0.1のソースコードとリリースノートを公開した。このリリースでは、トランザクション手数料の計算、ブロック上限、ウォレットでのコイン表示方法の変更を含む13件の修正が列挙されている。
リリースノートによれば、ノード運用者は11月3日にこのソフトウェアを受け取っている。修正内容の説明とソースコードは11月7日に公開された。このアップデートは、以前のLedger 9ビルドでは受理されていた一部のトランザクションも拒否する。
トランザクション手数料とブロック上限の変更
ledgerは、トランザクションが有効かどうかとそのコストを決定するMidnightのソフトウェアの一部である。MidnightはPreprodテストネットでの通常の先行期間なしにLedger 9へ移行した。プロジェクトは、セキュリティ修正が必要な場合にはより統制されたリリースプロセスを用いると説明している。
ある問題は、共有データ構造における重複エントリの処理方法に影響していた。リリースノートによれば、小さなトランザクションでも、手数料の確認前にノードに対して指数関数的に増加する作業量を強いる可能性があった。更新後のledgerは手数料を計算する前に重複エントリを拒否し、データのサイズに比例した時間で処理する。
ほかにもブロック上限に関する2件の修正がある。トランザクションが実際には行っていない削除を宣言できてしまい、その結果トランザクションの別部分の手数料を引き下げ、書き込みの正味バイト数の上限を回避できていた。別の計算上の問題では、少なくとも2⁶³ピコ秒の宣言計算時間が手数料ゼロとして扱われることがあった。これら両方のタイプのトランザクションは、現在は無効として拒否される。
DUST、ウォレット、Cardanoブリッジ
Midnightのトランザクション手数料は、NIGHT保有量から生成されるリソースであるDUSTで支払われる。リリースノートは、登録時に付与される過剰な手数料リソースをスマートコントラクトが捕捉でき、登録者側は依然として全額を受け取れてしまう問題を記載している。手数料リソースを公開入力または公開出力として転送するコントラクト呼び出しは、現在は拒否される。
別の修正は、ウォレットがチェーンからイベントをリプレイする方法に関するものだ。有効なアウトプットが、その暗号コミットメントと一致しない暗号化レコードを含み得た。このため、ウォレットが実際には使用できないコインを表示したり、既に保有しているコインの位置を上書きしたりする可能性があったという。リリースノートは、オンチェーン状態は影響を受けていないと述べている。
このアップデートはまた、ウォレットシードに由来する機微なデータをメモリからより徹底的に消去する。掲載された修正の一部は監査での指摘に由来し、リリースノートは9件のGitHubセキュリティ勧告を指し示しているが、そのページは11月8日朝の時点では公開されていなかった。
別の修正は、CardanoからMidnightへトークンを転送するためのプロトコルブリッジに適用される。値がゼロの請求は、これまで手数料を支払わずに検証を通過できていた。請求は、所要の最小額を満たすか、残高の全額をカバーしなければならない。ブリッジはLedger 9のコード内に存在するが、別途のガバナンス手続きで有効化されるまでメインネットでは無効のままである。
[NEWSBREAK]
開発者向けパッケージと残存する課題
このリリースには、@midnight-ntwrk/ledger-v9 1.0.1、onchain-runtime-v4 4.0.1、Proof Server 9.0.1が含まれる。proof serverは、トランザクションで用いられるゼロ知識証明を生成する。Midnightのメインネットアップグレードのドキュメントでは、互換コンポーネントの一つとして別途Proof Server 9.0.0も挙げられている。
Ledger 9.1.0.1は、委員会署名の重複や手数料登録の重複を含むトランザクションを拒否する。コントラクトは256個を超えるオペレーションを含むことはできず、各デプロイはその状態全体に対して課金され、宣言されたガスはブロック上限内に収まる必要がある。
複数のRustのコスト計算関数は、値の代わりにエラーを返すようになった。手数料を直接計算している開発者は、その変更を統合に反映する必要がある。
バージョン9.1.0.0からの既知の不具合が2件、未解決のままである。うち1件は、手数料がちょうど1回のDUST支出で支払われた場合に、コントラクト呼び出しが拒否され得るというものだ。Midnightのドキュメントは、修正が後続のリリースで予定されている間の回避策として、2回以上のDUST支出を用いる方法を示している。