skillpp 0.1.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/COMPATIBILITY.md +58 -0
- package/LICENSE +21 -0
- package/README.md +307 -0
- package/README.zh-CN.md +307 -0
- package/SKILL.md +490 -0
- package/adapters/binance-ai.md +22 -0
- package/adapters/claude.md +21 -0
- package/adapters/gemini.md +26 -0
- package/adapters/gpt.md +28 -0
- package/adapters/kimi.md +26 -0
- package/adapters/mimo.md +22 -0
- package/adapters/openclaw.md +29 -0
- package/assets/skillpp-banner.png +0 -0
- package/package.json +59 -0
- package/pipelines.md +310 -0
- package/prompts/newbie-mode.md +48 -0
- package/prompts/router-prompt.md +32 -0
- package/prompts/universal-system-prompt.md +41 -0
- package/registry.md +209 -0
- package/rules.md +323 -0
- package/schemas/audit.schema.json +67 -0
- package/schemas/checkpoint.schema.json +86 -0
- package/schemas/handoff.schema.json +82 -0
- package/schemas/token.schema.json +36 -0
- package/scripts/compatibility-check.mjs +130 -0
- package/scripts/selftest.mjs +384 -0
- package/scripts/skillpp.mjs +448 -0
- package/scripts/validate-skillpp.mjs +140 -0
- package/skillpp.manifest.json +714 -0
- package/skills/audit-plus/SKILL.md +612 -0
- package/skills/binance/binance/CHANGELOG.md +112 -0
- package/skills/binance/binance/LICENSE.md +9 -0
- package/skills/binance/binance/SKILL.md +69 -0
- package/skills/binance/binance/references/algo.md +21 -0
- package/skills/binance/binance/references/alpha.md +9 -0
- package/skills/binance/binance/references/auth.md +32 -0
- package/skills/binance/binance/references/c2c.md +5 -0
- package/skills/binance/binance/references/convert.md +19 -0
- package/skills/binance/binance/references/copy-trading.md +6 -0
- package/skills/binance/binance/references/crypto-loan.md +27 -0
- package/skills/binance/binance/references/derivatives-options-streams.md +25 -0
- package/skills/binance/binance/references/derivatives-options.md +85 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-pro-streams.md +5 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-pro.md +34 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-streams.md +5 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin.md +146 -0
- package/skills/binance/binance/references/dual-investment.md +15 -0
- package/skills/binance/binance/references/fiat.md +9 -0
- package/skills/binance/binance/references/futures-coin-streams.md +29 -0
- package/skills/binance/binance/references/futures-coin.md +109 -0
- package/skills/binance/binance/references/futures-usds-streams.md +35 -0
- package/skills/binance/binance/references/futures-usds.md +144 -0
- package/skills/binance/binance/references/gift-card.md +10 -0
- package/skills/binance/binance/references/margin-trading-streams.md +6 -0
- package/skills/binance/binance/references/margin-trading.md +101 -0
- package/skills/binance/binance/references/mining.md +17 -0
- package/skills/binance/binance/references/pay.md +5 -0
- package/skills/binance/binance/references/rebate.md +5 -0
- package/skills/binance/binance/references/simple-earn.md +56 -0
- package/skills/binance/binance/references/spot-streams.md +25 -0
- package/skills/binance/binance/references/spot.md +114 -0
- package/skills/binance/binance/references/staking.md +59 -0
- package/skills/binance/binance/references/sub-account.md +67 -0
- package/skills/binance/binance/references/vip-loan.md +27 -0
- package/skills/binance/binance/references/wallet.md +75 -0
- package/skills/binance/fiat/CHANGELOG.md +11 -0
- package/skills/binance/fiat/LICENSE.md +9 -0
- package/skills/binance/fiat/SKILL.md +169 -0
- package/skills/binance/fiat/references/authentication.md +126 -0
- package/skills/binance/fiat/references/sapi-endpoints.md +217 -0
- package/skills/binance/onchain-pay/.local.md.example +10 -0
- package/skills/binance/onchain-pay/CHANGELOG.md +20 -0
- package/skills/binance/onchain-pay/LICENSE.md +9 -0
- package/skills/binance/onchain-pay/SKILL.md +466 -0
- package/skills/binance/onchain-pay/references/authentication.md +92 -0
- package/skills/binance/onchain-pay/scripts/sign_and_call.sh +52 -0
- package/skills/binance/p2p/CHANGELOG.md +33 -0
- package/skills/binance/p2p/LICENSE.md +9 -0
- package/skills/binance/p2p/SKILL.md +1082 -0
- package/skills/binance/p2p/references/agent-sapi-api.md +795 -0
- package/skills/binance/p2p/references/authentication.md +100 -0
- package/skills/binance/payment/SKILL.md +824 -0
- package/skills/binance/payment/common.py +560 -0
- package/skills/binance/payment/payment_skill.py +86 -0
- package/skills/binance/payment/receive.py +109 -0
- package/skills/binance/payment/references/setup-guide.md +77 -0
- package/skills/binance/payment/requirements.txt +4 -0
- package/skills/binance/payment/send.py +952 -0
- package/skills/binance/payment/send_extension/__init__.py +43 -0
- package/skills/binance/payment/send_extension/base.py +48 -0
- package/skills/binance/payment/send_extension/c2c.py +193 -0
- package/skills/binance/payment/send_extension/pix.py +316 -0
- package/skills/binance/square-post/README.md +62 -0
- package/skills/binance/square-post/SKILL.md +171 -0
- package/skills/binance/square-post/scripts/lib.mjs +175 -0
- package/skills/binance/square-post/scripts/post-image.mjs +80 -0
- package/skills/binance/square-post/scripts/post-text.mjs +41 -0
- package/skills/binance/square-post/scripts/post-video.mjs +110 -0
- package/skills/binance/square-post/scripts/save-key.mjs +34 -0
- package/skills/binance-web3/binance-agentic-wallet/SKILL.md +150 -0
- package/skills/binance-web3/binance-agentic-wallet/references/authentication.md +136 -0
- package/skills/binance-web3/binance-agentic-wallet/references/limit-order.md +204 -0
- package/skills/binance-web3/binance-agentic-wallet/references/market-order.md +179 -0
- package/skills/binance-web3/binance-agentic-wallet/references/prediction.md +489 -0
- package/skills/binance-web3/binance-agentic-wallet/references/preflight.md +66 -0
- package/skills/binance-web3/binance-agentic-wallet/references/security.md +47 -0
- package/skills/binance-web3/binance-agentic-wallet/references/send.md +53 -0
- package/skills/binance-web3/binance-agentic-wallet/references/wallet-setting.md +86 -0
- package/skills/binance-web3/binance-agentic-wallet/references/wallet-view.md +312 -0
- package/skills/binance-web3/binance-agentic-wallet/references/x402-payment.md +259 -0
- package/skills/binance-web3/binance-tokenized-securities-info/SKILL.md +613 -0
- package/skills/binance-web3/crypto-market-rank/SKILL.md +91 -0
- package/skills/binance-web3/crypto-market-rank/references/cli.md +219 -0
- package/skills/binance-web3/crypto-market-rank/scripts/cli.mjs +149 -0
- package/skills/binance-web3/meme-rush/SKILL.md +72 -0
- package/skills/binance-web3/meme-rush/references/cli.md +158 -0
- package/skills/binance-web3/meme-rush/scripts/cli.mjs +101 -0
- package/skills/binance-web3/query-address-info/SKILL.md +61 -0
- package/skills/binance-web3/query-address-info/references/cli.md +56 -0
- package/skills/binance-web3/query-address-info/scripts/cli.mjs +132 -0
- package/skills/binance-web3/query-token-audit/SKILL.md +162 -0
- package/skills/binance-web3/query-token-info/SKILL.md +83 -0
- package/skills/binance-web3/query-token-info/references/cli.md +135 -0
- package/skills/binance-web3/query-token-info/scripts/cli.mjs +112 -0
- package/skills/binance-web3/trading-signal/SKILL.md +66 -0
- package/skills/binance-web3/trading-signal/references/cli.md +90 -0
- package/skills/binance-web3/trading-signal/scripts/cli.mjs +92 -0
- package/skills/four-meme/four-guard/API-Contract-TaxToken.md +277 -0
- package/skills/four-meme/four-guard/API-CreateToken.02-02-2026.md +285 -0
- package/skills/four-meme/four-guard/API-Documents.03-03-2026.md +789 -0
- package/skills/four-meme/four-guard/AgentIdentifier.abi +585 -0
- package/skills/four-meme/four-guard/README.md +21 -0
- package/skills/four-meme/four-guard/SKILL.md +31 -0
- package/skills/four-meme/four-guard/TaxToken.abi +969 -0
- package/skills/four-meme/four-guard/TokenIdentifierSample.js_ +81 -0
- package/skills/four-meme/four-guard/TokenIdentifierSample.sol +69 -0
- package/skills/four-meme/four-guard/TokenManager.lite.abi +836 -0
- package/skills/four-meme/four-guard/TokenManager2.lite.abi +2325 -0
- package/skills/four-meme/four-guard/TokenManagerHelper3.abi +999 -0
- package/skills/four-meme/four-guard/go.mod +36 -0
- package/skills/four-meme/four-guard/go.sum +127 -0
- package/skills/four-meme/four-guard/main.go +183 -0
- package/skills/four-meme/four-meme-ai/SKILL.md +31 -0
- package/skills/four-meme/four-meme-ai/references/agent-creator-and-wallets.md +87 -0
- package/skills/four-meme/four-meme-ai/references/api-create-token.md +55 -0
- package/skills/four-meme/four-meme-ai/references/contract-addresses.md +47 -0
- package/skills/four-meme/four-meme-ai/references/create-token-scripts.md +131 -0
- package/skills/four-meme/four-meme-ai/references/errors.md +29 -0
- package/skills/four-meme/four-meme-ai/references/event-listening.md +75 -0
- package/skills/four-meme/four-meme-ai/references/execute-trade.md +31 -0
- package/skills/four-meme/four-meme-ai/references/tax-token-query.md +38 -0
- package/skills/four-meme/four-meme-ai/references/token-query-api.md +44 -0
- package/skills/four-meme/four-meme-ai/references/token-tax-info.md +77 -0
- package/skills/four-meme/four-meme-ai/scripts/8004-balance.ts +52 -0
- package/skills/four-meme/four-meme-ai/scripts/8004-register.ts +108 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-api.ts +321 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-chain.ts +102 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-instant.ts +106 -0
- package/skills/four-meme/four-meme-ai/scripts/execute-buy.ts +198 -0
- package/skills/four-meme/four-meme-ai/scripts/execute-sell.ts +150 -0
- package/skills/four-meme/four-meme-ai/scripts/get-public-config.ts +25 -0
- package/skills/four-meme/four-meme-ai/scripts/get-recent-events.ts +76 -0
- package/skills/four-meme/four-meme-ai/scripts/get-tax-token-info.ts +69 -0
- package/skills/four-meme/four-meme-ai/scripts/get-token-info.ts +94 -0
- package/skills/four-meme/four-meme-ai/scripts/quote-buy.ts +85 -0
- package/skills/four-meme/four-meme-ai/scripts/quote-sell.ts +66 -0
- package/skills/four-meme/four-meme-ai/scripts/send-token.ts +98 -0
- package/skills/four-meme/four-meme-ai/scripts/token-get.ts +31 -0
- package/skills/four-meme/four-meme-ai/scripts/token-list.ts +134 -0
- package/skills/four-meme/four-meme-ai/scripts/token-rankings.ts +162 -0
- package/skills/four-meme/four-meme-ai/scripts/verify-events.ts +47 -0
- package/skills/four-meme/four-meme-integration/SKILL.md +374 -0
- package/skills/four-meme/four-meme-integration/references/agent-creator-and-wallets.md +87 -0
- package/skills/four-meme/four-meme-integration/references/api-create-token.md +55 -0
- package/skills/four-meme/four-meme-integration/references/contract-addresses.md +47 -0
- package/skills/four-meme/four-meme-integration/references/create-token-scripts.md +131 -0
- package/skills/four-meme/four-meme-integration/references/errors.md +29 -0
- package/skills/four-meme/four-meme-integration/references/event-listening.md +75 -0
- package/skills/four-meme/four-meme-integration/references/execute-trade.md +31 -0
- package/skills/four-meme/four-meme-integration/references/tax-token-query.md +38 -0
- package/skills/four-meme/four-meme-integration/references/token-query-api.md +44 -0
- package/skills/four-meme/four-meme-integration/references/token-tax-info.md +77 -0
- package/skills/four-meme/four-meme-integration/scripts/8004-balance.ts +52 -0
- package/skills/four-meme/four-meme-integration/scripts/8004-register.ts +108 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-api.ts +321 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-chain.ts +102 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-instant.ts +106 -0
- package/skills/four-meme/four-meme-integration/scripts/execute-buy.ts +198 -0
- package/skills/four-meme/four-meme-integration/scripts/execute-sell.ts +150 -0
- package/skills/four-meme/four-meme-integration/scripts/get-public-config.ts +25 -0
- package/skills/four-meme/four-meme-integration/scripts/get-recent-events.ts +76 -0
- package/skills/four-meme/four-meme-integration/scripts/get-tax-token-info.ts +69 -0
- package/skills/four-meme/four-meme-integration/scripts/get-token-info.ts +94 -0
- package/skills/four-meme/four-meme-integration/scripts/quote-buy.ts +85 -0
- package/skills/four-meme/four-meme-integration/scripts/quote-sell.ts +66 -0
- package/skills/four-meme/four-meme-integration/scripts/send-token.ts +98 -0
- package/skills/four-meme/four-meme-integration/scripts/token-get.ts +31 -0
- package/skills/four-meme/four-meme-integration/scripts/token-list.ts +134 -0
- package/skills/four-meme/four-meme-integration/scripts/token-rankings.ts +162 -0
- package/skills/four-meme/four-meme-integration/scripts/verify-events.ts +47 -0
- package/skills/skillpp/contract-profiler/SKILL.md +118 -0
- package/skills/skillpp/newbie-tutor/SKILL.md +85 -0
- package/skills/skillpp/opportunity-board/SKILL.md +87 -0
- package/skills/skillpp/risk-fusion/SKILL.md +146 -0
- package/skills/skillpp/scam-pattern-lab/SKILL.md +115 -0
- package/skills/skillpp/wallet-doctor/SKILL.md +119 -0
- package/skills/skillpp/watchtower/SKILL.md +72 -0
- package/tests/compatibility/v0.1.0.json +117 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# meme-rush — CLI Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for every command in `scripts/cli.mjs`.
|
|
4
|
+
|
|
5
|
+
**Invocation pattern:** `node <skill-dir>/scripts/cli.mjs <command> '<json_params>'`
|
|
6
|
+
**Exit codes:** `0` success · `1` usage/upstream error · `3` network failure
|
|
7
|
+
|
|
8
|
+
**Supported chains:** BSC (`56`), Solana (`CT_501`).
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## `meme-rush` — Launchpad lifecycle tracking
|
|
13
|
+
|
|
14
|
+
> ⚠️ `rankType` selects the lifecycle stage: `10`=New (freshly created, on bonding curve) · `20`=Finalizing (bonding curve nearly complete, about to migrate) · `30`=Migrated (just migrated to DEX).
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
node <skill-dir>/scripts/cli.mjs meme-rush '{"chainId":"CT_501","rankType":10,"limit":20}'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Parameters (body is a JSON object; only `chainId` + `rankType` are required)
|
|
21
|
+
|
|
22
|
+
**Core:**
|
|
23
|
+
|
|
24
|
+
| Field | Type | Required | Description |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| `chainId` | string | **yes** | `"56"` (BSC) or `"CT_501"` (Solana) |
|
|
27
|
+
| `rankType` | integer | **yes** | `10`=New · `20`=Finalizing · `30`=Migrated |
|
|
28
|
+
| `limit` | integer | no | Max results (default 40, max 200) |
|
|
29
|
+
| `keywords` / `excludes` | string[] | no | Include / exclude symbol patterns (max 5 each) |
|
|
30
|
+
|
|
31
|
+
**Token filters (Min/Max pairs):** `progress` (string, 0–100) · `tokenAge` (long) · `holders` (long) · `liquidity` (string) · `volume` (string) · `marketCap` (string) · `count` / `countBuy` / `countSell` (long).
|
|
32
|
+
|
|
33
|
+
**Holder distribution filters (Min/Max, string %):** `holdersTop10Percent` · `holdersDevPercent` · `holdersSniperPercent` · `holdersInsiderPercent` · `bundlerHoldingPercent` · `newWalletHoldingPercent` · `bnHoldingPercent` · `bnHolders` (long) · `kolHolders` (long) · `proHolders` (long).
|
|
34
|
+
|
|
35
|
+
**Dev & launch filters:** `devMigrateCountMin/Max` (long) · `devPosition` (`2`=dev sold all) · `devBurnedToken` (`1`=yes) · `excludeDevWashTrading` (`1`=yes) · `excludeInsiderWashTrading` (`1`=yes).
|
|
36
|
+
|
|
37
|
+
**Other filters:** `protocol` (int[]; see Protocol Reference below) · `exclusive` (`1`=Binance exclusive) · `paidOnDexScreener` · `pumpfunLiving` · `cmcBoost` · `globalFeeMin/Max` (Solana only) · `pairAnchorAddress` (string[]) · `tokenSocials.atLeastOne` (`1`=yes) · `tokenSocials.socials` (string[]: `website` / `twitter` / `telegram`).
|
|
38
|
+
|
|
39
|
+
### Protocol Reference
|
|
40
|
+
|
|
41
|
+
Complete list of `protocol` codes (used in `protocol[]` filter and returned on each token).
|
|
42
|
+
|
|
43
|
+
| Code | Platform | Chain | | Code | Platform | Chain |
|
|
44
|
+
|---|---|---|---|---|---|---|
|
|
45
|
+
| 1001 | Pump.fun | Solana | | 1010 | Moonshot | Solana |
|
|
46
|
+
| 1002 | Moonit | Solana | | 1011 | Jup Studio | Solana |
|
|
47
|
+
| 1003 | Pump AMM | Solana | | 1012 | Bags | Solana |
|
|
48
|
+
| 1004 | Launch Lab | Solana | | 1013 | Believer | Solana |
|
|
49
|
+
| 1005 | Raydium V4 | Solana | | 1014 | Meteora DAMM V2 | Solana |
|
|
50
|
+
| 1006 | Raydium CPMM | Solana | | 1015 | Meteora Pools | Solana |
|
|
51
|
+
| 1007 | Raydium CLMM | Solana | | 1016 | Orca | Solana |
|
|
52
|
+
| 1008 | BONK | Solana | | 2001 | Four.meme | BSC |
|
|
53
|
+
| 1009 | Dynamic BC | Solana | | 2002 | Flap | BSC |
|
|
54
|
+
|
|
55
|
+
### Return fields (under `.data[]`)
|
|
56
|
+
|
|
57
|
+
**Core:**
|
|
58
|
+
|
|
59
|
+
| Field | Type | Description |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `chainId` / `contractAddress` / `symbol` / `name` / `decimals` | — | Identity |
|
|
62
|
+
| `icon` | string | Logo path (prefix `https://bin.bnbstatic.com`) |
|
|
63
|
+
| `price` / `priceChange` | string | Current price (USD), 24h change (%) |
|
|
64
|
+
| `marketCap` / `liquidity` / `volume` | string | USD, string-encoded |
|
|
65
|
+
| `holders` | long | Holder count |
|
|
66
|
+
| `progress` | string | Bonding curve progress — pre-formatted, append `%` directly |
|
|
67
|
+
| `protocol` | integer | Launchpad protocol code |
|
|
68
|
+
| `exclusive` | integer | `1` = Binance exclusive token |
|
|
69
|
+
|
|
70
|
+
**Trade counts:** `count` / `countBuy` / `countSell` (long, 24h).
|
|
71
|
+
|
|
72
|
+
**Holder distribution (all string %, append `%` directly):** `holdersTop10Percent` · `holdersDevPercent` · `holdersSniperPercent` · `holdersInsiderPercent` · `bnHoldingPercent` · `kolHoldingPercent` · `proHoldingPercent` · `newWalletHoldingPercent` · `bundlerHoldingPercent`.
|
|
73
|
+
|
|
74
|
+
**Dev & migration:** `devAddress` · `devSellPercent` · `devMigrateCount` · `devPosition` (`2`=dev sold all) · `migrateStatus` (`0`/`1`) · `migrateTime` · `createTime`.
|
|
75
|
+
|
|
76
|
+
**Tags & flags:** `tagDevWashTrading` · `tagInsiderWashTrading` · `tagDevBurnedToken` · `tagPumpfunLiving` · `tagCmcBoost` · `paidOnDexScreener` · `launchTaxEnable` · `taxRate` · `globalFee` (Solana only).
|
|
77
|
+
|
|
78
|
+
**Socials:** `socials.website` / `socials.twitter` / `socials.telegram`.
|
|
79
|
+
|
|
80
|
+
**AI narrative:** `narrativeText.en` / `narrativeText.cn`.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## `topic-rush` — AI-powered hot-topic discovery (GET)
|
|
85
|
+
|
|
86
|
+
> ⚠️ `rankType`: `10`=Latest (newest hot topics) · `20`=Rising (topics with ATH net-inflow between $1k and $20k).
|
|
87
|
+
> ⚠️ **`sort` default convention:** when the user does not specify a preference, use `sort=10` (create time). `sort=20` = net inflow.
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
node <skill-dir>/scripts/cli.mjs topic-rush '{"chainId":"CT_501","rankType":10,"sort":10,"asc":false}'
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Parameters
|
|
94
|
+
|
|
95
|
+
| Field | Type | Required | Description |
|
|
96
|
+
|---|---|---|---|
|
|
97
|
+
| `chainId` | string | **yes** | `"56"` or `"CT_501"` |
|
|
98
|
+
| `rankType` | integer | **yes** | `10`=Latest · `20`=Rising |
|
|
99
|
+
| `sort` | integer | **yes** | `10`=create time (default) · `20`=net inflow |
|
|
100
|
+
| `asc` | boolean | no | `true`=ascending, `false`=descending |
|
|
101
|
+
| `keywords` | string | no | Case-insensitive contains match |
|
|
102
|
+
| `topicType` | string | no | Comma-separated topic-type filter |
|
|
103
|
+
| `tokenSizeMin/Max` | integer | no | Associated-token count range |
|
|
104
|
+
| `netInflowMin/Max` | string | no | Topic net-inflow range (USD) |
|
|
105
|
+
|
|
106
|
+
### Return fields (under `.data[]`)
|
|
107
|
+
|
|
108
|
+
**Topic-level:**
|
|
109
|
+
|
|
110
|
+
| Field | Type | Description |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `topicId` | string | Unique topic ID |
|
|
113
|
+
| `chainId` | string | Chain ID |
|
|
114
|
+
| `name.topicNameEn` / `name.topicNameCn` | string | Multi-language topic name |
|
|
115
|
+
| `type` | string | Topic category (e.g. `Culture`) |
|
|
116
|
+
| `close` | integer | `0`=active, `1`=closed |
|
|
117
|
+
| `topicLink` | string | Related tweet / post URL |
|
|
118
|
+
| `createTime` | long | Topic creation timestamp (ms) |
|
|
119
|
+
| `progress` | string | Topic progress — pre-formatted %, append `%` directly |
|
|
120
|
+
| `aiSummary.aiSummaryEn` / `aiSummary.aiSummaryCn` | string | AI-generated narrative |
|
|
121
|
+
| `topicNetInflow` / `topicNetInflow1h` / `topicNetInflowAth` | string | Net inflow: total / 1h / ATH (USD) |
|
|
122
|
+
| `tokenSize` | integer | Number of associated tokens |
|
|
123
|
+
| `deepAnalysisFlag` | integer | `1`=deep analysis available |
|
|
124
|
+
| `topicTags` | string[] | Topic tags (e.g. `Crypto Native`, `Celebrity`) |
|
|
125
|
+
|
|
126
|
+
**Associated tokens** (`tokenList[]` within each topic):
|
|
127
|
+
|
|
128
|
+
| Field | Type | Description |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| `chainId` / `contractAddress` / `symbol` / `decimals` | — | Identity |
|
|
131
|
+
| `icon` | string | Logo path (prefix `https://bin.bnbstatic.com`) |
|
|
132
|
+
| `createTime` | long | Token creation timestamp (ms) |
|
|
133
|
+
| `marketCap` / `liquidity` | string | USD |
|
|
134
|
+
| `priceChange24h` | string | 24h % (pre-formatted) |
|
|
135
|
+
| `netInflow` / `netInflow1h` | string | Net inflow since topic creation / last 1h (USD) |
|
|
136
|
+
| `volumeBuy` / `volumeSell` / `volume1hBuy` / `volume1hSell` | string | Volume breakdown (USD) |
|
|
137
|
+
| `uniqueTrader{5m,1h,4h,24h}` | long | Unique traders by window |
|
|
138
|
+
| `count{5m,1h,4h,24h}` | long | Trade count by window |
|
|
139
|
+
| `holders` / `kolHolders` / `smartMoneyHolders` | long | Holder stats |
|
|
140
|
+
| `protocol` | integer | Launchpad protocol code (`0` / null = DEX token) |
|
|
141
|
+
| `internal` | integer | `1`=on bonding curve |
|
|
142
|
+
| `migrateStatus` | integer | `1`=migrated |
|
|
143
|
+
|
|
144
|
+
**Nested shape:** each topic has `name: {topicNameEn, topicNameCn}` (and `aiSummary` similarly) plus `tokenList[]` with full per-token stats inline.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Errors
|
|
149
|
+
|
|
150
|
+
Exit codes: `0` ok · `1` upstream/usage (stderr: reason; stdout: body with business `code`) · `3` network.
|
|
151
|
+
Business `code`: `000000` ok · `100004` rate-limited · `100002` bad param · `000400` token not found / unsupported chain.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Notes
|
|
156
|
+
|
|
157
|
+
- Percentage fields (`progress`, holder %, `devSellPercent`, `taxRate`, `priceChange24h`) are pre-formatted — append `%` directly, do **not** multiply by 100.
|
|
158
|
+
- `taxRate` visibility: `protocol=2001` (Four.meme) only on Migrated (`rankType=30`); `protocol=2002` (Flap) on all lists.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
// meme-rush CLI - self-contained, zero-dep, Node >= 22
|
|
4
|
+
// Usage: node cli.mjs <command> '<json_params>'
|
|
5
|
+
//
|
|
6
|
+
// Commands:
|
|
7
|
+
// meme-rush POST Launchpad lifecycle tracking (new / finalizing / migrated)
|
|
8
|
+
// topic-rush GET AI-powered hot-topic discovery with associated tokens
|
|
9
|
+
//
|
|
10
|
+
|
|
11
|
+
// ---- inline HTTP helper (self-contained, zero dependency) ----
|
|
12
|
+
const TIMEOUT_MS = 10_000;
|
|
13
|
+
const UA = { 'Accept-Encoding': 'identity', 'User-Agent': 'binance-web3/2.0 (Skill)' };
|
|
14
|
+
|
|
15
|
+
const qs = (p) => Object.entries(p)
|
|
16
|
+
.filter(([, v]) => v != null)
|
|
17
|
+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
18
|
+
.join('&');
|
|
19
|
+
|
|
20
|
+
async function call({ url, method = 'GET', body, headers = {} }) {
|
|
21
|
+
const ctrl = new AbortController();
|
|
22
|
+
const timer = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
|
|
23
|
+
const opts = { method, headers: { ...UA, ...headers }, signal: ctrl.signal };
|
|
24
|
+
if (method === 'POST') { opts.headers['content-type'] = 'application/json'; opts.body = JSON.stringify(body || {}); }
|
|
25
|
+
let res;
|
|
26
|
+
try { res = await fetch(url, opts); }
|
|
27
|
+
catch { clearTimeout(timer); throw Object.assign(new Error('Network request failed'), { exitCode: 3 }); }
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
const data = await res.json();
|
|
30
|
+
if (res.status >= 400) throw Object.assign(new Error(`HTTP ${res.status}`), { exitCode: 1, body: data });
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ---- per-command supported chains (client-side fail-fast) ----
|
|
35
|
+
const CHAINS = {
|
|
36
|
+
'meme-rush': new Set(['56', 'CT_501', '8453']),
|
|
37
|
+
'topic-rush': new Set(['56', 'CT_501']),
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function validateChainId(cmd, chainId) {
|
|
41
|
+
const allowed = CHAINS[cmd];
|
|
42
|
+
if (!allowed) return;
|
|
43
|
+
const id = String(chainId ?? '');
|
|
44
|
+
if (!allowed.has(id)) {
|
|
45
|
+
const supported = [...allowed].map((c) => `"${c}"`).join(', ');
|
|
46
|
+
throw Object.assign(
|
|
47
|
+
new Error(`${cmd}: unsupported chainId "${chainId}". Supported: ${supported}`),
|
|
48
|
+
{ exitCode: 1 },
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ---- commands: (params) => { url, method?, body?, headers? } ----
|
|
54
|
+
const COMMANDS = {
|
|
55
|
+
'meme-rush': (p) => {
|
|
56
|
+
validateChainId('meme-rush', p.chainId);
|
|
57
|
+
return {
|
|
58
|
+
url: 'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/rank/list/ai',
|
|
59
|
+
method: 'POST',
|
|
60
|
+
body: p,
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
'topic-rush': (p) => {
|
|
64
|
+
validateChainId('topic-rush', p.chainId);
|
|
65
|
+
return {
|
|
66
|
+
url: `https://web3.binance.com/bapi/defi/v2/public/wallet-direct/buw/wallet/market/token/social-rush/rank/list/ai?${qs(p)}`,
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// ---- exports (for unit testing; direct execution still works - see dispatch below) ----
|
|
72
|
+
export { COMMANDS, call, qs, UA, TIMEOUT_MS, CHAINS, validateChainId };
|
|
73
|
+
|
|
74
|
+
// ---- CLI dispatch (only runs when executed directly, not when imported) ----
|
|
75
|
+
if (fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
76
|
+
const [cmd, paramsStr] = process.argv.slice(2);
|
|
77
|
+
|
|
78
|
+
if (!cmd || cmd === '--help' || cmd === '-h') {
|
|
79
|
+
console.log("Usage: node cli.mjs <command> '<json_params>'\n\nCommands:");
|
|
80
|
+
for (const name of Object.keys(COMMANDS)) console.log(` ${name}`);
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const builder = COMMANDS[cmd];
|
|
85
|
+
if (!builder) { console.error(`Unknown command: ${cmd}\nRun with --help to see available commands.`); process.exit(1); }
|
|
86
|
+
|
|
87
|
+
let params = {};
|
|
88
|
+
if (paramsStr) {
|
|
89
|
+
try { params = JSON.parse(paramsStr); }
|
|
90
|
+
catch { console.error('Invalid JSON params'); process.exit(1); }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
const result = await call(builder(params));
|
|
95
|
+
console.log(JSON.stringify(result, null, 2));
|
|
96
|
+
} catch (err) {
|
|
97
|
+
console.error(err.message);
|
|
98
|
+
if (err.body) console.log(JSON.stringify(err.body, null, 2));
|
|
99
|
+
process.exit(err.exitCode || 1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: query-address-info
|
|
3
|
+
description: |
|
|
4
|
+
Snapshot of a single wallet's token holdings on a specific chain — list of every token currently held with
|
|
5
|
+
name, symbol, current price, 24h price change, and holding quantity.
|
|
6
|
+
Use when the user provides an explicit wallet address (or says "my wallet") and wants the current portfolio:
|
|
7
|
+
"what does 0x... hold", "wallet balance breakdown", "list positions for this address",
|
|
8
|
+
"what tokens are in this wallet", "show me the holdings of address".
|
|
9
|
+
metadata:
|
|
10
|
+
author: binance-web3-team
|
|
11
|
+
version: "2.0"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Query Address Info Skill
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
This skill queries any on-chain wallet address for token holdings, supporting:
|
|
19
|
+
|
|
20
|
+
List of all tokens held by a wallet address
|
|
21
|
+
Current price of each token
|
|
22
|
+
24-hour price change percentage
|
|
23
|
+
Holding quantity
|
|
24
|
+
|
|
25
|
+
## When to Use This Skill
|
|
26
|
+
|
|
27
|
+
| User intent | Command |
|
|
28
|
+
|-------------|---------|
|
|
29
|
+
| List a wallet's token holdings with price and 24h change | `positions` |
|
|
30
|
+
|
|
31
|
+
## Supported Chains
|
|
32
|
+
|
|
33
|
+
| Chain | chainId |
|
|
34
|
+
|-------|---------|
|
|
35
|
+
| BSC | `56` |
|
|
36
|
+
| Solana | `CT_501` |
|
|
37
|
+
| Base | `8453` |
|
|
38
|
+
| Ethereum | `1` |
|
|
39
|
+
|
|
40
|
+
## How to Call APIs
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
node skill-dir/scripts/cli.mjs positions '{"address":"0x...","chainId":"56","offset":0}'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Commands
|
|
47
|
+
|
|
48
|
+
| Command | Purpose | Required args | Example |
|
|
49
|
+
|---------|---------|---------------|---------|
|
|
50
|
+
| `positions` | List wallet token holdings (price + 24h change + quantity) | `address`, `chainId`, `offset` | `node skill-dir/scripts/cli.mjs positions '{"address":"0x...","chainId":"56","offset":0}'` |
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- **`offset` is required on every call — including the first page.** Pass `0` to fetch the first page; increment for subsequent pages. Omitting it causes an upstream validation error.
|
|
55
|
+
- **Pagination**: repeat with increasing `offset` until `data.list` is empty or shorter than the page size.
|
|
56
|
+
- **Icon URL prefix**: `icon` is a relative path (e.g., `/images/web3-data/public/token/logos/xxxx.png`). Prepend `https://bin.bnbstatic.com` to render.
|
|
57
|
+
- **Numbers as strings**: `price`, `percentChange24h`, `remainQty` are strings — convert to numbers before arithmetic.
|
|
58
|
+
|
|
59
|
+
## Full CLI Reference
|
|
60
|
+
|
|
61
|
+
See [`references/cli.md`](references/cli.md) for per-subcommand invocations, parameter tables, return-field tables, and real response samples.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# query-address-info — CLI Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for every command in `scripts/cli.mjs`.
|
|
4
|
+
|
|
5
|
+
**Invocation pattern:** `node <skill-dir>/scripts/cli.mjs <command> '<json_params>'`
|
|
6
|
+
**Exit codes:** `0` success · `1` usage/upstream error · `3` network failure
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## `positions` — Wallet active-position list
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
node <skill-dir>/scripts/cli.mjs positions '{"address":"0x...","chainId":"56","offset":0}'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Parameters
|
|
17
|
+
|
|
18
|
+
| Param | Type | Required | Description |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| `address` | string | **yes** | Wallet address (EVM `0x...` or Solana base58) |
|
|
21
|
+
| `chainId` | string | **yes** | `"56"` (BSC) · `"8453"` (Base) · `"CT_501"` (Solana) |
|
|
22
|
+
| `offset` | number | **yes** | Pagination offset (start from `0`) |
|
|
23
|
+
|
|
24
|
+
### Return fields (under `.data.list[]`)
|
|
25
|
+
|
|
26
|
+
| Field | Type | Description |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `chainId` | string | Chain identifier |
|
|
29
|
+
| `address` | string | Queried wallet address (lowercased) |
|
|
30
|
+
| `contractAddress` | string | Token contract address |
|
|
31
|
+
| `binanceTokenId` | string | Binance-internal stable token ID |
|
|
32
|
+
| `name`, `symbol` | string | Token display names |
|
|
33
|
+
| `icon` | string | Logo path — prefix with `https://bin.bnbstatic.com` |
|
|
34
|
+
| `decimals` | number | Token decimals |
|
|
35
|
+
| `price` | string | Current USD price (decimal string) |
|
|
36
|
+
| `percentChange24h` | string | 24h price change (%, signed decimal string) |
|
|
37
|
+
| `baseCoinPrice` | string | USD price of the chain native coin |
|
|
38
|
+
| `remainQty` | string | Holding quantity (human-readable, already divided by decimals) |
|
|
39
|
+
| `circulatingSupply` | string | Circulating supply |
|
|
40
|
+
| `riskLevel`, `riskLevelInt` | string \| null, number | Risk badge (`"LOW"` = 1, etc.); may be `null` |
|
|
41
|
+
| `lowLiquidity` | number | `1` = low-liquidity warning |
|
|
42
|
+
|
|
43
|
+
### Response envelope (under `.data`)
|
|
44
|
+
|
|
45
|
+
| Field | Type | Description |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `offset` | number | Echo of request offset |
|
|
48
|
+
| `list` | array \| `null` | Position list; `null` when wallet has no tracked holdings |
|
|
49
|
+
| `addressStatus` | any | Reserved (currently always `null`) |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Errors
|
|
54
|
+
|
|
55
|
+
Exit codes: `0` ok · `1` upstream/usage (stderr: reason; stdout: body with business `code`) · `3` network.
|
|
56
|
+
Business `code`: `000000` ok · `100004` rate-limited · `100002` bad param · `000400` unsupported chain / bad address.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
// query-address-info CLI - self-contained, zero-dep, Node >= 22
|
|
4
|
+
// Usage: node cli.mjs <command> '<json_params>'
|
|
5
|
+
//
|
|
6
|
+
// Commands:
|
|
7
|
+
// positions GET wallet active-position list (token balances + 24h price change)
|
|
8
|
+
//
|
|
9
|
+
|
|
10
|
+
// ---- inline HTTP helper (self-contained, zero dependency) ----
|
|
11
|
+
const TIMEOUT_MS = 10_000;
|
|
12
|
+
const UA = { 'Accept-Encoding': 'identity', 'User-Agent': 'binance-web3/2.0 (Skill)' };
|
|
13
|
+
|
|
14
|
+
const qs = (p) => Object.entries(p)
|
|
15
|
+
.filter(([, v]) => v != null)
|
|
16
|
+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
17
|
+
.join('&');
|
|
18
|
+
|
|
19
|
+
async function call({ url, method = 'GET', body, headers = {} }) {
|
|
20
|
+
const ctrl = new AbortController();
|
|
21
|
+
const timer = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
|
|
22
|
+
const opts = { method, headers: { ...UA, ...headers }, signal: ctrl.signal };
|
|
23
|
+
if (method === 'POST') { opts.headers['content-type'] = 'application/json'; opts.body = JSON.stringify(body || {}); }
|
|
24
|
+
let res;
|
|
25
|
+
try { res = await fetch(url, opts); }
|
|
26
|
+
catch { clearTimeout(timer); throw Object.assign(new Error('Network request failed'), { exitCode: 3 }); }
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
const data = await res.json();
|
|
29
|
+
if (res.status >= 400) throw Object.assign(new Error(`HTTP ${res.status}`), { exitCode: 1, body: data });
|
|
30
|
+
return data;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ---- supported chains (client-side fail-fast) ----
|
|
34
|
+
const SUPPORTED_CHAINS = new Set(['1', '56', '8453', 'CT_501']);
|
|
35
|
+
|
|
36
|
+
function validateChainId(chainId) {
|
|
37
|
+
const id = String(chainId ?? '');
|
|
38
|
+
if (!SUPPORTED_CHAINS.has(id)) {
|
|
39
|
+
const supported = [...SUPPORTED_CHAINS].map((c) => `"${c}"`).join(', ');
|
|
40
|
+
throw Object.assign(
|
|
41
|
+
new Error(`positions: unsupported chainId "${chainId}". Supported: ${supported}`),
|
|
42
|
+
{ exitCode: 1 },
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Client-side fail-fast for malformed addresses.
|
|
48
|
+
const EVM_CHAINS = new Set(['1', '56', '8453']);
|
|
49
|
+
const SOLANA_CHAIN = 'CT_501';
|
|
50
|
+
const EVM_ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
51
|
+
const SOLANA_ADDRESS_RE = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
|
|
52
|
+
const EVM_ZERO = '0x' + '0'.repeat(40);
|
|
53
|
+
|
|
54
|
+
function validationError(msg) {
|
|
55
|
+
return Object.assign(new Error(msg), { exitCode: 1 });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function validateAddress(address, chainId) {
|
|
59
|
+
if (typeof address !== 'string' || address.length === 0) {
|
|
60
|
+
throw validationError('address is required');
|
|
61
|
+
}
|
|
62
|
+
// Reject whitespace, control chars, URL-encoded sequences (CRLF injection guard).
|
|
63
|
+
if (/\s/.test(address) || /[\x00-\x1f\x7f]/.test(address) || /%/.test(address)) {
|
|
64
|
+
throw validationError('address contains invalid characters (whitespace / control / %-encoded)');
|
|
65
|
+
}
|
|
66
|
+
// Reject non-ASCII (rejects unicode look-alikes and multibyte chars).
|
|
67
|
+
if (/[^\x20-\x7e]/.test(address)) {
|
|
68
|
+
throw validationError('address contains non-ASCII characters');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const chain = String(chainId ?? '');
|
|
72
|
+
if (EVM_CHAINS.has(chain)) {
|
|
73
|
+
if (!EVM_ADDRESS_RE.test(address)) {
|
|
74
|
+
throw validationError(`invalid EVM address for chainId=${chain}: expected 0x + 40 hex chars`);
|
|
75
|
+
}
|
|
76
|
+
if (address.toLowerCase() === EVM_ZERO) {
|
|
77
|
+
throw validationError('zero address (0x000...000) is not a valid wallet');
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (chain === SOLANA_CHAIN) {
|
|
82
|
+
if (!SOLANA_ADDRESS_RE.test(address)) {
|
|
83
|
+
throw validationError('invalid Solana address: expected base58, 32-44 chars');
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Unknown chain - let upstream decide.
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ---- commands: (params) => { url, method?, body?, headers? } ----
|
|
91
|
+
const COMMANDS = {
|
|
92
|
+
positions: (p) => {
|
|
93
|
+
validateChainId(p.chainId);
|
|
94
|
+
validateAddress(p.address, p.chainId);
|
|
95
|
+
return {
|
|
96
|
+
url: `https://web3.binance.com/bapi/defi/v3/public/wallet-direct/buw/wallet/address/pnl/active-position-list/ai?${qs(p)}`,
|
|
97
|
+
headers: { clienttype: 'web', clientversion: '1.2.0' },
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// ---- exports (for unit testing; direct execution still works - see dispatch below) ----
|
|
103
|
+
export { COMMANDS, call, qs, UA, TIMEOUT_MS, validateAddress, validateChainId, SUPPORTED_CHAINS };
|
|
104
|
+
|
|
105
|
+
// ---- CLI dispatch (only runs when executed directly, not when imported) ----
|
|
106
|
+
if (fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
107
|
+
const [cmd, paramsStr] = process.argv.slice(2);
|
|
108
|
+
|
|
109
|
+
if (!cmd || cmd === '--help' || cmd === '-h') {
|
|
110
|
+
console.log("Usage: node cli.mjs <command> '<json_params>'\n\nCommands:");
|
|
111
|
+
for (const name of Object.keys(COMMANDS)) console.log(` ${name}`);
|
|
112
|
+
process.exit(0);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const builder = COMMANDS[cmd];
|
|
116
|
+
if (!builder) { console.error(`Unknown command: ${cmd}\nRun with --help to see available commands.`); process.exit(1); }
|
|
117
|
+
|
|
118
|
+
let params = {};
|
|
119
|
+
if (paramsStr) {
|
|
120
|
+
try { params = JSON.parse(paramsStr); }
|
|
121
|
+
catch { console.error('Invalid JSON params'); process.exit(1); }
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
const result = await call(builder(params));
|
|
126
|
+
console.log(JSON.stringify(result, null, 2));
|
|
127
|
+
} catch (err) {
|
|
128
|
+
console.error(err.message);
|
|
129
|
+
if (err.body) console.log(JSON.stringify(err.body, null, 2));
|
|
130
|
+
process.exit(err.exitCode || 1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: query-token-audit
|
|
3
|
+
description: |
|
|
4
|
+
Query token security audit to detect scams, honeypots, and malicious contracts before trading.
|
|
5
|
+
Returns comprehensive security analysis including contract risks, trading risks, and scam detection.
|
|
6
|
+
Use when users ask "is this token safe?", "check token security", "audit token", or before any swap.
|
|
7
|
+
metadata:
|
|
8
|
+
author: binance-web3-team
|
|
9
|
+
version: "1.4"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Query Token Audit Skill
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
| API | Function | Use Case |
|
|
17
|
+
|-----|---------------------|----------|
|
|
18
|
+
| Token Security Audit | Token security scan | Detect honeypot, rug pull, scam, malicious functions |
|
|
19
|
+
|
|
20
|
+
## Use Cases
|
|
21
|
+
|
|
22
|
+
1. **Pre-Trade Safety Check**: Verify token security before buying or swapping
|
|
23
|
+
2. **Scam Detection**: Identify honeypots, fake tokens, and malicious contracts
|
|
24
|
+
3. **Contract Analysis**: Check for dangerous ownership functions and hidden risks
|
|
25
|
+
4. **Tax Verification**: Detect unusual buy/sell taxes before trading
|
|
26
|
+
|
|
27
|
+
## Supported Chains
|
|
28
|
+
|
|
29
|
+
| Chain Name | chainId |
|
|
30
|
+
|------------|---------|
|
|
31
|
+
| BSC | 56 |
|
|
32
|
+
| Base | 8453 |
|
|
33
|
+
| Solana | CT_501 |
|
|
34
|
+
| Ethereum | 1 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## API: Token Security Audit
|
|
39
|
+
|
|
40
|
+
### Method: POST
|
|
41
|
+
|
|
42
|
+
**URL**:
|
|
43
|
+
```
|
|
44
|
+
https://web3.binance.com/bapi/defi/v1/public/wallet-direct/security/token/audit
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Request Parameters**:
|
|
48
|
+
|
|
49
|
+
| Parameter | Type | Required | Description |
|
|
50
|
+
|-----------|------|----------|-------------|
|
|
51
|
+
| binanceChainId | string | Yes | Chain ID: `CT_501` (Solana), `56` (BSC), `8453` (Base), `1` (Ethereum) |
|
|
52
|
+
| contractAddress | string | Yes | Token contract address |
|
|
53
|
+
| requestId | string | Yes | Unique request ID (UUID v4 format) |
|
|
54
|
+
|
|
55
|
+
**Request Headers**:
|
|
56
|
+
```
|
|
57
|
+
Content-Type: application/json
|
|
58
|
+
Accept-Encoding: identity
|
|
59
|
+
User-Agent: binance-web3/1.4 (Skill)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Example Request**:
|
|
63
|
+
```bash
|
|
64
|
+
curl --location 'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/security/token/audit' \
|
|
65
|
+
--header 'Content-Type: application/json' \
|
|
66
|
+
--header 'source: agent' \
|
|
67
|
+
--header 'Accept-Encoding: identity' \
|
|
68
|
+
--header 'User-Agent: binance-web3/1.4 (Skill)' \
|
|
69
|
+
--data '{
|
|
70
|
+
"binanceChainId": "56",
|
|
71
|
+
"contractAddress": "0x55d398326f99059ff775485246999027b3197955",
|
|
72
|
+
"requestId": "'$(uuidgen)'"
|
|
73
|
+
}'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Response Example**:
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"code": "000000",
|
|
80
|
+
"data": {
|
|
81
|
+
"requestId": "d6727c70-de6c-4fad-b1d7-c05422d5f26b",
|
|
82
|
+
"hasResult": true,
|
|
83
|
+
"isSupported": true,
|
|
84
|
+
"riskLevelEnum": "LOW",
|
|
85
|
+
"riskLevel": 1,
|
|
86
|
+
"extraInfo": {
|
|
87
|
+
"buyTax": "0",
|
|
88
|
+
"sellTax": "0",
|
|
89
|
+
"isVerified": true
|
|
90
|
+
},
|
|
91
|
+
"riskItems": [
|
|
92
|
+
{
|
|
93
|
+
"id": "CONTRACT_RISK",
|
|
94
|
+
"name": "Contract Risk",
|
|
95
|
+
"details": [
|
|
96
|
+
{
|
|
97
|
+
"title": "Honeypot Risk Not Found",
|
|
98
|
+
"description": "A honeypot is a token that can be bought but not sold",
|
|
99
|
+
"isHit": false,
|
|
100
|
+
"riskType": "RISK"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"success": true
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Response Fields**:
|
|
111
|
+
|
|
112
|
+
| Field | Type | Description |
|
|
113
|
+
|-----------------------------------|------|-----------------------------------------------------------|
|
|
114
|
+
| hasResult | boolean | Whether audit data is available |
|
|
115
|
+
| isSupported | boolean | Whether the token is supported for audit |
|
|
116
|
+
| riskLevelEnum | string | Risk level: `LOW`, `MEDIUM`, `HIGH` |
|
|
117
|
+
| riskLevel | number | Risk level number (1-5) |
|
|
118
|
+
| extraInfo.buyTax | string | Buy tax percentage (null if unknown) |
|
|
119
|
+
| extraInfo.sellTax | string | Sell tax percentage (null if unknown) |
|
|
120
|
+
| extraInfo.isVerified | boolean | Whether contract code is verified |
|
|
121
|
+
| riskItems[].id | string | Risk category: `CONTRACT_RISK`, `TRADE_RISK`, `SCAM_RISK` |
|
|
122
|
+
| riskItems[].details[].title | string | Risk check title |
|
|
123
|
+
| riskItems[].details[].description | string | Risk check description |
|
|
124
|
+
| riskItems[].details[].isHit | boolean | true = risk detected |
|
|
125
|
+
| riskItems[].details[].riskType | string | `RISK` (critical) or `CAUTION` (warning) |
|
|
126
|
+
|
|
127
|
+
**Risk Level Reference**:
|
|
128
|
+
|
|
129
|
+
| riskLevel | riskLevelEnum | Action | Description |
|
|
130
|
+
|-----------|---------------|--------|-------------|
|
|
131
|
+
| 0-1 | LOW | Proceed with caution | Lower risk detected, but NOT guaranteed safe. DYOR. |
|
|
132
|
+
| 2-3 | MEDIUM | Exercise caution | Moderate risks detected, review risk items carefully |
|
|
133
|
+
| 4 | HIGH | Avoid trading | Critical risks detected, high probability of loss |
|
|
134
|
+
| 5 | HIGH | Block transaction | Severe risks confirmed, do NOT proceed |
|
|
135
|
+
|
|
136
|
+
**IMPORTANT**: LOW risk does NOT mean "safe." Audit results are point-in-time snapshots. Project teams can modify contracts or restrict liquidity after purchase. These risks cannot be predicted in advance.
|
|
137
|
+
|
|
138
|
+
**Response Handling**:
|
|
139
|
+
|
|
140
|
+
- If `hasResult=false` OR `isSupported=false`:
|
|
141
|
+
→ Reply: "Security audit data is not available for this token on this chain."
|
|
142
|
+
→ Do NOT show `riskLevel`, `riskLevelEnum`, or `riskItems` (data is unreliable when either field is false)
|
|
143
|
+
→ You may suggest the user verify the contract address and chain, or try again later
|
|
144
|
+
- If `hasResult=true` AND `isSupported=true`:
|
|
145
|
+
→ Show the full audit result including risk level, tax info, and all risk items
|
|
146
|
+
→ Apply the Risk Level Reference table above for actionable guidance
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## User Agent Header
|
|
151
|
+
|
|
152
|
+
Include `User-Agent` header with the following string: `binance-web3/1.4 (Skill)`
|
|
153
|
+
|
|
154
|
+
## Notes
|
|
155
|
+
|
|
156
|
+
1. All numeric fields are string format, convert when using
|
|
157
|
+
2. Audit results are ONLY valid when `hasResult: true` AND `isSupported: true`
|
|
158
|
+
3. `riskLevel: 5` means transaction should be blocked; `riskLevel: 4` is high risk
|
|
159
|
+
4. Tax thresholds: >10% is critical, 5-10% is warning, <5% is acceptable
|
|
160
|
+
5. Generate unique UUID v4 for each audit request
|
|
161
|
+
6. Only output security check risk flags, do NOT provide any investment advice
|
|
162
|
+
7. Always end with disclaimer: `⚠️ This audit result is for reference only and does not constitute investment advice. Always conduct your own research.`
|