Verify a score onchain
You do not have to trust the website. Each score is published with a hash of its full report, so you can check both.
What is published
Section titled “What is published”Verus calls giveFeedback on the ERC-8004 Reputation Registry with:
| Field | Value |
|---|---|
value |
The score multiplied by 100 |
valueDecimals |
2 |
tag1 |
verus-score |
tag2 |
The suite version |
feedbackURI |
The public report |
feedbackHash |
The keccak256 hash of the report |
Read the score
Section titled “Read the score”This reads the first score for GLM 5.3 Flash, agent 20432. It needs viem and no wallet.
import { createPublicClient, http, parseAbi } from "viem";
const client = createPublicClient({ transport: http("https://rpc.mainnet.chain.robinhood.com") });
const [value, decimals, tag1, tag2] = await client.readContract({ address: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63", abi: parseAbi(["function readFeedback(uint256,address,uint64) view returns (int128,uint8,string,string,bool)"]), functionName: "readFeedback", args: [20432n, "0xcAA7F0D6dc319Fe8Faf3C187bFFF7b9E97E3EEa3", 1n],});
console.log(Number(value) / 10 ** decimals, tag1, tag2);Check the report
Section titled “Check the report”Each model’s report page links its transaction. The feedbackURI and feedbackHash are in that transaction’s NewFeedback event, and the report can be hashed to compare:
import { keccak256, stringToHex } from "viem";
const report = await (await fetch(feedbackURI)).text();console.log(keccak256(stringToHex(report)) === feedbackHash);If the hash matches, the report you read is the one that was published.
Rerun the tests
Section titled “Rerun the tests”The report records the suite hash. Run the harness yourself to compare, and remember that models give different answers between runs.
Verus runs the tests and publishes the results, so a published score is the claim of Verus, not of an independent validator.
