All packages
pump_unified_substreams
posaune0423
Package ref
pump-unified-substreams@v0.1.0Run package
CLI
Run map_program_data from the command line.
substreams run pump-unified-substreams@v0.1.0 map_program_data -e solana-mainnet --start-block -1Authenticate by running
substreams auth or directly on thegraph.market (see docs).README
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
Modules
Execution graph
Show 3 dependencies
Output
sf.solana.type.v1.BlockInputs
Output
sf.substreams.index.v1.Keys
`blocks_without_votes` allows you to consume a full Solana Block without Vote instructions (`Vote111111111111111111111111111111111111111`). If you consume it on HISTORICAL data (+1000 blocks from HEAD), you will be reading from the StreamingFast cache, thus saving costs on the amount of TB read.
Output
sf.solana.type.v1.BlockInputs