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.
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)| Category | Weight | What it measures |
|---|---|---|
| Ecosystem Engagement | 40% | Interactions, contract and token diversity |
| DeFi Strategy | 25% | Staking, liquidity, swaps, lending |
| Activity Consistency | 20% | Active days, streaks, active months |
| Technical Prowess | 15% | Deployments, NFT mints, protocol complexity |
Ecosystem Engagement (40%)
Each component grows linearly until its target and then stops; the category is capped at 100.
| Component | Max points | Full points at |
|---|---|---|
| Total interactions | 30 | 1,500 interactions |
| Unique contracts | 25 | 150 contracts |
| Token diversity | 20 | 50 tokens |
| Days from the first to the last transaction | 15 | 730 days |
| Token interactions | 10 | 200 token interactions |
DeFi Strategy (25%)
| Component | Max points | Full points at |
|---|---|---|
| Staking activity | 30 | 50 staking actions |
| Liquidity provision (LP + LP staking) | 25 | 25 actions |
| DeFi activity in total | 20 | 60 activities |
| Swaps | 15 | 50 swaps |
| Lending and borrowing | 10 | 20 actions |
Activity Consistency (20%)
| Component | Max points | Full points at |
|---|---|---|
| Active days | 30 | 180 days |
| Active weeks | 25 | 78 weeks |
| Longest streak | 20 | 60 days |
| Active months | 15 | 18 months |
| Regularity | 10 | Active every month of a span of 12 months or more |
Technical Prowess (15%)
| Component | Max points | Full points at |
|---|---|---|
| Contract deployments | 35 | 25 deployed contracts |
| NFT mints and mint diversity | 25 | 30 combined |
| Protocol interaction complexity | 25 | Broad, complex protocol usage |
| Innovation adoption | 15 | Early 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
| Level | Score range | Profile |
|---|---|---|
| NEWBIE | 0 – 15 | Just Getting Started |
| BRONZE | 15 – 35 | Bronze Tier User |
| SILVER | 35 – 55 | Silver Tier Explorer |
| GOLD | 55 – 75 | Gold Tier Strategist |
| MASTER | 75 – 90 | Master Level Expert |
| LEGEND | 90 – 100 | Legendary 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.
- 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.
- 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.
- 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.
| Action | Fee | XP |
|---|---|---|
| Mint | The network's mint fee (about $1) | Paid XP from the fee |
| Free mint | None, gas only | No XP; it counts as a mint |
| Update | The update fee (about $0.50), once every 24 hours | Paid 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.