mcpField
P
pumpfun-mechanics

pumpfun-mechanics

github.com/agiprolabsその他456459 回インストール8 週間前に更新
リポジトリ

pumpfun-mechanics について

pumpfun-mechanicsは、Solana上のPumpFunを扱う開発者や分析者向けの技術ガイドです。ボンディングカーブ計算、卒業と移行の仕組み、命令やイベントの解析を扱います。

主な機能

  1. 01売買数量、コスト、価格インパクトの計算
  2. 02卒業の進捗推定と移行プロセスの解説
  3. 03PumpFunの命令とイベント構造の解析
  4. 04カーブ計算とイベント解析のスクリプト

活用シーン

  1. 01トークン取引のカーブ価格と価格インパクトの評価
  2. 02トークンの卒業基準への進捗確認
  3. 03トランザクションデータからのPumpFunイベント解析
  4. 04卒業後のPumpSwapの仕組みの分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill pumpfun-mechanics

インストール後、Claude Code で/pumpfun-mechanicsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
bonding_curve_math.md
graduation_process.md
instruction_reference.md
scripts/
curve_calculator.py
parse_events.py

詳細

PumpFun の仕組み — ボンディングカーブ、卒業、インストラクションの解析

PumpFun は Solana で主流のトークンローンチパッドです。ボンディングカーブの計算、卒業プロセス、インストラクション形式を理解することは、新しいトークンローンチの分析、卒業イベントを利用した取引戦略の構築、オンチェーンの PumpFun アクティビティの解析に不可欠です。

ボンディングカーブの計算

PumpFun は**仮想定数積(CPMM)**ボンディングカーブを使用します。

k = virtualSolReserves × virtualTokenReserves
初期パラメーター
パラメーター値
初期仮想 SOL30 SOL(30,000,000,000 lamports)
初期仮想トークン約 1.073B トークン(1,073,000,000,000,000 raw、6 decimals)
トークン総供給量1B トークン(1,000,000,000,000,000 raw)
実トークン準備金約 793M トークン(793,000,000,000,000 raw)
実 SOL 準備金0(ローンチ時に実 SOL なし)
手数料1%(プログラムによって外部で適用)

仮想準備金と実準備金:仮想準備金はカーブの形状を定義します。実準備金は実際に引き出し可能な資金を記録します。この差(1.073B - 793M = 280M の仮想トークン)が初期価格を形作りますが、引き出すことはできません。

スポット価格
price_sol_per_token = virtual_sol_reserves / virtual_token_reserves

# In human-readable units:
price = (virtual_sol / 1e9) / (virtual_token / 1e6)

# At genesis: 30 / 1,073,000,000 ≈ 2.796e-8 SOL/token
# At graduation: ~4.1e-7 SOL/token (~14.7x from launch)
トークンの購入(SOL → トークン)
def buy_tokens(v_sol: int, v_tok: int, real_tok: int, sol_in: int) -> int:
    """Calculate tokens received for a given SOL input.

    Args:
        v_sol: Virtual SOL reserves (lamports).
        v_tok: Virtual token reserves (raw).
        real_tok: Real token reserves (raw).
        sol_in: SOL to spend (lamports, BEFORE 1% fee).

    Returns:
        Tokens received (raw units).
    """
    k = v_sol * v_tok
    new_v_sol = v_sol + sol_in
    new_v_tok = k // new_v_sol + 1  # +1 matches on-chain rounding
    tokens_out = v_tok - new_v_tok
    return min(tokens_out, real_tok)
トークンの売却(トークン → SOL)
def sell_tokens(v_sol: int, v_tok: int, real_sol: int, tokens_in: int) -> int:
    """Calculate SOL received for selling tokens.

    Args:
        v_sol: Virtual SOL reserves (lamports).
        v_tok: Virtual token reserves (raw).
        real_sol: Real SOL reserves (lamports).
        tokens_in: Tokens to sell (raw units).

    Returns:
        SOL received (lamports, BEFORE 1% fee).
    """
    k = v_sol * v_tok
    new_v_tok = v_tok + tokens_in
    new_v_sol = k // new_v_tok
    sol_out = v_sol - new_v_sol - 1  # -1 matches on-chain floor rounding
    return min(sol_out, real_sol)
購入コスト(正確なトークン数量 → 必要な SOL)
def buy_cost(v_sol: int, v_tok: int, tokens_wanted: int) -> int:
    """Calculate SOL needed to buy exact token amount.

    Returns:
        SOL cost in lamports (before fee). Returns max int if impossible.
    """
    if tokens_wanted >= v_tok:
        return 2**64 - 1  # impossible
    k = v_sol * v_tok
    new_v_tok = v_tok - tokens_wanted
    new_v_sol = k // new_v_tok + 1
    return new_v_sol - v_sol
手数料の処理

1% の手数料はカーブ計算に含まれません。外部で適用されます。

# Buying: fee deducted from SOL input before curve
actual_sol_to_curve = sol_input * 0.99

# Selling: fee deducted from SOL output after curve
actual_sol_received = sol_from_curve * 0.99

# Roundtrip minimum cost: ~2% from fees alone, plus price impact
時価総額
market_cap_sol = (token_total_supply * virtual_sol_reserves) / virtual_token_reserves

