# Explorer Token List Cross-Check **Last Updated:** 2026-03-04 **Purpose:** Cross-check the token list shown at [https://explorer.d-bis.org/tokens](https://explorer.d-bis.org/tokens) against repo token lists, canonical addresses, and CONTRACT_ADDRESSES_REFERENCE. --- ## 1. Where the Explorer Gets Its Token List | Source | Used for | API / file | |--------|----------|------------| | **Blockscout API** | The **Tokens** tab on the Explorer (`/tokens`) | `GET https://explorer.d-bis.org/api/v2/tokens?page=1&page_size=100` | | **Embedded token list (MetaMask)** | Wallet “token list” URL for Chain 138 / multi-chain | Explorer backend `GET /api/config/token-list` → `explorer-monorepo/backend/config/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` | The **Tokens** page content is **not** from the repo’s static token list files. It is **live from Blockscout**: whatever Blockscout has indexed on-chain (ERC-20 contracts) for Chain 138. --- ## 2. Blockscout Token List (Live as of 2026-02-27) Fetched from `https://explorer.d-bis.org/api/v2/tokens?page=1&page_size=100`: | Address | Symbol | Name | Decimals | Match to repo canonical? | |---------|--------|------|----------|---------------------------| | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | *(null)* | *(null)* | 0 | ✅ WETH9 — **metadata missing** (name/symbol/decimals not set in response; on-chain may differ) | | `0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03` | LINK | Chainlink Token | 18 | ✅ Canonical LINK | | `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | cUSDT | Tether USD (Compliant) | 6 | ✅ Canonical cUSDT | | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | cUSDC | USD Coin (Compliant) | 6 | ✅ Canonical cUSDC | | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F` | WETH10 | Wrapped Ether v10 | 18 | ✅ Canonical WETH10 | | `0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | cEURC | Euro Coin (Compliant) | 6 | ✅ Canonical cEURC | | `0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | cEURT | Tether EUR (Compliant) | 6 | ✅ Canonical cEURT | | `0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | cGBPC | Pound Sterling (Compliant) | 6 | ✅ Canonical cGBPC | | `0x350f54e4D23795f86A9c03988c7135357CCaD97c` | cGBPT | Tether GBP (Compliant) | 6 | ✅ Canonical cGBPT | | `0xD51482e567c03899eecE3CAe8a058161FD56069D` | cAUDC | Australian Dollar (Compliant) | 6 | ✅ Canonical cAUDC | | `0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | cJPYC | Japanese Yen (Compliant) | 6 | ✅ Canonical cJPYC | | `0x873990849DDa5117d7C644f0aF24370797C03885` | cCHFC | Swiss Franc (Compliant) | 6 | ✅ Canonical cCHFC | | `0x54dBd40cF05e15906A2C21f600937e96787f5679` | cCADC | Canadian Dollar (Compliant) | 6 | ✅ Canonical cCADC | | `0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | cXAUC | Gold (Compliant) | 6 | ✅ Canonical cXAUC | | `0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | cXAUT | Tether XAU (Compliant) | 6 | ✅ Canonical cXAUT | **Additional contracts returned by Blockscout (same symbol, different addresses):** | Address | Symbol | Note | |---------|--------|------| | `0x362E9a45Ef6e554760f9671938235Cbc9b6E80Ed` | LINK | Non-canonical; likely test/deploy clone | | `0xC158b6cD3A3088C52F797D41f5Aa02825361629e` | LINK | Non-canonical; likely test/deploy clone | | `0x36927A5D9896CD6323cfEca1060A9aE932b05B05` | cUSDT | Non-canonical | | `0xFe6023265F3893C4cc98CE5Fe7ACBd79DB9cbB2D` | cUSDT | Non-canonical | | `0x044032f30393c60138445061c941e2FB15fb0af2` | cUSDC | Non-canonical | | `0x98E6aF252C55020d99A32F46B541d9A95987Cd0e` | cUSDC | Non-canonical | These extra addresses are on-chain ERC-20 contracts that Blockscout indexes; they are **not** in the repo’s canonical token list and may be legacy/test deployments. ### 2.1 WETH9 metadata quirk (confirmed live 2026-03) The Explorer’s Blockscout endpoint returns **WETH9 at `0xC02a…` with `name=null`, `symbol=null`, `decimals="0"`**, while other tokens (cUSDT, cUSDC, WETH10) return correct metadata. The **address is correct by design**: Chain 138’s WETH9 is deployed at the same canonical Ethereum mainnet address (genesis/pre-deploy). The only issue is **Blockscout’s metadata extraction** for that contract. **Minimal diff for WETH9:** | Address | Field | Blockscout `/api/v2/tokens` | Expected (tokenlist / override) | | ------------- | ---------- | --------------------------- | ------------------------------- | | `0xC02a…6Cc2` | `name` | `null` | "Wrapped Ether" | | `0xC02a…6Cc2` | `symbol` | `null` | "WETH" | | `0xC02a…6Cc2` | `decimals` | `"0"` | `18` | **Root cause (likely):** Either (1) the contract at `0xC02a…` on 138 does not expose `name()`/`symbol()`/`decimals()` in the way Blockscout expects (or proxy/etch/genesis quirks), or (2) Blockscout’s token metadata indexer failed to decode that address and cached null/0. **Actionable fixes (practical order):** 1. **Confirm WETH9 on-chain** — Call `name()`, `symbol()`, `decimals()` against Chain 138 RPC for `0xC02a…`. If any revert or return empty → fix deployment/etching or add a metadata wrapper. 2. **Fix Blockscout** — Force re-index/rescan token metadata for that address (Blockscout admin/indexer), or add a token metadata override for `0xC02a…` if supported. 3. **Keep Explorer UI override** — The Explorer SPA already patches WETH9 via `knownTokens` in `explorer-spa.js`; keep as stopgap until Blockscout returns correct metadata. To regenerate a full diff (missing_in_blockscout, missing_in_tokenlist, metadata_mismatches), run: `node token-lists/scripts/diff-blockscout-vs-tokenlist.js [--url URL] [--file path/to/blockscout-tokens.json]` and use `dbis-138.tokenlist.json` as the curated source. See §9. --- ## 3. Repo Token Lists vs Explorer (Blockscout) ### 3.1 `token-lists/lists/dbis-138.tokenlist.json` (Chain 138 only) | In dbis-138.tokenlist.json | In Blockscout /v2/tokens? | Note | |----------------------------|---------------------------|------| | ETH-USD (0x3304… — Oracle) | No (not an ERC-20 supply token) | Expected; Oracle is a contract, not a supply token in Blockscout list | | WETH (0xC02aa…) | Yes (name/symbol null, decimals 0) | **Explorer:** WETH9 metadata incomplete in API response | | WETH10 (0xf4BB2e…) | Yes | Match | | LINK (0xb7721d…) | Yes | Match | | cUSDT (0x93E6…) | Yes | Match | | cUSDC (0xf22258…) | Yes | Match | | cEURC (0x808596…) | Yes | Match | **Missing from dbis-138.tokenlist.json but present on Explorer (Blockscout):** cEURT, cGBPC, cGBPT, cAUDC, cJPYC, cCHFC, cCADC, cXAUC, cXAUT. So the **curated token list is missing 9 compliant tokens** that exist on-chain and appear on the Explorer. ### 3.2 `explorer-monorepo/backend/config/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` Chain 138 entries: same 7 as dbis-138 (ETH-USD, WETH, WETH10, LINK, cUSDT, cUSDC, cEURC). So **same gap**: the 9 additional compliant tokens (cEURT, cGBP*, cAUDC, cJPYC, cCHFC, cCADC, cXAUC, cXAUT) are **not** in the MetaMask token list. ### 3.3 `ADDRESS_MATRIX_AND_STATUS.md` / `CONTRACT_ADDRESSES_REFERENCE.md` All **canonical** Chain 138 token addresses (WETH, WETH10, LINK, cUSDT, cUSDC, cEURC, cEURT, cGBPC, cGBPT, cAUDC, cJPYC, cCHFC, cCADC, cXAUC, cXAUT) match the Blockscout “canonical” set above. The matrix marks cEURT as “not deployed” but Blockscout shows it at `0xdf4b71…` — **update doc:** cEURT is deployed. --- ## 4. Summary of Gaps and Actions | Item | Status | Recommendation | |------|--------|----------------| | **Explorer token list source** | Confirmed: Blockscout `GET /api/v2/tokens` | No change; document only. | | **WETH9 on Blockscout** | First token has `decimals: "0"`, `name`/`symbol`: null | Verify WETH9 contract metadata on-chain; fix in contract or in Blockscout indexing if needed. | | **dbis-138.tokenlist.json** | Done (2026-02-28) | Added cEURT, cGBPC, cGBPT, cAUDC, cJPYC, cCHFC, cCADC, cXAUC, cXAUT. | | **DUAL_CHAIN_TOKEN_LIST (MetaMask)** | Done (2026-02-28) | Added same 9 tokens to backend and api/rest copies. | | **ADDRESS_MATRIX / docs** | Done | cEURT and all 16 tokens in §1.1; TransactionMirror 0x7131…; summary updated. | | **Extra LINK/cUSDT/cUSDC on Blockscout** | 6 additional contracts | Non-canonical; use §5 canonical addresses only. | --- ## 5. Reference: Canonical Chain 138 Token Addresses (Single Source) Use this table to align token lists and docs with the Explorer (Blockscout) and `canonical-tokens.ts`: | Symbol | Address | Decimals | |--------|---------|----------| | WETH (WETH9) | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | 18 | | WETH10 | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | 18 | | LINK | `0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03` | 18 | | cUSDT | `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` | 6 | | cUSDC | `0xf22258f57794CC8E06237084b353Ab30fFfa640b` | 6 | | cEURC | `0x8085961F9cF02b4d800A3c6d386D31da4B34266a` | 6 | | cEURT | `0xdf4b71c61E5912712C1Bdd451416B9aC26949d72` | 6 | | cGBPC | `0x003960f16D9d34F2e98d62723B6721Fb92074aD2` | 6 | | cGBPT | `0x350f54e4D23795f86A9c03988c7135357CCaD97c` | 6 | | cAUDC | `0xD51482e567c03899eecE3CAe8a058161FD56069D` | 6 | | cJPYC | `0xEe269e1226a334182aace90056EE4ee5Cc8A6770` | 6 | | cCHFC | `0x873990849DDa5117d7C644f0aF24370797C03885` | 6 | | cCADC | `0x54dBd40cF05e15906A2C21f600937e96787f5679` | 6 | | cXAUC | `0x290E52a8819A4fbD0714E517225429aA2B70EC6b` | 6 | | cXAUT | `0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` | 6 | --- ## 6. Related Files | File | Role | |------|------| | `explorer-monorepo/frontend/public/explorer-spa.js` | Calls `BLOCKSCOUT_API + '/v2/tokens?page=1&page_size=100'` for the Tokens view | | `explorer-monorepo/backend/api/rest/config.go` | Serves embedded `DUAL_CHAIN_TOKEN_LIST.tokenlist.json` at `/api/config/token-list` | | `explorer-monorepo/backend/config/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` | Multi-chain token list (138, 1, 651940, 25) for MetaMask | | `token-lists/lists/dbis-138.tokenlist.json` | Chain 138 curated token list (Uniswap-style) | | `smom-dbis-138/services/token-aggregation/src/config/canonical-tokens.ts` | Canonical addresses and env overrides for indexing/reporting | | `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md` | Correlated address matrix; §1.1 includes all 16 tokens; TransactionMirror and summary updated | --- ## 7. Pool / allowlist cross-check (Chain 138) | Source | cUSDT/cUSDC pool | cUSDT/USDT pool | cUSDC/USDC pool | |--------|------------------|-----------------|----------------| | **ai-mcp-pmm-controller/config/allowlist-138.json** | `0x9fcB06Aa1FD5215DC0E91Fd098aeff4B62fEa5C8` | `0xa3Ee6091696B28e5497b6F491fA1e99047250c59` | `0x90bd9Bf18Daa26Af3e814ea224032d015db58Ea5` | | **LIQUIDITY_POOLS_MASTER_MAP.md** | Same | Same | Same | | **DEPLOYER_CONTRACTS_INVENTORY / ADDRESS_MATRIX** | Same | Same | Same | **Result:** Pool addresses are consistent across allowlist, docs, and deployer inventory. `cross-chain-pmm-lps/config/deployment-status.json` does not list Chain 138 pools (it tracks cW* edge pools on other chains); Chain 138 PMM state is in allowlist and docs. --- ## 8. On-chain verification: DODOPMMIntegration token addresses (2026-03-04) **Purpose:** Confirm the deployed PMM integration uses the same cUSDT/cUSDC as Explorer canonical and mint/add-liquidity scripts. | Check | Result | |-------|--------| | **Contract** | DODOPMMIntegration at `0x79cdbaFBaA0FdF9F55D26F360F54cddE5c743F7D` (Chain 138) | | **Method** | `eth_call` to `compliantUSDT()` and `compliantUSDC()` (RPC: `http://192.168.11.211:8545`) | | **compliantUSDT()** | `0x93e66202a11b1772e55407b32b44e5cd8eda7f22` — matches §5 canonical cUSDT | | **compliantUSDC()** | `0xf22258f57794cc8e06237084b353ab30fffa640b` — matches §5 canonical cUSDC | **Result:** Explorer canonical tokens, `mint-for-liquidity.sh` (and `.env`), and the deployed DODOPMMIntegration are aligned. Mint and add-liquidity use the correct contracts. Use §5 canonical addresses only; avoid non-canonical Blockscout addresses (§2). --- ## 9. Full diff script (Blockscout vs token list) To regenerate **missing_in_blockscout**, **missing_in_tokenlist**, and **metadata_mismatches** (and source-of-truth recommendations), run: ```bash # From repo root (or token-lists/) node token-lists/scripts/diff-blockscout-vs-tokenlist.js ``` Optional: - **`--url URL`** — Blockscout tokens API base URL (default: `https://explorer.d-bis.org/api/v2/tokens`). The script paginates until `next_page_params` is null. - **`--file path/to/blockscout-tokens.json`** — Use a saved snapshot instead of live fetch (e.g. when the Explorer is unreachable from the current host). Curated list used for comparison: **`token-lists/lists/dbis-138.tokenlist.json`** (Chain 138 only). ETH-USD (oracle) is expected to appear in `missing_in_blockscout` with note *Oracle; not ERC-20 supply token*. Output is JSON with: `missing_in_blockscout`, `missing_in_tokenlist`, `metadata_mismatches`, and `source_of_truth` (recommended source per field: address, symbol, name, decimals, logo).