Reckon402

Reckon402

Agent commerce with memory.

Every x402 settlement writes ERC-8004 reputation. Every ENS lookup reads it back.

The problem

x402, ENS, ERC-8004, USDC — none of them closes the loop. A buyer paying a seller it has never met has:

  • no on-chain history to read
  • no escrow held against bad delivery
  • no path to revoke a payment
  • no primitive for risk-weighted routing or investable revenue claims

The closed loop

Reckon402 closes it.

  • Every x402 payment writes a facilitator-signed ERC-8004 attestation on-chain
  • Every ENS resolution reads it back through CCIP-Read — a verifiable trust signal
  • The signal drives a per-agent on-chain Escrow: low reputation holds a buffer, high reputation releases the payment
  • Escrow is NFT-bound to IdentityRegistry — the buffer follows ownership

Built in this hackathon

  • +Facilitator-signed ERC-8004 attestation on every confirmed settlement
  • +CCIP-Read ENS gateway that returns the trust count
  • +SplitterFactory + EscrowFactory with per-agent contracts
  • +Pluggable, parameterized ITierStrategy curve
  • +NFT-bound withdraw — Escrow follows IdentityRegistry ownership
  • +Fork-tested against live ERC-8004 contracts on Base Sepolia

Coming next

  • Buyer-side proof-of-non-delivery (zkTLS via Reclaim Protocol)
  • Negative attestation that unlocks Escrow withdrawal back to the buyer
  • Other history-aware adaptations are consumer-side and drop in directly: tier pricing, risk-weighted routing, optimistic-vs-strict handling, investable-agent revenue claims

Architecture

Two flows. Onboarding happens once per SellingAgent and provisions ENS, ERC-8004, Splitter and Escrow. Purchase happens per HTTP call and feeds the trust loop. Base Sepolia hosts the value rails; Ethereum Sepolia hosts the ENS namespace.

ONBOARDING — one-time per SellingAgent Operator runs: just onboard-l4d <ens> <eoa> CLI app.reckon402.com form UI onboard-orchestrator drives 6 steps: 1. ENS subname mint seller{N}.reckon402-test.eth on Ethereum Sepolia 2. ERC-8004 agentId register IdentityRegistry.newAgent on Base Sepolia 3. EscrowFactory.createEscrow (CREATE2) per-agent Escrow, agentId-keyed wired to v1 TierStrategy 4. SplitterFactory.createSplitter (CREATE2) recipients = [seller, fac-fee, Escrow] BPS = [ 8700, 300, 1000 ] 5. Sign + write ENS records via gateway x402.splitter x402.escrow x402.amount x402.facilitator x402.endpoint x402.erc8004.agent_id 6. ENS setOwner(subnode, sellerEoa) closes Reckon402 bootstrap-write window Agent is live and paywalled.
PURCHASE — per HTTP call, 3 on-chain txs BuyingAgentagent.reckon402.com (GET) ▼ 402 + x402 PaymentRequirements BuyingAgent signs EIP-3009 typed-data: @reckon402/buyer-sdk locally, or signing.reckon402.com (KMS+Lambda) ▼ X-Payment header agent → facilitator (/x402/settle) facilitator on Base Sepolia sends 3 txs: tx 1 · settle resolve x402.splitter via gateway USDC.transferWithAuthorization buyer → per-agent Splitter tx 2 · distribute per-agent Splitter.distribute 87% → seller EOA 3% → facilitator fee EOA 10% → per-agent Escrow tx 3 · attest ReputationRegistry.giveFeedback one attestation, facilitator-signed gateway cache invalidated All three render live on the dashboard under app.reckon402.com. ─── trust loop ────────────────────────── Next call from any buyer: gateway re-reads ERC-8004 → trust count tier walks T0 → T1 → T2 ... as count grows withdrawableNow rises in per-agent Escrow Seller (NFT owner of agentId), any time: Escrow.withdrawAll() via Claim button gated on IdentityRegistry.ownerOf(agentId)

Live services

  • agent.reckon402.com
    x402-paywalled merchant agent (Hono + withX402)
  • app.reckon402.com
    SellingAgent onboarding flow + per-agent dashboard
  • facilitator.reckon402.com
    x402 verify + settle Worker (D1, ERC-8004 attestation writes)
  • gateway.reckon402.com
    CCIP-Read ENS gateway (D1, ERC-8004 reads, signed off-chain records)
  • signing.reckon402.com
    EIP-712 typed-data signer for buyer flows (AWS Lambda + KMS)

SDKs — shipping with the submission

  • npm
    @reckon402/types
    Canonical x402 v2 wire-format types
  • npm
    @reckon402/buyer-sdk
    Buyer-side helpers: paymentId, EIP-3009 sign, encode
  • npm
    @reckon402/middleware-hono
    withX402 middleware factory for Hono merchants
  • npm
    @reckon402/facilitator-client
    Reckon402 facilitator HTTP client
  • npm
    @reckon402/erc-8004-client
    ERC-8004 Identity + Reputation reads (multichain)
  • npm
    @reckon402/kh-skill
    KeeperHub skill bundle (workflow integration)

Tech stack

x402 v2
HTTP payment protocol
ERC-8004
On-chain agent identity and reputation
ENS + CCIP-Read
Off-chain resolver, ENSIP-25, CAIP-2
Cloudflare Workers
D1, Workers Assets, custom domains
Base Sepolia
USDC, Splitter, Escrow, ERC-8004
Ethereum Sepolia
ENS registry, Reckon402Resolver, subnames
Hono
withX402 middleware, facilitator routes
AWS Lambda + KMS
EIP-712 typed-data signer

Test posture

362
Vitest tests passing
109
Forge tests passing
15/15
healthz probes green