jpskill.com
📦 その他 コミュニティ

token-holder-analysis

Solanaトークンの保有状況や集中度合いを分析し、インサイダーの可能性を検出し、供給量を把握することで、より安全で透明性の高い取引判断をサポートするSkill。

📜 元の英語説明(参考)

Token holder distribution, concentration metrics, insider detection, and supply analysis for Solana tokens

🇯🇵 日本人クリエイター向け解説

一言でいうと

Solanaトークンの保有状況や集中度合いを分析し、インサイダーの可能性を検出し、供給量を把握することで、より安全で透明性の高い取引判断をサポートするSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o token-holder-analysis.zip https://jpskill.com/download/10446.zip && unzip -o token-holder-analysis.zip && rm token-holder-analysis.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10446.zip -OutFile "$d\token-holder-analysis.zip"; Expand-Archive "$d\token-holder-analysis.zip" -DestinationPath $d -Force; ri "$d\token-holder-analysis.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して token-holder-analysis.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → token-holder-analysis フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

トークンホルダー分析 — 集中度、分布、リスク

誰がトークンを保有しているか、所有権がどれだけ集中しているか、そしてインサイダーのパターンがリスクを示唆しているかどうかを分析します。これは、取引前の重要な安全確認です。高い集中度は、少数のウォレットが価格を暴落させる可能性があることを意味します。

クイックスタート

import httpx
import math

# ホルダーデータには Helius DAS API を使用
HELIUS_KEY = os.getenv("HELIUS_API_KEY", "")
HELIUS = f"https://mainnet.helius-rpc.com/?api-key={HELIUS_KEY}"

# ホルダー + リスクデータには SolanaTracker を使用
ST_KEY = os.getenv("SOLANATRACKER_API_KEY", "")
ST = "https://data.solanatracker.io"

# RPC 経由で上位ホルダーを取得
def get_top_holders(mint: str) -> list[dict]:
    resp = httpx.post(HELIUS, json={
        "jsonrpc": "2.0", "id": 1,
        "method": "getTokenLargestAccounts",
        "params": [mint],
    })
    return resp.json()["result"]["value"]

holders = get_top_holders("TOKEN_MINT")

データソース

ソース 提供するもの 認証
Solana RPC (getTokenLargestAccounts) 上位 20 ホルダー、供給量 RPC キー
Helius DAS (getAsset, token accounts) 解析されたホルダーデータ、メタデータ API キー
SolanaTracker (/tokens/{t}/holders/top) 上位 100 ホルダー、バンドラー検出 API キー
Birdeye (/defi/token_security) 上位 10 %、作成者の残高、凍結/ミント認証 API キー

集中度指標

上位 N ホルダーの割合

最も単純な指標 — 上位 N ホルダーが供給量の何%を管理しているか?

def top_n_percentage(holders: list[dict], supply: int, n: int = 10) -> float:
    """上位 N ホルダーが保有する割合を計算します。

    Args:
        holders: ホルダーのソートされたリスト(大きい順)。
        supply: トークンの総供給量。
        n: 上位ホルダーの数。

    Returns:
        上位 N ホルダーが保有する割合 (0-100)。
    """
    top_n_amount = sum(int(h.get("amount", 0)) for h in holders[:n])
    return top_n_amount / supply * 100 if supply > 0 else 0

リスクの閾値:

  • 上位 10 < 30%: 分散されている
  • 上位 10 30-50%: 適度な集中度
  • 上位 10 50-80%: 高い集中度 — 大幅なダンプリスク
  • 上位 10 > 80%: 極端 — 少数のウォレットによって制御されている可能性が高い

ジニ係数

トークン分布の不平等さを測定します (0 = 完全に平等、1 = 1 人のホルダーがすべてを所有)。

def gini_coefficient(amounts: list[float]) -> float:
    """ホルダー分布のジニ係数を計算します。

    Args:
        amounts: ホルダーの金額のリスト(順不同)。

    Returns:
        0 から 1 の間のジニ係数。
    """
    if not amounts or all(a == 0 for a in amounts):
        return 0.0
    sorted_amounts = sorted(amounts)
    n = len(sorted_amounts)
    cumsum = sum((i + 1) * a for i, a in enumerate(sorted_amounts))
    total = sum(sorted_amounts)
    return (2 * cumsum) / (n * total) - (n + 1) / n

暗号トークンの解釈:

  • Gini < 0.6: 珍しい、非常に分散されている
  • Gini 0.6-0.8: 確立されたトークンの典型
  • Gini 0.8-0.95: 新しいトークンによくある
  • Gini > 0.95: 極端な集中度、高いリスク

