NEWPowered by Ollama · 100% ローカル実行→

スマートコントラクト監査、
curl 1行で十分です

SolAudit AIは、Solidityのセキュリティ監査に特化したオープンLLMモデル集です。Ollama上であなたのマシンだけで動作するためコードが外部に出ることはなく、リエントランシー・アクセス制御・オラクル操作などの脆弱性をJSONレポートで返します。

Solidityのダイヤモンドを調べるOllamaのラマ
~/contracts — zsh

❯ curl -s -X POST https://solauditai.dev/api/audit -H "Content-Type: text/plain" --data-binary @Vault.sol | jq .report

⠿ solaudit-coder:7b 解析中… 212 lines · 2.8s

CRITICAL Reentrancy in withdraw() SWC-107 · L16

HIGH     tx.origin used for authorization SWC-115 · L22

LOW      Missing events for state changes L10, L18

risk_score: 94 / 100

監査特化モデル
4
脆弱性タイプ (SWC)
20+
外部に送信されるコード
0 byte
コンテキストトークン
32K
Solidity ^0.8OllamaEthereum / EVMFoundryHardhatOpenZeppelinSWC RegistryQwen2.5-CoderDeepSeek-R1Llama 3.2JSON ReportGitHub ActionsSolidity ^0.8OllamaEthereum / EVMFoundryHardhatOpenZeppelinSWC RegistryQwen2.5-CoderDeepSeek-R1Llama 3.2JSON ReportGitHub Actions

Models

用途に合わせて選べる4つの監査モデル

すべてのモデルは、実績あるオープンソースのコードLLMにSolidity監査用のシステムプロンプトとパラメータを組み合わせたOllama Modelfileとして提供されます。

7B
おすすめ

solaudit-coder:7b

速度と精度のバランス

日常的なPRレビューやCIパイプラインに最適な標準モデル。コード特化のベースモデルによりSolidityの文法理解に優れています。

ベース
qwen2.5-coder:7b
サイズ
4.7 GB
コンテキスト
32K
推奨環境
RAM 8GB · GPU任意
精度78
速度88
ollama create solaudit-coder:7b
14B
Reasoning

solaudit-deep:14b

段階的推論による詳細分析

呼び出しフローと状態変化を段階的に推論し、リエントランシーや価格操作などの複合的な脆弱性を見つけ出します。

ベース
deepseek-r1:14b
サイズ
9.0 GB
コンテキスト
32K
推奨環境
RAM 16GB · VRAM 10GB以上
精度86
速度58
ollama create solaudit-deep:14b
32B
最高精度

solaudit-pro:32b

メインネットデプロイ前の最終チェック

大規模プロトコルや複数コントラクトのコードベース向けのフラッグシップモデル。最も低い誤検知率を実現します。

ベース
qwen2.5-coder:32b
サイズ
20 GB
コンテキスト
32K
推奨環境
RAM 32GB · VRAM 24GB以上
精度92
速度34
ollama create solaudit-pro:32b
3B
軽量

solaudit-lite:3b

ノートPCでも軽快に

素早い一次スキャンや学習用途に適した軽量モデル。エディタでの保存時チェックにも最適です。

ベース
llama3.2:3b
サイズ
2.0 GB
コンテキスト
16K
推奨環境
RAM 4GB · CPUのみ可
精度64
速度97
ollama create solaudit-lite:3b

* 精度・速度はモデル間の相対比較のための参考値であり、実際の性能はハードウェアやコードベースによって異なります。

How it works

コードがあなたのマシンから外に出ることはありません

クラウドのAPIキーも従量課金も不要。ターミナル → Ollama → セキュリティレポート、たった3ステップです。

