[WIP/DRAFT] x402 & ERC‑8004 - Three‑Phase Integration Plan
A generalized, phased plan to enable x402 payments and ERC‑8004 compatibility across Cortensor, starting with COR Prover and expanding to core inference and agent flows.
Objective
Become agentic AI infrastructure — an agent‑ready network offering one‑of‑a‑kind inference + validation (COR Prover) as first‑class, composable services discoverable via ERC‑8004 and callable via MCP with x402 payments.
Key Points (TL;DR)
Three Phases
Phase 1 — COR Prover x402 MVP (ERC‑8004‑ready): delegated sessions, k‑redundant inference on the same input, time‑gated commit → reveal state machine, PoI consensus + v3 LLM eval, signed attestations, optional on‑chain anchoring.
Phase 2 — Hardening, Passes & 8004 Expansion: webhook push, idempotent invoices, access passes/quotas, ops/observability, publish to ERC‑8004 Validation (and optional Reputation) registries by default.
Phase 3 — Core Inference & Agent Flows: one‑shot x402 for
/v1/infer+ agent‑bound inference (ERC‑8004 agent bindings,cnf/DPoP), reuse the same rails.
Built on Cortensor core protocol: multiple miners run the same input under a time‑gated commit→reveal state machine; results are aggregated via PoI/consensus to mitigate hallucinations and surface anomalies. No core protocol changes required for Phase 1 (uses delegated sessions).
Router Node → Router Agent (MCP + 8004): evolve the existing Web2 RESTful Router Node into a dual‑mode Router Agent that exposes both Inference and Validation (COR Prover) services via HTTP and MCP, discoverable as ERC‑8004 agents and payable via x402. Node operators can run/operate these agent roles alongside mining.
Phase 1 — COR Prover x402 MVP (no core changes, ERC‑8004‑ready)
What ships
x402 middleware (pull/JWS first; webhook optional)
Prover API using delegated sessions (service account)
k‑redundant commit→reveal orchestration via Session/SessionQueue
PoI consensus + v3 LLM evaluation
Attestation (JWS; optional EIP‑712) + evidence bundle (IPFS/Arweave)
Minimal accounting (Invoices + Prover Jobs) + Redis single‑use replay cache
ERC‑8004: register COR Prover identity; write ValidationResponse (Mode A: off‑chain first, on‑chain anchor)
API
POST /v1/prover/validate→ 402 challenge (scope bound tojobHash) → x402 receipt → 202{jobId}GET /v1/prover/jobs/{jobId}→ stateGET /v1/prover/jobs/{jobId}/attestation→ signed JWS/EIP‑712
x402 challenge (template)
WWW-Authenticate: X402 ver="1"; facilitators="onchain"; amount="0.002"; currency="ETH"; chain_id="42161"; pay_to="0xCOR_TREASURY"; price_version="p1"; invoice="inv_<opaque>"; jti="j_<uuid>"; nonce="n_<rand>"; scope="POST:/v1/prover/validate#job=<H(input,candidate,policy)>"; exp="<ISO8601+60s>"; proof="jws"; callback="https://api.cortensor.dev/x402/webhook"; jwks="<facilitator-jwks>"Attestation payload (sketch)
{
"iss":"cor-prover","sub":"job_abc","aud":"https://api.cortensor.dev",
"job":{"input_hash":"H(...)","candidate_hash":"H(...)","policy":{"k":5,"eval":"v3"}},
"session":{"id":"sess_...","tasks":["t1","t2","t3","t4","t5"],"commit_ms":10000,"reveal_ms":10000},
"poi":{"method":"cluster-median","dispersion":0.13,"anomalies":["m12"]},
"v3_eval":{"score":0.87,"rubric":["factuality","consistency"]},
"settlement":{"invoice":"inv_xyz","amount":"0.002","currency":"ETH","tx_hash":"0x..."},
"iat": 1730088000, "exp": 1730091600
}Acceptance (Phase 1)
402 challenge w/ correct scope + 60s TTL
JWS receipt verification + single‑use enforcement
Valid Attestation (offline‑verifiable)
invoice ↔ sessionId ↔ taskIdslinkageEnd‑to‑end success under target SLA with
k=5on testnet
Phase 2 — Hardening, Passes & ERC‑8004 Expansion
Webhook push path + idempotent invoice state machine
Passes/Entitlements:
POST /v1/prover/passes(x402) → issue Cortensor Access Token (JWS) withquota|window|sla_tier→ skip 402 on hot pathObservability: job timelines; miner dispersion histograms; receipt‑verify metrics
Refunds: admin tool; deterministic mapping to revoke/annotate attestations
Abuse controls: per‑buyer rate‑limits; min/max
k; payload caps; policy sanity checks8004 defaults: publish ValidationResponse by default; (optional) Reputation writes
Phase 3 — Core Inference & Agent Flows (ERC‑8004)
Core one‑shot x402:
POST /v1/infersupports 402 + passes; server creates ephemeral sessions under caller (or OBO via service account)Streaming:
POST /v1/infer/stream(scope bound tostreamTaskId)Agent flows:
/v1/agents/{agentId}/infer&/v1/agents/{agentId}/prover/validatewith Agent <8004> + X402 headers; requirecnf/DPoP binding and includeagent_idin scopeSessionPaymentStaking (optional): credit pool after x402; settle via existing SessionPayment
MCP Integration (Model Context Protocol)
Expose Cortensor as an MCP server so agent runtimes can discover and call tools without bespoke wiring.
Tools (methods & args)
cortensor.infer(prompt: string, policy?: { k?: number, modelHints?: object, sla?: string }, stream?: boolean)→ returnsjobIdand result (or streams tokens ifstream=true).cortensor.prover.validate(input: any, candidate: any, policy?: { k?: number, timeBudgetSec?: number, eval?: "v3" })→ returnsjobId, laterattestation.
Auth & Payment over MCP
On first call, server emits an x402 challenge event (same fields as HTTP 402). Client responds with a facilitator receipt (JWS) via MCP
tool/usemetadata.Support passes to skip repeated challenges. Bind payment to caller via
cnf/DPoP; includeagent_idinscopefor ERC‑8004 agents.
Streaming
Use MCP
tool/resultstreaming chunks forinfer(stream=true); scope binds tostreamTaskId.
Discovery
Advertise tools and schemas in MCP
capabilities/toolsmanifest; link to/.well-known/x402.jsonfor rails/pricing.
Lifecycle
Server creates ephemeral sessions per call (or reuses when a pass is active). OBO supported via service account.
Errors & telemetry
Map x402/payment errors to MCP error codes; include
invoice_idandrequestHashfor audit.
ERC‑8004 Agent Registration (MCP‑backed Sessions)
Two discoverable services registered as 8004 agents so other agents can find and pay via x402:
Cortensor Inference Agent (
agent:cortensor:infer:v1) — wraps/v1/agents/{agentId}/inferand MCP toolcortensor.infer; creates ephemeral sessions per call (or reuses when a pass is active).COR Prover (Validation) Agent (
agent:cortensor:prover:v1) — wraps/v1/agents/{agentId}/prover/validateand MCP toolcortensor.prover.validate; runs delegated sessions to execute k‑redundant re‑inference and produce attestations.
Discovery/Manifests: publish Agent Cards that reference both HTTP endpoints and MCP tools, with pricing/SLA and x402 rails.
Scope & binding: include
agent_idinscope; require cnf/DPoP so receipts are bound to the calling agent. Receipts/passes are accepted over HTTP or MCP.Session semantics: sessions are ephemeral and bound to (agentId, jobId); OBO (on‑behalf‑of) supported via service account. Validation agent writes ValidationResponse to the 8004 registry (Mode A now; Mode B later).
Minimal Agent Card (illustrative)
{
"id": "agent:cortensor:infer:v1",
"capabilities": ["infer"],
"endpoints": {
"http": {"infer": "/v1/agents/{agentId}/infer"},
"mcp": {"tools": ["cortensor.infer"]}
},
"payments": {"protocol": "x402", "discovery": "/.well-known/x402.json"},
"slaTiers": [{"k":1,"latency":"P10S"},{"k":3,"latency":"P25S"},{"k":5,"latency":"P30S"}]
}{
"id": "agent:cortensor:prover:v1",
"capabilities": ["prover.validate"],
"endpoints": {
"http": {"validate": "/v1/agents/{agentId}/prover/validate"},
"mcp": {"tools": ["cortensor.prover.validate"]}
},
"payments": {"protocol": "x402", "discovery": "/.well-known/x402.json"},
"attestation": {"formats": ["JWS","EIP-712"], "evidence": ["ipfs","arweave"]}
}Router Node → Router Agent (MCP + 8004)
Dual‑mode server: keep today’s REST endpoints and add an MCP server; both surfaces emit/accept x402 challenges/receipts.
Two services: (1) Inference (ephemeral sessions per call or pass‑backed reuse), (2) Validation (delegated sessions running k‑redundant re‑inference + PoI + PoUW + v3 eval to produce attestations).
ERC‑8004 identity: register Router Agent identities for Inference and Validation (or a multi‑capability single agent). Include
agent_idin x402scope; require cnf/DPoP binding for agent callers.NodeOps packaging: single Docker image / Helm chart with flags:
--enable-mcp,--enable-validation,--mcp-port,--http-port,--agent-id,--erc8004-key,--x402-discovery-url,--service-account-key. Defaults keep behavior backward‑compatible (REST‑only) until enabled.Security: DPoP on agent flows; short‑TTL receipts; single‑use with Redis; attestation signer keys managed per node (rotatable), with public JWKS for verification.
Migration path: start by enabling Inference over MCP; add Validation once COR Prover pipeline is stable; optional Mode B (on‑chain requests) later.
Observability: per‑agent metrics (402 rate, job latency, k, dispersion), webhook success, MCP tool usage, and attestation issuance counts.
Pricing & SLA Matrix (example)
Cheap‑Fast
1
5–10s
Single run, no eval
0.00006
Balanced
3
15–25s
PoI consensus, eval on high dispersion
0.00012
Critical
5
≤30s
PoI + eval always, stronger finality
0.00020
Price = base + k multiplier + SLA uplift; adjust for testnet/mainnet.
Security & Compliance Notes
Replay: bind
scopetojobHash/sessionId/agentId; enforce single‑use via Redis & invoice stateFinality: facilitator guarantee for UX; background confirmation checks
Client binding: support
cnf/DPoP for agent‑bound callsPrivacy: hash inputs; store raw evidence off‑chain; gate bundle access
Minimal Data Model (sketch)
invoices:
invoice_id, scope_hash, amount, currency, chain_id, pay_to, facilitator, tx_hash, status, exp, used_at, price_version, jti, buyer_walletprover_jobs:
job_id, invoice_id, job_hash, session_id, task_ids[], k, policy_json, status, dispersion, score, attestation_jws
Last updated