Uniswap 公式 は StablePair Hook のメインネット落地を発表し、USDC/USDG · USDC/USDT を覆う——本篇は PoolManager Swap / ModifyLiquidity + hook logs:peg ドリフト、動的手数料、LP 出入りを同一警報パネルへ。Base 株トークン Swap ウォッチ が狙うのはホワイトリスト大口約定;本篇が狙うのは ETH メインネット StablePair 安定池層。
パブリックエンドポイントで走らせる · blockreq.com 登録すると毎月 3M リクエスト無料。
| 用途 | Endpoint |
|---|---|
| パブリック HTTPS | https://ethereum-rpc.blockreq.com/v1/rpc/public |
| パブリック WSS | wss://ethereum-rpc.blockreq.com/v1/rpc/public |
| プライベート | 末尾 public → {API_KEY}(鍵はローカル) |
チェーン:Ethereum Mainnet EVM chainId = 0x1(1)。公開エンドポイント · eth_subscribe · 料金 · 登録。
1. フック:StablePair × peg / 手数料 / LP
| 板の感触 | オンチェーン信号 | 狙うもの |
|---|---|---|
| 安定池約定 | PoolManager Swap · poolId ∈ 表 | sqrtPrice · fee · amount0/1 |
| peg ドリフト | 約定後 tick / sqrtPriceX96 | 参照価 1:1 からの偏差 |
| 動的手数料 | Swap イベント fee 欄 / hook getFee | feeE6 方向差 |
| LP 出入り | ModifyLiquidity · liquidityDelta | 加倉 / 撤出の幅 |
同族対照:Base 株トークン篇は Swap 大口へ収束;ETH 本篇は StablePair peg + 手数料 + LP カード へ収束。
2. イベント:PoolManager Swap / ModifyLiquidity + hook
ローカル JSON で維持:
| env | 既定(編集可) |
|---|---|
POOL_MANAGER | 0x000000000004444c5dc75cB358380D2e3dE08A90 |
STABLEPAIR_HOOK | 0x0000113dCf4ADd69999Fad8F20F2b63F979bfcC0 |
POOL_ID_LIST | USDC/USDT · USDC/USDG poolId(公式配備表) |
PEG_BPS / LP_DELTA_MIN | ドリフトと撤出の閾値 |
同一本の Ethereum パブリック WSS:PoolManager Swap + ModifyLiquidity を購読し、topics[1] = poolId で濾す;hook アドレス logs を並列購読可。
Step A · PoolManager Swap を購読
{
"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe",
"params": ["logs", {
"address": "0x000000000004444c5dc75cB358380D2e3dE08A90",
"topics": [
"0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f",
["POOL_ID_USDC_USDT", "POOL_ID_USDC_USDG"]
]
}]
}
topics[0]:V4Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)。topics[1]:indexedPoolId;amount0/1 · sqrtPriceX96 · liquidity · tick · fee をデコード → peg 偏差と手数料カードを計算。
Step B · ModifyLiquidity を購読(並列可)
{
"jsonrpc": "2.0", "id": 2, "method": "eth_subscribe",
"params": ["logs", {
"address": "0x000000000004444c5dc75cB358380D2e3dE08A90",
"topics": [
"0xf208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec",
["POOL_ID_USDC_USDT", "POOL_ID_USDC_USDG"]
]
}]
}
topics[0]:V4ModifyLiquidity(bytes32,address,int24,int24,int256,bytes32)。liquidityDelta < 0かつ幅 ≥LP_DELTA_MIN→ LP 撤出カード;正値 → 加倉カード。
Step C · 安定池カードフィールド
{ chain: "ethereum", pad: "stablepair-hook", kind: "swap|peg|fee|lp", poolId, hook, sqrtPriceX96, tick, fee, pegBps, liquidityDelta, txHash, blockNumber, ts }
同じ txHash + logIndex で重複排除;demo で poolId 表と閾値を調整可。公式参考 poolId(配備ページで照合可):
- USDC/USDT ·
0x2b21c65d9a7dc6926ee330a1c6e5a8037fd81774f3dc066536f800128e39f634 - USDC/USDG ·
0xeda62d2906d0edf26d40c793d581609552a44a87f618a98ff76ebe8dde4b7edb
3. ブラウザ demo(StackBlitz)
既定は Ethereum パブリック WSS;PoolManager / StablePair hook / poolId 表 + peg·LP 閾値を貼り Start で安定池カードを流す。コードは StackBlitz で見られ、記事はプレビューだけ埋め込む:
リポジトリ:blockreq/blog-demos → examples/ethereum-uniswap-v4-stablepair-hook-listen(Vite+React+viem;StackBlitz は倉庫 root を開く)。
WSS → wss://ethereum-rpc.blockreq.com/v1/rpc/public
HTTPS→ https://ethereum-rpc.blockreq.com/v1/rpc/public
env → POOL_MANAGER · STABLEPAIR_HOOK · POOL_ID_LIST · PEG_BPS · LP_DELTA_MIN
keyed に換える:WSS 末尾 public → {API_KEY}。 走らせる枠:blockreq.com 登録すると毎月 3M リクエスト無料。
4. アラート節奏
- Swap 到着 → poolId · sqrtPrice · fee · amounts をデコード → pegBps / fee カード。
- ModifyLiquidity 到着 → liquidityDelta 閾値 → LP 加倉 / 撤出カード。
- 送出 →
ETH StablePair · kind=… · pool=… · pegBps=… · fee=… · blk=…。 - 重複排除 → 同じ
txHash+logIndexは一度だけ。
切断後は再接続して再 subscribe;空窓は HTTPS eth_getLogs で同一 PoolManager をブロック段回補。POST → https://ethereum-rpc.blockreq.com/v1/rpc/public。
5. まとめ + CTA
- 粒度:ETH StablePair ウォッチ = peg ドリフト + 動的手数料 + LP 出入り。
- レシピ:PoolManager + Swap/ModifyLiquidity topic + poolId 表 + 閾値 → 安定池カード。
- 走らせられる:ブラウザを BlockReq Ethereum パブリック WSS に掛ける;demos1 パスは上記。
- 走らせる:公開エンドポイント + blockreq.com 登録すると毎月 3M リクエスト無料。
次:poolId / 閾値 JSON を固める → Webhook → Base 株トークン Swap 大口カードと同屏重ね。ドキュメント · 料金 · 登録。