proof
Check every number yourself
Pick a read. This page builds the calldata, sends a real eth_call to rpc.mainnet.chain.robinhood.com, and shows you the request, the raw ABI-encoded bytes that came back, and the decode. It also hands you a curl line so you can get the same bytes without trusting this site at all.
to 0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B
calldata 0xfff591270000000000000000000000000000000000000000000000000000000000001845
JSON-RPC request
paste this into curl and compare
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_call",
"params": [
{
"to": "0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B",
"data": "0xfff591270000000000000000000000000000000000000000000000000000000000001845"
},
"0x5227e9c"
]
}Raw response
ABI-encoded bytes, exactly as returned
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182f000000000000000000000000000000000000000000000000000000000090a74000000000000000000000000000000000000000000000000000000000002ab980000000000000000000000000000000000000000000000000000000000090a740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065edc000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000008de64b4000000000000000000000000000000000000000000000000000000000002fce9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ab4c71a000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c4b93888d0"
}Decoded
field names are this app's reconstruction; the values are the chain's
- 0enrolleduint2561
- 1isSponsoruint2560
- 2defaulteduint2560
- 3sponsorIduint2566191
- 4lineuint2569480000
- 5availableuint2562800000
- 6delegatedLineuint2569480000
- 7delegatedOutuint2560
- 8reserved8uint2560
- 9delegatedInuint2560
- 10outstandinguint2566680000
- 11activeLoansuint2561
- 12loansTakenuint256321
- 13totalBorroweduint2562380680000
- 14totalFeesPaiduint2563133074
- 15reserved15uint2560
- 16reserved16uint2560
- 17enrolledAtuint2561790232346
- 18scoreuint25647
- 19reserved19uint2560
- 20dollarDaysuint25610740525730000
Reproduce it without this site
curl -s -X POST https://rpc.mainnet.chain.robinhood.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B","data":"0xfff591270000000000000000000000000000000000000000000000000000000000001845"},"0x5227e9c"]}'provenance
How these ABIs were recovered
None of the Priors contracts are verified on Sourcify, and Robinhood Chain's Blockscout API is behind Cloudflare, so there was no ABI to download. Every signature this app uses was reconstructed and then proven against live state:
- 1
Extract selectors from bytecode
Walk the deployed runtime code from eth_getCode (following ERC-1967 proxies for Identity and USDG), stepping over PUSH data, and collect every PUSH4 immediate. CreditLensV2 yielded 8, CreditPoolV2 yielded 149.
- 2
Resolve them to signatures
Look each selector up in the public signature databases, and brute-force the remainder by hashing candidate signatures until the selector matched. That is how borrow(uint256,uint256,uint64,address,uint256) and the Borrowed / Repaid / FeeSplit event signatures were found.
- 3
Pin struct layouts against real events
getLoan(15334) was matched field-by-field to the Borrowed log for that same loan ( agentId 494, sponsorId 490, principal 9_200_000, fee 9_200, dueAt 1791191488), which fixes every position unambiguously.
- 4
Verify the arithmetic reproduces the chain
Fees check out exactly: loan 15334 is 9_200_000 × 1% × 3/30 = 9_200. The fee split for loan 15231 was 3353 / 1396 / 837 of a 5586 fee, precisely 60 / 25 / 15. And the score model re-derived from creditReport() reproduced lens.score() for 60 of 60 sampled agents. Both loans are repaid and therefore immutable; re-run the reads yourself: getLoan(15334) getLoan(15231)
The recovery scripts are kept in the repository under _probe/ so the derivation is reproducible rather than asserted.
honesty
What this app does not know
- caveatFour creditReport slots are unlabelled
Indexes 8, 15, 16 and 19 are zero for every agent on mainnet, so their meanings could not be told apart. The score inputs the docs call qualifiedLoans, recourseHonored and childrenDefaulted live among them and are all currently 0. This app shows them as zero and never guesses a label. Where it needs qualified loans it derives them from real loan rows instead.
- caveatThe dollar-days term rounds up, and we cannot prove why
Treating it as a ceiling reproduces every observed score. But every sampled agent carrying dollar-days also had exactly one open loan, so ceil(dollarDays/$10) and floor(…)+1 while a loan is open are indistinguishable from the data. We implement the ceiling and show a live pass/fail badge rather than hide the ambiguity.
- caveatThe leaderboard is agents seen borrowing in the last two days
Agents are discovered from Borrowed logs over the most recent two days of blocks, plus the sponsors that vouched them, because an unfiltered scan of the whole history exceeds the node's 10,000-log ceiling. An agent that has not drawn in that window is still fully readable at /agent/[id]; it just does not appear in the ranking until it borrows again. Event timestamps, by contrast, are exact: the loan struct's startedAt / closedAt, which the pool sets to block.timestamp, with block headers as the fallback.
- caveatThe explorer links are unverified
Robinhood Chain's Blockscout instance could not be reached from the build environment to confirm it indexes chain 4663, so outbound tx links are best-effort. This page, which re-runs the call itself, is the authoritative check.
- verifiedEverything else is a live read
No database, no snapshot, no back-fill. Reads are cached in memory for seconds to survive the public RPC's rate limits, and every payload carries the timestamp it was fetched at.
addresses
What this app talks to
CreditPoolV2
loans, liquidity, params, events
0x281210097f0de7A8FB6F87310AF0f089c9C8DE21
CreditLensV2
score, available, creditReport
0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B
Identity (ERC-8004)
agent registry (ERC-721, UUPS proxy)
0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
USDG
6dp settlement asset (UUPS proxy)
0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
TreasurySponsorV4
default x402 payee
0x0c5091235A25bBFD3F5a009cBe04120D0CBAD573
SeatVaultV2
lender seats
0x59D155C42A9263fA7596867b992bB3e84dF680a9
$PRIORS
protocol token
0xedbf91223639800bcd5756815caf908df3b890be
Chain 4663 · RPC https://rpc.mainnet.chain.robinhood.com · back to the dashboard