Trust Scoring
The Scoring Formula
A deterministic 0 – 100 integer derived entirely from Arc onchain activity. No oracle, no manual input, no trust assumptions outside what the chain already records.
What goes in
The score is computed from four onchain signals about a wallet:
- Transaction count — how often the wallet has transacted on Arc. Raises a floor on activity.
- USDC balance — the wallet's current ERC-20 balance of USDC at
0x3600…0000. - Contract interactions — number of outbound transactions whose
toaddress is a contract. Filters passive-receive wallets. - Contract deployments — number of contract creations originated from the wallet. Indicates a builder profile.
Transaction count points
The transaction count maps to a base score band:
| Tx count | Points | Notes |
|---|---|---|
| 0 | 0 | BLOCKED — wallet rejected outright |
| 1 – 10 | 20 | Newly active |
| 11 – 30 | 40 | Light usage |
| 31 – 60 | 60 | Regular usage |
| 61 – 100 | 75 | High usage |
| 100+ | 85 | Power user |
Bonus points
Bonuses stack on top of the base transaction score, subject to the cap rules below:
| Signal | Threshold | Bonus |
|---|---|---|
| USDC balance | > 100 USDC | +5 |
| Contract calls | 3 – 9 | +5 |
| Contract calls | 10 – 99 | +7 |
| Contract calls | 100+ | +15 |
| Deployments | 1+ contracts | +10 |
Contract interactions below 3 contribute zero — sporadic contract contact does not establish a usage pattern.
Cap and ceiling rules
- Hard cap at 97 for any wallet with fewer than 100 contract interactions. The top three points are reserved.
- Score 98 – 100 requires at least 100 contract interactions. This is the only path to HIGH ELITE.
- Maximum score is 100, no exceptions.
- Zero transactions returns 0 regardless of any other signal — a wallet must have transacted at least once to be scored.
Tier mapping
The integer score classifies into one of five tiers, and the tier determines how TrustGate routes payment:
| Tier | Score | Payment behavior |
|---|---|---|
| BLOCKED | 0 | Claim reverts |
| LOW | 1 – 39 | Escrowed — depositor approval required |
| MEDIUM | 40 – 74 | Time-locked 24h, depositor can cancel |
| HIGH | 75 – 97 | Instant settlement |
| HIGH_ELITE | 98 – 100 | Instant settlement, marked verified |
Worked example
A wallet with 29 transactions, 13.88 USDC balance, 13 contract interactions, and 16 deployments scores:
Transactions (11–30 band) : +40
USDC balance (< 100) : 0
Contract calls (10–99) : +7
Deployments (1+) : +10
─────────────────────────────────
Total : 57 → MEDIUM tier → 24h time-lockWhere the formula lives
Scoring runs in a Next.js API route at /api/arc-score/[address]. The route queries Arc RPC for the transaction count and USDC balance, paginates Arcscan for contract interactions and deployments, and applies the formula above before returning the result. The dashboard's Calculate Score button is thin frontend over this route — it writes the result onchain through TrustScoring.setTrustScore().
Onchain enforcement
Once a score is written, it lives on TrustScoringPlaintext as a uint64. TrustGate consults the contract — never the API — when routing a claim. The API is a convenience for computing scores; the contract is the source of truth for routing.