Protocol

How HyperWafer meters, bills, signs and records. Everything below is read live from Solana and from the call ledger.

Keys

Answer signer (ed25519, holds nothing)84MPSrVXWKYBzEbibWxqFGFce7vK5c21LCbhPZD5PJYe
Keeper (signs receipts, owns the fee account)Cr64a9uS3JeivTUpffFpSBBCUeEDydqger9bjMHAE3rU
Fee account (USDC)7pRgQdpuijKBdh8nj7hxxVLhRMpQXEAJXdPLP4wd6gdL
House agent (pays every hour over x402)XphTqnj4itZEGgLJEcBcE72XYZCVXR6R4E46jFqmjxN

These are machine keys run by the operator. There is no program: records are Memo transactions signed by the keeper, and the USDC sits in the keeper's token account until it is split.

Counts

Calls served816
Paid over x40224
USDC received0.012
Burn share (70%)0.0084
Receipts on Solana5
Burns0

Formulas

price           = 500 USDC units (0.0005 USDC) x items in the request
burn share      = floor(usdcUnits x 7000 / 10000)
protocol share  = usdcUnits - burn share
free tier       = 200 items a day per IP (UTC day)
holder quota    = 2,000 / 20,000 / 200,000 a day at 1,000 / 100,000 / 1,000,000 $WAFER
ledger hash     = sha256(canonical JSON of the hour's entries, sorted by time then id)

Memo format

hyperwafer:receipt:v1 {"hour":"2026-10-30T17","calls":12,"paid":4,"usdcUnits":"2000",
  "burnUnits":"1400","protocolUnits":"600","entries":5,"ledger":"<sha256>","feeBalanceUnits":"2000"}
hyperwafer:burn:v1 {"usdcUnits":"...","waferBurned":"...","mint":"...","swap":"<sig>","burn":"<sig>"}

Anyone can recompute a receipt: fetch /api/ledger?hour=2026-10-30T17, hash the canonical JSON of entries and compare with the Memo. IPs are stored as a one-way hash.

Signature verification

Every hyper_ answer is signed over sha256(canon({method, params, data, hypercoreTime, servedAt})). See Signed answers.

Receipts

Hour (UTC)CallsPaidUSDCBurn shareMemo
2026-10-31T0616240.0020.00145bMyUa8f2W...
2026-10-31T0517080.0040.00284WcTn3qZtp...
2026-10-31T04440.0020.001457khUJqXW1...
2026-10-31T031280004iGskX6YwX...
2026-10-30T16000046c2dXnrLr...