**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? |
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.
**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:
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. |
**cXAUC** and **cXAUT** use ISO code `XAU` on `CompliantFiatToken`. **Policy:****1 full token = 1 troy ounce** of fine gold (`10^6` base units = 1 oz with 6 decimals). Minting, pools, and reporting must not treat these as dollar-stablecoin face value; USD notional is **spot price × troy ounces**. See `CompliantFiatToken.sol` NatSpec and `smom-dbis-138/docs/tokenization/TOKEN_SCOPE_GRU.md`.
**Result:** Pool addresses should treat `0x6fc60DEDc92a2047062294488539992710b99D71` as the intended funded canonical `cUSDT/USDT` pool. `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.
**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:
- **`--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).