Files
smom-dbis-138/services/token-aggregation/docs/CMC_COINGECKO_REPORTING.md
defiQUG 76aa419320 feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.

Run forge build && forge test before deploy (large solc graph).

Made-with: Cursor
2026-04-07 23:40:52 -07:00

167 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CMC and CoinGecko Reporting — Full API for All Tokens and Liquidity
This document describes the Token Aggregation Service reporting API used to expose **all coins, tokens, liquidity, and other reportable data** in formats suitable for **CoinMarketCap (CMC)** and **CoinGecko** listing submissions and sync.
## Endpoints
Base path: `/api/v1/report`
| Endpoint | Description | Cache |
|----------|-------------|--------|
| `GET /report/all` | Unified report: all tokens, pools, liquidity, volume, summary, and cross-chain data | 2 min |
| `GET /report/coingecko` | Token list and market data in CoinGecko-friendly format (includes crossChain) | 2 min |
| `GET /report/cmc` | Token list and DEX pairs in CoinMarketCap-friendly format (includes crossChain) | 2 min |
| `GET /report/cross-chain` | Cross-chain pools, bridge volume by lane, atomic swaps (138↔1, 138↔651940, etc.) | 2 min |
| `GET /report/token-list` | Flat canonical token list (all chains or `?chainId=138`) | 5 min |
| `GET /report/canonical` | Raw canonical token spec (symbol, name, type, decimals, addresses) | 10 min |
## Query Parameters
- **`chainId`** (optional): For `/report/all` and `/report/token-list`, limit to one chain (e.g. `138`, `651940`). For `/report/coingecko` and `/report/cmc`, set the chain for the response (default `138`).
## 1. Full Report — `GET /api/v1/report/all`
Returns all canonical tokens with DB-backed market data and pools, plus per-chain pool list and summary (total liquidity, volume, counts).
**Example:**
```bash
curl "http://localhost:3000/api/v1/report/all"
curl "http://localhost:3000/api/v1/report/all?chainId=138"
```
**Response shape:**
- `generatedAt`: ISO timestamp
- `chains`: list of chain IDs included
- `tokens`: `{ [chainId]: TokenReport[] }` — each token has `address`, `symbol`, `name`, `type`, `decimals`, `market` (priceUsd, volume24h, volume7d, volume30d, marketCapUsd, liquidityUsd), `pools` (poolAddress, dex, tvl, volume24h), `fromDb`
- `pools`: `{ [chainId]: LiquidityPool[] }`
- `summary`: `totalLiquidityUsdByChain`, `totalVolume24hUsdByChain`, `tokenCountByChain`, `poolCountByChain`
Use this for dashboards, internal analytics, and as the source of truth for “all reportable data.”
## 2. CoinGecko Format — `GET /api/v1/report/coingecko`
Returns tokens in a structure aligned with CoinGeckos API and listing expectations: contract address, symbol, name, decimals, optional market_data (current_price, total_volume, market_cap, liquidity_usd), and liquidity_pools (pool_address, dex_id, tvl_usd, volume_24h_usd).
**Example:**
```bash
curl "http://localhost:3000/api/v1/report/coingecko?chainId=138"
```
**Use for:**
- Preparing CoinGecko listing submissions (contract address, symbol, name, decimals, platform).
- Feeding an internal or external job that syncs to CoinGecko (e.g. after they support custom chains).
- One-shot exports for manual submission.
**Note:** CoinGecko may not list ChainID 138 or 651940 until they add the platform. The response still provides a single, consistent format for all our tokens and liquidity.
## 3. CoinMarketCap Format — `GET /api/v1/report/cmc`
Returns tokens with contract address, symbol, name, decimals, volume_24h, market_cap, liquidity_usd, and `pairs` (pair_address, dex_id, base, quote, liquidity_usd, volume_24h_usd).
**Example:**
```bash
curl "http://localhost:3000/api/v1/report/cmc?chainId=138"
```
**Use for:**
- CMC DEX/listing submission or sync when the chain is supported.
- Internal reporting that mirrors CMCs expected fields.
## 4. Token List — `GET /api/v1/report/token-list`
Flat list of all canonical tokens (per chain or all supported chains): `chainId`, `address`, `symbol`, `name`, `decimals`, `type` (base, w, asset, debt).
**Example:**
```bash
curl "http://localhost:3000/api/v1/report/token-list"
curl "http://localhost:3000/api/v1/report/token-list?chainId=651940"
```
**Use for:**
- DEX/UIs that need a single token list.
- Indexer or cron jobs that ensure every canonical token is registered in the DB.
## 5. Canonical Spec — `GET /api/v1/report/canonical`
Raw canonical token definitions (no DB merge): symbol, name, type, decimals, currencyCode, addresses by chainId. No market or pool data.
**Use for:** Tooling and config that need the authoritative list of tokens and their chains/addresses.
## Canonical Token Set and Addresses
The report uses the **canonical token list** in `src/config/canonical-tokens.ts`. It includes:
- **Base (GRU-M1):** cUSDC, cUSDT, cAUSDT, cEURC, cEURT, cGBPC, cGBPT, cAUDC, cJPYC, cCHFC, cCADC, cXAUC, cXAUT, plus env-gated ALL Mainnet gold landings `cAXAUC` / `cAXAUT`
- **Public transport mirrors (cW*):** cWUSDC, cWUSDT, cWUSDW, live cWAUSDT mirrors on BSC, Polygon, Avalanche, and Celo, plus env-gated ALL Mainnet gold wrappers `cWAXAUC` / `cWAXAUT`
- **W-tokens (ISO-4217):** USDW, EURW, GBPW, AUDW, JPYW, CHFW, CADW
- **Asset (ac*):** acUSDC, acUSDT, acEURC, acGBPC, acAUDC, acJPYC, acCHFC, acCADC, acXAUC
- **Debt (vdc* / sdc*):** vdcUSDC, sdcUSDC, vdcEURC, sdcEURC, vdcGBPC, sdcGBPC, vdcAUDC, sdcAUDC, vdcJPYC, sdcJPYC, vdcCHFC, sdcCHFC, vdcCADC, sdcCADC, vdcXAUC, sdcXAUC
Addresses per chain can be:
1. Set via env: `CUSDC_ADDRESS_138`, `CUSDT_ADDRESS_138`, etc.
2. Filled by the indexer when tokens are discovered on-chain.
3. Updated in the canonical config after deployment.
Only tokens with a non-empty address for the requested chain appear in `/report/coingecko`, `/report/cmc`, and in the per-chain sections of `/report/all` and `/report/token-list`.
For the live **ALL Mainnet AUSDT -> cWAUSDT -> cAUSDT** corridor, that means:
- `cWAUSDT` appears on BSC, Polygon, Avalanche, and Celo
- `cAUSDT` appears on Chain 138 via the live deployed address
For the planned **ALL Mainnet gold** corridor, the report remains intentionally env-gated until the destination contracts are live:
- `cAXAUC` / `cAXAUT` only appear on chain `651940` when `CAXAUC_ADDRESS_651940` / `CAXAUT_ADDRESS_651940` are set
- `cWAXAUC` / `cWAXAUT` only appear on chain `651940` when `CWAXAUC_ADDRESS_651940` / `CWAXAUT_ADDRESS_651940` are set
- generic `cXAUC` / `cXAUT` do **not** appear on `651940`; those remain canonical Chain 138 symbols
## ERC-20 and DEX Compatibility
All canonical tokens are designed to be **ERC-20 compliant** and usable in DEX liquidity pools (see `smom-dbis-138/docs/tokenization/TOKEN_SCOPE_GRU.md`). Base and asset tokens are fully transferable; debt tokens can be deployed with optional transferability. The report API does not enforce on-chain checks; it reports whatever is in the canonical list and DB (addresses, market data, pools).
## 6. Cross-Chain Report — `GET /api/v1/report/cross-chain`
Returns cross-chain liquidity pools, bridge volume by lane, and atomic swap volume for Chain 138 and ALL Mainnet (651940). Covers CCIP (WETH9/WETH10), Alltra (138↔651940), Trustless (Lockbox), and Universal CCIP Bridge.
**Example:**
```bash
curl "http://localhost:3000/api/v1/report/cross-chain?chainId=138"
```
**Response shape:**
- `crossChainPools`: Array of `{ type, sourceChainId, destChainId, destChainName, bridgeAddress, tokenSymbol, bridgeType, isActive }`
- `volumeByLane`: Array of `{ sourceChainId, destChainId, destChainName, bridgeType, tokenSymbol, volume24hWei, volume7dWei, volume30dWei, txCount24h, txCount7d, txCount30d }`
- `atomicSwapVolume24h`: Total atomic swap volume (swap-then-bridge) in last 24h
- `bridgeVolume24hTotal`: Total bridge volume in last 24h
- `events`: Raw cross-chain events (limited to 500)
**Use for:** CMC/CoinGecko submission alongside single-chain reports. Include as `crossChain` attachment or reference URL when platforms support custom chain data.
**Note:** `/report/coingecko` and `/report/cmc` now include a `crossChain` field when cross-chain data is available.
## CMC / CoinGecko Listing Checklist
1. **Deploy and index:** Ensure tokens are deployed and the indexer has run so DB has addresses and (if applicable) market/pool data.
2. **Set addresses:** Configure canonical addresses via env or config so `/report/coingecko` and `/report/cmc` include all desired tokens.
3. **Export:** Use `GET /api/v1/report/coingecko` and `GET /api/v1/report/cmc` to obtain the payload for submission or sync.
4. **Submit:** Use each platforms official process (e.g. CoinGecko “Submit coin”, CMC DEX/listing forms) and attach or map the exported data as required.
5. **Ongoing:** Re-export periodically or run a scheduled job that pushes liquidity/volume to CMC/CoinGecko if they provide an API for custom chains.
## Related
- **GRU M1 listing prep (dry-runs, dominance simulation, peg stress-tests):** `../../../../docs/gru-m1/README.md`
- **Token scope (base, W, asset, debt):** `smom-dbis-138/docs/tokenization/TOKEN_SCOPE_GRU.md`
- **CoinGecko submission (cUSDC/cUSDT):** `docs/04-configuration/coingecko/COINGECKO_SUBMISSION_GUIDE.md`
- **Token Aggregation API:** `README.md` and `GET /api/v1/tokens`, `GET /api/v1/tokens/:address`, `GET /api/v1/pools/:poolAddress`