スマートコントラクトの外部監査は、費用も時間もかかります。監査ファームに提出する前に、チームで基本的なチェックをしておくと、監査の質が上がり、手戻りが減ります。「監査に出せば安全」という考え方は危険で、監査は問題を見つける手助けをするものであり、安全を保証するものではありません。

Slitherで静的解析を走らせる

Slitherは、Solidityのコードを静的に解析してよくある脆弱性パターンを検出するツールです。Trail of Bitsが開発しており、オープンソースで使えます。インストールはpipで一行です。走らせると、リエントランシー、整数オーバーフロー、未チェックの戻り値など、既知のパターンを検出します。すべての警告が実際の脆弱性ではありませんが、一つひとつ確認して、問題ないと判断したものはコメントで理由を残しておくと、監査ファームへの説明が楽になります。

テストカバレッジを確認する

HardhatまたはFoundryでテストカバレッジを計測します。行カバレッジが80%を下回っている場合、監査ファームから追加テストを求められることが多いです。カバレッジの数字よりも、エッジケースがテストされているかどうかが重要です。例えば、流動性がゼロのプールへのスワップ、最大値に近い入力値、アクセス制御の境界条件などを確認します。Foundryのfuzzテストは、手動では思いつかない入力値を自動で試してくれるので、組み合わせることを勧めます。

アクセス制御の設計を文書化する

誰がどの関数を呼べるか、オーナーシップの移転はどう行われるか、マルチシグは使っているか。これらを図または表で整理します。監査ファームは必ずこの部分を確認します。事前に文書化しておくと、監査の時間を短縮できます。特に、onlyOwnerやAccessControlを使っている場合、ロールの付与と剥奪のフローを明示しておくことが重要です。

外部コントラクトへの依存を整理する

Chainlinkのオラクル、Uniswapのルーター、OpenZeppelinのライブラリなど、外部コントラクトへの依存がある場合、そのバージョンと依存の理由を記録します。外部コントラクトが更新された場合の影響も考えておきます。特にオラクルの価格操作リスクは、監査で頻繁に指摘されるポイントです。TWAPを使っているか、スポット価格のみに依存していないかを確認します。

ContractLensで事前確認する

Core DexVaultのContractLensは、Slitherの解析結果を取り込み、主要な関数とイベントを日本語でサマリー表示します。外部監査ファームへの提出前の地図確認として使えます。完全な監査の代替ではありませんが、チームで問題点を共有するための出発点として機能します。月額¥4,900で使えます。

監査前の準備をしっかりやることで、監査の費用対効果が上がります。具体的な準備の進め方について相談したい場合は、スマートコントラクト監査補助のサービスページをご覧ください。