卒業

卒業は、realSolReserves が約 85 SOL(SOL 価格に応じて約 12,000~14,000 ドル)に達すると発生します。卒業する PumpFun トークンは全体の約 1.4% にすぎません。

発生すること
  1. ボンディングカーブアカウントの complete フラグが true に設定される
  2. CompleteEvent が発行される(ディスクリミネーター 5f72619cd42e9808)
  3. ボンディングカーブが取引を受け付けなくなる
  4. 約 12,000 ドルの流動性が移行先 DEX に入金される
  5. トークンが PumpSwap(古いトークンでは Raydium)で取引可能になる
充填率
GRADUATION_THRESHOLD = 85_000_000_000  # 85 SOL in lamports

fill_pct = (real_sol_reserves / GRADUATION_THRESHOLD) * 100.0
移行先
  • 2025 年 3 月以降:PumpSwap(pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA)— ネイティブ AMM、移行手数料なし
  • 2025 年 3 月より前:Raydium V4(675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8)— 6 SOL の手数料
卒業後の PumpSwap

PumpSwap は手数料 1% の定数積 AMM です(ボンディングカーブと同じ)。主な違いは次のとおりです。

  • ベース資産は常に WSOL、クオート資産はトークンです
  • インストラクションの意味が逆です。「buy」インストラクションはトークンを売却し、「sell」インストラクションはトークンを購入します
  • クリエイター収益分配に対応しています(取引量の 0.05% が元のクリエイターに支払われます)

プログラム ID とアドレス

プログラム/アカウントアドレス
PumpFun プログラム6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
PumpSwap プログラムpAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA
手数料プログラムpfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
グローバルアカウント4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
手数料受取先62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV
イベントオーソリティCe6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1

イベントの解析

イベントは Anchor 形式です:sha256("event:<EventName>")[0..8]

イベントディスクリミネーター(16 進数)
CreateEvent1b72a94ddeeb6376
TradeEventbddb7fd34ee661ee
CompleteEvent5f72619cd42e9808
TradeEvent のレイアウト(8 バイトのディスクリミネーターの後)
mint:                  pubkey   32 bytes
solAmount:             u64       8 bytes
tokenAmount:           u64       8 bytes
isBuy:                 bool      1 byte
user:                  pubkey   32 bytes
timestamp:             i64       8 bytes
virtualSolReserves:    u64       8 bytes
virtualTokenReserves:  u64       8 bytes
realSolReserves:       u64       8 bytes
realTokenReserves:     u64       8 bytes

重要:イベントは CPI の内部インストラクション内にあります。インストラクションデータ内のディスクリミネーターは、オフセット 0 だけでなくどこにあるかを問わず検索してください。

ボンディングカーブアカウントのレイアウト
Offset 0:   discriminator          8 bytes
Offset 8:   virtualTokenReserves   u64
Offset 16:  virtualSolReserves     u64
Offset 24:  realTokenReserves      u64
Offset 32:  realSolReserves        u64
Offset 40:  tokenTotalSupply       u64
Offset 48:  complete               bool (1 byte)
Offset 49:  creator                pubkey (32 bytes)
PDA の導出
PDAシード
ボンディングカーブ["bonding-curve", mint]
ボンディングカーブ V2["bonding-curve-v2", mint]
クリエイターボールト["creator-vault", creator]

インストラクションのディスクリミネーター

インストラクション16 進数備考
buy_exact_sol_in (V2)38fc74089edfcd5f現在の本番環境での購入
sell (V2)33e685a4017f83ad現在の本番環境での売却
buy (V1/legacy)66063d1201daebeaレガシー形式。現在も時折見られる
create181ec828051c0777トークンの作成
購入命令データ(24バイト)
[0..8]:   discriminator
[8..16]:  spendable_sol_in    u64 LE (total SOL budget, fees deducted internally)
[16..24]: min_tokens_out      u64 LE (slippage floor)
売却命令データ(24バイト)
[0..8]:   discriminator
[8..16]:  amount_tokens       u64 LE (tokens to sell, raw)
[16..24]: min_sol_output      u64 LE (minimum SOL out, lamports)

価格への影響と数量

def price_impact(v_sol: int, v_tok: int, sol_in: int) -> float:
    """Calculate price impact for a buy as a percentage."""
    spot = v_sol / v_tok
    tokens = buy_tokens(v_sol, v_tok, v_tok, sol_in)
    if tokens == 0:
        return float('inf')
    exec_price = sol_in / tokens
    return (exec_price / spot - 1) * 100

# Example: 1 SOL buy at genesis
# impact = price_impact(30_000_000_000, 1_073_000_000_000_000, 1_000_000_000)
# ≈ 3.3% price impact

ファイル

リファレンス
  • references/bonding_curve_math.md — 計算例を含む、完全な数学的導出
  • references/graduation_process.md — 卒業のしきい値、移行、PumpSwap の仕組み
  • references/instruction_reference.md — パース用の命令とイベントの全レイアウト
スクリプト
  • scripts/curve_calculator.py — 対話型ボンディングカーブ計算ツール:価格、影響、約定率
  • scripts/parse_events.py — トランザクションデータから PumpFun イベントをパース

コメント