gmgn-holder-analysis について
gmgn-holder-analysisは、スクリプトで保有状況、取引、資金の関連性、リスク評価をまとめるトークン保有者分析スキルです。データ欠損を低リスクと区別し、取引可能な流通量が少ない場合も扱います。
主な機能
- 01トークン保有者分布の分析
- 02集中度と取引リスクの評価
- 03関連資金と開発者ウォレットの特定
- 04未記録の買いとゼロコストの区別
- 05保有者データ欠損への対応
- 06多面的なリスク評価の生成
活用シーン
- 01トークン保有の集中度を確認
- 02開発者関連ウォレットと資金を特定
- 03保有者の売却リスクを評価
- 04データ不足による誤判定を回避
MCP 対応
エージェントスキルとしてGMGN関連のCLI手順とローカル分析スクリプトで保有者データを処理します。MCPサーバーとの接続や管理については入力に記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gmgnai/ gmgn-skills --skill gmgn-holder-analysisインストール後、Claude Code で/gmgn-holder-analysisを入力して読み込まれたか確認します。
同梱ファイルanalyze.py
詳細
いかなるコマンドを実行する前にも、gmgn-cli config --check を実行してください。終了コードが 0 の場合は、そのまま続行します。終了コードが 1 の場合は、gmgn-cli config を実行して出力を表示し、その後 gmgn-cli config --apply <KEY> でキーを適用します。不明なオプションの場合は、npm install -g gmgn-cli を実行するようユーザーに伝えてください。
重要:必ず gmgn-cli コマンドを使用してください。curl、WebFetch の使用や gmgn.ai へのアクセスは禁止です。
ユーザーがトークンの保有者分析を依頼した場合、メッセージから --chain と --address を抽出し、以下の分析スクリプトを実行します。また、ユーザーの言語を判定してください。ユーザーが中国語で書いた場合は LANG を 'zh' に、英語で書いた場合は 'en' に設定します(デフォルトは 'zh')。
分析スクリプト
以下のコマンドを実行し、プレースホルダーを実際の値に置き換えてください。
python3 ~/.claude/skills/gmgn-holder-analysis/analyze.py <FILL_IN_TOKEN_ADDRESS> <FILL_IN_CHAIN> <FILL_IN_LANG>
- FILL_IN_CHAIN:Solana アドレスの場合は
sol、EVM の0x...アドレスの場合は、ユーザーがチェーン(bsc/eth/base)を明示的に指定していない限りauto - FILL_IN_LANG:ユーザーが中国語で書いた場合は
zh、英語で書いた場合はen、デフォルトはzh
出力ルール
スクリプトの実行後、標準出力の全内容を一字一句そのまま返信に貼り付けてください。すべての行とセクションを含め、省略も要約もしないでください。出力ブロックの前後に、導入文、コメント、要約を追加しないでください。
フィールドの参照
スクリプトが出力する保有割合はすべて、取引可能なフロートに占める割合(1 - burn - DEX)であり、総供給量に占める割合ではありません。API の amount_percentage は総供給量に占める割合ですが、スクリプトはこれを基準に再計算します。取得する保有者は上位 100 件のみのため、その 100 ウォレットでフロート全体をカバーできない場合、フロートに対する割合は下限値です。フッターには実際のカバー率が表示され、該当するケースが示されます。カバー率が 99.5% 未満の場合は下限値、上位 100 件で全量をカバーしている場合は完全な値です。
burn と DEX を差し引いた取引可能な供給量が 2% 未満の場合(通常は移行前のローンチパッドトークン)、フロートの分母が機能しなくなります。/ float_share によって少額のウォレットまで 2 桁や 100% に膨れ上がります。スクリプトはこれを検出し、代わりにトークン数と USD の絶対値を含むバナーを表示し、評価を ⚪ Cannot Assess に設定します。
同じ抑制処理は、token holders が空のリストを返した場合(トークンにアクティブな保有者が残っていない、または上流側でインデックス作成が停止している場合)にも適用されます。すべての割合が 0.00% と表示され、すべてのしきい値を満たすため、レポートは「✅ Normal — no obvious dump risk」となってしまいます。そのため、スクリプトは代わりにデータなしのバナーを表示し、「none found 🟢」の各行を ⚪ に置き換え、評価を ⚪ Cannot Assess に設定します。「データなし」を「リスクなし」として報告することはありません。
どちらの場合も、フロートに対する割合は一切表示されず、すべて n/a(无法评估)となり、割合のフラグはすべて ⚪ になります。注意書きを添えて数値を表示するだけでは不十分でした。フロートのゼロ除算によって、同じレポートに hold 100.00% と hold 0.00% が並び、バナーを読み飛ばした人が Rat Trader 1 hold 100.00% を分析結果として受け取ってしまうからです。ウォレット数、トークン数、USD 額、時価総額は引き続き表示されます。これらは float_share を経由しないためです。総供給量を基準とする割合(burn、DEX、フロートシェアそのもの、チップ品質の内訳)も引き続き表示されます。これらの分母には影響がないためです。
「ゼロコスト」は証明されなければならず、購入回数の欠落から推測してはならない
buy_tx_count_cur == 0 は、そのウォレットがチップを無償で受け取ったことを意味しません。musebook(robinhood)で測定したところ、38 個のウォレットが buy_tx_count_cur: 0 かつ avg_cost: null と読み取れましたが、そのうち 34 個は有限の unrealized_pnl 比率(+2.7%、+76.5%、+546%)を持っており、これはコスト基準なしには計算できない比率です。さらに 32 個は fomo フロントエンドタグ、2 個は gmgn タグを持ち、これは活発な取引の痕跡であり、エアドロップの受け取りとは正反対です。実際に欠けているのはそのチェーンにおける購入トランザクションのインデックス化であり、PnL フィールドは別の計算に由来するため値が入った状態で届きます。
このエラーはトークン単位ではなくチェーン単位で体系的に発生していました。同一バッチにおける、一度も購入されていない供給量の割合は、robinhood 27.0% と 41.2%、arc 26.3%、sol 4.8% です。したがって 20% のエアドロップ警告ゲートは、実質的にすべての robinhood/arc トークンで発動し、sol トークンではほぼ決して発動しませんでした。これはチップ構造の違いではなく、インデックスカバレッジの違いです。値が入っていないフィールドをリスク結論として報告することは、まさにこのスキルが禁じていることです。
したがって、ウォレットがゼロコストと見なされるのは、コストの証拠がまったく存在しない場合のみです。
def has_cost_basis(h):
return (h.get('avg_cost') or 0) > 0 or h.get('unrealized_pnl') is not None
インデックス化された購入回数がないものの実際のコスト基準を持つウォレットは、レポートから除外されません。それらは独自の中立行 买入未记录 / Buy count unindexed を、そのフロートシェアとともに得ます。上流がその購入をインデックス化していないという事実は真実であり、可視化されたままです。ただ、それがゼロコストゲートを駆動することはありません。同じ述語が現在、钻石手 / Diamond コホート(その明示された根拠は「一度も支払っていないウォレットには持ち続けるコストがない」であり、これは証明されたコスト基準によって満たされます)、转入筹码未动 / Idle airdrop 行(その「ゼロコスト」というキャプションはそれらのウォレットにとって虚偽の記述でした)、および Top5 売りリスク分類(+6.6x のウォレットを「ゼロコストのエアドロップ — いつでもダンプ可能」とラベリングしていました)を統治しています。
既知の限界: 本物のエアドロップウォレットで、その unrealized_pnl がダストレベルのコストに対して計算された巨大な比率であるものは、ここでは見逃されます。それに対する第 2 の比率しきい値は設定されていません。キャリブレーションを行うための測定済みサンプルが存在しないためです。
トークン自身のコントラクトアドレスは保有ウォレットではない
上流はこれを通常のウォレットとして返します。musebook(robinhood)で測定したところ、addr_type: 0、購入 0、売却 0、総供給量の 15.01%、$5.06M、fresh_wallet タグ付きです。ウォレットコホートに残すと、biggest、Top10/Top20、エアドロップ、fresh、リスクウォレット、Top5 を同時に汚染し、単独で「最大ウォレットが 16.30% を保有 — 極端な集中」として 🔴 danger ゲートを作動させます。そのトークンにおける最大の真正なウォレットは供給量の 4.10% です。同一バッチの対照 — JOLLY(robinhood)、SI(sol)、ARGUS(arc) — にはそのような行が存在しないため、これはチェーンの慣習ではなく、トークン単位の上流分類のギャップです。
したがってスクリプトはこれを normal から切り分け、総供給量ベース(合约自持 / Contract self-held)で独自の行に報告し、供給量の 10% 超という独自の警告ゲートを持たせます。これは判断から除外されません。コントラクト保有の供給量は、1 件のリリーストランザクションが着地した瞬間に市場へ到達するため、可視化されたままであり、依然として評価に算入されます。これが danger ではなく warn であるのは、そのリリースが観測可能な事前ステップであるためであり、任意に売却できるクジラとは異なります。また、これより高い danger 層は存在しません。測定されたサンプルは 1 件のみであり、1 件のサンプルに基づく第 2 のしきい値は推測になってしまうからです。
これは意図的にフロート分母から差し引かれません。バーンは永続的であり、DEX プールは市場そのものであるため、どちらもダンプできませんが、自己保有の供給量はダンプできます。これを分母から取り除くと、この行を持つすべてのトークンで他のすべてのウォレットの割合が上昇し、1 件を修正しながら新たな偽陽性を量産することになります。
同じアドレスは dev の傀儡マップからも除外されます。トークンコントラクトに送り返されたチップ、またはそれに支払われたガスは、「内部ウォレットへの転送」ではないからです。
Holder オブジェクトの主要フィールド
| フィールド | 型 | 意味 |
|---|---|---|
address | string | ウォレットアドレス |
balance | float | 現在のトークン残高 |
amount_percentage | float | 総供給量に占める割合(0~1)。% にするには 100 を掛けます。 |
buy_tx_count_cur | int | 作成以降の買い取引数。すべてのチェーンでインデックス化されているわけではないため、ここが 0 でも、そのウォレットが一度も買っていない証拠にはなりません。 上記の取得原価セクションを参照してください。 |
usd_value | float | 保有分の現在の USD 価値 |
avg_cost | float | トークンあたりの平均購入価格 |
unrealized_pnl | float | 未実現 PnL 比率(0.5 = +50%) |
unrealized_profit | float | USD 換算の未実現 PnL |
realized_profit | float | USD 換算の実現 PnL |
profit | float | USD 換算の合計 PnL(実現分 + 未実現分)。--order-by の有効なフィールドでもあります。 |
sell_tx_count_cur | int | トークン作成以降の売り取引数 |
sell_amount_percentage | float | 総購入量のうち売却された割合。蓄積/分配の判定に使用します。 |
sell_volume_cur | float | トークン作成以降の売却 USD 取引量 |
sell_amount_cur | float | トークン作成以降の売却トークン量 |
history_transfer_out_amount | float | (売却ではなく)送金されたトークン量 |
history_transfer_out_income | float | 送金されたトークンの USD 価値 |
token_transfer_out | object | {address} — 送金先。受取先が上位 100 位以内にいる場合、開発者の使い捨てアカウントの検出に使用します。 |
native_transfer | object | {from_address, amount, timestamp} — ウォレットへの資金供給元。開発者からガス代を受け取った上位 100 位以内の保有者を検出する、予備の使い捨てアカウント調査にも使用します。 |
name | string | 判明している場合のウォレット表示名 |
start_holding_at | int | 最初の購入の Unix タイムスタンプ |
addr_type | int | 0=通常のウォレット、1=バーン/デッド、2=DEX/プール |
maker_token_tags | list | bundler、rat_trader、sniper、whale、top_holder、transfer_in、dev_team、creator |
tags | list | smart_degen、pump_smart、renowned、fresh_wallet、wash_trader、kol |
native_balance | string | ネイティブトークンの未加工残高。小数を含む文字列の場合があるため、int ではなく float で解析してください。分母が判明しているのは sol(1e9)と bsc/eth/base(1e18)のみです。 |
native_transfer | object | {from_address, amount, timestamp} — ウォレットへの資金供給元。関連資金の判定に使用します。 |
twitter_name | string | 判明している場合の Twitter ハンドル |
作成したトークンのレスポンスフィールド
| フィールド | 意味 |
|---|---|
inner_count | 未移行トークン数 |
open_count | 移行済みトークン数 |
tokens[].market_cap | 現在の USD 換算時価総額 |
tokens[].symbol | トークンシンボル |
tokens[].is_open | true = 移行済み |
creator_ath_info.ath_mc | 作成したすべてのトークンの最高時価総額 |
creator_ath_info.ath_token | ATH トークンのアドレス |
creator_ath_info.token_symbol | ATH トークンのシンボル |
creator_ath_info.token_name | ATH トークンの名前 |
評価基準
以下のすべてのしきい値は、スクリプトと同じく取引可能な流通量に対する割合です。総供給量に対する割合を表示するGMGN独自のUIとは比較できません。たとえば、LPが供給量の56%を保有するトークンでは、同じウォレットの割合がここでは2.4倍高く表示されます。
アドバイス欄には、最初に該当した理由だけでなく、該当したすべての理由が表示されます。⚠️ 注意評価は定義上、2つ以上の警告が発生していることを意味するため、理由を1つだけ表示すると、評価の根拠が読者に伝わりません。
エントリータイミングの圧力(批次浮盈/出货)は、総合評価に影響しません。影響するのはセクションの表示のみです。
| 評価(ZH) | 評価(EN) | 絵文字 | 条件 |
|---|---|---|---|
| 无法评估 | 評価不能 | ⚪ | 取引可能な流通量が供給量の2%未満、または上流から保有者数が0人と返された場合(すべての割合ルールが無効になります。dev sock puppet の場合のみ🔴に引き上げられます) |
| 不建议买 | 推奨しない | 🔴 | いずれかに該当:rat traders >5%/最大ウォレット >10%/dev sock puppet |
| 谨慎参与 | 注意 | ⚠️ | 次のうち2つ以上:Devが引き続き>1%を保有/エアドロップ >20%/リスクウォレット >35%/リンクあり >15%/コントラクトが供給量の>10%を自己保有 | | 可轻仓 | 少額なら可 | 🟡 | 上記の警告のうちちょうど1つに該当 | | 正常参与 | 通常 | ✅ | 上記のいずれにも該当しない |
指標ごとのフラグしきい値
| 指標 | 🔴 | 🟡 | 🟢 |
|---|---|---|---|
| 上位10ウォレットの集中度 | >60% | >40% | ≤40% |
| 上位20ウォレットの集中度 | >75% | >55% | ≤55% |
| エアドロップされたチップ(購入履歴なし) | >25% | >10% | ≤10% |
| リスクウォレット | >35% | >15% | ≤15% |
| 資金調達元のリンク | >25% | >10% | ≤10% |
| 残高ゼロのウォレット | — | >10% | ≤10% |
ダイヤモンドハンズは基準が逆(多いほど良好)で、独自の絵文字セットを使用します:✅ >60%/🟡 >35%/⚠️ ≤35%。
ダイヤモンドハンズの判定には取得原価(上記のhas_cost_basis)が必要です。購入代金を一度も支払っていないウォレットには、保有し続けるためのコストがありません。そのため、実際に取得原価がゼロの受取人は、ダイヤモンドハンズとして計上せず、「转入筹码未动 / Idle airdrop」として別途報告します。判定基準は取得原価であり、buy_tx_count_cur > 0ではありません。購入回数がインデックス化されないチェーンでは、後者を使うと実際のダイヤモンドハンズの大半が除外されます(JOLLYでの測定では、ウォレット数が34から75に、流通量に占める割合が21.1%から55.7%に増加しました)。
グループの資金調達が60秒以内に行われた場合、規模にかかわらず、資金調達元のリンク評価を少なくとも🟡に引き上げます。スクリプトによる一括資金調達は、規模ではなく構造的なシグナルです。
チップの品質(フッター)
観測されたウォレットが保有するチップを、相互に重複しない3つの区分に分けます(分母はnormal_pct、つまり流通量基準ではなく総供給量基準です):リスクタグなしで購入/取得原価ゼロのエアドロップ(上記のhas_cost_basisに基づきます。購入履歴の欠如に基づくものではありません)/リスクタグ付き。リスクタグは不良アドレスであることが確認済みである一方、取得原価ゼロのエアドロップが示すのは由来が不明ということだけです。そのため、これらを「健全なチップ」という1つの数値にまとめず、個別に報告します。
見出しのフラグは、最初に該当した条件が適用されます:🔴 リスクタグ付き >30% · 🟢 クリーン ≥50% · 🟡 クリーン ≥30% · 🟡 クリーン以外の残りに占める取得原価ゼロのエアドロップが≥80%の場合 · 🔴 それ以外。これにより、エアドロップで配布されたトークンは「健全なチップ 0.0% 🔴」ではなく、内訳が明記された🟡として表示されます。
内訳は総供給量を基準としているため、流通量が極端に小さい場合でも表示され、3つの割合も引き続き出力されます。ただし、評価が⚪ 評価不能の場合は、見出しのフラグを⚪に中和し、チップの供給量に占める割合を付記します。微量のチップに対する🔴/🟢の判定は、その上の評価と矛盾するためです。
対応チェーン
sol、bsc、base、eth、robinhood、arc、stable
Dev lookup は二重ソースです
token holders --tag dev が主なソースですが、一部のローンチパッドでは {"list": []} を返します。これは、Robinhood の 24 時間トレンド上位 50 件に入った Bankr の 5 トークンすべてで確認されています。一方、同じチェーン上の pons_v2 / longxyz のトークンでは、通常どおり creator が返されます。また、creator タグのない行を返すこともあります(BSC の flap トークンで確認)。いずれの場合も、Dev セクション全体が、Dev のなりすましアカウントに関する危険判定ゲートも含めて、何も表示されなくなってしまいます。
creator タグ付きの行が返されない場合は、token info の dev.creator_address から creator アドレスを取得し、dev.creator_token_balance から残高を取得します。この呼び出しは主なソースが失敗した場合にのみ行われるため、タグが機能するトークンではコストはかかりません。
token info には realized_profit や token_transfer_out が含まれないため、フォールバック経路では次のようになります。
- 実現利益の数値は完全に省略されます。
$0と表示すると、測定されていない項目を測定済みであるかのように報告することになるためです - なりすましアカウントの判定方法を切り替えます。「Dev の資金が Top 100 ウォレットに渡ったか」ではなく、Top 100 ホルダーの
native_transfer.from_addressが creator と一致するか、つまり Dev がそのウォレットのガス代を支払ったかを確認します。一致した場合は危険として報告し、該当ウォレットを示します。一致しなくても安全とは報告しません。測定対象のトークンでは、その項目を持つホルダーは 57% にすぎないためです。
注意事項
- Dev の保有分を特定する際の
balance >= 1というしきい値により、ダストによる誤検出を避けます - SOL の
native_balanceは lamports 単位(÷1e9)です。bsc/eth/baseは wei 単位(÷1e18)です。arc/stable/robinhoodの小数桁数は未確認のため、誤った換算値を表示する代わりに、これらのチェーンでは購入余力のセクションに「未評価」と表示します。 - ホルダーの購入余力を計算するには、ラップされたネイティブトークンのアドレス(
So111…1112/ WBNB / WETH / Base WETH)を使ってtoken infoからライブのネイティブトークン価格を取得する必要があります。この呼び出しに失敗した場合、セクションはネイティブ単位に切り替わり、USD の数値は表示しません。 total_supplyは、通常のウォレットについてbalance / amount_percentageの中央値として推定されますcur_priceは、通常のウォレットについてusd_value / balanceの中央値として推定されます- Entry MC =
total_supply * avg_cost。各 Top5 ウォレットの未実現損益とあわせて表示されます - Top5 では、利用可能な場合は Twitter 名を表示し、それ以外の場合は
first4...last4形式で表示します - リスクウォレットの小計はカテゴリごとの値のため、重複を除いた合計を超える場合があります。その場合、スクリプトは複数のリスクタグを持つウォレットの数を表示します。
- 急騰後は、
creator_ath_info.ath_mcがトークンの現在の MC より遅れて更新されることがあります(上流のath_priceがprice_24hと等しくなっているケースが確認されています)。スクリプトでは再計算できないため、報告された ATH が現在の MC を 5% 超下回る場合、Dev の最高値として提示せず、数値の横に古い値であることを示す警告を表示します。