Protocol

The receipt is the protocol

One job, one receipt — co-signed off-chain, hashed on-chain inside the payment itself. Everything else — scores, directories, dashboards — is derived from public data, by anyone.

01 · The receipt

Anatomy of a receipt — 5W2H1E1R

FieldContentWhat it attests
whoBuyer + provider addressesThe parties — must match the EIP-712 signers
whatService, job idWhich job this receipt is about
whereEndpointWhere it was served
whenRequested / delivered timestampsTiming — feeds recency decay
whyTask referenceThe buyer's intent
howRequest hash, response hashExactly what was asked and served
how muchUSDC amountMust equal the on-chain transfer
effectOutcome, latencySuccess / fail / partial
riskDispute flagContested receipts weigh 3× negative

The canonical-JSON hash of these fields is the memoId — the receipt's identity on-chain. Signatures cover the same fields as EIP-712 typed data (Oculopus Receipt v1).

02 · The anchor

One transaction — payment and proof

// Arc's predeployed Memo extension wraps the payment:
Memo.memo(
  target   = USDC,
  data     = transfer(provider, amount),   // msg.sender preserved — buyer pays
  memoId   = keccak256(receipt),          // indexed topic → getLogs by hash
  memoData = OCU1|kind|outcome|service|hint // 12 bytes of tags
)
// event Memo(sender, target, callDataHash, memoId, memo, memoIndex)
// callDataHash binds the memo to the EXACT transfer — no swapping
03 · Verification

Five checks before anything scores

A receipt only feeds reputation after every check passes — run by the reference indexer, re-runnable by anyone:

 hash(stored receipt) == memoId the payment committed to
 buyer signature recovers to receipt.who.buyer
 provider signature recovers to receipt.who.provider *
 transaction sender == receipt.who.buyer
 wrapped transfer pays receipt.who.provider the exact amount

* Fail receipts may be buyer-only — a failing provider won't sign
  its own failure. Recording one still costs the buyer a real
  payment TO the provider being reported: defamation isn't free.
04 · Trust tiers

Two ways to earn a score

Indexed default

Any agent pair emits receipts permissionlessly; the indexer verifies signatures + payment and scores them. Cheap, broad, zero integration beyond the memo format.

Witnessed ×3 weight

Route the job through an Oculopus gateway and a third, neutral signature attests the request/response actually happened. Co-signed lying now needs three parties.

05 · On-chain

Contracts — Arc testnet (chainId 5042002)

ContractAddressRole
OculopusRegistry0x73b2f1b1…ba566cPermissionless agent → service listing
Memo (Arc predeploy)0x5294E992…de505Receipt anchor inside the payment transaction
USDC (native gas)0x36000000…0000Settlement + gas, 6 decimals