PPriors Bureau

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.

available(uint256)selector 0x96e494e8block 86,145,172decoded

to 0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B

calldata 0x96e494e800000000000000000000000000000000000000000000000000000000000021d5

JSON-RPC request

paste this into curl and compare

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_call",
  "params": [
    {
      "to": "0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B",
      "data": "0x96e494e800000000000000000000000000000000000000000000000000000000000021d5"
    },
    "0x5227894"
  ]
}

Raw response

ABI-encoded bytes, exactly as returned

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x00000000000000000000000000000000000000000000000000000000006acfc0"
}

Decoded

field names are this app's reconstruction; the values are the chain's

  • 0out0uint2567000000

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":"0x96e494e800000000000000000000000000000000000000000000000000000000000021d5"},"0x5227894"]}'

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. 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. 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. 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. 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