ターミナルからローカルLLMを経てセキュリティレポートへ至るパイプライン
  1. 01

    コントラクトを送信

    curlで.solファイルをそのまま送信します。ローカルのOllama API(:11434)とこのサイトの/api/auditプロキシの両方に対応しています。

    curl --data-binary @Vault.sol
  2. 02

    ローカルLLMで推論

    OllamaがあなたのGPU/CPUで監査モデルを実行し、システムプロンプトがSWCレジストリに基づくチェックリストでコードを分析します。

    ollama · temperature 0.1
  3. 03

    JSONレポート

    重大度・位置・SWC ID・修正方法を含む構造化JSONを返すので、jq・CI・ダッシュボードにそのまま連携できます。

    format: "json"
虫眼鏡でSolidityコードを調べるラマ

Why local AI

監査役のラマが
24時間コードを守ります

SolAudit AIは、専門監査の前段階でよくあるミスを素早く洗い出す第一の防衛線です。開発ループの中で即座にフィードバックを得られます。

完全なプライバシー

未公開のプロトコルコードも安心して分析できます。すべての推論はローカルのOllamaランタイム内でのみ行われます。

無料・無制限

トークン課金がないので、コミットごと・ファイルごとに好きなだけ監査してもコストはかかりません。

構造化された出力

OllamaのJSONモードで常に同じスキーマのレポートを受け取れます。パースエラーを気にせず自動化できます。

CI/CDフレンドリー

curlとjqさえあれば、GitHub ActionsやGitLab CIでcriticalが見つかった時にビルドを失敗させられます。

Quick start · curl

ターミナルから5分で最初の監査まで

モデルとOSを選ぶと下のコマンドが自動で切り替わります。コピーして順番に貼り付けるだけです。

  1. 1

    Ollamaをインストール

    ローカルLLMランタイムであるOllamaをインストールします。インストール後、サーバーがバックグラウンドで:11434ポートで自動起動します。

    install.sh
    bash
    curl -fsSL https://ollama.com/install.sh | sh
    
    # インストール確認 (サーバーが停止している場合: ollama serve)
    ollama --version
    curl http://localhost:11434/api/version
  2. 2

    ベースモデルをダウンロード

    solaudit-coder:7b は qwen2.5-coder:7b (4.7 GB) をベースに作られています。

    pull.sh
    bash
    ollama pull qwen2.5-coder:7b
  3. 3

    Modelfileを取得して監査モデルを作成

    curlでModelfile(監査用システムプロンプト + パラメータ)をダウンロードし、Ollamaモデルとして登録します。

    create.sh
    bash
    curl -fsSL https://solauditai.dev/api/modelfile/solaudit-coder-7b -o solaudit-coder-7b.Modelfile
    ollama create solaudit-coder:7b -f solaudit-coder-7b.Modelfile
    
    ollama list | grep solaudit
  4. 4

    クイックテスト

    Ollamaの/api/generateにコード片を直接送ってみます。format: "json"で構造化されたレポートが保証されます。

    quick-test.sh
    bash
    curl http://localhost:11434/api/generate -d '{
      "model": "solaudit-coder:7b",
      "prompt": "contract A { function kill() public { selfdestruct(payable(msg.sender)); } }",
      "format": "json",
      "stream": false
    }' | jq -r '.response | fromjson'
  5. 5

    .solファイル全体を監査

    jq -Rsでファイル内容を安全にJSON文字列に変換し、/api/chatにパイプします。

    audit.sh
    bash
    jq -Rs '{
      model: "solaudit-coder:7b",
      stream: false,
      format: "json",
      messages: [{ role: "user", content: . }]
    }' Vault.sol \
      | curl -s http://localhost:11434/api/chat -d @- \
      | jq -r '.message.content | fromjson'
  6. 6

    SolAuditプロキシAPIを使う

    このサイトをnpm run devで起動すると、/api/auditが代わりにOllamaを呼び出します。JSONエスケープなしで.solファイルをそのまま送信できます。

    proxy.sh
    bash
    curl -s -X POST "https://solauditai.dev/api/audit?model=solaudit-coder:7b" \
      -H "Content-Type: text/plain" \
      --data-binary @Vault.sol | jq .
    
    # リアルタイムストリーミング (NDJSON)
    curl -N -X POST "https://solauditai.dev/api/audit?model=solaudit-coder:7b&stream=true" \
      -H "Content-Type: text/plain" \
      --data-binary @Vault.sol

