Pump Unified Substreams
Pump.fun Bonding Curve と Pump AMM の両方のプログラムからイベント・インストラクションをリアルタイムで取得する Substreams パッケージです。
flowchart LR
subgraph Solana["Solana Mainnet"]
PUMP["fa:fa-rocket pump.fun<br/>Bonding Curve"]
AMM["fa:fa-exchange-alt Pump AMM"]
end
subgraph Substreams["Substreams"]
MAP["fa:fa-filter map_program_data"]
end
subgraph Sink["substreams-sink-sql"]
PG["fa:fa-database PostgreSQL"]
PGWEB["fa:fa-globe pgweb"]
end
PUMP --> MAP
AMM --> MAP
MAP --> PG
PG --> PGWEB
概要
| プログラム |
Program ID |
説明 |
| pump.fun Bonding Curve |
6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P |
トークン作成・初期取引(ボンディングカーブ) |
| Pump AMM |
pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA |
Graduate後のAMM取引 |
取得できるイベント
Pump.fun Bonding Curve
| イベント |
説明 |
CreateEvent |
新規トークン作成 |
TradeEvent |
売買取引 |
CompleteEvent |
ボンディングカーブ完了(Graduate) |
SetParamsEvent |
パラメータ設定 |
Pump AMM
| イベント |
説明 |
AmmBuyEvent |
AMM購入 |
AmmSellEvent |
AMM売却 |
CreatePoolEvent |
プール作成 |
DepositEvent |
LP追加 |
WithdrawEvent |
LP削除 |
CollectCoinCreatorFeeEvent |
クリエイター手数料収集 |
クイックスタート
前提条件
# Substreams CLI インストール
brew install streamingfast/tap/substreams
# substreams-sink-sql インストール
brew install streamingfast/tap/substreams-sink-sql
# buf インストール(開発時のみ)
brew install bufbuild/buf/buf
1. 認証設定
# Substreams 認証
substreams auth
# .substreams.env が作成されます
2. ビルド
# WASMビルド
cargo build --target wasm32-unknown-unknown --release
# パッケージ作成
substreams pack substreams.yaml
3. 動作確認(GUI)
source .substreams.env
substreams gui substreams.yaml map_program_data
PostgreSQLへのデータ同期
Docker Compose で PostgreSQL 起動
docker-compose up -d
| サービス |
URL |
説明 |
| PostgreSQL |
localhost:5432 |
データベース |
| pgweb |
http://localhost:8081 |
Web UI |
substreams-sink-sql 実行
source .substreams.env
substreams-sink-sql from-proto \
"postgres://dev:insecure@localhost:5432/main?sslmode=disable" \
substreams.yaml \
map_program_data
オプション
# 開発モード(Undoサポート)
substreams-sink-sql from-proto \
"postgres://dev:insecure@localhost:5432/main?sslmode=disable" \
substreams.yaml \
map_program_data \
--development-mode
# 特定ブロック範囲
substreams-sink-sql from-proto \
"postgres://dev:insecure@localhost:5432/main?sslmode=disable" \
substreams.yaml \
map_program_data \
--start-block 298724475 \
--stop-block +1000
データ確認
pgweb(Web UI)
ブラウザで http://localhost:8081 を開く
psql コマンド
# テーブル一覧
docker exec pump-unified-postgres psql -U dev -d main -c "\dt"
# TradeEvent 件数
docker exec pump-unified-postgres psql -U dev -d main -c "SELECT COUNT(*) FROM tradeevent"
# 最新のトレード
docker exec pump-unified-postgres psql -U dev -d main -c \
"SELECT mint, sol_amount, token_amount, is_buy, \"user\", timestamp
FROM tradeevent
ORDER BY _block_number_ DESC
LIMIT 10"
# AMM Buy イベント
docker exec pump-unified-postgres psql -U dev -d main -c \
"SELECT pool, \"user\", base_amount_out, quote_amount_in, timestamp
FROM ammbuyevent
ORDER BY _block_number_ DESC
LIMIT 10"
# 新規トークン作成
docker exec pump-unified-postgres psql -U dev -d main -c \
"SELECT name, symbol, mint, \"user\"
FROM createevent
ORDER BY _block_number_ DESC
LIMIT 10"
テーブルスキーマ
tradeevent
| カラム |
型 |
説明 |
mint |
VARCHAR |
トークンアドレス |
sol_amount |
NUMERIC |
SOL量 |
token_amount |
NUMERIC |
トークン量 |
is_buy |
BOOLEAN |
購入フラグ |
user |
VARCHAR |
ユーザーアドレス |
timestamp |
BIGINT |
タイムスタンプ |
virtual_sol_reserves |
NUMERIC |
仮想SOLリザーブ |
virtual_token_reserves |
NUMERIC |
仮想トークンリザーブ |
trx_hash |
VARCHAR |
トランザクションハッシュ |
block_number |
NUMERIC |
ブロック番号 |
ammbuyevent / ammsellevent
| カラム |
型 |
説明 |
pool |
VARCHAR |
プールアドレス |
user |
VARCHAR |
ユーザーアドレス |
base_amount_out/in |
NUMERIC |
ベーストークン量 |
quote_amount_in/out |
NUMERIC |
クオートトークン量(SOL) |
lp_fee |
NUMERIC |
LP手数料 |
protocol_fee |
NUMERIC |
プロトコル手数料 |
coin_creator_fee |
NUMERIC |
クリエイター手数料 |
timestamp |
BIGINT |
タイムスタンプ |
Substreams Registry への公開
source .substreams.env
substreams publish pump-unified-substreams-v0.1.0.spkg
- https://substreams.dev/me でトークンを取得
- プロンプトにトークンを貼り付け
y で公開を確認
開発
プロジェクト構成
.
├── Cargo.toml # Rust設定
├── substreams.yaml # Substreams設定
├── docker-compose.yml # PostgreSQL + pgweb
├── idls/
│ ├── pump.json # pump.fun IDL
│ └── pump_amm.json # Pump AMM IDL
├── proto/
│ └── program.proto # Protobuf定義
└── src/
├── lib.rs # メインロジック
├── idl/
│ └── mod.rs # IDL宣言
└── pb/
└── (自動生成)
Proto再生成
buf generate proto
コードフォーマットとリント
フォーマット
# コードをフォーマット
cargo fmt
# フォーマットチェック(変更なし)
cargo fmt -- --check
# または Makefile を使用
make fmt # フォーマット実行
make fmt-check # フォーマットチェック
リント(Clippy)
# リント実行
cargo clippy
# リント実行(警告をエラーとして扱う)
cargo clippy -- -D warnings
# 自動修正可能な問題を修正
cargo clippy --fix --allow-dirty --allow-staged
# または Makefile を使用
make lint # リント実行
make lint-fix # 自動修正
make check # フォーマットチェック + リント
コンテナ管理
# 起動
docker-compose up -d
# 停止
docker-compose down
# 完全削除(ボリュームも)
docker-compose down -v
ライセンス
MIT