Read-only trust scores for ERC-8004 agents across multiple EVM chains. Default chain is ethereum. Wired chains: base, bsc, ethereum, mantle, polygon. Values below are pulled live from scoring.py.
0 to 100. Or null when data is too thin (see refusal threshold).
| Component | Weight | What it measures |
|---|---|---|
value_avg | 0.50 | Mean of feedback values, normalised −100..100 → 0..100. |
client_breadth | 0.20 | Log-scaled count of distinct client addresses. |
volume | 0.15 | Log-scaled count of (non-revoked) feedback entries. |
recency | 0.15 | Weighted mean of values with exponential block-age decay. |
If the agent has fewer than 3 distinct clients, the response is score = null with status = "insufficient_data". Single largest sybil-mitigation lever.
normalised_value = (clamp(value, -100, +100) + 100) / 2
CLIENT_BREADTH_REF = 25.0 distinct clients → component saturates at 100.VOLUME_REF = 50.0 feedback entries → component saturates at 100.def log_axis(count, ref):
if count <= 0: return 0.0
return min(100, 100 * log1p(count) / log1p(ref))
recency_weight(block) = 0.5 ** ((latest_block - block) / 50000)
Half-life: 50,000 blocks. Block-rate varies per chain; we still apply the same half-life — older entries weigh less proportionally to that chain’s block velocity.
score = value_avg * 0.50
+ client_breadth * 0.20
+ volume * 0.15
+ recency * 0.15
We score by (chain, agent_id). We do NOT merge agent IDs across chains. A probe on 2026-06-16 found zero owner wallets with agents on more than one chain, so a cross-chain operator view has no signal today. Future work-item once that changes.
0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 + 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 on every wired chain.agents_sha256 digest of the full sorted per-agent table (not the table itself). Anyone can recompute the table from data/<chain>/feedback.jsonl and check the digest with python3 provable.py recompute <chain>. Chain mirrored to github.com/Nikoble1926/agent-trust-oracle/blob/main/provable/scores_chain.jsonl./agent-trust response and the free /agent-trust/preview response carry signed_by + signature. Verify with Ethereum personal_sign/ecrecover over canonical JSON (signed_by + signature stripped). Signer: 0x5e63d01d6A266BC17f577B80199a2a07B15053C7.