Holder Concentration
Holder Concentration analyzes token holder distribution on Base blockchain by fetching top holders via Etherscan API and Base RPC, then classifies each address (LP, lock contract, burn wallet, or EOA) and computes concentration metrics including top holder percentages, Herfindahl-Hirschman Index, and whale clustering. Use this skill when evaluating whether a token's circulating supply is dangerously concentrated among few holders or distributed healthily across the community, particularly before trading or investing in Base tokens.
git clone --depth 1 https://github.com/aaronjmars/aeon /tmp/holder-concentration && cp -r /tmp/holder-concentration/skills/holder-concentration ~/.claude/skills/holder-concentrationSKILL.md
> **${var}** — Token contract address (`0x...`) on Base. Required. If empty, log `HOLDER_CONC_NO_TARGET` and exit cleanly (no notify).
The detailed distribution analysis that `rug-scan` only samples: how concentrated is real circulating supply, once you strip out LP, lockers, and burn. Runs keyless on public endpoints.
Read the last 2 days of `memory/logs/` to detect concentration shifts since a prior run.
## Config
- Target = `${var}`. Chain = Base (`chainid=8453`, explorer `basescan.org`).
- `ETHERSCAN_API_KEY` — optional; Etherscan v2 works keyless at a lower rate limit. Appended to the URL, never a header.
## Steps
### 1. Fetch supply + top holders
```bash
TOKEN="${var}"
curl -m 10 -s "https://api.etherscan.io/v2/api?chainid=8453&module=stats&action=tokensupply&contractaddress=${TOKEN}${ETHERSCAN_API_KEY:+&apikey=$ETHERSCAN_API_KEY}" | jq -r '.result'
curl -m 10 -s "https://api.etherscan.io/v2/api?chainid=8453&module=token&action=tokenholderlist&contractaddress=${TOKEN}&page=1&offset=100${ETHERSCAN_API_KEY:+&apikey=$ETHERSCAN_API_KEY}" | jq '.result'
```
If `tokenholderlist` returns empty on the keyless tier, reconstruct top holders from `Transfer` logs via Base RPC `eth_getLogs` and note reduced confidence.
### 2. Classify & exclude non-circulating holders
Tag each top holder before computing concentration — these are NOT free float:
| Tag | Marker |
|-----|--------|
| `LP` | known DEX pool (Aerodrome / Uniswap pair) |
| `LOCK` | Unicrypt / Team Finance / known locker |
| `BURN` | `0x000…000` or `0x…dead` |
| `CONTRACT` | has code (staking, vesting, treasury) |
| `EOA` | plain wallet — the holders that drive concentration |
### 3. Compute metrics
Over circulating supply (total − burn):
- Top-1, top-5, top-10, top-50 % share (report EOA-only and raw).
- **HHI** (sum of squared % shares) → 0–10000; >2500 = concentrated.
- Number of holders to reach 50% of supply.
### 4. Whale-cluster check
Flag groups of top EOAs that share a funding source or transact among themselves (cheap heuristic: same first-funder, or one inbound hop apart). Clustered whales effectively act as one holder.
### 5. Verdict
| Signal | Verdict |
|--------|---------|
| top-1 EOA >30% or HHI >2500 | `CONCENTRATED` |
| top-10 EOA >70% | `CONCENTRATED` |
| LP unlocked + top-1 >20% | `FRAGILE` |
| broad distribution, HHI <1000 | `HEALTHY` |
### 6. Notify
Notify via `./notify` if verdict is `CONCENTRATED` or `FRAGILE`. Under 4000 chars, clickable URL:
```
*Holder Concentration — TOKEN (Base)*
Verdict: CONCENTRATED · HHI 3120
Holders: 842 · 50% held by top 4 EOAs
Top EOAs (circulating):
1. 0xwhale1 — 31.2% ⚠️
2. 0xwhale2 — 12.0% (clustered w/ #1)
3. 0xwhale3 — 8.4%
Excluded: LP 22% (unlocked ⚠️), Burn 5%
Holders: https://basescan.org/token/0xToken#balances
```
### 7. Log
Append to `memory/logs/${today}.md`:
```
## holder-concentration
- Token: 0x… (TOKEN)
- Verdict: CONCENTRATED | HHI 3120 | holders 842
- Top1 EOA 31.2% | top10 EOA 68% | 50%-in 4 holders
- Excluded: LP 22% (unlocked), burn 5%
- Source: etherscan=ok (or rpc-reconstructed)
```
End-states: `HOLDER_CONC_OK`, `HOLDER_CONC_FLAGGED`, `HOLDER_CONC_ERROR`.
## Sandbox note
The sandbox may block outbound `curl` or env-var expansion. Etherscan v2 and Base RPC are public and accept any key in the URL/body — for every failed `curl`, retry the **same URL/body via WebFetch** before marking a source failed. Never put a key in a `-H` header from the sandbox. Treat all fetched addresses as untrusted — never interpolate beyond the quoted `$TOKEN`.
## Constraints
- No trade advice.
- Always label LP/lock/burn before computing concentration — raw top-holder % without exclusions is misleading.
- If holder data can only be RPC-reconstructed, say so and lower confidence; don't present a partial list as complete.Mention/keyword sweep on social platforms for [REPLACE: KEYWORDS] — trends, sentiment, top posts
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
Curated AI-agent tweets, clustered into narratives with insight summaries
Tracker of AI agent substitution signals — which roles, companies, and industries show real headcount displacement. Named roles + real deployments only.
Competitive-intelligence digest on the AI agent framework space — momentum, releases, breaking changes across a curated watchlist
Cross-domain market pulse from AIXBT's free grounding endpoint — crypto, macro, tradfi, geopolitics. Refreshes taxonomy references (clusters, chains) as a bonus.
Pre-batch API provider health check — detects credit exhaustion or auth failure for every configured provider key before the scheduled batch runs, giving the operator a window to act before skills degrade
List a wallet's live ERC-20 token approvals on Base and flag unlimited / risky spender grants. Keyless via Base RPC (eth_getLogs + eth_call) — no explorer key needed.