From 9657e45393ea6add27fd790aa42650797405856e Mon Sep 17 00:00:00 2001 From: zhongsongzhi-cmyk Date: Thu, 29 Oct 2026 16:17:13 +0800 Subject: [PATCH] fix(cli): support avalanche and defer trenches defaults to the server - validate: add avalanche to VALID_CHAINS / EVM address check / callout chains / V1 smart_trade restriction - trenches: drop the stale client-side quote_address_type table (missing RWA 26, no entries for the 5 newer chains); the server now fills launchpad_platform and quote_address_type for every chain - market signal: accept base / eth / arbitrum / avalanche (server TokenSignalChains); hyperevm is rejected upstream - strategy cancel: document --order-type smart_trade_v2 - help text, SKILL.md, cli-usage, Readme: chain lists and trenches default-platform table synced with gmgn-openapi-service Co-Authored-By: Claude --- Readme.md | 10 ++-- Readme.zh.md | 10 ++-- docs/cli-usage.md | 66 +++++++++++----------- skills/gmgn-callout-score/SKILL.md | 2 +- skills/gmgn-callout/SKILL.md | 4 +- skills/gmgn-contract-dd/SKILL.md | 2 +- skills/gmgn-dev-score/SKILL.md | 2 +- skills/gmgn-dev-score/references/fields.md | 2 +- skills/gmgn-kline-pattern/SKILL.md | 2 +- skills/gmgn-market/SKILL.md | 36 ++++++------ skills/gmgn-narrative/SKILL.md | 2 +- skills/gmgn-portfolio/SKILL.md | 4 +- skills/gmgn-swap/SKILL.md | 26 ++++----- skills/gmgn-token-buy/SKILL.md | 2 +- skills/gmgn-token/SKILL.md | 8 +-- skills/gmgn-track/SKILL.md | 10 ++-- skills/gmgn-wallet-analysis/SKILL.md | 4 +- skills/gmgn-wallet-score/SKILL.md | 4 +- skills/gmgn-wallet-style/SKILL.md | 2 +- src/client/OpenApiClient.ts | 19 ++----- src/commands/callout.ts | 2 +- src/commands/market.ts | 18 +++--- src/commands/portfolio.ts | 12 ++-- src/commands/swap.ts | 24 ++++---- src/commands/token.ts | 10 ++-- src/commands/track.ts | 10 ++-- src/validate.ts | 8 +-- 27 files changed, 151 insertions(+), 150 deletions(-) diff --git a/Readme.md b/Readme.md index 314d427..12a3dc7 100644 --- a/Readme.md +++ b/Readme.md @@ -735,6 +735,8 @@ gmgn-cli order strategy list --chain sol # Cancel a strategy order gmgn-cli order strategy cancel --chain sol --from --order-id +# V2 strategy orders (created via the OpenAPI V2 endpoint) +gmgn-cli order strategy cancel --chain arbitrum --from --order-id --order-type smart_trade_v2 ``` ### Cooking (requires private key) @@ -755,10 +757,10 @@ gmgn-cli cooking \ | Commands | Chains | Chain Currencies | |----------|--------|-----------------| -| token / market / portfolio / track | `sol` / `bsc` / `base` / `eth` / `robinhood` / `arc` / `stable` | — | -| swap / order | `sol` / `bsc` / `base` / `eth` / `robinhood` / `arc` / `stable` | sol: SOL, USDC · bsc: BNB, USDC · base: ETH, USDC · eth: ETH | -| gas-price | `sol` / `bsc` / `base` / `eth` / `robinhood` / `arc` / `stable` | — | -| track kol / track smartmoney · market signal | `sol` / `bsc` / `base` / `eth` / `robinhood` / `arc` / `stable` (kol/smartmoney) · `sol` / `bsc` / `robinhood` / `arc` / `stable` (signal) | — | +| token / market / portfolio / track | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | — | +| swap / order | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | sol: SOL, USDC · bsc: BNB, USDC · base: ETH, USDC · eth: ETH | +| gas-price | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | — | +| track kol / track smartmoney · market signal | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` (kol/smartmoney) · `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche` (signal) | — | | cooking create | `sol` / `bsc` / `base` / `robinhood` | — | --- diff --git a/Readme.zh.md b/Readme.zh.md index 3c2e46e..2d72ee6 100644 --- a/Readme.zh.md +++ b/Readme.zh.md @@ -759,6 +759,8 @@ gmgn-cli order strategy list --chain sol # 撤销策略单 gmgn-cli order strategy cancel --chain sol --from --order-id +# V2 策略单(通过 OpenAPI V2 接口创建) +gmgn-cli order strategy cancel --chain arbitrum --from --order-id --order-type smart_trade_v2 ``` ### Cooking 一键策略单(需要私钥) @@ -779,10 +781,10 @@ gmgn-cli cooking \ | 接口类型 | 支持的链 | 链原生货币 | |----------|----------|-----------| -| token / market / portfolio / track | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | — | -| swap / order | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | sol: SOL、USDC · bsc: BNB、USDC · base: ETH、USDC · eth: ETH | -| gas-price | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | — | -| track kol / track smartmoney · market signal | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable`(kol/smartmoney)· `sol` / `bsc` / `robinhood` / `arc` / `stable`(signal) | — | +| token / market / portfolio / track | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | — | +| swap / order | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | sol: SOL、USDC · bsc: BNB、USDC · base: ETH、USDC · eth: ETH | +| gas-price | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | — | +| track kol / track smartmoney · market signal | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche`(kol/smartmoney)· `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche`(signal) | — | | cooking create | `sol` / `bsc` / `base` / `robinhood` | — | --- diff --git a/docs/cli-usage.md b/docs/cli-usage.md index c61d66e..04fae7d 100644 --- a/docs/cli-usage.md +++ b/docs/cli-usage.md @@ -16,7 +16,7 @@ npx gmgn-cli token info --chain --address
[--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | --- @@ -31,7 +31,7 @@ npx gmgn-cli token security --chain --address
[--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | --- @@ -46,7 +46,7 @@ npx gmgn-cli token pool --chain --address
[--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | --- @@ -61,7 +61,7 @@ npx gmgn-cli token holders --chain --address
[--limit ] [-- | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | | `--limit` | No | Number of results (default 20, max 100) | @@ -77,7 +77,7 @@ npx gmgn-cli token traders --chain --address
[--limit ] [-- | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | | `--limit` | No | Number of results (default 20, max 100) | @@ -99,7 +99,7 @@ npx gmgn-cli market kline \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | | `--resolution` | Yes | Candlestick resolution: `1s` (**Pro only; max 500 candles per request**) / `30s` / `1m` / `5m` / `15m` / `1h` / `4h` / `1d` | | `--from` | No | Start time (Unix seconds) | @@ -126,7 +126,7 @@ npx gmgn-cli market trending \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--interval` | Yes | `1m` / `5m` / `1h` / `6h` / `24h` | | `--limit` | No | Number of results (default 100, max 100) | | `--order-by` | No | Sort field: `volume` / `swaps` / `liquidity` / `marketcap` / `holders` / `price` / `change` / `change1m` / `change5m` / `change1h` / `renowned_count` / `smart_degen_count` / `bluechip_owner_percentage` / `rank` / `creation_timestamp` / `square_mentions` / `history_highest_market_cap` / `gas_fee` | @@ -169,7 +169,7 @@ npx gmgn-cli portfolio holdings \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address | | `--limit` | No | Page size (default `20`, max 50) | | `--cursor` | No | Pagination cursor | @@ -201,7 +201,7 @@ npx gmgn-cli portfolio activity \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address | | `--token` | No | Filter by token contract address | | `--limit` | No | Page size | @@ -223,7 +223,7 @@ npx gmgn-cli portfolio stats \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address (repeatable for batch queries) | --- @@ -242,7 +242,7 @@ gmgn-cli portfolio profits \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address (one or more, max 100) | | `--period` | No | P&L period: `1d` / `7d` / `30d` / `all` (default `7d`) | @@ -276,7 +276,7 @@ npx gmgn-cli portfolio token-balance \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address | | `--token` | Yes | Token contract address | @@ -298,7 +298,7 @@ npx gmgn-cli portfolio created-tokens \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Developer wallet address | | `--order-by` | No | Sort field: `market_cap` / `token_ath_mc` | | `--direction` | No | Sort direction: `asc` / `desc` | @@ -316,7 +316,7 @@ npx gmgn-cli market trenches --chain [--type ] [--launchpad-pla | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--type` | No | Categories to query, repeatable: `new_creation` / `near_completion` / `completed` (default: all three) | | `--launchpad-platform` | No | Launchpad platform filter, repeatable. **Default is NOT literally "all platforms": when omitted, the server injects a fixed per-chain default platform allow-list; passing values REPLACES that allow-list (so passing fewer platforms returns less data). Platforms outside the allow-list — including some newer RWA / tokenized-stock platforms — are filtered out.** Values depend on chain — see below. | | `--limit` | No | Max results per category (default: 80). **Best-effort only — not guaranteed.** The value is forwarded upstream but the `new_creation` category is served from a fixed live window (~60 in practice), so both larger and smaller `--limit` may still return ~60. | @@ -331,7 +331,7 @@ npx gmgn-cli market trenches --chain [--type ] [--launchpad-pla **`robinhood` platforms:** `trench` / `noxa` / `dyorswap` / `apestore` / `printr` / `virtuals` / `bankr` / `clanker` / `klik` / `livo` / `flap` / `flap_stocks` / `flap_pve` / `bags` / `bowfun` / `o1` / `circus` / `arrowfinance` / `longxyz` / `motion` / `pons` / `stoxes_tax` / `stoxes` / `holoworld` / `pewfun` / `dyorfun_v3` / `noxafi` -**`arc` / `stable` platforms:** no default allow-list — the server applies no launchpad-platform filter (returns all platforms). Pass `--launchpad-platform` only if you want to narrow to specific platforms. +**Other chains (arbitrum / hyperevm / arc / stable / avalanche):** the server also applies a per-chain default allow-list (see `skills/gmgn-market/SKILL.md`). Pass `--launchpad-platform` only if you want to replace it. > The `robinhood` list above is the trenches default allow-list. It may lag behind newly launched platforms (e.g. some RWA / tokenized-stock launchpads); tokens on a platform not in this list will not appear unless/until the list is updated server-side. @@ -353,7 +353,7 @@ gmgn-cli market signal --chain sol --groups '' [--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche` (`hyperevm` not supported) | | `--signal-type` | No | Signal type(s), repeatable: `1`–`13`, `17`–`21`; default: all supported types. Values `14` / `15` / `16` are rejected by the API. See Signal Types below. | | `--mc-min` | No | Min market cap at trigger time (USD) | | `--mc-max` | No | Max market cap at trigger time (USD) | @@ -398,7 +398,7 @@ gmgn-cli market signal --chain sol --groups '' [--raw] Query the hot-search ranking — the most-searched tokens, ranked by `visiting_count` (search heat). Cross-chain top-500; one request can cover several chains at once. API Key auth only. ```bash -# Default 9-chain set (sol/bsc/base/eth/arbitrum/hyperevm/robinhood/arc/stable, each 24h): +# Default 9-chain set (sol/bsc/base/eth/arbitrum/hyperevm/robinhood/arc/stable/avalanche, each 24h): gmgn-cli market hot-searches [--raw] # Specific chain(s) and interval: @@ -410,7 +410,7 @@ gmgn-cli market hot-searches --params '' [--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | No | Repeatable: `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable`. Omit for the default 9-chain set. | +| `--chain` | No | Repeatable: `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche`. Omit for the default 9-chain set. | | `--interval` | No | `1m` / `5m` / `1h` / `6h` / `24h` (default `24h`). Applies to every `--chain`. | | `--limit` | No | Max results per chain (default `500`). | | `--filter` | No | Repeatable **boolean** filter tags (downstream `filter.filters`). sol defaults: `renounced` / `frozen`; EVM defaults: `not_honeypot` / `verified` / `renounced`. Recognised tags: `renounced` / `frozen` (sol) / `is_burnt` / `token_burnt` / `not_wash_trading` / `not_honeypot` (EVM) / `verified` (EVM) / `locked` (EVM) / `has_social` / `distribed` / `not_risk` / `img_not_duplicate` / `social_not_duplicate` / `creator_hold` / `creator_close` / `dexscr_update_link` / `launching` / `migrated` / `hide_b20` (base) / `hide_non_b20` (base). Unknown tags are silent no-ops. | @@ -439,7 +439,7 @@ gmgn-cli track follow-tokens \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address | | `--group-id` | No | `all_group` (all tokens), `default`, or a user-defined group ID | | `--interval` | No | Time interval for price change stats: `1m` / `5m` / `1h` / `6h` / `24h` | @@ -464,7 +464,7 @@ gmgn-cli track follow-token-groups \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Wallet address | --- @@ -487,7 +487,7 @@ gmgn-cli track follow-wallet \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet` | No | Wallet address (optional; follow list resolved from API Key's bound user account) | | `--limit` | No | Page size (1–100, default 10) | | `--side` | No | Trade direction: `buy` / `sell` | @@ -507,7 +507,7 @@ gmgn-cli track kol [--chain ] [--limit ] [--side ] [--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | No | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` (default `sol`) | +| `--chain` | No | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` (default `sol`) | | `--limit` | No | Page size (1–200, default 100) | | `--side` | No | Filter by trade direction: `buy` / `sell` (client-side filter) | @@ -523,7 +523,7 @@ gmgn-cli track smartmoney [--chain ] [--limit ] [--side ] [--raw | Option | Required | Description | |--------|----------|-------------| -| `--chain` | No | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` (default `sol`) | +| `--chain` | No | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` (default `sol`) | | `--limit` | No | Page size (1–200, default 100) | | `--side` | No | Filter by trade direction: `buy` / `sell` (client-side filter) | @@ -539,7 +539,7 @@ gmgn-cli callout record --chain --wallet
[--token
] [ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `eth` / `base` / `megaeth` / `hyperevm` / `tron` / `monad` / `xlayer` / `robinhood` / `arbitrum` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `eth` / `base` / `megaeth` / `hyperevm` / `tron` / `monad` / `xlayer` / `robinhood` / `arbitrum` / `arc` / `stable` / `avalanche` | | `--wallet` | Yes | Call-out wallet address | | `--token` | No | Only call-outs on this token | | `--limit` | No | Page size (0–50, 0 = server default) | @@ -586,7 +586,7 @@ npx gmgn-cli order quote \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | Wallet address | | `--input-token` | Yes | Input token contract address | | `--output-token` | Yes | Output token contract address | @@ -633,7 +633,7 @@ npx gmgn-cli swap \ | Option | Required | Chain | Description | |--------|----------|-------|-------------| -| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | all | Wallet address (must match the wallet bound to the API Key) | | `--input-token` | Yes | all | Input token contract address | | `--output-token` | Yes | all | Output token contract address | @@ -710,7 +710,7 @@ gmgn-cli multi-swap \ | Option | Required | Chain | Description | |--------|----------|-------|-------------| -| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--accounts` | Yes | all | Comma-separated wallet addresses (1–100, all bound to API Key) | | `--input-token` | Yes | all | Input token contract address | | `--output-token` | Yes | all | Output token contract address | @@ -753,7 +753,7 @@ npx gmgn-cli order get --chain --order-id [--raw] | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--order-id` | Yes | Order ID (returned by the `swap` command) | **Response fields (data):** Same structure as the `swap` response above. @@ -788,11 +788,11 @@ gmgn-cli order strategy create \ | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | Wallet address (must match API Key binding) | | `--base-token` | Yes | Base token contract address | | `--quote-token` | Yes | Quote token contract address | -| `--order-type` | Yes | Order type: `limit_order` / `smart_trade`. **`arc` / `stable` support `limit_order` only** — `smart_trade` returns a 400. | +| `--order-type` | Yes | Order type: `limit_order` / `smart_trade`. **`arbitrum` / `hyperevm` / `arc` / `stable` / `avalanche` support `limit_order` only** — V1 `smart_trade` returns a 400 there (use the OpenAPI V2 strategy endpoint for TP/SL). | | `--sub-order-type` | Yes | `limit_order`: `buy_low` / `buy_high` / `stop_loss` / `take_profit`; `smart_trade` with condition_orders: `mix_trade` | | `--check-price` | No* | Trigger check price — required for `limit_order`; omit for `smart_trade` (trigger is in the `buy_low` condition order) | | `--open-price` | No | Open price of the position | @@ -834,7 +834,7 @@ gmgn-cli order strategy list --chain --group-tag [--t | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--type` | No | `open` (default) / `history` | | `--from` | No | Filter by wallet address | | `--group-tag` | Yes | Group: `LimitOrder` / `STMix` | @@ -862,10 +862,10 @@ gmgn-cli order strategy cancel --chain --from --order-i | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | Wallet address (must match API Key binding) | | `--order-id` | Yes | Order ID to cancel | -| `--order-type` | No | Order type: `limit_order` / `smart_trade` | +| `--order-type` | No | Order type: `limit_order` / `smart_trade` / `smart_trade_v2` (orders created via the OpenAPI V2 strategy endpoint). Default when omitted: `smart_trade` | | `--close-sell-model` | No | Sell model when closing | --- diff --git a/skills/gmgn-callout-score/SKILL.md b/skills/gmgn-callout-score/SKILL.md index 812ff5f..0e94109 100644 --- a/skills/gmgn-callout-score/SKILL.md +++ b/skills/gmgn-callout-score/SKILL.md @@ -130,7 +130,7 @@ read this table before using any of them. `robinhood` / `arbitrum` / `arc` / `stable` for `callout record`. The conduct axis additionally needs `portfolio activity` and `portfolio stats`, which cover -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable`. +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche`. On a chain outside that set, report the selection axis only and say the conduct axis is unavailable on this chain. diff --git a/skills/gmgn-callout/SKILL.md b/skills/gmgn-callout/SKILL.md index 4d5622a..be7afcc 100644 --- a/skills/gmgn-callout/SKILL.md +++ b/skills/gmgn-callout/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-callout description: Read GMGN call-outs (喊单) — public token calls that wallets publish on GMGN, with call price, call market cap, multiplier since the call, thesis text and the caller's current holding. Use when user asks who is calling a token, what a wallet has called, a wallet's call-out track record (hit rate, best multiplier), or wants the latest call-out feed (KOL-only, paid declarations, safe tokens). Read-only; publishing a call-out is not supported. -argument-hint: " --chain [--wallet ]" +argument-hint: " --chain [--wallet ]" metadata: cliHelp: "gmgn-cli callout --help" --- @@ -45,7 +45,7 @@ Use the `gmgn-cli` tool to read call-out data based on the user's request. ## Supported Chains -`sol` / `bsc` / `eth` / `base` / `megaeth` / `hyperevm` / `tron` / `monad` / `xlayer` / `robinhood` / `arbitrum` / `arc` / `stable` +`sol` / `bsc` / `eth` / `base` / `megaeth` / `hyperevm` / `tron` / `monad` / `xlayer` / `robinhood` / `arbitrum` / `arc` / `stable` / `avalanche` This is wider than the trading chains of other skills — call-outs are read-only data. A token surfaced here on e.g. `tron` or `monad` may not be queryable with `gmgn-token` or tradable with `gmgn-swap`. diff --git a/skills/gmgn-contract-dd/SKILL.md b/skills/gmgn-contract-dd/SKILL.md index c01946b..01c61fa 100644 --- a/skills/gmgn-contract-dd/SKILL.md +++ b/skills/gmgn-contract-dd/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-contract-dd description: "Contract due-diligence score for one token address — contract safety, holder structure and price action combined into a single 0-100 composite, capped by GMGN's own rug label, where every deduction names the field it read and an absent field is never a passing check. Use when the user wants one verdict number rather than fields: 尽调, CA 尽调, 给这个币打个分, 这个币安全吗, 能不能买, 有没有貔貅, is this token safe, rug check, honeypot check, due-diligence score, score this contract, or pastes a bare token contract address. A bare address may equally be a wallet — Step 0 resolves which and hands wallets to gmgn-wallet-analysis. Prefer this over gmgn-token whenever the ask is a verdict rather than a field dump; the raw fields themselves — price, market cap, liquidity, holder and trader lists, the unscored security fields — are gmgn-token, chip structure is gmgn-holder-analysis, chart-pattern naming is gmgn-kline-pattern. Buy intent narrows to this skill only when the ask is a bare address: the input is --address, and no name is ever resolved here. When the user names the token instead — 帮我买 200u 的 PENGU, XX 能不能买, 能不能冲, 我想梭, buy me $500 of BONK — or wants a position size, gmgn-token-buy owns it, because picking the one right contract out of the same-name copycats and sizing slippage and gas are both outside this skill's input. That skill calls this one for the safety verdict rather than replacing it, so a bare address with no name and no amount still scores here exactly as before." -argument-hint: "--chain --address " +argument-hint: "--chain --address " metadata: cliHelp: "gmgn-cli token security --help" --- diff --git a/skills/gmgn-dev-score/SKILL.md b/skills/gmgn-dev-score/SKILL.md index 3f4d6e0..2d40828 100644 --- a/skills/gmgn-dev-score/SKILL.md +++ b/skills/gmgn-dev-score/SKILL.md @@ -33,7 +33,7 @@ description: >- "dev score" (decision → here): the deciding factor is whether a buy is on the table. If it is genuinely ambiguous, ask one short question instead of guessing — the two produce different reports and there is no cheap hedge. -argument-hint: "--chain --dev [--max-pages ]" +argument-hint: "--chain --dev [--max-pages ]" metadata: cliHelp: "gmgn-cli portfolio created-tokens --help && gmgn-cli portfolio activity --help && gmgn-cli token info --help" --- diff --git a/skills/gmgn-dev-score/references/fields.md b/skills/gmgn-dev-score/references/fields.md index 294e48b..dd2985b 100644 --- a/skills/gmgn-dev-score/references/fields.md +++ b/skills/gmgn-dev-score/references/fields.md @@ -118,7 +118,7 @@ Only these fields are confirmed against the live API. Anything else — degrade ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` `robinhood` is a real chain hosting tokenized-stock tickers with the `longxyz` launchpad — do not assume a `0x…` address is on BSC/ETH. If `created-tokens` returns `inner_count=0, open_count=0`, probe the other chains before concluding the address is not a dev. diff --git a/skills/gmgn-kline-pattern/SKILL.md b/skills/gmgn-kline-pattern/SKILL.md index 98b6b9c..50adeb8 100644 --- a/skills/gmgn-kline-pattern/SKILL.md +++ b/skills/gmgn-kline-pattern/SKILL.md @@ -23,7 +23,7 @@ below is computed by you from that one response — no script, no second call. ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable`. +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche`. ## Prerequisites diff --git a/skills/gmgn-market/SKILL.md b/skills/gmgn-market/SKILL.md index 4c1df15..348cbf3 100644 --- a/skills/gmgn-market/SKILL.md +++ b/skills/gmgn-market/SKILL.md @@ -2,7 +2,7 @@ name: gmgn-market description: Get crypto and meme token price charts (K-line, candlestick, OHLCV), trending meme coin rankings by volume, newly launched tokens on launchpads (pump.fun, fourmeme, letsbonk, Raydium, etc.), the hot-search ranking (most-searched tokens), and search for a specific token or wallet by name, symbol, contract address, wallet address, or ENS via GMGN API on Solana, BSC, Base, or Ethereum. Use when user asks for price chart, trending tokens, what's pumping, hot coins, most searched tokens, new launches, token signals, wants to look up / find / search a specific token or wallet by name or address, or wants to discover early-stage opportunities. metadata: - argument-hint: "kline --chain --address --resolution <1s|30s|1m|5m|15m|1h|4h|1d> [--from ] [--to ] | trending --chain --interval <1m|5m|1h|6h|24h> | trenches --chain | signal --chain | hot-searches [--chain ] [--interval <1m|5m|1h|6h|24h>] | search --query [--chain ] [--launchpad-platform

...] [--is-og ] [--is-launched ] [--order-by weight]" + argument-hint: "kline --chain --address --resolution <1s|30s|1m|5m|15m|1h|4h|1d> [--from ] [--to ] | trending --chain --interval <1m|5m|1h|6h|24h> | trenches --chain | signal --chain | hot-searches [--chain ] [--interval <1m|5m|1h|6h|24h>] | search --query [--chain ] [--launchpad-platform

...] [--is-og ] [--is-launched ] [--order-by weight]" cliHelp: "gmgn-cli market --help" --- @@ -50,13 +50,13 @@ Use the `gmgn-cli` tool to query K-line data for a token, browse trending tokens | `market kline` | Token candlestick / OHLCV data and trading volume over a time range | | `market trending` | Trending tokens ranked by swap activity — use `--interval` to specify the time window (e.g. `1m` for 1-minute hottest, `1h` for 1-hour trending) | | `market trenches` | Newly launched launchpad platform tokens — **use this when the user asks for "new tokens", "just launched tokens", "latest tokens on pump.fun/letsbonk"**. Three categories: `new_creation` (just created), `near_completion` (bonding curve almost full), `completed` (graduated to open market / DEX) | -| `market signal` | Real-time token signal feed — price spikes, smart money buys, large buys, Dex ads, CTO events, and more. Results sorted by `trigger_at` descending. **sol / bsc / robinhood / arc / stable only. Max 50 results per group.** | +| `market signal` | Real-time token signal feed — price spikes, smart money buys, large buys, Dex ads, CTO events, and more. Results sorted by `trigger_at` descending. **All supported chains except hyperevm. Max 50 results per group.** | | `market hot-searches` | Hot-search ranking — the most-searched tokens, ranked by `visiting_count` (search heat). **Use this when the user asks "what tokens are people searching for", "most searched tokens", "hot search list", "热搜榜".** Supports multiple chains in a single request. | | `market search` | Look up a **specific** token or wallet by name, symbol, contract address, wallet address, or ENS. Returns both matching tokens (`coins`) and wallets (`wallets`). **Use this when the user names a token/wallet and wants to find it — "search for PEPE", "look up this address", "find vitalik.eth", "查一下这个代币/钱包"** — as opposed to browsing rankings (`trending` / `hot-searches`). | ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` (kline / trending / trenches / hot-searches; signal: `sol` / `bsc` / `robinhood` / `arc` / `stable`; search: `--chain` is **optional** — omit to search all chains; accepts `all` and any chain the search module has enabled, including dynamically-enabled chains such as `tron` / `monad` / `megaeth` / `xlayer`) +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` (kline / trending / trenches / hot-searches; signal: `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche` (no `hyperevm`); search: `--chain` is **optional** — omit to search all chains; accepts `all` and any chain the search module has enabled, including dynamically-enabled chains such as `tron` / `monad` / `megaeth` / `xlayer`) ## Prerequisites @@ -92,7 +92,7 @@ When a request returns `429`: | Parameter | Required | Description | |-----------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | | `--resolution` | Yes | Candlestick resolution: `1s` (**Pro only; at most 500 candles per request**) / `30s` / `1m` / `5m` / `15m` / `1h` / `4h` / `1d` | | `--from` | No | Start time (Unix seconds) | @@ -135,7 +135,7 @@ The response is an object with a `list` array. Each element in `list` is one can | Option | Description | |--------|-------------| -| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--interval` | Required. `1m` / `5m` / `1h` / `6h` / `24h` (default `1h`) | | `--limit ` | Number of results (default 100, max 100) | | `--order-by ` | Sort field: `default` / `swaps` / `marketcap` / `history_highest_market_cap` / `liquidity` / `volume` / `holder_count` / `smart_degen_count` / `renowned_count` / `gas_fee` / `price` / `change1m` / `change5m` / `change1h` / `creation_timestamp` | @@ -559,16 +559,16 @@ Use field combinations to determine what stage a token is in. This affects how s | Parameter | Required | Description | |-----------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--type` | No | Categories to query, repeatable: `new_creation` / `near_completion` / `completed` (default: all three) | -| `--launchpad-platform` | No | Launchpad platform filter, repeatable. Omitted: sol/bsc/base/eth/robinhood use the server's fixed default allow-list; arc/stable apply no platform filter. Passing values replaces that default. | +| `--launchpad-platform` | No | Launchpad platform filter, repeatable. Omitted: every chain uses the server's per-chain default allow-list (see the table below). Passing values replaces that default. | | `--limit` | No | Max results per category, max 80 (default: 80) | | `--filter-preset` | No | Named server-side filter preset: `safe` / `smart-money` / `strict` | | `--sort-by` | No | Client-side sort per category: `smart_degen_count` / `renowned_count` / `volume_24h` / `volume_1h` / `swaps_24h` / `swaps_1h` / `rug_ratio` / `holder_count` / `usd_market_cap` / `created_timestamp` | | `--direction` | No | Sort direction: `asc` / `desc` (default: `desc`; `asc` for `rug_ratio`) | | `--min-*` / `--max-*` | No | Server-side filter range flags — see Filter Fields Reference below | -**`--launchpad-platform` values by chain** (on sol/bsc/base/eth/robinhood, omitting the flag uses the server default allow-list rather than all platforms): +**`--launchpad-platform` values by chain** (omitting the flag uses the server's per-chain default allow-list below, on every chain — not "all platforms"; passing the flag replaces the list entirely): | Chain | Platforms | |-------|-----------| @@ -576,8 +576,12 @@ Use field combinations to determine what stage a token is in. This affects how s | `bsc` | `fourmeme` / `fourmeme_agent` / `bn_fourmeme` / `four_xmode_agent` / `cubepeg` / `likwid` / `goplus_creator` / `goplus_skills` / `openfour` / `flap` / `flap_stocks` / `flap_aioracle` / `clanker` / `lunafun` | | `base` | `clanker` / `bankr` / `flaunch` / `zora` / `zora_creator` / `baseapp` / `basememe` / `virtuals_v2` / `klik` | | `eth` | `trench` / `clanker` / `klik` / `livo` / `stroid` / `pool_uniswap_v2` / `pool_uniswap_v3` / `printr` | -| `arc` | `dyorfun_v3` / `dyorswap` / `trench` / `onmifun` / `sharcfun` / `klik` | -| `stable` | `dyorfun_v3` / `dyorswap` / `trench` | +| `arbitrum` | `odysfun_v3` / `pool_uniswap_v2` / `pool_uniswap_v3` / `pool_uniswap_v4` / `pool_pancake_v2` / `pool_pancake_v3` / `pool_camelot_v2` / `pool_camelot_v3` | +| `hyperevm` | `altfun` / `motion_meme` / `liqd` / `signal` | +| `robinhood` | `trench` / `noxa` / `dyorswap` / `apestore` / `printr` / `virtuals` / `bankr` / `clanker` / `klik` / `livo` / `flap` / `flap_stocks` / `flap_pve` / `bags` / `bowfun` / `o1` / `circus` / `arrowfinance` / `longxyz` / `motion` / `pons` / `stoxes_tax` / `stoxes` / `holoworld` / `pewfun` / `dyorfun_v3` / `noxafi` | +| `arc` | `trench` / `circlewarp` / `argus` / `argus_v2` / `minara` / `tollylabs_direct` / `radardex` / `o1` / `dyorswap` / `dyorfun_v3` / `sharcfun` / `lift` / `klik` / `actfun` / `peach` / `ayoo_curve` / `flutch_v3` / `archemist_v2` / `pegd` / `akafun` / `onmidotfun` / `foci` / `evefun` / `lazymemes` / `zyora_bc` / `ubifun` / `ellipse` / `arcpad` / `pool_uniswap_v2` / `pool_uniswap_v3` / `pool_uniswap_v4` | +| `stable` | `trench` / `dyorswap` / `dyorfun_v3` | +| `avalanche` | `arenatrade` / `pool_uniswap_v2` / `pool_uniswap_v3` / `pool_uniswap_v4` / `pool_pharaoh_v2` / `pool_pharaoh_v3` / `pool_pharaoh_dlmm` / `pool_lfj_v1` / `pool_blackhole_clmm` / `pool_pangolin_v2` / `pool_sushiswap_v2` / `pool_allblue_v2` | ### Filter Presets @@ -1002,7 +1006,7 @@ Present each category separately with a header: ## `market signal` Parameters -Chains: `sol` / `bsc` / `robinhood` / `arc` / `stable` only. **Maximum 50 results per group** — use multiple groups via `--groups` to cover different signal types in a single request. +Chains: `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche` (`hyperevm` is not supported upstream). **Maximum 50 results per group** — use multiple groups via `--groups` to cover different signal types in a single request. **Single-group (individual flags):** @@ -1010,7 +1014,7 @@ Do **not** pass signal types **14, 15, or 16** in `signal_type` / `--signal-type | Option | Required | Description | |--------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `robinhood` / `arc` / `stable` / `avalanche` (`hyperevm` not supported) | | `--signal-type` | No | Signal type(s), repeatable: `1`–`13`, `17`–`21`; default: all supported types. See Signal Types below. | | `--mc-min` | No | Min market cap at trigger time (USD) | | `--mc-max` | No | Max market cap at trigger time (USD) | @@ -1115,7 +1119,7 @@ Returns the hot-search ranking — the tokens people are searching for most righ | Option | Description | |--------|-------------| -| `--chain ` | Repeatable. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable`. **Omit to query the default 9-chain set** (each at `24h` with chain-appropriate safety filters). | +| `--chain ` | Repeatable. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche`. **Omit to query the default 10-chain set** (each at `24h` with chain-appropriate safety filters). | | `--interval ` | `1m` / `5m` / `1h` / `6h` / `24h` (default `24h`). Applies to every `--chain` provided. | | `--limit ` | Max results per chain (default `500`). | | `--filter ` | Repeatable **boolean** filter tags (the downstream `filter.filters` array). **⚠️ SOL defaults: `renounced frozen`; EVM defaults: `not_honeypot verified renounced`.** Omitting `--filter` is NOT "no filter" — the server applies chain defaults. See the Filter Tags table below for the exact vocabulary. | @@ -1181,7 +1185,7 @@ Numeric bounds use the **same rank-style metric names as `market trending`**. Th **Notes on behaviour:** -- `--chain all` is **not** valid. To aggregate across chains, pass `--chain` multiple times (or omit `--chain` for the default 9-chain set). +- `--chain all` is **not** valid. To aggregate across chains, pass `--chain` multiple times (or omit `--chain` for the default 10-chain set). - When you pass `--chain` but omit `--filter`, the **server** applies the chain-appropriate default filters — so each chain is filtered even without an explicit `--filter`. - Different chains return different counts: a chain's token count depends on how many of its tokens made the global top-500 (sol is usually the largest). @@ -1217,7 +1221,7 @@ See the [`market trending` Response Fields](#market-trending-response-fields) se ### `market hot-searches` Usage Examples ```bash -# Default 9-chain hot-search ranking (sol/bsc/base/eth/arbitrum/hyperevm/robinhood/arc/stable, each 24h) +# Default 10-chain hot-search ranking (sol/bsc/base/eth/arbitrum/hyperevm/robinhood/arc/stable/avalanche, each 24h) gmgn-cli market hot-searches --raw # SOL only, 24h hot-search list @@ -1346,7 +1350,7 @@ Present tokens and wallets separately. Do not dump the raw JSON. - `market kline`: `--from` and `--to` are Unix timestamps in **seconds** — CLI converts to milliseconds automatically - `market trending`: `--filter` and `--platform` are repeatable flags -- `market hot-searches`: `--chain` and `--filter` are repeatable flags; omit `--chain` to query the default 9-chain set. `--min-*`/`--max-*` range flags reuse the same metric names as `market trending` and are translated server-side per `--interval` +- `market hot-searches`: `--chain` and `--filter` are repeatable flags; omit `--chain` to query the default 10-chain set. `--min-*`/`--max-*` range flags reuse the same metric names as `market trending` and are translated server-side per `--interval` - `market search`: `--query` is required; `--launchpad-platform` is a repeatable flag (max 50). `--chain` is optional (omit = all chains). `--launchpad-platform` / `--is-og` / `--is-launched` / `--order-by` filter `coins` only, never `wallets` - All commands use exist auth (API Key only, no signature) - If the user doesn't provide kline timestamps, calculate them from the current time based on their desired time range diff --git a/skills/gmgn-narrative/SKILL.md b/skills/gmgn-narrative/SKILL.md index 787f8bc..347923f 100644 --- a/skills/gmgn-narrative/SKILL.md +++ b/skills/gmgn-narrative/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-narrative description: Independently research and write an AI-narrative / due-diligence card for a crypto token — the kind of "叙事分析" card that covers what story a token is telling and what's independently verifiable about its social spread. Use whenever the user asks for a token's "叙事"、"舆情"、"传播情况"、"社媒热度", wants to know "这个币在讲什么故事"/"这个币是不是在蹭热点", asks to analyze or fact-check a token's X/Twitter narrative, or gives a bare contract address together with a request to understand its story rather than just its price/security numbers. This is not a raw safety score (`gmgn-contract-dd` owns that), not a screened hot list (`gmgn-heat-rank` owns that), and not a buy decision (`gmgn-token-buy` / `gmgn-swap` own that) — route here only when the ask is specifically about story and spread. -argument-hint: "--chain --address " +argument-hint: "--chain --address " metadata: cliHelp: "gmgn-cli token info --help && gmgn-cli token security --help" --- diff --git a/skills/gmgn-portfolio/SKILL.md b/skills/gmgn-portfolio/SKILL.md index a4c4876..41a321b 100644 --- a/skills/gmgn-portfolio/SKILL.md +++ b/skills/gmgn-portfolio/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-portfolio description: Analyze one or many crypto wallets by address — holdings, batch realized/unrealized P&L, win rate, trading history, performance stats, specific token balance, and tokens created by a developer wallet (with ATH market cap and DEX graduation status) via GMGN API on Solana, BSC, Base, or Ethereum. Use when user asks about wallet holdings, P&L (including comparing up to 100 wallets), win rate, what tokens a dev has launched, the highest ATH token a dev ever created, or wants a wallet report to decide whether to copy-trade or follow. -argument-hint: " [--chain ] [--wallet ]" +argument-hint: " [--chain ] [--wallet ]" metadata: cliHelp: "gmgn-cli portfolio --help" --- @@ -46,7 +46,7 @@ Use the `gmgn-cli` tool to query wallet portfolio data based on the user's reque ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` ## Prerequisites diff --git a/skills/gmgn-swap/SKILL.md b/skills/gmgn-swap/SKILL.md index 839f0c9..e9f83ed 100644 --- a/skills/gmgn-swap/SKILL.md +++ b/skills/gmgn-swap/SKILL.md @@ -23,7 +23,7 @@ description: >- catch. Everything else is unchanged and unconditionally this skill's: selling, percentage sells, swaps, multi-wallet batch trading, limit orders, stop loss, take profit, trailing orders, order status, gas prices. -argument-hint: "[--chain --from --input-token --output-token --amount ] | [order get --chain --order-id ] | [gas-price --chain ] | [order strategy list --chain --group-tag ] | [order strategy create --chain --order-type --sub-order-type ...]" +argument-hint: "[--chain --from --input-token --output-token --amount ] | [order get --chain --order-id ] | [gas-price --chain ] | [order strategy list --chain --group-tag ] | [order strategy create --chain --order-type --sub-order-type ...]" metadata: cliHelp: "gmgn-cli swap --help" --- @@ -79,7 +79,7 @@ Use the `gmgn-cli` tool to submit a token swap or query an existing order. `GMGN ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` ## Chain Currencies @@ -179,7 +179,7 @@ gmgn-cli swap \ | Parameter | Required | Chain | Description | |-----------|----------|-------|-------------| -| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | all | Wallet address (must match API Key binding) | | `--input-token` | Yes | all | Input token contract address | | `--output-token` | Yes | all | Output token contract address | @@ -360,7 +360,7 @@ gmgn-cli multi-swap \ | Parameter | Required | Chain | Description | |-----------|----------|-------|-------------| -| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--accounts` | Yes | all | Comma-separated wallet addresses (1–100, all must be bound to the API Key) | | `--input-token` | Yes | all | Input token contract address | | `--output-token` | Yes | all | Output token contract address | @@ -527,11 +527,11 @@ gmgn-cli order strategy create \ | Parameter | Required | Chain | Description | |-----------|----------|-------|-------------| -| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | all | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--from` | Yes | all | Wallet address (must match API Key binding) | | `--base-token` | Yes | all | Base token contract address | | `--quote-token` | Yes | all | Quote token contract address | -| `--order-type` | Yes | all | Order type: `limit_order` / `smart_trade`. **`arc` / `stable` support `limit_order` only** — `smart_trade` returns a 400. | +| `--order-type` | Yes | all | Order type: `limit_order` / `smart_trade`. **`arbitrum` / `hyperevm` / `arc` / `stable` / `avalanche` support `limit_order` only** — V1 `smart_trade` returns a 400 there (use the OpenAPI V2 strategy endpoint for TP/SL). | | `--sub-order-type` | Yes | all | `limit_order`: `buy_low` / `buy_high` / `stop_loss` / `take_profit`; `smart_trade` with condition_orders: `mix_trade` | | `--check-price` | No* | all | Trigger price — required for `limit_order`; omit for `smart_trade` (trigger is in the `buy_low` condition order) | | `--open-price` | No | all | Open price of the position | @@ -553,7 +553,7 @@ gmgn-cli order strategy create \ | `--max-fee-per-gas` | No | `bsc` / `base` / `eth` | EIP-1559 max fee per gas. | | `--max-priority-fee-per-gas` | No | `bsc` / `base` / `eth` | EIP-1559 max priority fee per gas. Capped to `--max-fee-per-gas`. | | `--anti-mev` | No | sol / bsc / eth | Enable anti-MEV protection. Not supported on `base`. | -| `--condition-orders` | No | sol / bsc / base / eth / robinhood | JSON array of condition sub-orders for `smart_trade`. Must include one `buy_low` entry (with `check_price` lower than `open_price`) plus at least one TP/SL entry. **Not supported on `arc` / `stable`** (`smart_trade` is rejected there). | +| `--condition-orders` | No | sol / bsc / base / eth / robinhood | JSON array of condition sub-orders for `smart_trade`. Must include one `buy_low` entry (with `check_price` lower than `open_price`) plus at least one TP/SL entry. **Not supported on `arbitrum` / `hyperevm` / `arc` / `stable` / `avalanche`** (V1 `smart_trade` is rejected there). | ### `order strategy create` Response Fields @@ -584,7 +584,7 @@ gmgn-cli order strategy list --chain sol --group-tag STMix --base-token - and an amount needs sizing, so both start here; a bare address needs only a verdict, so it is gmgn-contract-dd's; a signed transaction is always gmgn-swap's. -argument-hint: " [amount, e.g. 200u | 0.5 ETH | 1 sol] [--chain ]" +argument-hint: " [amount, e.g. 200u | 0.5 ETH | 1 sol] [--chain ]" metadata: cliHelp: "gmgn-cli market search --help" --- diff --git a/skills/gmgn-token/SKILL.md b/skills/gmgn-token/SKILL.md index 95fe25a..168c93b 100644 --- a/skills/gmgn-token/SKILL.md +++ b/skills/gmgn-token/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-token description: Research any crypto or meme token by address — real-time price, market cap, liquidity, holder list, trader list, top Smart Money and KOL positions, security audit (honeypot, rug pull risk, dev wallet, renounced status), social links (Twitter/X, website) via GMGN API on Solana, BSC, Base, or Ethereum. Use when user asks about a token's price, safety, holders, traders, smart money exposure, or wants due diligence before buying. -argument-hint: " --chain --address " +argument-hint: " --chain --address " metadata: cliHelp: "gmgn-cli token --help" --- @@ -46,7 +46,7 @@ Use the `gmgn-cli` tool to query token information based on the user's request. ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` ## Prerequisites @@ -80,7 +80,7 @@ When a request returns `429`: | Parameter | Required | Description | |-----------|----------|-------------| -| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | Token contract address | | `--raw` | No | Output raw single-line JSON (for piping or further processing) | @@ -88,7 +88,7 @@ When a request returns `429`: | Parameter | Required | Default | Description | |-----------|----------|---------|-------------| -| `--chain` | Yes | — | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Yes | — | `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--address` | Yes | — | Token contract address | | `--limit` | No | `20` | Number of results, max `100` | | `--order-by` | No | `amount_percentage` | Sort field — see table below | diff --git a/skills/gmgn-track/SKILL.md b/skills/gmgn-track/SKILL.md index 9c8cf22..9314c87 100644 --- a/skills/gmgn-track/SKILL.md +++ b/skills/gmgn-track/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-track description: Get real-time crypto buy/sell activity from Smart Money wallets, KOL influencer wallets, and personally followed wallets via GMGN API — alpha signals, whale tracking, meme token copy-trading ideas on Solana, BSC, Base, or Ethereum. Also query which tokens a wallet has followed (bookmarked) on GMGN. Use when user asks what smart money or KOLs are buying, wants whale alerts, on-chain alpha, copy-trade signals, or wants to check a wallet's followed tokens. (For a specific wallet address's portfolio, use gmgn-portfolio.) -argument-hint: " --chain [--wallet ]" +argument-hint: " --chain [--wallet ]" metadata: cliHelp: "gmgn-cli track --help" --- @@ -59,7 +59,7 @@ Use the `gmgn-cli` tool to query on-chain tracking data based on the user's requ ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` ## Prerequisites @@ -134,7 +134,7 @@ gmgn-cli track smartmoney --chain sol --side sell --limit 10 --raw | Option | Description | |--------|-------------| -| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet

` | Required. Wallet address to query | | `--group-id ` | Filter by group: `all_group` (all tokens across groups), `default` (default group), or a user-defined group ID | | `--interval ` | Time interval for price change stats (e.g. `1m`, `5m`, `1h`, `6h`, `24h`) | @@ -176,7 +176,7 @@ Each item in `followings` contains: | Option | Description | |--------|-------------| -| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet
` | Required. Wallet address to query | ## `track follow-token-groups` Response Fields @@ -194,7 +194,7 @@ Each item in `followings` contains: | Option | Description | |--------|-------------| -| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` | +| `--chain` | Required. `sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` | | `--wallet
` | Filter by wallet address | | `--limit ` | Page size (1–100, default 10) | | `--side ` | Trade direction: `buy` / `sell` | diff --git a/skills/gmgn-wallet-analysis/SKILL.md b/skills/gmgn-wallet-analysis/SKILL.md index 527511e..7c6db1b 100644 --- a/skills/gmgn-wallet-analysis/SKILL.md +++ b/skills/gmgn-wallet-analysis/SKILL.md @@ -2,7 +2,7 @@ name: gmgn-wallet-analysis description: >- The trader's decision dossier on a wallet — four pass/fail gates (is the record real, is the edge still working THIS week, can you actually get filled, does it cut losses) plus what the wallet is holding and buying right now, its entry market-cap band, its copy window in seconds, and a concrete size cap. Answers the question a memecoin trader actually has: "the numbers look good, but if I copy this wallet what happens to me?" Use when the user asks 「这个钱包能跟吗」, 「帮我分析一下这个钱包」, 「它现在在买什么」, 「这个钱包最近还行吗」, 「跟着他买我能吃到吗」, 「他是不是已经不行了」, 「它是什么类型的」, "can I copy this wallet", "analyze this wallet", "what is this wallet buying now", "is this wallet still hot", "would I actually get filled following this", or pastes a bare wallet address. This is the default for a bare wallet address, answering "what kind of trader is this" and "should I act on it" in one pass. A one-line recap or 打法 advice (复盘, 一句话总结, 下一步怎么打) goes to gmgn-wallet-review; style-only asks (这个钱包什么风格, 打法) to gmgn-wallet-style. -argument-hint: "--chain --wallet [--latency ]" +argument-hint: "--chain --wallet [--latency ]" metadata: cliHelp: "gmgn-cli portfolio stats --help && gmgn-cli portfolio profits --help && gmgn-cli portfolio activity --help && gmgn-cli portfolio holdings --help && gmgn-cli portfolio created-tokens --help && gmgn-cli token info --help" --- @@ -460,7 +460,7 @@ cross-check — and the CLI remains the only supported way to read wallet data.) ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` — whatever `gmgn-cli portfolio` accepts. `portfolio stats --period` accepts only `7d` and `30d`; `portfolio profits --period` accepts `1d` / `7d` / `30d` / `all`. Every conclusion is a statement about its window — the report names the window, and so should you. +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` — whatever `gmgn-cli portfolio` accepts. `portfolio stats --period` accepts only `7d` and `30d`; `portfolio profits --period` accepts `1d` / `7d` / `30d` / `all`. Every conclusion is a statement about its window — the report names the window, and so should you. ## Notes diff --git a/skills/gmgn-wallet-score/SKILL.md b/skills/gmgn-wallet-score/SKILL.md index 33c6158..1988545 100644 --- a/skills/gmgn-wallet-score/SKILL.md +++ b/skills/gmgn-wallet-score/SKILL.md @@ -11,7 +11,7 @@ description: >- ("这个钱包发盘情况怎么样", "是不是发币方钱包", "dev 信誉怎么样", "is this a token-creator wallet"), or gives a wallet address and wants any of these judgments. A one-line recap of the record or next-step advice (复盘, 一句话总结战绩, 下一步怎么打) goes to gmgn-wallet-review. -argument-hint: "--chain --wallet [--latency ] [--slippage ] [--gas ] [--sample ]" +argument-hint: "--chain --wallet [--latency ] [--slippage ] [--gas ] [--sample ]" metadata: cliHelp: "gmgn-cli portfolio stats --help && gmgn-cli portfolio activity --help && gmgn-cli portfolio created-tokens --help && gmgn-cli token security --help" --- @@ -516,7 +516,7 @@ Fields the script reads, confirmed against `portfolio stats` / `portfolio activi ## Supported Chains -`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` +`sol` / `bsc` / `base` / `eth` / `arbitrum` / `hyperevm` / `robinhood` / `arc` / `stable` / `avalanche` ## Prerequisites diff --git a/skills/gmgn-wallet-style/SKILL.md b/skills/gmgn-wallet-style/SKILL.md index e37f38a..1b206a9 100644 --- a/skills/gmgn-wallet-style/SKILL.md +++ b/skills/gmgn-wallet-style/SKILL.md @@ -1,7 +1,7 @@ --- name: gmgn-wallet-style description: Tag any wallet's trading style — one main title from a 20-cell frequency×P&L grid (印钞机, 磨损户, P小将, 一击必杀, and 16 others), one holding-speed subtitle (秒杀流/日内流/波段流/长持流), and any of 14 orthogonal badges plus a wash-trader flag. Every tag states the number that triggered it. Use when the user asks what kind of trader a wallet is — 「这个钱包什么风格」, 「交易风格」, 「打法」, 「是不是机器人」, 「是不是狙击盘的」, 「帮我给这个钱包打标签」, "what's this wallet's trading style", "tag this wallet". A bare wallet address with no question goes to gmgn-wallet-analysis. If the user also wants the tag shown on a real GMGN screenshot or as a clickable interactive page ("生成标签预览", "把标签叠加到这张截图上", "1:1还原钱包页并加标签", "可交互交易风格标签"), answer with Part A below and then also do Part B — the same algorithm, rendered. When 打法 / 风格 comes with 问题, 建议, 复盘 or 一句话总结, hand off to gmgn-wallet-review, which returns one tag plus a one-line recap and next step. -argument-hint: "--chain --wallet [--period 7d|30d] [--screenshot ]" +argument-hint: "--chain --wallet [--period 7d|30d] [--screenshot ]" metadata: cliHelp: "gmgn-cli portfolio stats --help && gmgn-cli portfolio activity --help" --- diff --git a/src/client/OpenApiClient.ts b/src/client/OpenApiClient.ts index 3f9a8b3..5e0c907 100644 --- a/src/client/OpenApiClient.ts +++ b/src/client/OpenApiClient.ts @@ -203,7 +203,7 @@ export interface TokenSignalGroup { export interface HotSearchesParam { label?: string; interval: string; // "1m" | "5m" | "1h" | "6h" | "24h" - chain: string; // "sol" | "bsc" | "base" | "eth" | "robinhood" | "arc" | "stable" + chain: string; // any chain accepted by validateChain filters?: string[]; limit?: number; [key: string]: string[] | number | string | undefined; @@ -897,17 +897,8 @@ function formatCurl(method: string, url: string, headers: Record return `\n[curl]\ncurl -X ${method} '${url}' \\\n${headerArgs}${bodyArg}\n`; } -const TRENCHES_QUOTE_ADDRESS_TYPES: Record = { - sol: [4, 5, 3, 1, 13, 0], - bsc: [6, 7, 1, 16, 8, 3, 9, 10, 2, 17, 18, 0], - base: [11, 3, 12, 13, 0], - eth: [20, 11, 8, 3, 12, 1, 0], - robinhood: [11, 20, 24, 12, 26, 0], -}; - function buildTrenchesBody(chain: string, types?: string[], platforms?: string[], limit?: number, filters?: Record): Record { const selectedTypes = types?.length ? types : ["new_creation", "near_completion", "completed"]; - const quote_address_type = TRENCHES_QUOTE_ADDRESS_TYPES[chain] ?? []; const actualLimit = limit ?? 80; const section: Record = { filters: ["offchain", "onchain"], @@ -915,11 +906,11 @@ function buildTrenchesBody(chain: string, types?: string[], platforms?: string[] limit: actualLimit, ...filters, }; - // Let the service apply its current per-chain launchpad defaults when the user - // does not provide an explicit filter. Keeping a duplicate client-side allow-list - // here can silently hide newly supported platforms until the CLI is released. + // Let the service apply its current per-chain launchpad_platform and + // quote_address_type defaults when the user does not provide explicit filters. + // Keeping duplicate client-side lists here silently hides newly supported + // platforms / quote currencies until the CLI is released. if (platforms?.length) section.launchpad_platform = platforms; - if (quote_address_type.length) section.quote_address_type = quote_address_type; const body: Record = { version: "v2" }; for (const type of selectedTypes) { body[type] = { ...section }; diff --git a/src/commands/callout.ts b/src/commands/callout.ts index 4f9abba..5cdf343 100644 --- a/src/commands/callout.ts +++ b/src/commands/callout.ts @@ -5,7 +5,7 @@ import { exitOnError, printResult } from "../output.js"; import { validateCalloutChains, validateCalloutLimit, validateNonNegativeDecimal } from "../validate.js"; const CALLOUT_CHAIN_HELP = - "sol / bsc / eth / base / megaeth / hyperevm / tron / monad / xlayer / robinhood / arbitrum / arc / stable"; + "sol / bsc / eth / base / megaeth / hyperevm / tron / monad / xlayer / robinhood / arbitrum / arc / stable / avalanche"; export function registerCalloutCommands(program: Command): void { const callout = program.command("callout").description("Call-out (喊单) read commands: one wallet's call-out history, global call-out feed"); diff --git a/src/commands/market.ts b/src/commands/market.ts index b510017..9479a63 100644 --- a/src/commands/market.ts +++ b/src/commands/market.ts @@ -5,6 +5,8 @@ import { exitOnError, printResult } from "../output.js"; import { validateAddress, validateChain, validateSearchChain, normalizeSearchQuery } from "../validate.js"; const unsupportedSignalTypes = new Set([14, 15, 16]); +// Mirrors dto.TokenSignalChains in gmgn-openapi-service (google-api rejects hyperevm). +const TOKEN_SIGNAL_CHAINS = ["sol", "bsc", "base", "eth", "arbitrum", "robinhood", "arc", "stable", "avalanche"]; // Parse token age string. If a unit suffix is present (s/m), use it as-is. // Bare numbers (no unit) are treated as minutes with a warning. @@ -36,7 +38,7 @@ export function registerMarketCommands(program: Command): void { market .command("kline") .description("Get token K-line (candlestick) data") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .requiredOption("--resolution ", "Candlestick resolution: 1s (Pro only) / 30s / 1m / 5m / 15m / 1h / 4h / 1d") .option("--from ", "Start time (Unix seconds)", parseInt) @@ -61,7 +63,7 @@ export function registerMarketCommands(program: Command): void { const trendingCmd = market .command("trending") .description("Get trending token swap data") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--interval ", "Time interval: 1m / 5m / 1h / 6h / 24h") .option("--limit ", "Number of results (default 100, max 100)", parseInt) .option("--order-by ", "Sort field: default / volume / swaps / marketcap / holder_count / price / change1h / ... (see docs for full list)") @@ -106,9 +108,9 @@ export function registerMarketCommands(program: Command): void { const trenchesCmd = market .command("trenches") .description("Get Trenches token data (new creation, near completion, completed)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--type ", "Categories to query, repeatable: new_creation / near_completion / completed (default: all three)") - .option("--launchpad-platform ", "Launchpad platform filter, repeatable (default: all platforms for the chain)") + .option("--launchpad-platform ", "Launchpad platform filter, repeatable (default: the server's per-chain default platform list)") .option("--limit ", "Max results per category, max 80 (default: 80)", parseInt) .option("--filter-preset ", "Apply a named filter preset: safe / smart-money / strict") .option("--sort-by ", "Client-side sort per category: smart_degen_count / renowned_count / volume_24h / volume_1h / swaps_24h / swaps_1h / rug_ratio / holder_count / usd_market_cap / created_timestamp") @@ -167,7 +169,7 @@ export function registerMarketCommands(program: Command): void { market .command("signal") .description("Query token signals (price spikes, smart money buys, large buys, etc.) — max 50 results per group") - .requiredOption("--chain ", "Chain: sol / bsc / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / robinhood / arc / stable / avalanche (hyperevm not supported)") .option("--signal-type ", "Signal type(s), repeatable: 1–13, 17–21 (default: all supported types)", (v: string, acc: number[]) => { acc.push(parseInt(v, 10)); return acc; }, [] as number[]) .option("--mc-min ", "Min market cap at trigger time (USD)", parseFloat) .option("--mc-max ", "Max market cap at trigger time (USD)", parseFloat) @@ -181,8 +183,8 @@ export function registerMarketCommands(program: Command): void { .option("--raw", "Output raw JSON") .action(async (opts: Record) => { validateChain(opts["chain"] as string); - if (!["sol", "bsc", "robinhood", "arc", "stable"].includes(opts["chain"] as string)) { - console.error(`[gmgn-cli] market signal only supports sol, bsc, robinhood, arc and stable, got "${opts["chain"]}"`); + if (!TOKEN_SIGNAL_CHAINS.includes(opts["chain"] as string)) { + console.error(`[gmgn-cli] market signal only supports ${TOKEN_SIGNAL_CHAINS.join(", ")}, got "${opts["chain"]}"`); process.exit(1); } @@ -228,7 +230,7 @@ export function registerMarketCommands(program: Command): void { const hotSearchesCmd = market .command("hot-searches") .description("Get the hot-search ranking (most-searched tokens) for one or more chains") - .option("--chain ", "Chain(s), repeatable: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable (default: all default chains)") + .option("--chain ", "Chain(s), repeatable: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche (default: all default chains)") .option("--interval ", "Time window: 1m / 5m / 1h / 6h / 24h (default 24h)", "24h") .option("--limit ", "Max results per chain (default 500)", parseInt) .option("--filter ", "Boolean filter tags, repeatable. sol defaults: renounced / frozen; EVM defaults: not_honeypot / verified / renounced") diff --git a/src/commands/portfolio.ts b/src/commands/portfolio.ts index 54eaf27..9bbd166 100644 --- a/src/commands/portfolio.ts +++ b/src/commands/portfolio.ts @@ -10,7 +10,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("holdings") .description("Get wallet token holdings") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Wallet address") .option("--limit ", "Page size (default 20, max 50)", parseInt, 20) .option("--cursor ", "Pagination cursor") @@ -46,7 +46,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("activity") .description("Get wallet transaction activity") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Wallet address") .option("--token
", "Filter by token contract address") .option("--limit ", "Page size", parseInt) @@ -71,7 +71,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("stats") .description("Get wallet trading statistics (supports multiple wallets)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet ", "Wallet address(es), repeatable") .option("--period ", "Stats period: 7d / 30d", "7d") .option("--raw", "Output raw JSON") @@ -86,7 +86,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("profits") .description("Batch query wallet profit and loss (1–100 wallets)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet ", "Wallet address(es), up to 100") .option("--period ", "Profit period: 1d / 7d / 30d / all", "7d") .option("--raw", "Output raw JSON") @@ -118,7 +118,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("token-balance") .description("Get wallet token balance for a single token") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Wallet address") .requiredOption("--token
", "Token contract address") .option("--raw", "Output raw JSON") @@ -134,7 +134,7 @@ export function registerPortfolioCommands(program: Command): void { portfolio .command("created-tokens") .description("Get tokens created by a developer wallet") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Developer wallet address") .option("--order-by ", "Sort field: market_cap / token_ath_mc") .option("--direction ", "Sort direction: asc / desc") diff --git a/src/commands/swap.ts b/src/commands/swap.ts index 59593f7..99dd7ad 100644 --- a/src/commands/swap.ts +++ b/src/commands/swap.ts @@ -8,7 +8,7 @@ export function registerSwapCommands(program: Command): void { program .command("swap") .description("Submit a token swap") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--from
", "Wallet address (must match API Key binding)") .requiredOption("--input-token
", "Input token contract address") .requiredOption("--output-token
", "Output token contract address") @@ -72,7 +72,7 @@ export function registerSwapCommands(program: Command): void { program .command("multi-swap") .description("Submit token swaps across multiple wallets concurrently (up to 100 wallets)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--accounts ", "Comma-separated wallet addresses (all must be bound to the API Key)") .requiredOption("--input-token
", "Input token contract address") .requiredOption("--output-token
", "Output token contract address") @@ -147,7 +147,7 @@ export function registerSwapCommands(program: Command): void { order .command("quote") .description("Get a swap quote without submitting a transaction (exist auth — GMGN_API_KEY only, no private key needed)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--from
", "Wallet address") .requiredOption("--input-token
", "Input token contract address") .requiredOption("--output-token
", "Output token contract address") @@ -170,7 +170,7 @@ export function registerSwapCommands(program: Command): void { order .command("get") .description("Query order status (requires private key)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--order-id ", "Order ID") .option("--raw", "Output raw JSON") .action(async (opts) => { @@ -182,8 +182,8 @@ export function registerSwapCommands(program: Command): void { program .command("gas-price") - .description("Query recommended gas price tiers for any chain (exist auth — API Key only; eth / bsc / base / sol / robinhood / arc / stable)") - .requiredOption("--chain ", "Chain: eth / bsc / base / sol / robinhood / arc / stable") + .description("Query recommended gas price tiers for any chain (exist auth — API Key only)") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--raw", "Output raw JSON") .action(async (opts) => { const client = new OpenApiClient(getConfig(false)); @@ -196,11 +196,11 @@ export function registerSwapCommands(program: Command): void { strategy .command("create") .description("Create a limit/strategy order (requires private key)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--from
", "Wallet address (must match API Key binding)") .requiredOption("--base-token
", "Base token contract address") .requiredOption("--quote-token
", "Quote token contract address") - .requiredOption("--order-type ", "Order type: limit_order / smart_trade (arbitrum / hyperevm / arc / stable support limit_order only in V1)") + .requiredOption("--order-type ", "Order type: limit_order / smart_trade (arbitrum / hyperevm / arc / stable / avalanche support limit_order only in V1)") .requiredOption("--sub-order-type ", "Sub-order type: buy_low / buy_high / stop_loss / take_profit (limit_order); mix_trade (smart_trade with condition_orders)") .option("--check-price ", "Trigger check price (required for limit_order; omit for smart_trade)") .option("--open-price ", "Open price of the position") @@ -220,7 +220,7 @@ export function registerSwapCommands(program: Command): void { .option("--max-fee-per-gas ", "EIP-1559 max fee per gas (BSC / BASE / ETH)") .option("--max-priority-fee-per-gas ", "EIP-1559 max priority fee per gas (BSC / BASE / ETH)") .option("--anti-mev", "Enable anti-MEV protection") - .option("--condition-orders ", "JSON array of condition sub-orders for smart_trade (must include a buy_low entry + TP/SL entries); V1 smart_trade is not supported on arbitrum / hyperevm / arc / stable") + .option("--condition-orders ", "JSON array of condition sub-orders for smart_trade (must include a buy_low entry + TP/SL entries); V1 smart_trade is not supported on arbitrum / hyperevm / arc / stable / avalanche") .option("--sell-param ", "JSON object of sell-side trade params used when a TP/SL condition fires (required for smart_trade)") .option("--buy-param ", "JSON object of buy-side trade params override for smart_trade") .option("--raw", "Output raw JSON") @@ -283,7 +283,7 @@ export function registerSwapCommands(program: Command): void { strategy .command("list") .description("List strategy orders (requires private key)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--type ", "open (default) / history") .option("--from
", "Filter by wallet address") .requiredOption("--group-tag ", "Filter by group: LimitOrder / STMix") @@ -308,10 +308,10 @@ export function registerSwapCommands(program: Command): void { strategy .command("cancel") .description("Cancel a strategy order (requires private key)") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--from
", "Wallet address (must match API Key binding)") .requiredOption("--order-id ", "Order ID to cancel") - .option("--order-type ", "Order type: limit_order / smart_trade") + .option("--order-type ", "Order type: limit_order / smart_trade / smart_trade_v2 (default: smart_trade; pass smart_trade_v2 for orders created via the OpenAPI V2 strategy endpoint)") .option("--close-sell-model ", "Sell model when closing") .option("--raw", "Output raw JSON") .action(async (opts) => { diff --git a/src/commands/token.ts b/src/commands/token.ts index aa08056..98a16b5 100644 --- a/src/commands/token.ts +++ b/src/commands/token.ts @@ -10,7 +10,7 @@ export function registerTokenCommands(program: Command): void { token .command("info") .description("Get token basic information and realtime price") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .option("--raw", "Output raw JSON") .action(async (opts) => { @@ -24,7 +24,7 @@ export function registerTokenCommands(program: Command): void { token .command("security") .description("Get token security metrics") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .option("--raw", "Output raw JSON") .action(async (opts) => { @@ -38,7 +38,7 @@ export function registerTokenCommands(program: Command): void { token .command("pool") .description("Get token liquidity pool information") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .option("--raw", "Output raw JSON") .action(async (opts) => { @@ -52,7 +52,7 @@ export function registerTokenCommands(program: Command): void { token .command("holders") .description("Get top token holders") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .option("--limit ", "Number of results (default 20, max 100)", parseInt) .option("--order-by ", "Sort field: amount_percentage / profit / unrealized_profit / buy_volume_cur / sell_volume_cur", "amount_percentage") @@ -75,7 +75,7 @@ export function registerTokenCommands(program: Command): void { token .command("traders") .description("Get top token traders") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--address
", "Token contract address") .option("--limit ", "Number of results (default 20, max 100)", parseInt) .option("--order-by ", "Sort field: amount_percentage / profit / unrealized_profit / buy_volume_cur / sell_volume_cur", "amount_percentage") diff --git a/src/commands/track.ts b/src/commands/track.ts index 44c3c11..bbf8858 100644 --- a/src/commands/track.ts +++ b/src/commands/track.ts @@ -10,7 +10,7 @@ export function registerTrackCommands(program: Command): void { track .command("follow-tokens") .description("Get the followed token list for a wallet on a given chain") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Wallet address") .option("--group-id ", "Filter by group: all_group (all), default, or a user-defined group ID") .option("--interval ", "Time interval for price change stats (e.g. 1m, 5m, 1h, 6h, 24h)") @@ -38,7 +38,7 @@ export function registerTrackCommands(program: Command): void { track .command("follow-token-groups") .description("Get the follow token group names for a wallet on a given chain") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .requiredOption("--wallet
", "Wallet address") .option("--raw", "Output raw JSON") .action(async (opts) => { @@ -51,7 +51,7 @@ export function registerTrackCommands(program: Command): void { track .command("follow-wallet") .description("Get follow-wallet trade records") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--wallet
", "Filter by wallet address") .option("--limit ", "Page size (1–100, default 10)", parseInt) .option("--side ", "Trade direction filter: buy / sell") @@ -76,7 +76,7 @@ export function registerTrackCommands(program: Command): void { track .command("kol") .description("Get KOL trade records") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--limit ", "Page size (1–200, default 100)", parseInt) .option("--side ", "Filter by trade direction: buy / sell (client-side filter)") .option("--raw", "Output raw JSON") @@ -93,7 +93,7 @@ export function registerTrackCommands(program: Command): void { track .command("smartmoney") .description("Get Smart Money trade records") - .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable") + .requiredOption("--chain ", "Chain: sol / bsc / base / eth / arbitrum / hyperevm / robinhood / arc / stable / avalanche") .option("--limit ", "Page size (1–200, default 100)", parseInt) .option("--side ", "Filter by trade direction: buy / sell (client-side filter)") .option("--raw", "Output raw JSON") diff --git a/src/validate.ts b/src/validate.ts index e14b14a..e34a948 100644 --- a/src/validate.ts +++ b/src/validate.ts @@ -1,4 +1,4 @@ -const VALID_CHAINS = new Set(["sol", "bsc", "base", "eth", "arbitrum", "hyperevm", "robinhood", "arc", "stable" /*, "monad" */]); +const VALID_CHAINS = new Set(["sol", "bsc", "base", "eth", "arbitrum", "hyperevm", "robinhood", "arc", "stable", "avalanche" /*, "monad" */]); const SOL_ADDRESS_RE = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/; const EVM_ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/; const POSITIVE_INT_RE = /^\d+$/; @@ -13,7 +13,7 @@ export function validateChain(chain: string): void { } export function validateAddress(address: string, chain: string, label: string): void { - const isEvm = chain === "bsc" || chain === "base" || chain === "eth" || chain === "arbitrum" || chain === "hyperevm" || chain === "robinhood" || chain === "arc" || chain === "stable" /* || chain === "monad" */; + const isEvm = VALID_CHAINS.has(chain) && chain !== "sol"; const valid = isEvm ? EVM_ADDRESS_RE.test(address) : SOL_ADDRESS_RE.test(address); if (!valid) { console.error( @@ -37,7 +37,7 @@ const NO_CONDITION_ORDER_CHAINS = new Set(["arc", "stable"]); // V1 smart_trade is unavailable on the newer EVM chains. They support the V2 // strategy endpoint instead; the CLI currently exposes only the V1 command. -const NO_V1_SMART_TRADE_CHAINS = new Set(["arbitrum", "hyperevm", "arc", "stable"]); +const NO_V1_SMART_TRADE_CHAINS = new Set(["arbitrum", "hyperevm", "arc", "stable", "avalanche"]); export function validateConditionOrdersSupported(chain: string, feature: string): void { if (NO_CONDITION_ORDER_CHAINS.has(chain)) { @@ -73,7 +73,7 @@ export function validatePercent(value: number): void { // Keep the two lists independent. const CALLOUT_CHAINS = new Set([ "sol", "bsc", "eth", "base", "megaeth", "hyperevm", - "tron", "monad", "xlayer", "robinhood", "arbitrum", "arc", "stable", + "tron", "monad", "xlayer", "robinhood", "arbitrum", "arc", "stable", "avalanche", ]); const CALLOUT_MAX_CHAINS = 20; const CALLOUT_MAX_LIMIT = 50;