ハーフィンダール・ハーシュマン指数 (HHI)

市場集中度を測定します — 市場シェアの二乗和。

def hhi(amounts: list[float]) -> float:
    """ホルダー集中度の HHI を計算します。

    Args:
        amounts: ホルダーの金額のリスト。

    Returns:
        HHI 値 (0-10000)。高いほど集中度が高い。
    """
    total = sum(amounts)
    if total == 0:
        return 0.0
    shares = [a / total * 100 for a in amounts]
    return sum(s ** 2 for s in shares)

解釈:

  • HHI < 1500: 競争的 (非集中)
  • HHI 1500-2500: 適度に集中
  • HHI > 2500: 非常に集中

ナカモト係数

供給量の 50% 以上を制御するために必要なホルダーの最小数。

def nakamoto_coefficient(amounts: list[float]) -> int:
    """ナカモト係数 (51% に必要なホルダー) を計算します。

    Args:
        amounts: ホルダーの金額のソートされたリスト(大きい順)。

    Returns:
        過半数の支配に必要なホルダーの数。
    """
    total = sum(amounts)
    if total == 0:
        return 0
    threshold = total * 0.51
    cumulative = 0
    for i, amount in enumerate(sorted(amounts, reverse=True)):
        cumulative += amount
        if cumulative >= threshold:
            return i + 1
    return len(amounts)

インサイダー検出パターン

バンドラー検出

バンドラーは、(Jito 経由で) アトミックトランザクションバンドルを使用して、トークンローンチ時に連携された購入を実行します。検出シグナル:

def detect_bundler_patterns(holders: list[dict], first_buyers: list[dict]) -> dict:
    """潜在的なバンドラー活動を特定します。

    Args:
        holders: 現在の上位ホルダー。
        first_buyers: SolanaTracker の `/first-buyers` エンドポイントからの初期購入者。

    Returns:
        バンドラーリスク分析。
    """
    early_still_holding = [
        b for b in first_buyers
        if b.get("holdingAmount", 0) > 0
    ]
    early_holder_pct = sum(
        b.get("holdingPercentage", 0) for b in early_still_holding
    )

    return {
        "early_buyers_count": len(first_buyers),
        "still_holding_count": len(early_still_holding),
        "early_holder_pct": round(early_holder_pct, 2),
        "risk": "HIGH" if early_holder_pct > 20 else
                "MODERATE" if early_holder_pct > 10 else "LOW",
    }

開発者の保有

作成者ウォレットの保持はリスクシグナルです:


