Robinhood Chain: paid in USDG, checked against the feed
Robinhood's developer docs ask apps that read Stock Token prices to "reject stale prices" and, when mixing a share price with a token price, to "apply currentMultiplier". vet402 buys stock prices that x402 sellers offer on Robinhood Chain, pays in USDG, and holds each answer to those checks against the Chainlink feed of that Stock Token.
Method v3 · the check, in code
Updated 2026-09-30.
Stock prices sold over x402, against the Chainlink feed
| ticker | share price | feed age | seller said | verdict |
|---|---|---|---|---|
| AAPLfeed 0x6B22…2cD0 | $330.07token $330.26 · ×1.000566 | 17.0 h | bought | shown after the seller is told |
| TSLAfeed 0x4A11…7C38 | $352.28token $352.28 · ×1.000000 | 0.0 h | bought | shown after the seller is told |
| NVDAfeed 0x379E…9F15 | $228.00token $228.18 · ×1.000775 | 18.6 h | bought | shown after the seller is told |
| SPYfeed 0x3197…9f6A | $765.09token $766.41 · ×1.001718 | 21.9 h | bought | shown after the seller is told |
| ORCLfeed 0x0e6a…A844 | $136.16token $136.46 · ×1.002211 | 0.1 h | bought | shown after the seller is told |
Sellers that list Robinhood Chain: can they be paid there?
payTo addresses that the CDP, Dexter and PayAI catalogs list on Robinhood Chain
whose live 402 still offers it, read without paying
bought by vet402
paid, settled on chain and came back with an answer
| seller | price | result | why not, and the fix |
|---|---|---|---|
| api.secondedoracle.xyz0x010a…cf3a · 1 listed | – | not boughtevery listing costs more than the per-purchase cap | – |
| api.syraa.fun0x07cF…2396 · 5 listed | – | not boughtthe live 402 no longer offers Robinhood Chain | – |
| api.dexl.io0x0cCd…8667 · 7 listed | 0.001 USDG | settled on chain, came back0x57500ec8… · 4.5 s | – |
| dlf-gateway.agentlabel.workers.dev0x20Fb…406E · 1 listed | – | not bought | – |
| whaletape.xyz0x25a8…4145 · 3 listed | 0.001 USDG | settled on chain, came back0x1c3a7fb9… · 5.3 s | – |
| api.loopholetape.com0x25d4…59c2 · 19 listed | 0.001 USDG | settled on chain, came back0x003aaf50… · 6.2 s | – |
| clawhunter.fun0x3201…59E5 · 2 listed | 0.03 USDG | bought; the result is shown after the seller is told | – |
| onchainpulse.theaslangroupllc.combought here; the same payTo also serves 7 other hosts0x50ab…12fc · 31 listed | 0.005 USDG | settled on chain, came back0x99c523d4… · 5.9 s | – |
| oracle.the-undesirables.com0x642e…Cc1B · 1 listed | 0.10 USDG | vet402's request was incomplete; nothing settled, not counted against the seller | vet402's request: an input the seller requires was missing or empty |
| api.sys84.org0x64e4…89E4 · 3 listed | 0.01 USDG | bought; the result is shown after the seller is told | – |
| hosaka-agents.vercel.app0x712c…648a · 3 listed | 0.005 USDG | settled on chain, came back0xb80ac2ed… · 2.5 s | – |
| conc-exe.xyz0x94db…56f3 · 4 listed | – | not boughtthe live 402 no longer offers Robinhood Chain | – |
| agent402.tools0xaBF4…a9D0 · 601 listed | 0.001 USDG | settled on chain, came back0xec750aaf… · 5.2 s | – |
| gateway.spraay.app0xdAA0…9F33 · 17 listed | 0.001 USDG | settled on chain, came back0x05d5f69a… · 1.6 s | – |
| api.x402gle.com0xDDDD…eB5E · 137 listed | 0.05 USDG | settled on chain, came back0x68052a3e… · 2.6 s | – |
| web-production-220a3.up.railway.app0xE81C…56F6 · 22 listed | 0.02 USDG | settled on chain, came back0x741dd650… · 5.9 s | – |
| api.prismnetwork.tech0xEcaa…1039 · 1 listed | 0.003192 USDG | bought; the result is shown after the seller is told | – |
| equity.lonestaroracle.xyzbought here; the same payTo also serves 11 other hosts0xeF2a…42ab · 12 listed | 0.05 USDG | bought; the result is shown after the seller is told5 purchases | – |
| api.syraa.fun0xF9dc…e734 · 11 listed | – | not boughtthe live 402 no longer offers Robinhood Chain | – |
The daily record on Robinhood Chain
After each UTC day with purchases, vet402 writes that day's Merkle root into DeliveryRoots on Robinhood Chain, at 0x84DB4733f8F9e6803Af811fD9E438aEBc0b90145. A day is written once and never changes, and only vet402's own key for this contract can write it.
The root holds facts, not verdicts. Each purchase is one leaf: what vet402 paid and to whom, the settlement transaction the chain shows for it (or that none was found), and what came back (the HTTP status, the size and the sha256 of the answer, not the answer). Whether a purchase counts as delivered, and whose side a failure is on, is not in the root: it is decided each time this page is built, with that day's rules, so a rule change never leaves an old verdict on chain. To check a purchase, take its record from data/evm/roots/robinhood.json, compute keccak256 of the record as canonical JSON (keys sorted, no whitespace, strings escaped as JSON.stringify does), and call verify(dayNumber, digest, proof) on the contract: it returns true only for a record of that day. Another contract can make the same call.
| UTC day | dayNumber | purchases in the root | records shown | root | transaction |
|---|---|---|---|---|---|
| 2026-09-30 | 20726 | 18 | 9 | 0x4ac0fb9e… | 0x86e3f916… |
How vet402 pays for this
vet402 pays from one wallet, 0x9B59…4E51, the same on every EVM chain it buys on, with the seller's own x402 402: exact scheme, EIP-3009 transferWithAuthorization only (no Permit2, no approve), to the payTo the 402 named when vet402 planned the purchase, never more than that price. On this chain: at most 0.10 USDG a purchase, 1.00 USDG in total and 20 purchases, in a ledger of its own. The facilitator the seller chose submits the payment and pays its gas.