Live example

脆弱なコントラクトを入れるとこんなレポートが返ります

典型的なリエントランシーとtx.origin認証のバグが潜むVaultコントラクトを、solaudit-coder:7bで監査した結果です。

Critical1High1Medium0Low1risk_score 94/100

入力 · Vault.sol

Vault.sol
solidity
1// SPDX-License-Identifier: MIT2pragma solidity ^0.8.20;34contract Vault {5    mapping(address => uint256) public balances;6    address public owner;78    constructor() { owner = msg.sender; }910    function deposit() external payable {11        balances[msg.sender] += msg.value;12    }1314    function withdraw() external {15        uint256 amount = balances[msg.sender];16        (bool ok, ) = msg.sender.call{value: amount}("");17        require(ok, "transfer failed");18        balances[msg.sender] = 0;19    }2021    function sweep(address to) external {22        require(tx.origin == owner, "not owner");23        payable(to).transfer(address(this).balance);24    }25}

出力 · POST /api/audit

response.json
json
{
  "model": "solaudit-coder:7b",
  "duration_ms": 2814,
  "report": {
    "summary": "Vault is exposed to reentrancy and phishing-based owner takeover. Funds can be fully drained.",
    "risk_score": 94,
    "findings": [
      {
        "id": "SA-001",
        "title": "Reentrancy in withdraw()",
        "severity": "critical",
        "swc": "SWC-107",
        "location": "withdraw() L16-18",
        "description": "External call is made before the balance is zeroed, allowing a malicious receiver to re-enter and withdraw repeatedly.",
        "recommendation": "Apply Checks-Effects-Interactions: set balances[msg.sender] = 0 before the call, or use ReentrancyGuard."
      },
      {
        "id": "SA-002",
        "title": "tx.origin used for authorization",
        "severity": "high",
        "swc": "SWC-115",
        "location": "sweep() L22",
        "description": "A contract called by the owner can invoke sweep() and pass the tx.origin check.",
        "recommendation": "Replace tx.origin with msg.sender and consider OpenZeppelin Ownable."
      },
      {
        "id": "SA-003",
        "title": "Missing events for state changes",
        "severity": "low",
        "swc": null,
        "location": "deposit() L10, withdraw() L18",
        "description": "Deposits and withdrawals emit no events, hindering off-chain monitoring.",
        "recommendation": "Emit Deposit and Withdraw events."
      }
    ],
    "gas_optimizations": ["Declare owner as immutable", "Use custom errors instead of revert strings"]
  }
}

Coverage

SWCレジストリに基づく脆弱性検出

古典的なバグからDeFi特有の攻撃ベクトル、ガス最適化の提案まで、1回のリクエストでチェックします。

SWC-107critical

Reentrancy

外部呼び出し後の状態更新による繰り返し出金

SWC-105/106critical

Access Control

onlyOwnerの欠如、無防備なselfdestruct

SWC-112critical

Delegatecall Injection

信頼できない呼び出し先へのdelegatecall

DeFicritical

Oracle Manipulation

スポット価格への依存、フラッシュローンによる価格操作

SWC-115high

tx.origin Auth

フィッシングコントラクトによる権限奪取

SWC-104high

Unchecked Call Return

低レベルcallの失敗を無視

SWC-101high

Integer Over/Underflow

uncheckedブロックや0.8未満での算術演算

SWC-121high

Signature Replay

nonce・chainIdなしの署名再利用

Proxyhigh

Storage Collision

アップグレード可能プロキシのストレージレイアウト衝突

SWC-114medium

Front-running

トランザクション順序依存、スリッページ未設定

SWC-120medium

