$npx -y skills add okx/onchainos-skills --skill okx-growth-competitionList OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards. Use when users want to list available trading competitions or trading cups, view competition rules / prize pool / total prizes
| 1 | # OKX Growth Competition — Trading Competition |
| 2 | |
| 3 | Agentic Wallet exclusive trading competitions. Full lifecycle split across focused references: |
| 4 | |
| 5 | - **Participation** (discover / register / trade / registered wallet / export guard) — `references/participation.md` |
| 6 | - **Details** (rules / prize pool / four reward sections) — `references/details.md` |
| 7 | - **Rank** (leaderboard / my own rank with CASE 1/2/3 templates) — `references/rank.md` |
| 8 | - **Claim** (reward status check / atomic claim / contact collection) — `references/claim.md` |
| 9 | - **CLI reference** (commands, parameters, return schemas) — `references/cli-reference.md` |
| 10 | |
| 11 | This SKILL.md holds the **global rules** (facts, identity invariants, routing, output rules, time formatting, status codes, error handling) that ALL references depend on. Always read this file first; then jump into the matching reference for the user's intent. |
| 12 | |
| 13 | ## Facts about every Agentic Wallet competition |
| 14 | |
| 15 | Treat the following as **factual ground truth** when the user asks about how a competition works. The two chain-related fields play **distinct, non-overlapping roles** — never conflate them: |
| 16 | |
| 17 | - `chainId` — single id. **The claim / reward chain ONLY** (rewards are paid on this chain; its contract address lives here). It is NOT a trading chain unless it also appears in `participateChainIds`. |
| 18 | - `participateChainIds` — array of ids returned by **both `list` and `detail`** endpoints. **The trading chain set.** Trades on any chain in this list count toward the same competition standing. |
| 19 | |
| 20 | **Trading-chain set = `participateChainIds`. Claim chain = `chainId`.** These are two separate concepts; the display rules below NEVER union them. |
| 21 | |
| 22 | 1. **Chain id → display name** mapping. Currently supported competition chains: `1 → Ethereum`, `196 → X Layer`, `501 → Solana`. |
| 23 | 2. Never tell a user "your chain doesn't count" without first checking `participateChainIds`. |
| 24 | 3. `myRankInfo.userTotal = 0` means the user has not yet hit the qualifying threshold or the backend metric pipeline has not picked up their trades yet — it does **NOT** mean the user's chain is unsupported. |
| 25 | 4. `competition_rank` takes a single optional `wallet`. Omit it for self-rank — the tool sends your `accountId` (covers every chain in `participateChainIds` in one call; no chain pick). Pass an explicit address ONLY when querying someone else's rank; the address chain family (EVM `0x...` else Solana) must match the activity's primary chain or the tool rejects the call (no silent wrong-chain queries). |
| 26 | |
| 27 | ## Identity resolution invariant |
| 28 | |
| 29 | The query identity for `competition_rank` and `competition_user_status` is **mutually exclusive**: backend accepts EITHER `accountId` (self) OR `walletAddress` (cross-user) — never both. The answer to "which identity did you use?" is **deterministic from the call shape**. |
| 30 | |
| 31 | | Call shape | Identity sent | |
| 32 | |---|---| |
| 33 | | `competition_user_status` (any) | `accountId` — covers every chain in `participateChainIds` in one call | |
| 34 | | `competition_rank` without `wallet` | `accountId` | |
| 35 | | `competition_rank` with `wallet=<addr>` | `walletAddress` — tool validates addr's chain family (EVM `0x...` else Solana) matches activity's `chainId`; mismatch → rejected | |
| 36 | | `competition_claim` (pre-check) | `accountId` | |
| 37 | |
| 38 | For multi-activity `competition_user_status` (no `activity_name`), the same `accountId` is reused across all activities — backend joins by accountId. |
| 39 | |
| 40 | ## Mandatory reading order |
| 41 | |
| 42 | **Before producing ANY user-facing message about a competition, you MUST first locate the matching section in the right reference file below and follow its fixed template structure.** Do NOT improvise the format. Do NOT shorten the templates. Do NOT drop sections or merge them. Templates are product-mandated copy (Participation / Skill Quality wording, disclaimer) and must not be paraphrased. |
| 43 | |
| 44 | The template **structure is fixed**; the **language follows the user** — see the `## Output Language` rule below. When the user writes Chinese, translate the template strings to natural Chinese. When the user writes English, use English as written. Placeholders (including chain display names from `{supportedChains}`) stay as-is. |
| 45 | |
| 46 | Quick router (user intent |