같은 token이 여러 시장 / 쿼트 측에서 차례로 열린다——ETH 쿼트 한 단, stock token 쿼트 또 한 단, 호가가 층을 쌓는다. Equifold의 Base 상선과 Robinhood 쪽 다시장 논의는 EquiFold · Base와 EquiFold · multi-market에서 옮겼다. 이 글이 하는 일은 하나: eth_subscribe 한 줄을 Factory에 걸고 token으로 다시장을 집계해 첫 시장 / N번째 시장에 우선순위와 레이트 태그를 친다.
Bags 단일 페어 착지: 주식 페어 런치. 새 풀 agent: 새 풀 Agent. 오픈 리듬: RH 오픈 보는 법. 이 편은 한 코인 → 다시장 집계.
| 용도 | Base(기본) | Robinhood(선택 전환) |
|---|---|---|
| 퍼블릭 HTTPS | https://base-rpc.blockreq.com/v1/rpc/public | https://robinhood-mainnet-rpc.blockreq.com/v1/rpc/public |
| 퍼블릭 WSS | wss://base-rpc.blockreq.com/v1/rpc/public | wss://robinhood-mainnet-rpc.blockreq.com/v1/rpc/public |
| 프라이빗 | 끝 public → {API_KEY}(키는 로컬) | 왼쪽과 같음 |
체인: Base EVM chainId = 0x2105(8453); 선택 RH 0x1237(4663). Free 3M Requests / 30 days · 공개 엔드포인트 · eth_subscribe · 요금.
1. 단일 페어 → 한 코인 다시장 듣기 모델
| 호가창 감각 | 온체인 신호 | 잡을 것 |
|---|---|---|
| 시장 착지 | Factory create / open 류 이벤트 | marketId, baseToken, quoteToken |
| 같은 token이 한 단 더 | 같은 baseToken, 새 quote / market | marketsByToken[token]에 기록 |
| 첫 시장 오픈 | 그 token 집계표 길이 = 1 | 우선순위 태그 P0 / first |
| N번째 시장 오픈 | 길이 ≥ 2 | 태그 P1… / nth + 레이트 창 |
Stock-pairs 편은 「한쪽 ∈ stock 표인 단일 페어」; 이 편은 「같은 token 아래 시장 리스트가 어떻게 길어지는가」.
2. Equifold 이벤트 + 쿼트 종류
흔한 쿼트 측 두 종류(배포 ABI / env 기준):
| 쿼트 종류 | 예시 | 알림 쪽 사용법 |
|---|---|---|
| ETH / WETH 쿼트 | 네이티브 유동성 단 | 첫 시장이 여기 오기 쉽다 → P0 |
| Stock token 쿼트 | AAPL / TSLA 류 | 같은 token의 다음 단 → Nth 확장 |
Factory 주소와 create/open topics[0]은 env 플레이스홀더(EQUIFOLD_FACTORY, EQUIFOLD_MARKET_TOPIC0). 체인이나 배포를 바꿀 때는 env만 바꾼다.
3. 구독 한 줄: Factory + topic, token으로 집계
같은 퍼블릭 WSS 한 줄로 Factory 좁은 logs를 구독. 각 푸시에서 base / quote / market을 디코드해 로컬 집계표로.
Step A · Factory create/open 구독(topic0 플레이스홀더)
{
"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe",
"params": ["logs", {
"address": "${EQUIFOLD_FACTORY}",
"topics": ["${EQUIFOLD_MARKET_TOPIC0}"]
}]
}
address/topics[0]은 env에서 읽는다; Equifold Factory ABI를 따른다.baseToken/quoteToken/market디코드(필드명은 ABI)→key = baseToken.toLowerCase().
Step B · 로컬 집계 marketsByToken
| 필드 | 의미 |
|---|---|
token | baseToken(집계 키) |
markets[] | { market, quote, tx, ts, index } |
firstAt | 첫 시장 타임스탬프 |
count | 현재 시장 수 |
create마다: count += 1, index = count; index === 1 → 첫 시장; 아니면 N번째 시장.
Step C · stock-pairs와의 분업
| 편 | 듣는 것 | 산출 |
|---|---|---|
| 주식 페어 | PairCreated × stock 표 | 단일 페어 카드 |
| 이 편 | Equifold Factory × token 집계 | 첫 시장 / N번째 시장 우선순위 카드 |
4. 알림: 첫 시장 vs N번째 시장(우선순위 · 레이트 태그)
우선순위 + 레이트로 푸시 리듬을 관리(정면 태그, 보드 색 블록용):
| 태그 | 트리거(demo) | 푸시 전략 |
|---|---|---|
| P0 · first | index === 1 | 바로 민다; 필드 세트 |
| P1 · nth | index ≥ 2 | index, quote, 첫 시장부터 Δt |
| rate · burst | 같은 token이 짧은 창에 여러 시장 | 레이트 태그를 쌓아 한 클러스터 카드 |
| rate · steady | 간격이 벌어진 후속 시장 | 단건 가벼운 갱신 |
- 시장 착지 →
{ token, market, quote, index, factoryTx, ts }. - 첫 시장 → 위와 같음 +
priority: "P0"; Webhook / 보드 하이라이트. - N번째 시장 →
priority: "P1"+index+deltaFromFirstMs. - 레이트 클러스터 → 짧은 창에 같은 token이 여러 건 →
markets[]요약을 한 장에.
끊긴 뒤 재연결하면 반드시 재 subscribe; 빈 창은 HTTPS eth_getLogs로 블록 구간 백필하고 같은 집계 + 우선순위 규칙으로 재생. 기본 POST → https://base-rpc.blockreq.com/v1/rpc/public; RH로 바꿀 때는 표의 RH 행.
5. Free 3M + 양 엔드포인트 전환(StackBlitz)
기본은 BlockReq Base 퍼블릭 WSS; UI에서 RH로 전환 가능. Factory + topic0을 붙이거나 env에 넣고 marketsByToken을 실시간으로 흘려 P0 / P1 / rate 태그를 친다. 코드는 StackBlitz에서 본다. 글에는 미리보기만 넣는다:
저장소: blockreq/blog-demos → examples/equifold-multi-market-listen. keyed로 바꾸기: WSS 끝 public → {API_KEY}. Free 3M은 짧은 두 체인 시험 청취에 충분; 장기 보드는 keyed.
6. 요약
- 한 코인 다시장 = Factory 이벤트를 token으로 집계; 리스트가 길어지는 모습과 첫 시장 / N번째 시장을 듣는다.
- 레시피: Factory 구독 한 줄 +
marketsByToken+ P0/P1/rate 태그. - Base 퍼블릭 WSS를 기본으로 돌린다; StackBlitz에서 한 번에 RH 전환; Free 3M이 시험 청취를 덮는다.
- 시리즈: 주식 단일 페어 · 새 풀 Agent · 오픈 리듬 · 얇은 유동성 · 이 편의 다시장 집계. 다음: Factory / topic0을
.env로 고정 → P0/P1을 Webhook으로 → checkpoint 저장. 공개 엔드포인트 · 플랜과 요금.