Reference
Tool schemas, output fields, errors, degradation semantics, TTL.
sigil_screen_transaction — 0.02 USDT
Input
| field | type | default | notes |
|---|---|---|---|
chainId | int | 196 | X Layer mainnet |
from | address | — | required |
to | address | — | required |
value | string (wei) | "0" | |
data | hex | "0x" | calldata |
mode | "standard" | "deep" | standard | deep convenes the panel regardless of band |
typedData | object | — | Screen an off-chain EIP-712 signing request (eth_signTypedData) instead of calldata: EIP-2612 Permit, Permit2 PermitSingle/PermitBatch. from/to become optional. Same scorer, subject.kind: "signature". |
Output — the Verdict object
| field | meaning |
|---|---|
receiptId | sgl_ + 22 Crockford-base32 chars, time-sortable, regex ^sgl_[0-9a-z]{22}$ |
schemaVersion / rubricVersion | "1" / "1.0.0" |
subject.digest | transaction: exact abi-encoded transaction digest; signature: canonical digest of the complete typed-data request (see Receipts) |
verdict | 0 PASS · 1 WARN · 2 BLOCK |
riskScore | 0–100 per the methodology |
action | decoded action; inner[] for multicalls; unlimited flag on approvals |
simulation | success, revertReason?, balanceDiff[], approvalsGranted[], coverageGaps[], method |
simulation.method | "simulated" = an eth_call actually ran against live X Layer state (catches honeypot/paused/blacklist reverts); "derived" = read from calldata only. Static output is never labelled as executed. |
findings[] | severity-sorted; each has id, weight, hard, evidence[] |
panel? | present only when the panel convened: votes[], agreement, dissents[] |
reasons[] | human-readable one-liners |
issuedAt / expiresAt | unix seconds; TTL = 900s — re-screen after expiry |
coverage | consulted[] and unavailable[] source names |
seal? | signature, signer, leaf, and once anchored batchId + anchorTx |
sigil_scan_token — 0.01 USDT
Input: chainId (default 196), token (address). Output: TokenSafety — honeypot (true|false|"unknown"), buyTaxBps?, sellTaxBps?, mintable?, ownerCanBlacklist?, ownershipRenounced?, proxyUpgradeable?, topHolderPct?, liquidityUsd?, sources[]. Optional fields are absent (never guessed) when no source answered.
sigil_screen_address — 0.005 USDT
Input: chainId, address. Output: AddressProfile — isContract, labels[], ageDays?, sourceVerified?, sources[].
sigil_screen_deep — 0.10 USDT
Input: the transaction fields from sigil_screen_transaction. Output: { verdict, dossier }; the panel is forced, and the dossier includes token safety when the decoded transaction touches a token, profiles for all spender/recipient addresses in the flattened action tree, and explicit dossier coverage (available, unavailable, or not-applicable). A native-transfer destination is never misrepresented as a token contract.
sigil_verify_verdict — free
Input: receiptId. Output: { found: true, verdict } or { found: false, receiptId } with isError. Also: GET /verdicts/:id (plain HTTP, free).
Degradation semantics
- A failing data source never aborts a verdict and never fabricates a value.
- Port-level failure ⇒ the source name appears in
coverage.unavailable. - Provider-level gaps inside a source ⇒
gap:*entries in that object'ssources[](e.g.gap:goplus,gap:oklink). - Panel timeout / quorum loss / daily cap ⇒ deterministic verdict stands,
panelincoverage.unavailable. - Simulation upgrade unavailable ⇒ static diff with
coverageGaps: ["state_fork_simulation"]or["rpc_unavailable"].
HTTP surface
| route | method | auth | purpose |
|---|---|---|---|
/mcp | POST | x402 for paid tools | stateless MCP JSON-RPC or plain marketplace business replay |
/mcp | GET | x402 discovery | 402 + PAYMENT-REQUIRED for the headline 0.02 service |
/mcp | DELETE | — | 405 (stateless server) |
/health | GET | free | liveness |
/.well-known/sigil.json | GET | free | service manifest: transport, prices, payment, signer, panel availability |
/verdicts/:id | GET | free | receipt lookup |
/verdicts/recent | GET | free | redacted newest-first transparency feed |
/proof/:id | GET | free | Merkle inclusion proof or pending state |
/batches / /batches/:id/manifest | GET | free | known anchors and durable public proof manifests |
/stats / /threats | GET | free | live serving-window aggregates and recent BLOCKs |
Unknown tool names return JSON-RPC -32601 with HTTP 404. Unpaid calls return HTTP 402 with the x402 challenge.