Files
proxmox/docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md
defiQUG cc6d0705da
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: references, network, besu, CCIP, troubleshooting, archive, quick ref
Made-with: Cursor
2026-03-27 18:50:28 -07:00

13 KiB
Raw Permalink Blame History

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-listexplorer-monorepo/backend/config/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json

The Tokens page content is not from the repos 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 repos canonical token list and may be legacy/test deployments.

2.1 WETH9 metadata quirk (confirmed live 2026-03)

The Explorers 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 138s WETH9 is deployed at the same canonical Ethereum mainnet address (genesis/pre-deploy). The only issue is Blockscouts 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) Blockscouts 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

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.


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 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).