robinhood-chain-sdk 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -16
- package/dist/index.d.ts +609 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +165 -8
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/llms.txt +21 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](package.json)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
|
-
> **Robinhood Chain API / SDK — EVM-native on-chain trading intelligence for Robinhood Chain (chain id 4663).** The official, fully-typed, zero-dependency TypeScript client for live KOL trades, token discovery & launch-bundle detection, the Uniswap DEX trade tape, 1-minute OHLC candles, deployer reputation, and smart-money wallet rankings — served from a self-hosted Robinhood Chain node.
|
|
10
|
+
> **Robinhood Chain API / SDK — EVM-native on-chain trading intelligence for Robinhood Chain (chain id 4663).** The official, fully-typed, zero-dependency TypeScript client for all 25 endpoints: live KOL trades and coordination, token discovery, batch reads & launch-bundle detection, the Uniswap DEX trade tape, 1-minute OHLC candles, deployer reputation with alerts and trajectories, and smart-money wallet rankings — served from a self-hosted Robinhood Chain node.
|
|
11
11
|
|
|
12
12
|
> ⭐ **[Star on GitHub](https://github.com/madeonsol/robinhood-chain-sdk)** · 📂 **[Examples](./examples/)** · 🌐 **[Robinhood Chain](https://madeonsol.com/robinhood)** · 📚 **[API docs](https://madeonsol.com/api-docs)**
|
|
13
13
|
|
|
@@ -48,33 +48,47 @@ const client = new RobinhoodClient({
|
|
|
48
48
|
|
|
49
49
|
## Every endpoint → SDK method
|
|
50
50
|
|
|
51
|
-
All
|
|
51
|
+
All 25 Robinhood Chain endpoints live under `https://madeonsol.com/api/v1`. Bearer `msk_` auth on every call.
|
|
52
52
|
|
|
53
53
|
| # | Endpoint | SDK method | Tier |
|
|
54
54
|
|---|---|---|---|
|
|
55
55
|
| 1 | `GET /rhc/kol/feed` | `client.kol.feed(params?)` | BASIC |
|
|
56
56
|
| 2 | `GET /rhc/kol/leaderboard` | `client.kol.leaderboard(params?)` | BASIC |
|
|
57
57
|
| 3 | `GET /rhc/kol/hot-tokens` | `client.kol.hotTokens(params?)` | BASIC |
|
|
58
|
-
| 4 | `GET /rhc/kol/
|
|
59
|
-
| 5 | `GET /rhc/
|
|
60
|
-
| 6 | `GET /rhc/
|
|
61
|
-
| 7 | `GET /rhc/
|
|
62
|
-
| 8 | `GET /rhc/tokens
|
|
63
|
-
| 9 | `GET /rhc/tokens/{address}
|
|
64
|
-
| 10 | `GET /rhc/tokens/{address}/
|
|
65
|
-
| 11 | `GET /rhc/tokens/{address}/
|
|
66
|
-
| 12 | `GET /rhc/
|
|
67
|
-
| 13 | `GET /rhc/
|
|
68
|
-
| 14 | `
|
|
58
|
+
| 4 | `GET /rhc/kol/coordination` | `client.kol.coordination(params?)` | BASIC |
|
|
59
|
+
| 5 | `GET /rhc/kol/first-touches` | `client.kol.firstTouches(params?)` | BASIC |
|
|
60
|
+
| 6 | `GET /rhc/kol/{wallet}` | `client.kol.wallet(wallet)` | BASIC |
|
|
61
|
+
| 7 | `GET /rhc/trades` | `client.trades(params?)` | PRO+ |
|
|
62
|
+
| 8 | `GET /rhc/tokens` | `client.tokens.list(params?)` | PRO+ |
|
|
63
|
+
| 9 | `GET /rhc/tokens/{address}` | `client.tokens.get(address)` | BASIC |
|
|
64
|
+
| 10 | `GET /rhc/tokens/{address}/candles` | `client.tokens.candles(address, params?)` | PRO+ |
|
|
65
|
+
| 11 | `GET /rhc/tokens/{address}/kol-consensus` | `client.tokens.kolConsensus(address)` | PRO+ |
|
|
66
|
+
| 12 | `GET /rhc/tokens/{address}/buyer-quality` | `client.tokens.buyerQuality(address)` | BASIC |
|
|
67
|
+
| 13 | `GET /rhc/tokens/{address}/bundle` | `client.tokens.bundle(address)` | BASIC |
|
|
68
|
+
| 14 | `POST /rhc/token/batch` | `client.tokens.batch(addresses)` — max 50 | BASIC |
|
|
69
|
+
| 15 | `POST /rhc/tokens/batch/buyer-quality` | `client.tokens.batchBuyerQuality(addresses)` — **max 20** | BASIC |
|
|
70
|
+
| 16 | `GET /rhc/deployer-hunter/leaderboard` | `client.deployerHunter.leaderboard(params?)` | BASIC |
|
|
71
|
+
| 17 | `GET /rhc/deployer-hunter/best-tokens` | `client.deployerHunter.bestTokens(params?)` | BASIC |
|
|
72
|
+
| 18 | `GET /rhc/deployer-hunter/stats` | `client.deployerHunter.stats()` | BASIC |
|
|
73
|
+
| 19 | `GET /rhc/deployer-hunter/alerts` | `client.deployerHunter.alerts(params?)` | BASIC |
|
|
74
|
+
| 20 | `GET /rhc/deployer-hunter/recent-bonds` | `client.deployerHunter.recentBonds(params?)` | BASIC |
|
|
75
|
+
| 21 | `GET /rhc/deployer-hunter/{address}` | `client.deployerHunter.profile(address)` | BASIC |
|
|
76
|
+
| 22 | `GET /rhc/deployer-hunter/{address}/trajectory` | `client.deployerHunter.trajectory(address)` | BASIC |
|
|
77
|
+
| 23 | `GET /rhc/deployer-hunter/{address}/tokens` | `client.deployerHunter.tokens(address, params?)` | BASIC |
|
|
78
|
+
| 24 | `GET /rhc/deployer-hunter/{address}/history` | `client.deployerHunter.history(address, params?)` | PRO+ |
|
|
79
|
+
| 25 | `GET /rhc/alpha-wallets` | `client.alphaWallets(params?)` | PRO+ |
|
|
69
80
|
| + | `POST /stream/token` → WebSocket | `client.stream.connect()` | PRO+ |
|
|
70
81
|
|
|
71
82
|
## What you can build
|
|
72
83
|
|
|
73
84
|
- **KOL copy-trading on Robinhood Chain** — stream `client.kol.feed()` / the `rhc:kol_trades` channel and mirror verified-KOL buys, EVM-native.
|
|
74
|
-
- **Consensus scanner** — `client.kol.hotTokens()` surfaces tokens 2+ KOLs are accumulating
|
|
85
|
+
- **Consensus scanner** — `client.kol.hotTokens()` surfaces tokens 2+ KOLs are accumulating; `client.kol.coordination()` adds the cohort composition behind it (per-KOL legs, accumulating vs distributing, exit state).
|
|
86
|
+
- **Discovery bot** — `client.kol.firstTouches()` gives the globally earliest KOL buy per token, filterable to tokens minutes old.
|
|
75
87
|
- **Launch-bundle / rug gate** — `client.tokens.bundle()` flags a same-block early-buyer bundle and how much of supply it still holds; `client.tokens.buyerQuality()` scores the first-20 cohort 0–100 with a dump-cluster ensemble.
|
|
88
|
+
- **Portfolio / watchlist refresh** — `client.tokens.batch()` prices up to 50 tokens in one call, `client.tokens.batchBuyerQuality()` scores up to 20.
|
|
76
89
|
- **MEV / sandwich analysis** — `client.trades()` gives every Uniswap v2/v3/v4 swap with the real trader EOA (`tx.from`), `gas_price`, `tx_index`, and `method_selector`.
|
|
77
|
-
- **Deployer due-diligence** — `client.deployerHunter.leaderboard()` / `.profile()` rank 40k+ RHC deployers (
|
|
90
|
+
- **Deployer due-diligence** — `client.deployerHunter.leaderboard()` / `.profile()` / `.trajectory()` / `.tokens()` rank and profile 40k+ RHC deployers; `.stats()` gives the chain-wide denominator.
|
|
91
|
+
- **Deployer alert feed** — `client.deployerHunter.alerts()` pushes new deploys and graduations, tradability-filtered by default, with the tier resolved at read time.
|
|
78
92
|
- **Smart-money discovery** — `client.alphaWallets()` ranks trader wallets by realized net ETH, win rate, and memecoin share, flagging bot fleets and known KOLs.
|
|
79
93
|
- **Charting** — `client.tokens.candles()` returns 1-minute price + market-cap OHLC with buy/sell volume split.
|
|
80
94
|
|
|
@@ -115,6 +129,40 @@ Tokens bought by **2+ distinct KOLs** in the window (`5m`/`15m`/`1h`/`6h`/`24h`)
|
|
|
115
129
|
const { tokens } = await client.kol.hotTokens({ window: "1h" });
|
|
116
130
|
```
|
|
117
131
|
|
|
132
|
+
### `client.kol.coordination(params?)` — `GET /rhc/kol/coordination` (BASIC)
|
|
133
|
+
|
|
134
|
+
Tokens bought by **`min_kols`+ distinct KOLs** in the window, ranked by KOL count then buy volume. Deeper than `hotTokens()`: each row carries the per-KOL breakdown, `net_eth` (buys − sells in-window), an `accumulating` / `distributing` signal, `exited_count` vs `holders_count`, and `time_to_consensus_sec` (how fast the cohort piled in).
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
const { coordination } = await client.kol.coordination({
|
|
138
|
+
period: "24h", // "1h" | "6h" | "24h" | "7d"
|
|
139
|
+
min_kols: 3, // 2–50
|
|
140
|
+
limit: 20, // 1–50
|
|
141
|
+
max_mc_usd: 250_000, // MC at the FIRST KOL buy (unknown entry MC is dropped when a band is set)
|
|
142
|
+
});
|
|
143
|
+
for (const c of coordination) {
|
|
144
|
+
console.log(c.token_symbol, c.kol_count, "KOLs", c.signal, `${c.net_eth} ETH net`, `${c.holders_count} still holding`);
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
RHC has no KOL winrate/strategy tables, so the Solana `avg_winrate_7d` / `coordination_score` fields are intentionally absent.
|
|
149
|
+
|
|
150
|
+
### `client.kol.firstTouches(params?)` — `GET /rhc/kol/first-touches` (BASIC)
|
|
151
|
+
|
|
152
|
+
The **globally earliest buy by any tracked KOL** per token — the discovery signal. Each event carries the entry size in ETH, `tx_hash`, `token_age_minutes` at first touch, the MC at entry, and the current + peak MC so you can score how the call aged.
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
const { events, next_before } = await client.kol.firstTouches({
|
|
156
|
+
limit: 50, // 1–100 — clamped to 20 below PRO
|
|
157
|
+
token_age_max_min: 60, // only tokens under an hour old at first touch
|
|
158
|
+
min_eth: 0.1,
|
|
159
|
+
// since: lastSeen, // poll forward
|
|
160
|
+
// before: next_before, // page back
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
`first_kol.evm_address` is ULTRA-only; `name` and `twitter_url` are always returned.
|
|
165
|
+
|
|
118
166
|
### `client.kol.wallet(wallet)` — `GET /rhc/kol/{wallet}` (BASIC)
|
|
119
167
|
|
|
120
168
|
Aggregate stats over one KOL's last 200 RHC trades plus their 50 most recent.
|
|
@@ -150,6 +198,8 @@ for (const t of trades) {
|
|
|
150
198
|
| `kolConsensus(address)` | `/rhc/tokens/{address}/kol-consensus` | PRO+ | KOL buyers vs sellers, `kol_exit_rate`, `net_flow_eth`, median entry MC, first touch. ULTRA adds buyer/exited wallet lists. |
|
|
151
199
|
| `buyerQuality(address)` | `/rhc/tokens/{address}/buyer-quality` | BASIC | 0–100 first-20 buyer-cohort quality — win-rate, KOL presence, bot-domination, bundle-buyer legs, dump-cluster ensemble. |
|
|
152
200
|
| `bundle(address)` | `/rhc/tokens/{address}/bundle` | BASIC | Same-block launch-bundle detection + how much of what the cohort bought it still holds. |
|
|
201
|
+
| `batch(addresses)` | `POST /rhc/token/batch` | BASIC | Up to **50** tokens in one call — metadata, price/MC/FDV/liquidity, peak MC, deployer reputation. |
|
|
202
|
+
| `batchBuyerQuality(addresses)` | `POST /rhc/tokens/batch/buyer-quality` | BASIC | Up to **20** tokens' early-buyer quality scores in one call. |
|
|
153
203
|
|
|
154
204
|
```ts
|
|
155
205
|
// Launch-bundle + quality gate before buying
|
|
@@ -163,10 +213,47 @@ if (quality.quality.signal === "negative") { /* skip */ }
|
|
|
163
213
|
|
|
164
214
|
> **EVM note:** Robinhood Chain is an Arbitrum Orbit L2 with no atomic multi-signer transaction, so a detected bundle is `bundle_kind: "same_block"` (or `"none"`) — there is no `atomic_tx` kind. KOL consensus is denominated in ETH (`net_flow_eth`).
|
|
165
215
|
|
|
216
|
+
### Batch reads
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
// Up to 50 tokens, one round-trip. Set-based server-side, not a fan-out of get().
|
|
220
|
+
// Every requested address is echoed back — unknown ones as { found: false } — so
|
|
221
|
+
// positions line up with what you sent.
|
|
222
|
+
const { tokens, requested, found } = await client.tokens.batch([token1, token2, token3]);
|
|
223
|
+
for (const t of tokens) {
|
|
224
|
+
if (t.found) console.log(t.symbol, t.market_cap_usd, t.deployer?.tier);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Early-buyer quality for several tokens. MAX 20 — not the Solana batch cap of 50,
|
|
228
|
+
// because each token is a per-token cohort computation (early-buyer scan + bundle
|
|
229
|
+
// detection + alpha/cluster joins), so 50 would mean ~200 round-trips behind one
|
|
230
|
+
// request. The cap comes back as `max_addresses`. A token that fails to score
|
|
231
|
+
// degrades to an entry carrying `error` instead of failing the whole batch.
|
|
232
|
+
const { tokens: scored } = await client.tokens.batchBuyerQuality([token1, token2]);
|
|
233
|
+
for (const q of scored) {
|
|
234
|
+
if ("error" in q) console.warn(q.token_address, q.error);
|
|
235
|
+
else console.log(q.token_address, q.quality.score, q.quality.signal);
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
166
239
|
## Deployer reputation — `client.deployerHunter`
|
|
167
240
|
|
|
168
241
|
Most RHC launchpads are direct-to-DEX (no bonding curve), so "graduation" is a market-cap milestone: `graduation_rate` = share of a deployer's tokens that reached a **$40K+** peak MC; `runner_rate` = share that reached **$100K+**. `tier` is `elite` / `good` / `neutral` / `spammer`.
|
|
169
242
|
|
|
243
|
+
> **Tier semantics (migrations 267 + 269).** `elite` / `good` are earned on the **$100K `runner_rate`** *and* require **24h of deployer history** — the $40K bar proved farmable by operators mass-relaunching one ticker across rotating wallets, and a wallet minutes old can hit 5 launches on RHC. `graduation_rate` still means the $40K bar and is still returned everywhere, but it **no longer sets the tier**; `spammer` is the one label that still keys off it. Ranking by `graduation_rate` is ranking on a metric the tier ignores. `stats()` returns the thresholds actually in force.
|
|
244
|
+
|
|
245
|
+
| Method | Endpoint | Tier | Returns |
|
|
246
|
+
|---|---|---|---|
|
|
247
|
+
| `leaderboard(params?)` | `/rhc/deployer-hunter/leaderboard` | BASIC | 40k+ deployers ranked over a 5-min-refresh rollup. |
|
|
248
|
+
| `profile(address)` | `/rhc/deployer-hunter/{address}` | BASIC | Reputation row + 50 most recent tokens. |
|
|
249
|
+
| `trajectory(address)` | `/rhc/deployer-hunter/{address}/trajectory` | BASIC | Getting better or worse — streaks, rolling 10-launch success curve, trend, cadence. |
|
|
250
|
+
| `tokens(address, params?)` | `/rhc/deployer-hunter/{address}/tokens` | BASIC | Full paginated launch history with live + peak MC and liquidity. |
|
|
251
|
+
| `history(address, params?)` | `/rhc/deployer-hunter/{address}/history` | PRO+ | Deploy history + reputation row, exact `total`, `graduated_pool`. |
|
|
252
|
+
| `bestTokens(params?)` | `/rhc/deployer-hunter/best-tokens` | BASIC | Highest-peaking tokens from reputable (elite/good) deployers in a window. |
|
|
253
|
+
| `stats()` | `/rhc/deployer-hunter/stats` | BASIC | Chain-wide summary — population per tier, spam share, alert volume, active `tier_rules`. |
|
|
254
|
+
| `alerts(params?)` | `/rhc/deployer-hunter/alerts` | BASIC | New-deploy / graduation signal feed, tradability-filtered, read-time tier. |
|
|
255
|
+
| `recentBonds(params?)` | `/rhc/deployer-hunter/recent-bonds` | BASIC | Recent $40K graduations, newest peak first. |
|
|
256
|
+
|
|
170
257
|
```ts
|
|
171
258
|
// Leaderboard — 40k+ deployers, 5-min-refresh rollup
|
|
172
259
|
const { deployers, has_more } = await client.deployerHunter.leaderboard({
|
|
@@ -181,6 +268,84 @@ const { deployers, has_more } = await client.deployerHunter.leaderboard({
|
|
|
181
268
|
const { is_deployer, deployer, recent_tokens } = await client.deployerHunter.profile("0xabc…");
|
|
182
269
|
```
|
|
183
270
|
|
|
271
|
+
### Is this deployer improving? — `trajectory(address)` (BASIC)
|
|
272
|
+
|
|
273
|
+
Current and longest hit/miss streaks, a rolling 10-launch success rate, best/worst stretches, average days between deploys, and how many launches they burn between a miss and the next hit.
|
|
274
|
+
|
|
275
|
+
```ts
|
|
276
|
+
const { trajectory, success_metric, truncated } = await client.deployerHunter.trajectory("0xabc…");
|
|
277
|
+
console.log(trajectory?.trend, trajectory?.current_streak, success_metric);
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
The per-token success event here is the **$40K graduation** (echoed as `success_metric`), deliberately *not* the $100K runner bar that sets tiers — $100K is rare enough that most deployers would return an all-zero curve, and a trajectory needs events to have a shape. Analysis is capped at 500 launches; `truncated` tells you whether the curve is the whole story.
|
|
281
|
+
|
|
282
|
+
### Launch history — `tokens(address, params?)` (BASIC) and `history(address, params?)` (PRO+)
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
// Enumerable launch history with live MC, peak MC and liquidity
|
|
286
|
+
const { tokens, total, has_more, sort_scope } = await client.deployerHunter.tokens("0xabc…", {
|
|
287
|
+
limit: 50, // 1–100
|
|
288
|
+
offset: 0, // 0–10000
|
|
289
|
+
sort: "first_seen_at", // "first_seen_at" | "peak_mc_usd"
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// PRO+ — the same history with graduated_pool and an exact total
|
|
293
|
+
const hist = await client.deployerHunter.history("0xabc…", { limit: 100, offset: 0 });
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
`sort: "peak_mc_usd"` orders the fetched **page** only (the response echoes `sort_scope: "page"`), because peak MC lives in another table — it is not a global top-tokens ranking. Use `bestTokens()` for that. `profile()` caps `recent_tokens` at 50 and is a point-in-time read; `tokens()` is the enumerable list.
|
|
297
|
+
|
|
298
|
+
### Best tokens + chain stats
|
|
299
|
+
|
|
300
|
+
```ts
|
|
301
|
+
// What did the deployers worth tracking actually produce?
|
|
302
|
+
const { tokens, reputable_deployers, truncated } = await client.deployerHunter.bestTokens({
|
|
303
|
+
period: "7d", // "24h" | "7d" | "30d" | "all"
|
|
304
|
+
limit: 10, // 1–50
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
// The denominator for "is this deployer rare?"
|
|
308
|
+
const stats = await client.deployerHunter.stats();
|
|
309
|
+
console.log(stats.by_tier, stats.spam_token_share, stats.tier_rules.elite, stats.runner_definition);
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
`bestTokens()` is gated on reputation rather than raw peak MC — the unfiltered version is `client.tokens.list({ sort: "peak_mc" })`. When `truncated` is true the top-N was drawn from the 1000 most *recent* launches in the period rather than the whole period.
|
|
313
|
+
|
|
314
|
+
### Deployer alerts — `alerts(params?)` (BASIC)
|
|
315
|
+
|
|
316
|
+
New deploys and graduations from tracked deployers, newest first. Poll forward with `since: next_event_at`, page back with `before: next_before`. ULTRA gets the full limit; BASIC/PRO share a 50-alert cap.
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
const { alerts, tradability_filter, next_event_at } = await client.deployerHunter.alerts({
|
|
320
|
+
deployer_tier: "elite", // filters on the RESOLVED tier
|
|
321
|
+
alert_type: "new_deploy", // "new_deploy" | "graduated"
|
|
322
|
+
priority: "high", // "high" | "medium"
|
|
323
|
+
min_mc: 10_000,
|
|
324
|
+
limit: 50,
|
|
325
|
+
// include_untradeable: true, // opt out of the liquidity gate
|
|
326
|
+
});
|
|
327
|
+
for (const a of alerts) {
|
|
328
|
+
console.log(a.token_symbol, a.tier, a.liquidity_usd, a.tier_is_stale ? `(was ${a.tier_at_alert})` : "");
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Two things worth knowing:
|
|
333
|
+
|
|
334
|
+
- **Tradability is filtered by default.** Alerts on tokens with `liquidity_usd` below **$100** are dropped — unknown liquidity included, since on RHC that usually means a drained pool — because a $45K-MC alert on a $68 pool is not a signal. Pass `include_untradeable: true` for the raw tape; the active setting comes back as `tradability_filter`.
|
|
335
|
+
- **`tier` is resolved at read time** from the live reputation view, so an alert can never advertise a reputation the deployer has since lost. The snapshot written when the alert fired is returned as `tier_at_alert`, with `tier_is_stale` flagging drift, and `deployer_tier=` filters on the resolved value so the filter and the payload always agree.
|
|
336
|
+
|
|
337
|
+
### Recent graduations — `recentBonds(params?)` (BASIC)
|
|
338
|
+
|
|
339
|
+
```ts
|
|
340
|
+
const { tokens, graduation_mc } = await client.deployerHunter.recentBonds({
|
|
341
|
+
deployer_tier: "good",
|
|
342
|
+
min_peak: 100_000, // only raises the $40K floor, never lowers it
|
|
343
|
+
limit: 50, // 1–200
|
|
344
|
+
});
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
On RHC a graduation is the **$40K peak-MC milestone**, not a bonding-curve completion — noxa/pons/clanker launch direct-to-DEX with no curve — so the set is defined purely by peak MC.
|
|
348
|
+
|
|
184
349
|
## Smart-money wallets — `client.alphaWallets(params?)` — `GET /rhc/alpha-wallets` (PRO+)
|
|
185
350
|
|
|
186
351
|
The reverse of KOL discovery: rank Robinhood Chain trader wallets by realized on-chain performance. `net_eth` is realized net flow (sell − buy), `win_rate` is the share of tokens taken out profitably, `likely_bot` flags atomic-arb/MM fleets. RHC is dual-natured (launchpad memecoins vs tokenized stocks/stables), so filter with `min_memecoin_share` to isolate memecoin traders.
|
|
@@ -234,7 +399,7 @@ try {
|
|
|
234
399
|
|
|
235
400
|
## Types & constants
|
|
236
401
|
|
|
237
|
-
Fully-typed responses and params for all
|
|
402
|
+
Fully-typed responses and params for all 25 endpoints are exported (`RhcKolFeedResponse`, `RhcKolCoordinationResponse`, `RhcKolFirstTouchesResponse`, `RhcTradesResponse`, `RhcTokenSnapshot`, `RhcTokenBatchResponse`, `RhcBatchBuyerQualityResponse`, `RhcBundleResponse`, `RhcDeployerTrajectoryResponse`, `RhcDeployerTokensResponse`, `RhcDeployerHistoryResponse`, `RhcBestTokensResponse`, `RhcDeployerStatsResponse`, `RhcDeployerAlertsResponse`, `RhcRecentBondsResponse`, `RhcAlphaWalletsResponse`, …), plus shared types (`DeployerTier`, `TradeAction`, `UniswapVersion`, `RhcBundleKind`, `RhcAlertType`, `RhcAlertPriority`, `RhcCoordinationSignal`) and the `CHAIN_ID` constant (`4663`).
|
|
238
403
|
|
|
239
404
|
## Links
|
|
240
405
|
|