同じ 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] は環境変数プレースホルダ(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 を落とす。公開エンドポイント · プランと料金。