LIVE ADA-- MCAP-- TVL-- STAKE-- EPOCH-- Cardano & Midnight 総合情報ポータル
SIPO
速報 Node 11.2プリリリース版をリリース、Dijkstraのエコシステムテストへ 7時間前 速報一覧 →
HOME › Signal › Compact の静的解析 Nightshade、96 の規則で公開
Signal

Compact の静的解析 Nightshade、96 の規則で公開

2026-10-30SIPO #Midnight

Midnight のスマートコントラクト言語 Compact で書かれたコントラクトを、実行せずに読んで危うい書き方を探す静的解析ツール「Nightshade」が、オープンソース(Apache-2.0)で公開されました。開発者の Dickson Wu 氏が日本時間 10 月 29 日夜に X で告知し、プライバシーの漏れ、なりすましのできる認証、署名の検証結果の見落としなどを 96 の規則で検出するとしています。

Midnight のメインネットではコントラクトの公開が始まっており、書く人が増えるほど、監査に出す前に手元で機械的に確かめる道具の価値が上がります。Nightshade が何を見つけ、何を保証しないのかを、GitHub のリポジトリの文書に沿って整理します。

96 の規則は、既定で 28 だけが動く

規則の一覧(detector catalog)によると、96 の規則は 4 つに分かれています。

  • 監査の既定で使う通常の規則 24
  • 書き方の衛生(使っていない宣言、到達しないコードなど)を見る規則 7
  • 利用者が方針を設定したときに働く規則 13
  • それ以外の、明示して選ぶ規則 52

何も指定しない「audit」の既定では、通常の 24 に、設定がなければ眠ったままの方針の規則 4 つを加えた 28 が選ばれます。衛生の規則まで含めると 35 です。全部を選ぶこともできますが、文書は、それで安全性を網羅できるわけではないと断っています。深刻度の表示も、脆弱性が起きる確率や影響の大きさではなく、確認する優先順位だと位置づけています。

リポジトリの説明が代表例に挙げるのは、認証の確認に使った秘密をそのまま公開してしまう書き方、公開データと一致するだけの値を認証の根拠にしてしまう書き方、署名の検証結果を使わずに捨てている書き方、呼び出し側が渡した時刻を、チェーンの時刻で鮮度を確かめずに使う書き方などです。同じ取引の中でまったく同じシールドの出力を発行する処理や、マークル証明のデータを使いながら、所属の確認を強制しないまま状態を更新する処理も対象に入っています。

秘密を確かめたあと、そのまま台帳に書く

リポジトリには、配布物に同梱した合成の例で実際に出る指摘が載っています。コントラクトの 12 行目で、所有者の秘密(ownerSecret)を台帳の公開欄にそのまま書いている箇所に、深刻度「中」の指摘が付きます。

Compact では、非公開の入力から作った値を公開の台帳へ書くとき、disclose という印を付けて明示します。この例では、秘密を台帳上のハッシュと照らして本人確認に使ったあと、ハッシュなどで隠さずに生の値で公開しています。いったん公開された秘密は、誰でも同じ確認を通れる鍵になりかねません。一方で、文書は、意図して値を明かす手順なら成り立つ場合もあるとし、その秘密にまだ権限が残っていないかを人が確かめるよう求めています。指摘にはファイルと行の位置、どの関数の呼び出しの流れで起きるかが添えられます。

手元でも、GitHub の上でも回せる

配布されているパッケージは、Linux(x86-64)と Node 22 または 24 の環境向けです。解析は手元のソースと読み込み先だけを使い、コントラクトを動かすことも、Compact のコンパイラを用意することもありません。macOS では同梱の Docker の手順で Linux のイメージを使います。

GitHub Actions 用の設定も用意されており、push やプルリクエストのたびに解析を走らせ、結果を GitHub のコードスキャンに SARIF 形式で上げられます。対応するコンパイラの版は 0.28.0 から 0.35.0 までの 8 つで、アプリを作るときに使った版を選んで解析します。GitHub のリリース一覧では、10 月 22 日(UTC)に v0.1.0 と v0.1.1 が公開されています。

「指摘なし」は安全の証明ではない

文書は、限界を正面から書いています。解析が最後まで終わったことは、選んだ範囲の解析が完了したという意味で、コントラクトの安全性や、指摘した経路が実際に実行できることを証明しません。既定の確認は、そのアプリの認証の方針の全体までは推測しないため、資格情報を書き換える処理が見逃されることもあります。意図した公開が欠陥のように見える場合があること、リリース全体での精度や見落としの割合の見積もりはまだないことも明記されています。組み込みの規則はすべて試験段階という扱いです。

それでも、Midnight のコントラクトで起きやすい失敗は、Ethereum の Solidity で知られてきたものとは種類が違います。何を隠し、何を公開するかを書き手が一つずつ決める言語では、「うっかり明かした」が最も起きやすい事故の一つです。その失敗の形に 96 の規則として名前を付け、誰でも手元で回せるようにしたことが、このツールの一番の貢献です。次に確かめられるのは、リポジトリの CHANGELOG とリリース一覧で、対応するコンパイラの版が Compact の新しい版に追いつくか、評価の文書(docs/evaluation.md)に精度の見積もりが加わるかです。

ことば

  • 静的解析 — プログラムを動かさずに、ソースコードを読んで危うい書き方を探す手法です。Midnight ではコントラクトの公開が始まったばかりで、監査の前に手元でかけられる最初の網として使えます。
  • Compact — Midnight でスマートコントラクトを書くための言語です。非公開の値と公開する値を書き手が明示して分けるのが特徴で、Nightshade の規則の多くはこの分け方の誤りを狙っています。

一次ソース / 関連リンク

タグ: #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 を選ぶ手順 手順どおりに委任する →