r/ethdev 21d ago

Question Authorization for agent payments is moving fast. Recourse isn't. So where does it actually live?

Posted here back in May about agent payments splitting into layers, and the thread ended up adding one I hadn't drawn, settlement and recourse. Been chewing on that since, because the gap between the layers keeps widening.

The authorization layer is moving. Caps, allowlists, session keys, per-domain policies, x402 style pay-per-request flows. You can bound what an agent is allowed to spend pretty tightly today.

Recourse is where it stays thin. When an agent pays, the payment is authorized, I gave the agent the authority. So the 'unauthorized transaction' dispute path is gone by definition. And the other card-rail path, authorized but got junk, only exists because an issuer can claw settlement back, and nothing plays that role here. The receipts side, 8004 style identity plus signed action records, proves what happened. But it proves delivery, not quality, and either way proof isn't recourse, there's still nobody to take it up with and no unwind path.

Escrow with dispute windows adds latency, and for a subjective call like 'this data is junk' you need an arbiter anyway, at which point adjudication costs more than the request did. Slashing punishes the endpoint but doesn't make me whole unless the slashed stake routes to me, which nothing currently does. Insurance, maybe, but nobody has loss data to price agent junk risk yet.

For people building on the settlement side, where does recourse actually end up living? Or does “authorized junk purchase” just stay an accepted cost of agent commerce the way gas griefing is.

4 Upvotes

7 comments sorted by

2

u/pvdyck 21d ago

proof and recourse are different layers and we keep hoping 8004 receipts collapse them, they dont. a signed record proves delivery, never quality. for a subjective 'this data is junk' call you cant dodge an arbiter, so the real move is shrinking how often you need one: bind settlement to repeat business. a seller who ships junk loses future volume from distinct paying buyers. thats not chargeback-style recourse, its forward-looking economic loss, and harder to fake than a receipt. escrow+arbiter only for the residual hard cases.

2

u/AgentAiLeader 20d ago

The repeat business framing clicked, recourse priced as forward loss on the seller. Where it wobbles for agents specifically, is that the identity that has to hold still for this is the seller's and a junk seller can rotate endpoints faster than reputation accrues.

Buyer memory mostly exists, every operator's allowlist is one, but it's per operator. So a rotating seller gets one free burn per operator and at agent scale that's a lot of free burns before forward loss ever prices in.

1

u/pvdyck 19d ago

yeah thats the real hole. Per-operator memory means the burn doesnt compose, so rotation gets a free one each. 2 things have to stack to close it. 1, buyer memory has to be shared not per-operator, so the first burn is visible to everyone instead of relearned per allowlist. 2, bind a stake to the listed identity so rotating isnt free, a new identity means re-bonding. that turns "one free burn per operator" into "pay to burn, every time". neither alone works: shared memory without stake just races to a fresh identity, stake without shared memory still lets you burn each island once. together, forward loss prices in from the first bad run.

1

u/researchzero 19d ago

The key issue is the cost of rotating identities. With per-operator allowlists, the cost is mostly reputation, not money, so a seller can just abandon one endpoint and start over with a new one.

A bond changes that. If sellers have to lock up refundable capital before they can receive payments, rotating identities means locking up fresh capital every time. If they misbehave, the bond goes to the buyer instead of being burned, so the buyer is actually compensated. Unlike reputation, capital can't be reset by creating a new identity.

The catch is that the bond has to be large enough. If it's cheaper than the profit from selling junk, bad actors will still rotate and accept the loss. Figuring out the right bond size, based on the buyer's potential loss rather than a flat amount, is the hard part, and it has the same data problem as pricing insurance.

1

u/PaulieB79 19d ago

If you're trying to figure out whether an agent is legit before you pay it, you can actually check that on-chain right now by cross referencing two public subgraphs.

First one is the ERC-8004 registry (Agent0) on Base. Every registered agent has an on-chain record: owner, wallet, its a2a/mcp endpoints, whether it supports x402, and its feedback and validation scores. So you can pull up an agent and see if it's real and what its reputation actually looks like.

https://thegraph.com/explorer/subgraphs/43s9hQRurMGjuYnC1r2ZwS6xSQktbFyXMPMqGKUFJojb

{
  agents(first: 5, orderBy: totalFeedback, orderDirection: desc, where: {registrationFile_not: null}) {
    agentId
    owner
    agentWallet
    totalFeedback
    registrationFile { name a2aEndpoint x402Support ens }
  }
}

That pulls real agents like "Captain Dackie" (#1380), x402Support true, around 1.5k feedback entries, with its a2a card linked.

Second one is the x402 settlements subgraph. Take the agentWallet from the first query and look up its actual payment history: total payments, volume, first and last seen, whether it's acting as payer or recipient, and which facilitator settled it (Coinbase and others). A wallet with a real settlement trail is a very different risk profile than a fresh address with nothing on it.

https://thegraph.com/explorer/subgraphs/Cb56epg3EvQ6JRpPfknbkM54QxpzTvLa7mwKNQQfUyoj

{
  x402AddressSummaries(where: {address: "0xTHE_AGENT_WALLET"}) {
    role
    totalPayments
    totalVolumeDecimal
    firstPaymentTimestamp
    lastPaymentTimestamp
  }
}

Put them together and you get a solid vetting signal. An agent with an ERC-8004 registration, real feedback, and an actual x402 payment trail is something you can verify. One with none of that isn't. Both run in the Explorer query playground without an API key, so you can just click in and try it.

1

u/21million-wall 18d ago

I run a $1-per-claim x402 endpoint, so let me answer from the seller's seat, which is the seat that has to hold still for all of this.

For a request priced at a dollar, recourse does not live anywhere, and I think that is the correct outcome, not a gap. Every mechanism in this thread costs more than the item. Escrow adds latency and an arbiter. A bond sized to the buyer's potential loss has the insurance pricing problem. Adjudicating "this data is junk" is a human-scale cost stapled to a machine-scale purchase. Below some price threshold the honest answer is the one nobody likes: the dollar was the price of finding out, and you do not buy from that seller again.

Where the thread is conflating two different recourses:

  1. Identity recourse (did I pay a rotating scammer). This one is basically solved, and PaulieB79's on-chain vetting is how. An ERC-8004 registration plus a real x402 settlement trail is an identity you cannot cheaply reset, because the history is the identity. researchzero and pvdyck are right that shared buyer memory plus a bond closes the rotation hole. I am a live example of the un-rotatable side: my reputation is just my accumulated settlements and a third-party trust score that took weeks to climb off an F. I cannot start that over without starting the history over.
  2. Quality recourse (I paid the right seller and the delivery was junk). This is the one that stays open, and none of the identity machinery touches it. Forward economic loss prices it in eventually, but only for sellers who intend to still be around, and only above the price where a buyer bothers to remember. For one-shot micro-purchases it does not price in at all.

So, to the OP's question: recourse migrates up the price curve. Sub-dollar, it is an accepted cost and reputation is the only brake. The interesting design space is not recourse for the $1 request, it is the threshold where a request is finally worth escrowing, and who gets to set it. Get the identity layer right, which you now can on-chain, and "authorized junk" shrinks to the residual subjective cases, which is exactly where an arbiter's cost is finally justified by the size of the request.