Made-with: Cursor
13 KiB
Explorer Token List Cross-Check
Last Updated: 2026-03-04
Purpose: Cross-check the token list shown at 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):
- Confirm WETH9 on-chain — Call
name(),symbol(),decimals()against Chain 138 RPC for0xC02a…. If any revert or return empty → fix deployment/etching or add a metadata wrapper. - Fix Blockscout — Force re-index/rescan token metadata for that address (Blockscout admin/indexer), or add a token metadata override for
0xC02a…if supported. - Keep Explorer UI override — The Explorer SPA already patches WETH9 via
knownTokensinexplorer-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 |
5.1 XAU tokens — unit of account (canonical)
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.
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 | 0xff8d3b8fDF7B112759F076B69f4271D4209C0849 |
0x6fc60DEDc92a2047062294488539992710b99D71 |
0x9f74Be42725f2Aa072a9E0CdCce0E7203C510263 |
| LIQUIDITY_POOLS_MASTER_MAP.md | Same | Same | Same |
| DEPLOYER_CONTRACTS_INVENTORY / ADDRESS_MATRIX | Same | Same | Same |
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.
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 0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d (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:
# 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 untilnext_page_paramsis 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).