Weak Randomness

block.timestamp / blockhash ベースの乱数

SWC-128medium

DoS with Gas Limit

無制限ループ、外部呼び出しのrevertによる停止

API reference

2つのエンドポイント、1つのスキーマ

Ollama(http://localhost:11434)を直接呼び出すか、SolAuditプロキシ(https://solauditai.dev)でさらに簡単に呼び出せます。

エンドポイント
  • POST/api/auditSolidityソースを受け取りOllamaで監査し、JSONレポートを返却SolAudit
  • GET/api/models提供モデル一覧とModelfileのダウンロードURLSolAudit
  • GET/api/modelfile/:slugollama createで使うModelfile (text/plain)SolAudit
  • POST/api/chat対話形式のリクエスト — messages配列でコントラクトを渡すOllama
  • POST/api/generate単一プロンプトのリクエスト — 短いコード片のテスト用Ollama
POST /api/audit パラメータ
名前型場所説明
codestringJSONボディSolidityソースコード (text/plainの場合はボディ全体)
modelstringbody · query使用するモデル。デフォルトは solaudit-coder:7b
streambooleanbody · querytrueの場合、OllamaのNDJSONストリームをそのまま転送

JSONボディでリクエスト

json-request.sh
bash
curl -s https://solauditai.dev/api/audit \
  -H "Content-Type: application/json" \
  -d '{
    "model": "solaudit-pro:32b",
    "code": "pragma solidity ^0.8.20; contract T { function f() external { selfdestruct(payable(msg.sender)); } }"
  }'

CIパイプラインゲート

ci-audit.sh
bash
# critical / high の脆弱性があればCIを失敗させる (exit 1)
for f in contracts/*.sol; do
  curl -s -X POST "https://solauditai.dev/api/audit" \
    -H "Content-Type: text/plain" --data-binary @"$f" \
  | jq -e '[.report.findings[] | select(.severity=="critical" or .severity=="high")] | length == 0' \
  || { echo "❌ $f"; exit 1; }
done

FAQ

よくある質問

AI監査で専門のセキュリティ監査を代替できますか?+

いいえ。SolAudit AIは開発段階でよくあるミスを素早く洗い出す一次ツールです。LLMには誤検知や見逃しがあり得るため、実際の資金を扱うコントラクトは、必ずSlitherやFoundryのファジングなどの静的・動的解析と、専門監査会社によるレビューを併せて実施してください。

コードは外部サーバーに送信されますか?+

Ollama(localhost:11434)を直接呼び出す場合、コードがあなたのマシンから出ることはありません。/api/auditプロキシを使う場合も、このNext.jsサーバーとOLLAMA_HOSTで指定したOllamaサーバーの間でのみやり取りされます。

GPUがなくても動きますか?+

はい。OllamaはCPUのみでも動作します。ただし速度が落ちるため、GPUがない場合はsolaudit-lite:3bまたはsolaudit-coder:7bをおすすめします。Apple Silicon MacではMetalアクセラレーションが自動的に適用されます。

レポートを日本語で受け取れますか?+

はい。リクエストメッセージに "Write description and recommendation in Japanese" のような一文を追加するか、ModelfileのSYSTEMプロンプトの最後に日本語出力のルールを追加して ollama create で再作成してください。

大規模プロジェクト(複数コントラクト)はどう監査しますか?+

モデルのコンテキスト(16K〜32Kトークン)に収まるようファイル単位で分けて送るのが最も正確です。APIセクションのCIスクリプトのようにcontracts/*.solを繰り返し処理するか、forge flattenの結果をsolaudit-pro:32bに送ってください。

リモートサーバーのOllamaを使うには?+

.env.localに OLLAMA_HOST=http://<サーバーIP>:11434 を設定し、サーバー側では OLLAMA_HOST=0.0.0.0 ollama serve で起動してください。外部に公開する場合は、必ずリバースプロキシと認証を追加してください。