Verifying a Roll

Recompute the hash yourself in one command, and know exactly what a match proves.

Each Roll is published as a CSV in a fixed format. That file is hashed with SHA-256, and the hash is written on chain in RollRegistry beside the month's closing share price.

Check it in one command

curl -sO https://<roll-uri>/roll-007.csv
sha256sum roll-007.csv

Then read the on-chain record:

cast call $REGISTRY "rolls(uint16)(bytes32,uint256,string,uint64)" 7 \
  --rpc-url https://rpc.mainnet.chain.robinhood.com

The first return value is docHash. It must equal the digest you just computed. The second is navPerShare at 12 decimals โ€” 1043210000000 is $1.043210.

The report page does the same check in your browser, recomputing the canonical CSV from the rows on screen and hashing it there. Both paths use the same function, so the hash the page claims is the hash the page computed, not a second implementation that happens to agree today.

Rolls cannot be changed

publish is owner-only and reverts on a roll number that already exists. The registry is append-only: there is no update and no delete. A mistyped figure is permanent, and a correction is a later Roll saying so.

What a match proves

That the file did not change. The bytes you are holding are the bytes committed on chain at that block, and any edit โ€” a digit, a space, a line ending โ€” gives a different digest.

What a match does not prove

  • That the figures are true. A hash commits a document; it does not audit it. That is the attestor's job.
  • That the arithmetic is right. Do the two identities in Reading a Roll yourself. A wrong report hashes perfectly.
  • That the report is complete. A missing apartment hashes as cleanly as a present one. Check the unit count against the previous Roll.

These are three separate promises and it is worth not collapsing them into the word "verified".