Protocol

Dashboard · Triage

Why a bond

Writing a plausible vulnerability report now costs roughly nothing; triaging one still costs a security engineer between thirty minutes and three hours. Platforms answered that asymmetry with KYC, rate limits and invite-only programs, which lock out new researchers and legitimate agents alike. Pricing the HTTP request restores skin in the game without an account system.

Two gates

Step one buys a triage ticket for the report metadata. Step two, priced at a multiple of the bond, unlocks the proof of concept. A bot that sprays a thousand generated writeups has to fund a thousand second payments, and the report is not queued for a human until it does.

Endpoints

MethodPathPayment
GET/api/programsfree
GET/api/statsfree
GET/api/feedfree, redacted
POST/api/v1/reports?program=…x402 · program bond
POST/api/v1/reports/:id/pocx402 · bond × multiplier
GET/api/v1/reports/:idfree

Flow

POST /api/v1/reports?program=monad-escrow-demo
  -> 402 Payment Required
     PAYMENT-REQUIRED: base64({ scheme:"exact", network:"eip155:10143",
                                asset:"0x534b…43A3", amount:"1000000",
                                payTo:"0x…", extra:{name:"USDC",version:"2"} })

  client signs an EIP-3009 transferWithAuthorization and retries with X-PAYMENT
  -> 200 { id, status:"awaiting_poc", contentHash, nextStep:{ url, priceUsd } }

POST /api/v1/reports/:id/poc   (second gate)
  -> 200 { status:"triaging" }

Reputation

A flat bond taxes good researchers to price out bots. Bonds here are priced per hunter from settled history — reports submitted, ruled valid, ruled slop, and bounty actually paid out. The multiplier applies to both gates.

TierEarned byBond
proven3+ valid, ≥50% signal×0.35
trusted1+ valid, ≥34% signal×0.6
new / unknownno settled history×1.0
penalised2+ slop, or slop with no valid×2.0

Quote your own price with &hunter=0x… on the unpaid probe. That is not a trust decision: the paid retry reprices from the real payer, so claiming someone else's history produces a signed amount that no longer matches the requirements and fails verification. A proven hunter still posts a bond — a discount that reaches zero is exactly what a patient attacker farms.

ERC-8004

HunterReputation.sol keeps the per-hunter tally on chain so the discount a hunter is quoted can be checked against the same numbers the server used, and mirrors each verdict into an ERC-8004 ReputationRegistry as feedback against their agentId (valid +100, duplicate +25, out of scope −25, slop −100, tagged security-research). Registry writes are try/catch and emit on failure: a registry outage must not block triage or a refund.

Both the registry address and a hunter's agentId are optional. Requiring an ERC-8004 registration to file a bug would exclude the independent researchers the platform exists for.

Duplicates

Reports are hashed over program, asset, severity and a normalised bag of summary words, so rewording a submission does not produce a new hash. A duplicate is accepted, marked, and still costs the bond — reposting is not free, which is what stops it being a rational strategy.

Refunds and slashing

Valid and good-faith duplicate reports are refunded; hallucinated findings and scanner dumps are slashed to the triage pool. The exact scheme settles straight through to payTo, so with an EOA the refund is an off-chain obligation. Pointing payTo at SubmissionRegistry makes the hold, the refund and the slash enforceable on-chain instead.

Settlement

Both Monad networks are live at once. The 402 advertises one accepts entry per network and the payer picks the chain; both gates for one report must settle on the same chain, since one submission is one escrow position.

TestnetMainnet
CAIP-2eip155:10143eip155:143
USDC0x534b…43A30x7547…b603
DomainUSDC / 2USDC / 2

Facilitator x402-facilitator.molandak.org verifies and submits; this service never holds a signing key.