Magneta Contract Risk について
Magneta Contract Riskは、EVMスマートコントラクトのオンチェーンリスクレポートをAIエージェント向けに提供し、初期スクリーニングやリスクの振り分けに使えます。公開データ、ソース検証、静的解析を組み合わせ、有料レポートはx402で呼び出しごとに決済します。
主な機能
- 01複数のEVMチェーンに対応
- 02プロキシ、所有権、トークン状態を確認
- 03リスクのあるオペコードと関数セレクターを検出
- 04ソース検証とAderynの検出結果を活用
- 05無料の簡易フラグと有料レポート
活用シーン
- 01デプロイ前のコントラクトの初期確認
- 02プロキシと実装のリスク比較
- 03エージェントへのコントラクトリスク情報の提供
MCP 対応
MCP サーバーはStreamable HTTP経由で、有料の`contract_risk_summary`ツール、`supported_chains`、無料の`contract_quick_flags`を公開します。有料ツールは呼び出しごとにx402で決済します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://x402.magneta.finance/mcpclaude mcp add --transport http bosacks-magneta-contract-risk https://x402.magneta.finance/mcp{"mcpServers":{"bosacks-magneta-contract-risk":{"type":"http","url":"https://x402.magneta.finance/mcp"}}}Cursor で開く{"servers":{"bosacks-magneta-contract-risk":{"type":"http","url":"https://x402.magneta.finance/mcp"}}}VS Code で開く{"mcpServers":{"bosacks-magneta-contract-risk":{"type":"http","url":"https://x402.magneta.finance/mcp"}}}{"mcpServers":{"bosacks-magneta-contract-risk":{"serverUrl":"https://x402.magneta.finance/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| address | string | はい | コントラクトアドレス(0x...) |
| chainId | integer | はい | EVM チェーン ID |
詳細
Magneta Contract Risk (x402)
AI エージェント向けにオンチェーンのスマートコントラクトリスクレポートを販売する、小規模な本番運用向けサービスです。呼び出しごとに x402 のマイクロペイメント(USDC、EIP-3009 の exact スキーム)で支払います。Express プロセスは 1 つで、有料の提供面は 2 つです。
| 提供面 | ルート | 価格 |
|---|---|---|
| HTTP | GET /v1/risk/:chainId/:address | $0.02 |
| MCP(Streamable HTTP、ステートレス) | POST /mcp、ツール contract_risk_summary(chainId, address) | $0.02 |
| MCP | ツール supported_chains | 無料 |
| ヘルス | GET /health | 無料 |
どちらの有料提供面も、src/risk/analyze.ts の同じ analyzeContract(chainId, address) を呼び出します。分析は決定的で、公開データのみ(RPC、Blockscout、Sourcify、ローカルの aderyn バイナリ)を使用します。分析に LLM や API キーは不要です。
不明なチェーンまたは形式が正しくないアドレスの場合、支払いを要求する前に 400 を返します。分析自体が失敗した場合(コントラクトではない、上流エラー、タイムアウト)、レスポンスはエラーステータスとなり、購入者に請求されません(x402 は成功したレスポンスのみ決済します)。
対応チェーン(v1、src/chains.ts):Base 8453、Base Sepolia 84532、Ethereum 1、Arbitrum One 42161。RPC_URL_<chainId> で RPC を上書きできます。
レポート
{ chainId, address, analyzedAt, isContract, bytecodeSize, proxy, erc20, opcodes, selectors: { found },
blockscout, sourcify?, aderyn, score, level, flags, notes }
proxy:EIP-1967(implementation/admin/beacon)、旧 zeppelinos スロット、EIP-1822、EIP-1167 クローン、または Blockscout の検出結果に基づく{ type, implementation, admin? }。implementation のバイトコードも分析されます。erc20:name、symbol、decimals、totalSupply、owner()(ゼロアドレスかどうかも含む)、paused()。各プローブは個別に try/catch されます。opcodes:PUSH データをスキップする実際のオペコード走査による SELFDESTRUCT/DELEGATECALL の有無(部分文字列の照合は行いません)。selectors.found:リスクのあるシグネチャ(mint、pause、blacklist、手数料/税の設定、アップグレード、所有権など)のうち、4 バイトのセレクターがバイトコード内に PUSH4 として現れるもの。ヒューリスティックです:存在することは到達可能である証明ではありません(notesにも記載されています)。blockscout/sourcify:検証ステータス、コンパイラー、コントラクト名、作成者、作成トランザクション。Blockscout は 5 秒でタイムアウトし、失敗時はblockscout: { available: false }となります。Sourcify への問い合わせは、Blockscout に到達できない場合、または「未検証」と報告された場合にのみ、フォールバックとして行われます。プロキシでは、implementation の検証結果が判定に使われます。aderyn:検証済み Solidity ソースが利用可能な場合、ソースを一時ディレクトリ(パスをサニタイズ済み)に書き込み、aderyn を 15 秒のタイムアウト付きで実行します:{ ran, counts: { high, low }, top: [{ title, severity, instances }] }。それ以外の場合は{ ran: false, reason }となります。リクエストが失敗することはありません。- 合計処理時間の上限:分析ごとに厳格な期限を 24 秒に設定しています。結果はチェーン ID とアドレスごとにメモリ内で 10 分間キャッシュされます(支払いは呼び出しごとに発生します)。
スコアの基準(src/risk/score.ts)
スコアは 0~100 で、数値が高いほどリスクが高くなります。加算方式で、上限は 100 です。
| 点数 | 条件 |
|---|---|
| +25 | ロジックコントラクトのソースが未検証(Blockscout、次に Sourcify) |
| +0(フラグあり) | すべてのプロバイダーに到達できず、検証状況が不明 |
| +15 | プロキシ/アップグレード可能 |
| +10 | owner() が存在し、ゼロアドレスではない |
| +15 | mint セレクター |
| +15 | blacklist/bot-list セレクター |
| +10 | 手数料/税/上限/取引切り替えの設定関数 |
| +5(現在 pause 中なら +5) | pause セレクター |
| +10 | SELFDESTRUCT オペコード |
| 1 件につき +5、最大 +20 | aderyn の重大度 high の検出結果 |
レベル:0~24 は low、25~49 は medium、50~74 は high、75~100 は critical。コントラクトではないアドレスはエラーとなり、スコアは算出されません。このスコアは一次選別の指標であり、監査ではありません。
対応チェーン
メインネット:Ethereum(1)、OP Mainnet(10)、BNB Smart Chain(56)、Gnosis(100)、Unichain(130)、Polygon(137)、Sonic(146)、
World Chain(480)、Mantle(5000)、Base(8453)、Arbitrum One(42161)、Celo(42220)、Avalanche C-Chain(43114)、Linea(59144)、
Blast(81457)、Scroll(534352)。テストネット:Base Sepolia(84532)、Sepolia(11155111)、OP Sepolia(11155420)、Arbitrum Sepolia(421614)。
Blockscout のインスタンスがないチェーン(BNB、Sonic、Mantle、Avalanche)では、検証済みソースに Sourcify を使用します。zkSync Era は意図的に対象外です。EraVM のバイトコードは、オペコードとセレクターのヒューリスティクスを機能させないためです。Blockscout または
Sourcify から取得したコンパイラーのリマッピングは remappings.txt に書き込まれ、aderyn が @openzeppelin/... 形式のインポートを解決できるようにします。
決済ネットワーク
購入者は Base(eip155:8453)上の USDC で支払います。SOLANA_PAY_TO を設定すると、同じルートとツールで
Solana メインネット(solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp)上の USDC も受け付けます。決済には同じ Coinbase CDP ファシリテーターを使用し、
Solana の手数料も負担します。Solana の受取アドレスには、あらかじめ USDC トークンアカウントを作成しておく必要があります(SDK は作成しません)。
pnpm buy-once-svm は Solana のキーペア(SVM_PRIVATE_KEY、base58 形式の 64 バイトの秘密鍵)を使って、1 回分の呼び出し料金を支払います。
無料枠、エージェントスキル、クライアントパッケージ
- 無料プレビュー:
GET /v1/flags/:chainId/:addressと MCP ツールcontract_quick_flagsは、レポートのバイトコードのみを使用する部分(プロキシ、所有者/一時停止状態、リスクのあるセレクター、オペコード、部分スコア)を、支払いなしで返します。IP ごとに 1 分あたり 30 件に制限されます。ソースの検証と aderyn の検出結果は有料レポートにのみ含まれます。 - エージェントスキル:
npx skills add Bosacks/magneta-risk-x402 --skill magneta-contract-riskを実行すると、 HTTP、MCP、または Coinbase Agentic Wallet 経由でレポートを購入するタイミングと方法をエージェントに教える skills/magneta-contract-risk/SKILL.md がインストールされます。 - クライアントパッケージ:
@magnetafinance/contract-risk(npm i @magnetafinance/contract-risk @x402/[email protected] @x402/[email protected] @x402/[email protected] [email protected]。ソースはpackages/contract-risk-client)は、x402 の決済フローを型付きクライアントでラップし、LangChain.js、Vercel AI SDK、 OpenAI/Anthropic の関数呼び出し用ツールアダプターを提供します。 - ElizaOS プラグイン:
packages/plugin-elizaos(@magnetafinance/plugin-contract-risk)は、 アクションCONTRACT_QUICK_FLAGS(無料)とCONTRACT_RISK_REPORT(有料、決済ごとに上限あり)を Eliza エージェントに追加します。 - ERC-8004 ID:登録ファイル erc8004/agent-registration.json は
/.well-known/agent-registration.jsonで提供されます。scripts/erc8004-register.tsは Base IdentityRegistry0x8004A169FB4a3325136EB29fA0ceB6D2e539a432のregister(string)呼び出しを出力します。
実行
pnpm install --ignore-scripts
cp .env.example .env.local # fill PAY_TO, X402_NETWORK, FACILITATOR_URL (+ CDP keys if cdp)
pnpm dev # tsx, or: pnpm build && pnpm start
pnpm type-check && pnpm test # unit tests, no network
pnpm analyze 84532 0x036CbD53842c5426634e7929541eC2318f3dCF7e # free local run, prints the report
購入(資金を入金した購入者キーが必要です。支出上限は $0.05 です。このキーをサーバーに置かないでください):
BUYER_PRIVATE_KEY=0x... pnpm buy-once # HTTP; prints the report and the PAYMENT-RESPONSE tx hash
BUYER_PRIVATE_KEY=0x... pnpm buy-once-mcp # same through the MCP tool
環境
PUBLIC_URL(https、末尾にスラッシュなし):Bazaar の検出用 MCP リソース URL として通知されます。リバースプロキシの背後では、サーバーはループバックプロキシ(trust proxy = loopback)を信頼するため、HTTP リソース URL はhttps://として通知されます。そうでない場合、ファシリテーターは「resource must start with https://」として検出を拒否します。
| Var | 意味 |
|---|---|
PORT | リッスンポート(デフォルトは 3011) |
PAY_TO | 受取アドレス(必須) |
X402_NETWORK | CAIP-2 ネットワーク。デフォルトは eip155:84532(Base Sepolia)。本番環境では eip155:8453 |
FACILITATOR_URL | cdp(Coinbase CDP ファシリテーター。CDP_API_KEY_ID と CDP_API_KEY_SECRET が必要)または https://x402.org/facilitator などの HTTP ファシリテーター URL(テストネット) |
ADERYN_BIN | aderyn 0.6.8 バイナリ。デフォルトは /home/dominique/bin/aderyn |
RPC_URL_<chainId> | チェーンごとの任意の RPC オーバーライド |
BUYER_PRIVATE_KEY、TARGET_URL、MCP_URL、CHAIN_ID、ADDRESS | バイヤースクリプト専用 |
デプロイ(systemd + Caddy)
pnpm install --ignore-scripts && pnpm build
rsync -a --exclude node_modules --exclude .env.local --exclude 'scripts/logs' ./ server:/srv/magneta/risk-x402/ # never overwrite the server's .env.local; then pnpm install --prod --ignore-scripts there
sudo cp deploy/magneta-risk-x402.service /etc/systemd/system/ && sudo systemctl enable --now magneta-risk-x402
# add deploy/Caddyfile.snippet to the Caddyfile (vhost x402.magneta.finance -> 127.0.0.1:3011), reload Caddy
ユニットは /srv/magneta/risk-x402/.env.local を読み込みます。メインネットでは X402_NETWORK=eip155:8453 と FACILITATOR_URL=cdp を設定してください。
Aderyn が使用する solc のダウンロード先/キャッシュは、サービスユーザーから利用できる必要があります(HOME に書き込み可能であること)。
Bazaar の検出
どちらの有料サーフェスも、@x402/extensions/bazaar の declareDiscoveryExtension を使用して x402 Bazaar の検出メタデータを宣言します(HTTP ルートにはパスパラメータのスキーマと出力例、MCP ツールには入力スキーマを指定)。また、bazaarResourceServerExtension はリソースサーバーに登録されています。このメタデータは PAYMENT-REQUIRED ヘッダー(extensions.bazaar)に表示されます。実際にカタログへ登録されるかどうかはファシリテーターによります。ファシリテーターは支払いの決済時にリソースをインデックス化するため、Bazaar 対応ファシリテーター(CDP)経由で最初の実際の有料呼び出しが行われた後にのみ、掲載されます。公開されている x402.org のテストネットファシリテーターでは、掲載は想定されていません。
本番環境の状況(2026-10-16)
Base メインネット(eip155:8453)上の https://x402.magneta.finance で稼働中です。Coinbase CDP ファシリテーターを使用し、呼び出しごとに $0.02 で、x402 Bazaar に掲載されています(ルート /v1/risk/:chainId/:address)。購入者は Base 上の USDC が必要で、ETH は不要です。ファシリテーターは、支払者が payTo と同じ場合、支払いを拒否します(self_send_not_allowed)。
ライセンス
MIT、Copyright (c) 2026 Magneta Finance。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。