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 to address 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 countPointsNotes
00BLOCKED — wallet rejected outright
1 – 1020Newly active
11 – 3040Light usage
31 – 6060Regular usage
61 – 10075High usage
100+85Power user

Bonus points

Bonuses stack on top of the base transaction score, subject to the cap rules below:

SignalThresholdBonus
USDC balance> 100 USDC+5
Contract calls3 – 9+5
Contract calls10 – 99+7
Contract calls100++15
Deployments1+ 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:

TierScorePayment behavior
BLOCKED0Claim reverts
LOW1 – 39Escrowed — depositor approval required
MEDIUM40 – 74Time-locked 24h, depositor can cancel
HIGH75 – 97Instant settlement
HIGH_ELITE98 – 100Instant 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-lock

Where 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.