def check_developer_risk(token_data: dict) -> dict:
    """開発者ウォレットの保有と権限を確認します。

    Args:
        token_data: SolanaTracker または Birdeye からのトークン情報。

    Returns:
        開発者のリスク評価。
    """
    risk = token_data.get("risk", {})
    flags = []

    # 作成者の残高を確認します (Birdeye セキュリティエンドポイントから)
    creator_balance = token_data.get("creatorBalance", 0)
    if creator_balance > 10:
        flags.append(f"Creator holds {creator_balance:.1f}% of supply")

    # ミント権限を確認します
    if token_data.get("mintAutho
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Token Holder Analysis — Concentration, Distribution & Risk

Analyze who holds a token, how concentrated ownership is, and whether insider patterns suggest risk. This is a critical pre-trade safety check — high concentration means a few wallets can crash the price.

Quick Start

import httpx
import math

# Using Helius DAS API for holder data
HELIUS_KEY = os.getenv("HELIUS_API_KEY", "")
HELIUS = f"https://mainnet.helius-rpc.com/?api-key={HELIUS_KEY}"

# Or using SolanaTracker for holder + risk data
ST_KEY = os.getenv("SOLANATRACKER_API_KEY", "")
ST = "https://data.solanatracker.io"

# Get top holders via RPC
def get_top_holders(mint: str) -> list[dict]:
    resp = httpx.post(HELIUS, json={
        "jsonrpc": "2.0", "id": 1,
        "method": "getTokenLargestAccounts",
        "params": [mint],
    })
    return resp.json()["result"]["value"]

holders = get_top_holders("TOKEN_MINT")

Data Sources

Source What It Provides Auth
Solana RPC (getTokenLargestAccounts) Top 20 holders, supply RPC key
Helius DAS (getAsset, token accounts) Parsed holder data, metadata API key
SolanaTracker (/tokens/{t}/holders/top) Top 100 holders, bundler detection API key
Birdeye (/defi/token_security) Top 10 %, creator balance, freeze/mint auth API key

Concentration Metrics

Top-N Holder Percentage

The simplest measure — what % of supply do the top N holders control?

def top_n_percentage(holders: list[dict], supply: int, n: int = 10) -> float:
    """Calculate percentage held by top N holders.

    Args:
        holders: Sorted list of holders (largest first).
        supply: Total token supply.
        n: Number of top holders.

    Returns:
        Percentage (0-100) held by top N.
    """
    top_n_amount = sum(int(h.get("amount", 0)) for h in holders[:n])
    return top_n_amount / supply * 100 if supply > 0 else 0

Risk thresholds:

  • Top 10 < 30%: Well distributed
  • Top 10 30-50%: Moderate concentration
  • Top 10 50-80%: High concentration — significant dump risk
  • Top 10 > 80%: Extreme — likely controlled by a few wallets

Gini Coefficient

Measures inequality of token distribution (0 = perfectly equal, 1 = one holder owns everything).

def gini_coefficient(amounts: list[float]) -> float:
    """Calculate Gini coefficient for holder distribution.

    Args:
        amounts: List of holder amounts (any order).

    Returns:
        Gini coefficient between 0 and 1.
    """
    if not amounts or all(a == 0 for a in amounts):
        return 0.0
    sorted_amounts = sorted(amounts)
    n = len(sorted_amounts)
    cumsum = sum((i + 1) * a for i, a in enumerate(sorted_amounts))
    total = sum(sorted_amounts)
    return (2 * cumsum) / (n * total) - (n + 1) / n

Interpretation for crypto tokens:

  • Gini < 0.6: Unusual, very well distributed
  • Gini 0.6-0.8: Typical for established tokens
  • Gini 0.8-0.95: Common for newer tokens
  • Gini > 0.95: Extreme concentration, high risk

Herfindahl-Hirschman Index (HHI)

Measures market concentration — sum of squared market shares.

def hhi(amounts: list[float]) -> float:
    """Calculate HHI for holder concentration.

    Args:
        amounts: List of holder amounts.

    Returns:
        HHI value (0-10000). Higher = more concentrated.
    """
    total = sum(amounts)
    if total == 0:
        return 0.0
    shares = [a / total * 100 for a in amounts]
    return sum(s ** 2 for s in shares)

Interpretation:

  • HHI < 1500: Competitive (unconcentrated)
  • HHI 1500-2500: Moderately concentrated
  • HHI > 2500: Highly concentrated

Nakamoto Coefficient

Minimum number of holders needed to control >50% of supply.

def nakamoto_coefficient(amounts: list[float]) -> int:
    """Calculate Nakamoto coefficient (holders needed for 51%).

    Args:
        amounts: Sorted list of holder amounts (largest first).

    Returns:
        Number of holders needed for majority control.
    """
    total = sum(amounts)
    if total == 0:
        return 0
    threshold = total * 0.51
    cumulative = 0
    for i, amount in enumerate(sorted(amounts, reverse=True)):
        cumulative += amount
        if cumulative >= threshold:
            return i + 1
    return len(amounts)

Insider Detection Patterns

Bundler Detection

Bundlers use atomic transaction bundles (via Jito) to execute coordinated buys at token launch. Detection signals:

def detect_bundler_patterns(holders: list[dict], first_buyers: list[dict]) -> dict:
    """Identify potential bundler activity.

    Args:
        holders: Current top holders.
        first_buyers: Early buyers from SolanaTracker /first-buyers endpoint.

    Returns:
        Bundler risk analysis.
    """
    early_still_holding = [
        b for b in first_buyers
        if b.get("holdingAmount", 0) > 0
    ]
    early_holder_pct = sum(
        b.get("holdingPercentage", 0) for b in early_still_holding
    )

    return {
        "early_buyers_count": len(first_buyers),
        "still_holding_count": len(early_still_holding),
        "early_holder_pct": round(early_holder_pct, 2),
        "risk": "HIGH" if early_holder_pct > 20 else
                "MODERATE" if early_holder_pct > 10 else "LOW",
    }

Developer Holdings

Creator wallet retention is a risk signal:

def check_developer_risk(token_data: dict) -> dict:
    """Check developer wallet holdings and authority.

    Args:
        token_data: Token info from SolanaTracker or Birdeye.

    Returns:
        Developer risk assessment.
    """
    risk = token_data.get("risk", {})
    flags = []

    # Check creator balance (from Birdeye security endpoint)
    creator_balance = token_data.get("creatorBalance", 0)
    if creator_balance > 10:
        flags.append(f"Creator holds {creator_balance:.1f}% of supply")

    # Check mint authority
    if token_data.get("mintAuthority") or token_data.get("ownerAddress"):
        flags.append("Mint authority NOT renounced — supply can increase")

    # Check freeze authority
    if token_data.get("freezeAuthority") or token_data.get("freezeable"):
        flags.append("Freeze authority enabled — tokens can be frozen")

    return {
        "flags": flags,
        "risk_level": "HIGH" if len(flags) >= 2 else
                      "MODERATE" if len(flags) == 1 else "LOW",
    }

Sniper Detection

Snipers buy in the first few seconds/blocks after token creation:

def analyze_sniper_concentration(first_buyers: list[dict], total_supply: float) -> dict:
    """Analyze sniper impact on holder distribution.

    Args:
        first_buyers: First buyers data from SolanaTracker.
        total_supply: Total token supply.

    Returns:
        Sniper concentration analysis.
    """
    # Snipers typically buy in first 10 seconds
    snipers = first_buyers[:10]  # first N buyers are potential snipers
    sniper_holding = sum(b.get("holdingAmount", 0) for b in snipers)
    sniper_pct = sniper_holding / total_supply * 100 if total_supply > 0 else 0

    return {
        "sniper_count": len(snipers),
        "sniper_holding_pct": round(sniper_pct, 2),
        "sniper_still_holding": sum(1 for s in snipers if s.get("holdingAmount", 0) > 0),
        "risk": "HIGH" if sniper_pct > 15 else
                "MODERATE" if sniper_pct > 5 else "LOW",
    }

Complete Analysis Pipeline

def full_holder_analysis(mint: str) -> dict:
    """Run complete holder analysis for a token.

    Combines RPC, SolanaTracker, and computed metrics.
    """
    # 1. Get supply and top holders via RPC
    supply_result = rpc_call("getTokenSupply", [mint])
    total_supply = int(supply_result["result"]["value"]["amount"])

    holders = get_top_holders(mint)
    amounts = [int(h["amount"]) for h in holders]

    # 2. Compute concentration metrics
    metrics = {
        "total_supply": total_supply,
        "holder_count": len(holders),
        "top_1_pct": top_n_percentage(holders, total_supply, 1),
        "top_5_pct": top_n_percentage(holders, total_supply, 5),
        "top_10_pct": top_n_percentage(holders, total_supply, 10),
        "top_20_pct": top_n_percentage(holders, total_supply, 20),
        "gini": round(gini_coefficient(amounts), 4),
        "hhi": round(hhi(amounts), 1),
        "nakamoto": nakamoto_coefficient(amounts),
    }

    # 3. Risk classification
    t10 = metrics["top_10_pct"]
    if t10 > 80:
        metrics["risk"] = "EXTREME"
    elif t10 > 50:
        metrics["risk"] = "HIGH"
    elif t10 > 30:
        metrics["risk"] = "MODERATE"
    else:
        metrics["risk"] = "LOW"

    return metrics

Risk Classification Summary

Metric Low Risk Moderate High Extreme
Top 10 % <30% 30-50% 50-80% >80%
Gini <0.7 0.7-0.85 0.85-0.95 >0.95
HHI <1500 1500-2500 2500-5000 >5000
Nakamoto >10 5-10 2-4 1
Mint Auth Renounced Active Active + high dev %
Freeze Auth Disabled Enabled Enabled + low liq

Known Exclusions

When computing holder concentration, exclude these addresses which are programs/pools, not individual holders:

  • DEX pool addresses (Raydium, Orca, Meteora pools)
  • Token program vaults
  • Bridge escrow accounts
  • Known burn addresses
KNOWN_PROGRAMS = {
    "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",  # Raydium authority
    "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ",  # Orca authority
    # Add more as needed
}

def filter_real_holders(holders: list[dict]) -> list[dict]:
    """Remove known program/pool accounts from holder list."""
    return [h for h in holders if h.get("address") not in KNOWN_PROGRAMS]

Files

References

  • references/concentration_metrics.md — Mathematical formulas and derivations for Gini, HHI, Nakamoto
  • references/insider_patterns.md — Bundler, sniper, and developer detection methodology
  • references/data_sources.md — How to fetch holder data from each API source

Scripts

  • scripts/analyze_holders.py — Full holder analysis: fetch holders, compute metrics, generate risk report
  • scripts/concentration_scanner.py — Scan multiple tokens for concentration risk