Skip to content

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.

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

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);

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.

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.