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 대량 카드와 같은 화면 겹침. 문서 · 요금 · 가입.