Skip to main content

How it works

Onchain Score

How the 0–100 zkCodex score is calculated from a wallet's activity on one network.

Updated 2026-10-11

Overview

The score is calculated per wallet and per network from the transactions zkCodex can read for that address. Four category scores (each 0–100) are combined with fixed weights, compound bonuses of at most 15 points are added, and the result is rounded to one decimal and capped at 100. Since score-2.1 (October 6, 2026) it reads only the wallet's own history, never the day it is looked at: the score changes when the wallet sends a transaction, not while it waits.

Formula
total = 0.40 × Ecosystem + 0.25 × DeFi Strategy + 0.20 × Activity Consistency + 0.15 × Technical Prowess
total = min(round(total + min(bonuses, 15), 1 decimal), 100)
CategoryWeightWhat it measures
Ecosystem Engagement40%Interactions, contract and token diversity
DeFi Strategy25%Staking, liquidity, swaps, lending
Activity Consistency20%Active days, streaks, active months
Technical Prowess15%Deployments, NFT mints, protocol complexity

Ecosystem Engagement (40%)

Each component grows linearly until its target and then stops; the category is capped at 100.

ComponentMax pointsFull points at
Total interactions301,500 interactions
Unique contracts25150 contracts
Token diversity2050 tokens
Days from the first to the last transaction15730 days
Token interactions10200 token interactions

DeFi Strategy (25%)

ComponentMax pointsFull points at
Staking activity3050 staking actions
Liquidity provision (LP + LP staking)2525 actions
DeFi activity in total2060 activities
Swaps1550 swaps
Lending and borrowing1020 actions

Activity Consistency (20%)

ComponentMax pointsFull points at
Active days30180 days
Active weeks2578 weeks
Longest streak2060 days
Active months1518 months
Regularity10Active every month of a span of 12 months or more

Technical Prowess (15%)

ComponentMax pointsFull points at
Contract deployments3525 deployed contracts
NFT mints and mint diversity2530 combined
Protocol interaction complexity25Broad, complex protocol usage
Innovation adoption15Early use of new protocols

Rank and board

Every time a wallet is scanned on zkCodex, the server scores it with the same engine and stores the result, if the explorer returned the wallet's whole history. A scan that comes back incomplete stores nothing, and the last complete score stays. Minting the Score NFT is not needed: every scored wallet is ranked on its network, and the Score NFT signs this stored score.

  • The rank is per network: your place among the wallets scored there, with the total and the share above you (Top 2.2%). It shows on the score card, in the Rank tab of the score details and on the Onchain score board of the Leaderboard page, which lists the top 100.
  • Wallets with the same score still rank apart. The order is: the score at full precision (the card shows one decimal), then depth, then the older wallet, more active days, who reached the score first and finally the address.
  • Depth counts how far a wallet goes past each target: active days, weeks and months, contracts, deployments and the span of its history add up to three steps each (10×, 100× and 1,000× the target), weighted towards what is costly to fake. Two wallets at 100 are told apart this way.
  • A score is stored again only when it is older than a few minutes and the wallet has a new transaction. Each change is kept, so the Rank tab shows how the score and the rank moved.
  • Ranks open on a network once enough wallets are scored there; until then the card says how many are scored so far.

Which data counts

Each network's history comes from Etherscan where Etherscan serves the network, and from Blockscout otherwise; when Etherscan cannot give the full history (an outage, a rate limit, its page cap), the same scan reads Blockscout instead. Both answers are brought to one shape before anything is counted, so the same wallet scores the same on either explorer: method names, deployments and token transfers are read the same way, and a call an explorer cannot decode takes its name from one shared table of selectors.

  • Token diversity and token interactions count ERC-20 (B20 and other ERC-8056 tokens included), ERC-721 and ERC-1155 transfers the wallet sent, with a non-zero amount. Other token standards are shown but not counted.
  • A transfer to the zero address is a burn, not a send; a WETH unwrap is one of them.
  • A send that appears only in someone else's transaction counts when the wallet had received that token before, as when a solver, relayer or EIP-7702 bundler moves it. A token the wallet never held is address poisoning and does not count.
  • Tokens whose name or symbol looks like spam (a link, or words such as claim, airdrop or reward) do not count toward token diversity.
  • The score reads what the network's explorer returns: a transaction the explorer never indexed is missing from it.

Experience levels

LevelScore rangeProfile
NEWBIE0 – 15Just Getting Started
BRONZE15 – 35Bronze Tier User
SILVER35 – 55Silver Tier Explorer
GOLD55 – 75Gold Tier Strategist
MASTER75 – 90Master Level Expert
LEGEND90 – 100Legendary Architect

Where to see it

Scan a wallet and open the info button on the score dial: its Overview, Factors, Profile and Rank tabs explain that wallet's score.

Score NFT

The Score NFT keeps your score for one network onchain: one soulbound token per wallet per network, on every network with the zkCodex contracts. Its picture, tier and score are written by the contract itself.

  1. 01

    Scan your own wallet

    Open your wallet's analysis on the network and connect the same wallet. The mint button sits under the score dial.

  2. 02

    zkCodex scores and signs

    Pressing the button asks the zkCodex server to calculate your score with the same pipeline as the Wallet Score API and sign it. It never takes a number from the page, so the score cannot be edited before it is minted. This takes up to half a minute on a busy wallet.

  3. 03

    Send it

    Your wallet sends the mint or the update. The signed score is valid for 20 minutes; after that, press the button again.

ActionFeeXP
MintThe network's mint fee (about $1)Paid XP from the fee
Free mintNone, gas onlyNo XP; it counts as a mint
UpdateThe update fee (about $0.50), once every 24 hoursPaid XP from the fee

Free mint for v1 holders

If your wallet minted the previous (v1) Score NFT on a network, its first mint of the new Score NFT on that same network is free, with no end date. The button shows Free mint. Mints on other networks and every update are paid. A v1 mint on a network without the zkCodex contracts (Abstract, World Chain, Arc Testnet) does not carry a free mint.

  • The score you see on the page and the signed one can differ by a little when the wallet's data changed between the two scans; the token holds the signed one.
  • The Mint and Update buttons show the fee in the network's coin next to the action, and a locked Update shows the day it opens again.
  • The score card does not repeat the NFT's score: the history button next to Mint or Update opens your Score NFT's signed score and the date it was last updated and, if the wallet had one, the v1 history.
  • v1 Score NFTs stored whatever score the wallet sent, so their history is marked Legacy v1, self-attested. zkCodex no longer writes to them.
  • The token cannot be transferred, sold or burned.

Sharing an analysis

Share Card on a wallet analysis opens the card in the design and proportions of the link preview (stacked on a phone): the address, the network, the score dial with its level, interactions, volume, fees and contracts, then the active days, weeks and months, the wallet age in days, unique tokens and token trades.

Share on X or Farcaster posts the analysis page's own link, /<network>/<address>, and its preview is that card. Download PNG saves the same image, 1200 x 630.

The analysis is calculated in your browser, so when a scan completes the page saves its summary for the wallet on that network, and the link's preview shows the latest one, dated: whoever opened the wallet's page last keeps its card fresh. It leaves the numbers out once they are older than 30 days; until someone has opened the wallet's analysis, the preview shows the address and the network only.

A snapshot, not a live reading

The summary is what the sharing browser calculated at that moment and is not re-checked against the chain. It is used for the preview only and never counts for XP or ranks; open the link for the live analysis.

Something unclear or missing here?

Send it to the team in a few seconds. Signed in with your wallet, you get our reply on your profile.