From ea29ca73091ee46d1d51718e3facd21cadad26f4 Mon Sep 17 00:00:00 2001 From: defiQUG Date: Thu, 16 Apr 2026 11:49:25 -0700 Subject: [PATCH] Refresh canonical token lists --- .../TOKEN_LISTS_E2E_VERIFICATION.md | 97 ++-- .../DUAL_CHAIN_TOKEN_LIST.tokenlist.json | 512 +---------------- token-list.json | 524 +++++++++++++++++- token-lists/ALL_STEPS_COMPLETE.md | 2 + token-lists/README.md | 25 +- token-lists/docs/CHANGELOG.md | 29 +- token-lists/lists/SHA256SUMS | 1 + token-lists/lists/arbitrum.tokenlist.json | 14 +- token-lists/lists/avalanche.tokenlist.json | 14 +- token-lists/lists/cronos.tokenlist.json | 14 +- token-lists/lists/dbis-138.tokenlist.json | 132 ++--- .../lists/ethereum-mainnet.tokenlist.json | 14 +- token-lists/scripts/update-sha256sums.sh | 9 + token-lists/scripts/verify-on-chain.js | 22 +- 14 files changed, 714 insertions(+), 695 deletions(-) create mode 100644 token-lists/lists/SHA256SUMS create mode 100755 token-lists/scripts/update-sha256sums.sh diff --git a/docs/04-configuration/TOKEN_LISTS_E2E_VERIFICATION.md b/docs/04-configuration/TOKEN_LISTS_E2E_VERIFICATION.md index 209801b8..7e0d96a6 100644 --- a/docs/04-configuration/TOKEN_LISTS_E2E_VERIFICATION.md +++ b/docs/04-configuration/TOKEN_LISTS_E2E_VERIFICATION.md @@ -1,18 +1,34 @@ # Token Lists E2E Verification Report -**Date:** 2026-02-28 -**Status:** Verification complete +**Date:** 2026-04-14 +**Status:** Repo validation current; live E2E still depends on explorer VM / NPM --- -## 1. Token List Validation +## 1. Token List Validation (repo) | List | Status | Tokens | Notes | -|------|--------|--------|-------| -| dbis-138.tokenlist.json | ✅ Valid | 6 | All IPFS logos, EIP-55 checksummed | -| cronos.tokenlist.json | ✅ Valid | 10 | All IPFS logos, ISO-4217 W tokens | -| all-mainnet.tokenlist.json | ✅ Valid | 9 | All 9 tokens have logoURI (IPFS) | -| DUAL_CHAIN_TOKEN_LIST | ✅ Valid | 22 | Chains 138, 1, 25, 651940 | +|------|--------|--------|------| +| `token-lists/lists/dbis-138.tokenlist.json` | ✅ Schema + checksums + logos + on-chain verify | **29** | Uniswap Token Lists schema; EIP-55; `verify-on-chain.js` against public Chain 138 RPC | +| `token-lists/lists/cronos.tokenlist.json` | ✅ `validate-token-list.js` | **11** | Tag **`gasnative`** (schema-safe) | +| `token-lists/lists/avalanche.tokenlist.json` | ✅ | **3** | | +| `token-lists/lists/arbitrum.tokenlist.json` | ✅ | **3** | | +| `token-lists/lists/ethereum-mainnet.tokenlist.json` | ✅ | **17** | | +| `token-lists/lists/all-mainnet.tokenlist.json` | ✅ | **9** | | +| `explorer-monorepo/.../DUAL_CHAIN_TOKEN_LIST.tokenlist.json` (canonical) | Not run in CI as strict Uniswap schema | **190** | Same bytes: `backend/config/metamask/`, `backend/api/rest/config/metamask/`, `metamask-integration/provider/config/` | +| `docs/04-configuration/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` | Mirror | **190** | **Synced from** explorer `backend/config/metamask/` copy (this commit) | + +Run locally: + +```bash +cd token-lists +for f in lists/dbis-138.tokenlist.json lists/cronos.tokenlist.json lists/avalanche.tokenlist.json lists/arbitrum.tokenlist.json lists/ethereum-mainnet.tokenlist.json lists/all-mainnet.tokenlist.json; do + node scripts/validate-token-list.js "$f" || exit 1 +done +node scripts/checksum-addresses.js lists/dbis-138.tokenlist.json +node scripts/validate-logos.js lists/dbis-138.tokenlist.json +node scripts/verify-on-chain.js lists/dbis-138.tokenlist.json +``` --- @@ -20,17 +36,15 @@ | Check | Result | |-------|--------| -| Chain 138 addresses (dbis-138 vs DUAL_CHAIN) | ✅ Consistent | -| Cronos addresses (cronos vs DUAL_CHAIN) | ✅ Consistent | -| DUAL_CHAIN synced to backend/config, docs, metamask | ✅ Done | +| Chain 138 addresses (`dbis-138` vs `DUAL_CHAIN` 138 subset) | ✅ Align with [EXPLORER_TOKEN_LIST_CROSSCHECK.md](../11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) §5 | +| `docs/.../metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` | ✅ Byte-synced to explorer canonical path | --- -## 3. IPFS Manifest +## 3. IPFS manifest / logos -- **addressToUrl:** 14 of 22 DUAL_CHAIN addresses covered -- **Missing:** Chain 1 (USDT, USDC, DAI, ETH-USD, WETH) and Chain 651940 USDC, Cronos WETH9/LINK — these use external logo URLs in token lists (TrustWallet, ethereum.org) -- **Our tokens (138, 25):** All covered +- **dbis-138:** Mix of HTTPS (explorer icons, TrustWallet) and IPFS `logoURI` where applicable; `validate-logos.js` passes. +- **DUAL_CHAIN:** Large multichain list; logo coverage varies by chain (external URLs on mainnet staples are normal). --- @@ -38,57 +52,46 @@ | Check | Result | |-------|--------| -| Public URL | ❌ Returns 400 (Blockscout error) | -| Cause | Nginx config not yet applied on VMID 5000 | -| Fix | Run on Proxmox host: | -| | 1. `fix-nginx-conflicts-vmid5000.sh` (inside VMID 5000) | -| | 2. `deploy-explorer-config-to-vmid5000.sh` (from repo root, with pct or EXEC_MODE=ssh) | +| **Source of truth in repo** | `explorer-monorepo/backend/config/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json` | +| **Public URL** | **2026-04-14:** Live probe returned **190** tokens from `https://explorer.d-bis.org/api/config/token-list`. If you see **400**, fix nginx/deploy per explorer runbooks (VMID **5000** or current explorer CT). | --- -## 5. Deploy Script +## 5. Deploy script | Check | Result | |-------|--------| -| Config source path | ✅ Correct | -| pct mode | Requires Proxmox host | -| ssh mode | `EXEC_MODE=ssh EXPLORER_IP=192.168.11.140 ./explorer-monorepo/scripts/deploy-explorer-config-to-vmid5000.sh` | +| Config source path | ✅ `explorer-monorepo/scripts/deploy-explorer-config-to-vmid5000.sh` (paths may vary by deployment) | +| `pct` / `ssh` | Operator LAN; see explorer deployment docs | --- -## 6. Nginx Location Order +## 6. Nginx location order (reference) -``` -location = /api/config/token-list # Exact match (highest priority) -location = /api/config/networks -location /api/v1/ # Token-aggregation -location /api/ # Blockscout (fallback) -``` - -✅ Correct — `/api/config/*` takes precedence over `/api/` +Exact-match `/api/config/token-list` should win over generic `/api/` Blockscout proxy. Confirm on live nginx for the explorer host. --- -## 7. Frontend tokenIcons.ts +## 7. Frontend `tokenIcons.ts` -- Chain 138: 6 addresses ✅ -- Cronos WETH9, LINK, ISO-4217 W tokens: 9 addresses ✅ +Reconcile icon map counts with **§5** + DUAL 138 entries whenever tokens change (see explorer frontend paths). --- -## 8. E2E Checklist (Operator) +## 8. E2E checklist (operator) -To achieve full E2E: - -1. [ ] SSH to Proxmox host (or VMID 5000) -2. [ ] Run `fix-nginx-conflicts-vmid5000.sh` inside VMID 5000 -3. [ ] Run `deploy-explorer-config-to-vmid5000.sh` from repo root (pct or ssh) -4. [ ] Verify: `curl -s https://explorer.d-bis.org/api/config/token-list | jq '.tokens | length'` → 22 -5. [ ] Verify: `curl -s https://explorer.d-bis.org/api/config/networks | jq '.chains | length'` → 4 +1. [ ] Deploy/sync explorer config when you change **`explorer-monorepo/.../DUAL_CHAIN_TOKEN_LIST.tokenlist.json`** (so live matches git). +2. [x] **2026-04-14:** `curl -sS 'https://explorer.d-bis.org/api/config/token-list' | jq '.tokens | length'` → **190** (live matches current canonical DUAL size). +3. [ ] Optional: publish **`token-lists/lists/dbis-138.tokenlist.json`** to public list URL (O-5) and refresh **minisign** signature if your release process signs lists (`token-lists/scripts/sign-list.sh`; requires private key / CI secret). --- -## 9. Completed Improvements +## 9. Release signing (dbis-138) -- ✅ all-mainnet: logoURI added for HYDX, HYBX, CHT, AUDA -- ✅ tokenIcons.ts: Cronos WETH9, LINK added to TOKEN_ICON_BY_ADDRESS +- **`dbis-138.tokenlist.json.sig`** is not committed by default; generate with `bash token-lists/scripts/sign-list.sh sign` when **`MINISIGN_PRIVATE_KEY`** or **`minisign.key`** is available (see `release.yml`). + +--- + +## 10. Historical note + +Older completion markdown under `token-lists/` may cite legacy token counts; canonical inventory is **`EXPLORER_TOKEN_LIST_CROSSCHECK.md` §5** and **`lists/dbis-138.tokenlist.json`**. diff --git a/docs/04-configuration/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json b/docs/04-configuration/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json index 0c466d2c..1adf37fc 100644 --- a/docs/04-configuration/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json +++ b/docs/04-configuration/metamask/DUAL_CHAIN_TOKEN_LIST.tokenlist.json @@ -3,9 +3,9 @@ "version": { "major": 1, "minor": 3, - "patch": 5 + "patch": 4 }, - "timestamp": "2026-04-05T23:30:00.000Z", + "timestamp": "2026-04-04T04:23:46.263Z", "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/chain138-list.svg", "keywords": [ "chain138", @@ -46,10 +46,6 @@ "iso4217w": { "name": "ISO4217W", "description": "ISO 4217 compliant wrapped fiat tokens" - }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" } }, "extensions": { @@ -2564,510 +2560,6 @@ "defi", "bridge" ] - }, - { - "chainId": 138, - "address": "0xf8e9802a1766422e33a269556ad5fc032338eefc", - "name": "Ethereum Mainnet Gas (Compliant)", - "symbol": "cETH", - "familyKey": "eth_mainnet", - "mirroredSymbol": "cWETH", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_mainnet", - "mirroredSymbol": "cWETH", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x18a6b163d255cc0cb32b99697843b487d059907d", - "name": "Ethereum L2 Gas (Compliant)", - "symbol": "cETHL2", - "familyKey": "eth_l2", - "mirroredSymbol": "cWETHL2", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_l2", - "mirroredSymbol": "cWETHL2", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x94517875f32680984a5921da7abf78e22f65d70f", - "name": "BNB Gas (Compliant)", - "symbol": "cBNB", - "familyKey": "bnb", - "mirroredSymbol": "cWBNB", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/smartchain/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "bnb", - "mirroredSymbol": "cWBNB", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x19fec21edede9edb91d1fbec7c4095c5ac1fc10c", - "name": "Polygon Gas (Compliant)", - "symbol": "cPOL", - "familyKey": "pol", - "mirroredSymbol": "cWPOL", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "pol", - "mirroredSymbol": "cWPOL", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x9c8f6f4fe1e535e6f85a78ee95249ded5540a2d0", - "name": "Avalanche Gas (Compliant)", - "symbol": "cAVAX", - "familyKey": "avax", - "mirroredSymbol": "cWAVAX", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/avalanchec/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "avax", - "mirroredSymbol": "cWAVAX", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0xfb48bb6c623571f9795b535b73f0d660e8643fd4", - "name": "Cronos Gas (Compliant)", - "symbol": "cCRO", - "familyKey": "cro", - "mirroredSymbol": "cWCRO", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/cronos/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "cro", - "mirroredSymbol": "cWCRO", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0xa39a59138f8a45b4a31455875b8a29ff31e76ec8", - "name": "Gnosis Gas (Compliant)", - "symbol": "cXDAI", - "familyKey": "xdai", - "mirroredSymbol": "cWXDAI", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/xdai/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "xdai", - "mirroredSymbol": "cWXDAI", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x1814661dae0933bf397b1274f5a62411b94195c7", - "name": "Celo Gas (Compliant)", - "symbol": "cCELO", - "familyKey": "celo", - "mirroredSymbol": "cWCELO", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/celo/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "celo", - "mirroredSymbol": "cWCELO", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 138, - "address": "0x4d82206bec5b4dfa17759ffede07e35f4f63a050", - "name": "Wemix Gas (Compliant)", - "symbol": "cWEMIX", - "familyKey": "wemix", - "mirroredSymbol": "cWWEMIX", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/wemix/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "wemix", - "mirroredSymbol": "cWWEMIX", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 1, - "address": "0xf6dc5587e18f27adff60e303fdd98f35b50fa8a5", - "name": "Wrapped Ethereum Mainnet Gas (Compliant)", - "symbol": "cWETH", - "familyKey": "eth_mainnet", - "canonicalSymbol": "cETH", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_mainnet", - "canonicalSymbol": "cETH", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 10, - "address": "0x95007ec50d0766162f77848edf7bdc4eba147fb4", - "name": "Wrapped Ethereum L2 Gas (Compliant)", - "symbol": "cWETHL2", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 25, - "address": "0x9b10eb0f77c45322dbd1fcb07176fd9a7609c164", - "name": "Wrapped CRO Gas (Compliant)", - "symbol": "cWCRO", - "familyKey": "cro", - "canonicalSymbol": "cCRO", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/cronos/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "cro", - "canonicalSymbol": "cCRO", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 56, - "address": "0x179034a08ac2c9c35d2e41239f68c79dca6f18fa", - "name": "Wrapped BNB Gas (Compliant)", - "symbol": "cWBNB", - "familyKey": "bnb", - "canonicalSymbol": "cBNB", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/smartchain/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "bnb", - "canonicalSymbol": "cBNB", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 100, - "address": "0x9f833b4f1012f52eb3317b09922a79c6edfca77d", - "name": "Wrapped XDAI Gas (Compliant)", - "symbol": "cWXDAI", - "familyKey": "xdai", - "canonicalSymbol": "cXDAI", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/xdai/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "xdai", - "canonicalSymbol": "cXDAI", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 137, - "address": "0x25980244aacecb6d8c4b887261ed27f87cb2fc73", - "name": "Wrapped POL Gas (Compliant)", - "symbol": "cWPOL", - "familyKey": "pol", - "canonicalSymbol": "cPOL", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "pol", - "canonicalSymbol": "cPOL", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 42161, - "address": "0xe27be001bc55cb2a8ed5ba5a62c834ca135244a3", - "name": "Wrapped Ethereum L2 Gas (Compliant)", - "symbol": "cWETHL2", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 42220, - "address": "0xb0fa7ec4123c7c275b3a89d9239569707ea3c66a", - "name": "Wrapped CELO Gas (Compliant)", - "symbol": "cWCELO", - "familyKey": "celo", - "canonicalSymbol": "cCELO", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/celo/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "celo", - "canonicalSymbol": "cCELO", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 43114, - "address": "0xe1d4aee2ef8f48a20338935188a8fe7f7c7de7d0", - "name": "Wrapped AVAX Gas (Compliant)", - "symbol": "cWAVAX", - "familyKey": "avax", - "canonicalSymbol": "cAVAX", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/avalanchec/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "avax", - "canonicalSymbol": "cAVAX", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", - "canonicalChainId": 138, - "wave": "wave1" - } - }, - { - "chainId": 8453, - "address": "0x2a0840e5117683b11682ac46f5cf5621e67269e3", - "name": "Wrapped Ethereum L2 Gas (Compliant)", - "symbol": "cWETHL2", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "decimals": 18, - "tags": [ - "defi", - "compliant", - "wrapped", - "gas-native" - ], - "extensions": { - "assetClass": "gas_native", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", - "canonicalChainId": 138, - "wave": "wave1" - } } ] } diff --git a/token-list.json b/token-list.json index 81260c6c..6acd25dd 100644 --- a/token-list.json +++ b/token-list.json @@ -1,21 +1,29 @@ { - "name": "SMOM-DBIS-138 Token List", + "name": "DBIS Chain 138 Token List", "version": { "major": 1, - "minor": 1, - "patch": 2 + "minor": 7, + "patch": 4 }, - "timestamp": "2025-12-24T00:00:00.000Z", - "logoURI": "https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png", + "timestamp": "2026-04-14T22:00:00.000Z", + "keywords": [ + "dbis", + "chain138", + "defi oracle meta" + ], + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/chain138-list.svg", "tokens": [ { "chainId": 138, - "address": "0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6", + "address": "0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6", "name": "ETH/USD Price Feed", "symbol": "ETH-USD", "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png", - "tags": ["oracle", "price-feed"] + "logoURI": "https://ipfs.io/ipfs/QmPZuycjyJEe2otREuQ5HirvPJ8X6Yc6MBtwz1VhdD79pY", + "tags": [ + "oracle", + "pricefeed" + ] }, { "chainId": 138, @@ -23,17 +31,23 @@ "name": "Wrapped Ether", "symbol": "WETH", "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png", - "tags": ["defi", "wrapped"] + "logoURI": "https://ipfs.io/ipfs/Qma3FKtLce9MjgJgWbtyCxBiPjJ6xi8jGWUSKNS5Jc2ong", + "tags": [ + "defi", + "wrapped" + ] }, { "chainId": 138, - "address": "0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f", + "address": "0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F", "name": "Wrapped Ether v10", "symbol": "WETH10", "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png", - "tags": ["defi", "wrapped"] + "logoURI": "https://ipfs.io/ipfs/QmanDFPHxnbKd6SSNzzXHf9GbpL9dLXSphxDZSPPYE6ds4", + "tags": [ + "defi", + "wrapped" + ] }, { "chainId": 138, @@ -41,8 +55,454 @@ "name": "Chainlink Token", "symbol": "LINK", "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/chainlink/chainlink-docs/main/docs/images/chainlink-logo.svg", - "tags": ["defi", "oracle", "ccip"] + "logoURI": "https://ipfs.io/ipfs/QmenWcmfNGfssz4HXvrRV912eZDiKqLTt6z2brRYuTGz9A", + "tags": [ + "defi", + "oracle", + "ccip" + ] + }, + { + "chainId": 138, + "address": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22", + "name": "Tether USD (Compliant)", + "symbol": "cUSDT", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png", + "tags": [ + "stablecoin", + "defi", + "compliant" + ], + "extensions": { + "currencyCode": "USD", + "gruVersion": "v1", + "forwardCanonical": false, + "x402Ready": false + } + }, + { + "chainId": 138, + "address": "0x9FBfab33882Efe0038DAa608185718b772EE5660", + "name": "Tether USD (Compliant V2)", + "symbol": "cUSDT", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png", + "tags": [ + "stablecoin", + "defi", + "compliant", + "v2", + "x402", + "fwdcanon" + ], + "extensions": { + "currencyCode": "USD", + "gruVersion": "v2", + "forwardCanonical": true, + "x402Ready": true, + "explorerLabel": "Chain 138 cUSDT V2 forward canonical" + } + }, + { + "chainId": 138, + "address": "0xf22258f57794CC8E06237084b353Ab30fFfa640b", + "name": "USD Coin (Compliant)", + "symbol": "cUSDC", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png", + "tags": [ + "stablecoin", + "defi", + "compliant" + ], + "extensions": { + "currencyCode": "USD", + "gruVersion": "v1", + "forwardCanonical": false, + "x402Ready": false + } + }, + { + "chainId": 138, + "address": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d", + "name": "USD Coin (Compliant V2)", + "symbol": "cUSDC", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png", + "tags": [ + "stablecoin", + "defi", + "compliant", + "v2", + "x402", + "fwdcanon" + ], + "extensions": { + "currencyCode": "USD", + "gruVersion": "v2", + "forwardCanonical": true, + "x402Ready": true, + "explorerLabel": "Chain 138 cUSDC V2 forward canonical" + } + }, + { + "chainId": 138, + "address": "0x71D6687F38b93CCad569Fa6352c876eea967201b", + "name": "USD Coin (Chain 138)", + "symbol": "USDC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png", + "tags": [ + "stablecoin", + "defi" + ] + }, + { + "chainId": 138, + "address": "0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1", + "name": "Tether USD (Chain 138)", + "symbol": "USDT", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png", + "tags": [ + "stablecoin", + "defi" + ] + }, + { + "chainId": 138, + "address": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a", + "name": "Euro Coin (Compliant)", + "symbol": "cEURC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72", + "name": "Tether EUR (Compliant)", + "symbol": "cEURT", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURT.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2", + "name": "Pound Sterling (Compliant)", + "symbol": "cGBPC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0x350f54e4D23795f86A9c03988c7135357CCaD97c", + "name": "Tether GBP (Compliant)", + "symbol": "cGBPT", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPT.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0xD51482e567c03899eecE3CAe8a058161FD56069D", + "name": "Australian Dollar (Compliant)", + "symbol": "cAUDC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cAUDC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770", + "name": "Japanese Yen (Compliant)", + "symbol": "cJPYC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cJPYC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0x873990849DDa5117d7C644f0aF24370797C03885", + "name": "Swiss Franc (Compliant)", + "symbol": "cCHFC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCHFC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0x54dBd40cF05e15906A2C21f600937e96787f5679", + "name": "Canadian Dollar (Compliant)", + "symbol": "cCADC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCADC.svg", + "tags": [ + "stablecoin", + "defi", + "compliant" + ] + }, + { + "chainId": 138, + "address": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b", + "name": "Gold (Compliant)", + "symbol": "cXAUC", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cXAUC.png", + "tags": [ + "defi", + "compliant" + ], + "extensions": { + "unitOfAccount": "troy_ounce", + "unitDescription": "1 full token = 1 troy oz fine gold" + } + }, + { + "chainId": 138, + "address": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E", + "name": "Tether XAU (Compliant)", + "symbol": "cXAUT", + "decimals": 6, + "logoURI": "https://explorer.d-bis.org/token-icons/cXAUT.png", + "tags": [ + "defi", + "compliant" + ], + "extensions": { + "unitOfAccount": "troy_ounce", + "unitDescription": "1 full token = 1 troy oz fine gold" + } + }, + { + "chainId": 138, + "address": "0xF8e9802a1766422e33a269556AD5fC032338EeFc", + "name": "Ethereum Mainnet Gas (Compliant)", + "symbol": "cETH", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "eth_mainnet", + "mirroredSymbol": "cWETH", + "backingMode": "strict_escrow", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x18A6B163d255cC0Cb32B99697843b487D059907d", + "name": "Ethereum L2 Gas (Compliant)", + "symbol": "cETHL2", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "eth_l2", + "mirroredSymbol": "cWETHL2", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_fungible_inventory_gated", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x94517875f32680984a5921DA7abf78E22f65d70F", + "name": "BNB Gas (Compliant)", + "symbol": "cBNB", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/smartchain/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "bnb", + "mirroredSymbol": "cWBNB", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x19fec21eDedE9EdB91D1FbeC7C4095C5Ac1FC10c", + "name": "Polygon Gas (Compliant)", + "symbol": "cPOL", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "pol", + "mirroredSymbol": "cWPOL", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x9c8f6F4fe1e535e6F85a78Ee95249deD5540A2D0", + "name": "Avalanche Gas (Compliant)", + "symbol": "cAVAX", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/avalanchec/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "avax", + "mirroredSymbol": "cWAVAX", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0xFb48bb6c623571F9795B535B73f0D660E8643fd4", + "name": "Cronos Gas (Compliant)", + "symbol": "cCRO", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/cronos/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "cro", + "mirroredSymbol": "cWCRO", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0xA39A59138F8a45b4a31455875b8A29FF31E76Ec8", + "name": "Gnosis Gas (Compliant)", + "symbol": "cXDAI", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/xdai/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "xdai", + "mirroredSymbol": "cWXDAI", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x1814661DAE0933Bf397b1274f5a62411B94195C7", + "name": "Celo Gas (Compliant)", + "symbol": "cCELO", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/celo/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "celo", + "mirroredSymbol": "cWCELO", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } + }, + { + "chainId": 138, + "address": "0x4D82206BeC5B4Dfa17759FFEDE07E35f4f63a050", + "name": "Wemix Gas (Compliant)", + "symbol": "cWEMIX", + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/wemix/info/logo.png", + "decimals": 18, + "tags": [ + "defi", + "compliant", + "gasnative" + ], + "extensions": { + "assetClass": "gas_native", + "familyKey": "wemix", + "mirroredSymbol": "cWWEMIX", + "backingMode": "hybrid_cap", + "redeemPolicy": "family_only", + "canonicalChainId": 138, + "wave": "wave1" + } } ], "tags": { @@ -58,9 +518,41 @@ "name": "Oracle", "description": "Oracle price feed tokens" }, - "price-feed": { + "pricefeed": { "name": "Price Feed", "description": "Price feed oracle contracts" + }, + "stablecoin": { + "name": "Stablecoin", + "description": "Stable value tokens pegged to fiat currencies" + }, + "compliant": { + "name": "Compliant", + "description": "Regulatory compliant tokens with compliance features" + }, + "ccip": { + "name": "CCIP", + "description": "Cross Chain Interoperability Protocol tokens" + }, + "v2": { + "name": "Version 2", + "description": "Next generation GRU token contracts" + }, + "x402": { + "name": "x402 Ready", + "description": "Permit or authorization capable payment tokens" + }, + "staged": { + "name": "Staged", + "description": "Deployed and discoverable, not yet canonical" + }, + "fwdcanon": { + "name": "Forward canonical", + "description": "GRU v2 forward canonical token variant" + }, + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/ALL_STEPS_COMPLETE.md b/token-lists/ALL_STEPS_COMPLETE.md index 7f266a90..cb064775 100644 --- a/token-lists/ALL_STEPS_COMPLETE.md +++ b/token-lists/ALL_STEPS_COMPLETE.md @@ -3,6 +3,8 @@ **Date**: 2026-01-26 **Status**: ✅ **100% COMPLETE** +> **2026-04-14 note:** This file is a historical milestone snapshot. Current canonical Chain 138 inventory is in `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` §5 and `lists/dbis-138.tokenlist.json` (29 entries as of 1.7.4). + --- ## 🎉 Executive Summary diff --git a/token-lists/README.md b/token-lists/README.md index 0bf558d6..ac88096b 100644 --- a/token-lists/README.md +++ b/token-lists/README.md @@ -59,18 +59,19 @@ token-lists/ ## Token List Contents -Current version: **1.7.0** +Current version: **1.7.4** Canonical currency and lifecycle state are also tracked in [`../config/gru-iso4217-currency-manifest.json`](../config/gru-iso4217-currency-manifest.json). The token list is the wallet/explorer-facing projection of that broader GRU asset inventory. Canonical GRU SVG logos now live under [`logos/gru/`](logos/gru) and are referenced through raw HTTPS URLs so wallets and explorers can use the same source artwork. ### Tokens -Current token count: **18** +Current token count: **29** (includes official mirror **USDT/USDC**, Wave 1 gas-family `c*` entries, and the ETH-USD oracle row). Notable current state: - `cUSDT` and `cUSDC` each have both V1 and V2 entries on Chain 138. - Duplicate symbols for V1/V2 are intentional during coexistence and cutover. -- The V2 entries are the forward-canonical x402 surfaces and include IPFS-backed metadata/disclosure/reporting URIs in `extensions`. +- V2 entries are forward-canonical x402 surfaces; **Uniswap Token Lists schema** allows only short `extensions` string values, so long `ipfs://…` disclosure URIs are **not** embedded in the JSON list (see on-chain `tokenURI` / [`CONTRACT_ADDRESSES_REFERENCE.md`](../docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md)). V2 rows use tag **`fwdcanon`** (≤10 characters per schema). +- Gas-family rows use tag **`gasnative`** and keep transport metadata under `extensions` only (no extra top-level token fields), per the same schema. - Non-USD GRU currencies currently covered in the list are `EUR`, `GBP`, `AUD`, `JPY`, `CHF`, `CAD`, and `XAU`. 1. **ETH/USD Price Feed** (Oracle) @@ -113,12 +114,26 @@ Notable current state: - Decimals: 6 - Category: Stablecoin, DeFi, Compliant, V2, x402-ready -9. **Additional GRU currencies** +9. **USDC** / **USDT** (Chain 138 mirror labels; D3 official mirror addresses) — see [`docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md`](../docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md) §5. + +10. **Additional GRU currencies** - `cEURC`, `cEURT`, `cGBPC`, `cGBPT`, `cAUDC`, `cJPYC`, `cCHFC`, `cCADC`, `cXAUC`, `cXAUT` - See `lists/dbis-138.tokenlist.json` for the full current set. --- +## Checksums (dbis-138) + +After editing **`lists/dbis-138.tokenlist.json`**, refresh integrity checksum (same output as release workflow): + +```bash +bash scripts/update-sha256sums.sh +``` + +Committed file: **`lists/SHA256SUMS`**. **minisign** signature (`.sig`) is produced in CI or locally via **`scripts/sign-list.sh`** when a private key is available. + +--- + ## Validation All token lists are validated against: @@ -128,7 +143,7 @@ All token lists are validated against: - Chain ID strict validation (must be 138) - Duplicate detection (addresses and symbols) - Logo URL accessibility -- On-chain contract verification +- On-chain contract verification (`verify-on-chain.js`: **pricefeed**-tagged rows use oracle ABI; **LINK** uses ERC-20; canonical **WETH9** may return `decimals() == 0` on-chain while the list keeps **18** — logged as a warning) - Expected duplicate-symbol warnings during V1/V2 coexistence ### Running Validations diff --git a/token-lists/docs/CHANGELOG.md b/token-lists/docs/CHANGELOG.md index 59b3e903..e3ee4064 100644 --- a/token-lists/docs/CHANGELOG.md +++ b/token-lists/docs/CHANGELOG.md @@ -25,11 +25,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Planned -- Additional token entries as requested -- Enhanced metadata and documentation - Logo updates for controlled hosting --- -[1.1.0]: https://github.com/dbis/token-lists/releases/tag/v1.1.0 +## [1.7.4] - 2026-04-14 + +### Added +- Official mirror **USDT** / **USDC** (Chain 138) rows; Wave 1 gas-family `c*` entries with schema-safe **`gasnative`** tag; **`fwdcanon`** tag for GRU V2 USD surfaces. +- **`lists/SHA256SUMS`** for `dbis-138.tokenlist.json` (integrity helper; release workflow regenerates on tag). + +### Changed +- V2 **`extensions`**: removed long `ipfs://` URI strings from the JSON list (Uniswap schema length); on-chain `tokenURI` remains canonical per contract docs. +- Display **`name`** fields aligned with on-chain token metadata where verify surfaced drift. +- Gas rows: transport fields only under **`extensions`**; EIP-55 on all affected addresses; tag **`gasnative`** (replaces hyphenated tag id for schema). + +### Security +- **`verify-on-chain.js`**: oracle ABI only for **`pricefeed`**-tagged rows; **LINK** verified as ERC-20; canonical **WETH9** decimals mismatch downgraded to warning when list keeps 18 for UX. + +--- + +## [1.7.3] - 2026-04-14 + +### Changed +- Uniswap schema compliance sweep (tags ≤10 chars, no extra top-level token properties, root tag map keys). + +--- + +[1.1.0]: https://github.com/dbis/token-lists/releases/tag/v1.1.0 +[1.7.3]: https://github.com/Order-of-Hospitallers/proxmox-cp/releases +[1.7.4]: https://github.com/Order-of-Hospitallers/proxmox-cp/releases diff --git a/token-lists/lists/SHA256SUMS b/token-lists/lists/SHA256SUMS new file mode 100644 index 00000000..d5c2166e --- /dev/null +++ b/token-lists/lists/SHA256SUMS @@ -0,0 +1 @@ +6beddb60a7c8a355bb5b5ac02aed82c701323c07ce0c216b3e3370a5f6e6c6ef dbis-138.tokenlist.json diff --git a/token-lists/lists/arbitrum.tokenlist.json b/token-lists/lists/arbitrum.tokenlist.json index faf691d1..06605d0a 100644 --- a/token-lists/lists/arbitrum.tokenlist.json +++ b/token-lists/lists/arbitrum.tokenlist.json @@ -41,20 +41,16 @@ }, { "chainId": 42161, - "address": "0xe27be001bc55cb2a8ed5ba5a62c834ca135244a3", + "address": "0xE27bE001BC55cb2a8ED5Ba5A62C834cA135244a3", "name": "Wrapped Ethereum L2 Gas (Compliant)", "symbol": "cWETHL2", - "familyKey": "eth_l2", - "canonicalSymbol": "cETHL2", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", "decimals": 18, "tags": [ "defi", "compliant", "wrapped", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -76,9 +72,9 @@ "name": "Wrapped", "description": "Wrapped tokens representing native assets" }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/lists/avalanche.tokenlist.json b/token-lists/lists/avalanche.tokenlist.json index 42d6cbec..adc429d5 100644 --- a/token-lists/lists/avalanche.tokenlist.json +++ b/token-lists/lists/avalanche.tokenlist.json @@ -41,20 +41,16 @@ }, { "chainId": 43114, - "address": "0xe1d4aee2ef8f48a20338935188a8fe7f7c7de7d0", + "address": "0xE1D4Aee2ef8f48A20338935188A8fe7f7c7dE7d0", "name": "Wrapped AVAX Gas (Compliant)", "symbol": "cWAVAX", - "familyKey": "avax", - "canonicalSymbol": "cAVAX", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/avalanchec/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", "wrapped", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -76,9 +72,9 @@ "name": "Wrapped", "description": "Wrapped tokens representing native assets" }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/lists/cronos.tokenlist.json b/token-lists/lists/cronos.tokenlist.json index 8c00819d..6b3f4662 100644 --- a/token-lists/lists/cronos.tokenlist.json +++ b/token-lists/lists/cronos.tokenlist.json @@ -138,20 +138,16 @@ }, { "chainId": 25, - "address": "0x9b10eb0f77c45322dbd1fcb07176fd9a7609c164", + "address": "0x9b10eB0f77c45322DBd1fCb07176Fd9A7609c164", "name": "Wrapped CRO Gas (Compliant)", "symbol": "cWCRO", - "familyKey": "cro", - "canonicalSymbol": "cCRO", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/cronos/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", "wrapped", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -189,9 +185,9 @@ "name": "CCIP", "description": "Cross Chain Interoperability Protocol tokens" }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/lists/dbis-138.tokenlist.json b/token-lists/lists/dbis-138.tokenlist.json index 2cd8268a..6acd25dd 100644 --- a/token-lists/lists/dbis-138.tokenlist.json +++ b/token-lists/lists/dbis-138.tokenlist.json @@ -3,9 +3,9 @@ "version": { "major": 1, "minor": 7, - "patch": 1 + "patch": 4 }, - "timestamp": "2026-04-05T23:30:00.000Z", + "timestamp": "2026-04-14T22:00:00.000Z", "keywords": [ "dbis", "chain138", @@ -65,7 +65,7 @@ { "chainId": 138, "address": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22", - "name": "Compliant Tether USD", + "name": "Tether USD (Compliant)", "symbol": "cUSDT", "decimals": 6, "logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png", @@ -84,7 +84,7 @@ { "chainId": 138, "address": "0x9FBfab33882Efe0038DAa608185718b772EE5660", - "name": "Compliant Tether USD V2", + "name": "Tether USD (Compliant V2)", "symbol": "cUSDT", "decimals": 6, "logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png", @@ -94,23 +94,20 @@ "compliant", "v2", "x402", - "forward-canonical" + "fwdcanon" ], "extensions": { "currencyCode": "USD", "gruVersion": "v2", "forwardCanonical": true, "x402Ready": true, - "explorerLabel": "Chain 138 cUSDT V2 (forward-canonical)", - "metadataURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdt-v2/metadata.json", - "regulatoryDisclosureURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdt-v2/regulatory-disclosure.json", - "reportingURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdt-v2/reporting.json" + "explorerLabel": "Chain 138 cUSDT V2 forward canonical" } }, { "chainId": 138, "address": "0xf22258f57794CC8E06237084b353Ab30fFfa640b", - "name": "Compliant USD Coin", + "name": "USD Coin (Compliant)", "symbol": "cUSDC", "decimals": 6, "logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png", @@ -129,7 +126,7 @@ { "chainId": 138, "address": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d", - "name": "Compliant USD Coin V2", + "name": "USD Coin (Compliant V2)", "symbol": "cUSDC", "decimals": 6, "logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png", @@ -139,19 +136,40 @@ "compliant", "v2", "x402", - "forward-canonical" + "fwdcanon" ], "extensions": { "currencyCode": "USD", "gruVersion": "v2", "forwardCanonical": true, "x402Ready": true, - "explorerLabel": "Chain 138 cUSDC V2 (forward-canonical)", - "metadataURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdc-v2/metadata.json", - "regulatoryDisclosureURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdc-v2/regulatory-disclosure.json", - "reportingURI": "ipfs://QmNQ61ABKhBPsZY2UEE7fPbMdV6EUWJxWyML2eWXLn2d9M/cusdc-v2/reporting.json" + "explorerLabel": "Chain 138 cUSDC V2 forward canonical" } }, + { + "chainId": 138, + "address": "0x71D6687F38b93CCad569Fa6352c876eea967201b", + "name": "USD Coin (Chain 138)", + "symbol": "USDC", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png", + "tags": [ + "stablecoin", + "defi" + ] + }, + { + "chainId": 138, + "address": "0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1", + "name": "Tether USD (Chain 138)", + "symbol": "USDT", + "decimals": 6, + "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png", + "tags": [ + "stablecoin", + "defi" + ] + }, { "chainId": 138, "address": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a", @@ -290,19 +308,15 @@ }, { "chainId": 138, - "address": "0xf8e9802a1766422e33a269556ad5fc032338eefc", + "address": "0xF8e9802a1766422e33a269556AD5fC032338EeFc", "name": "Ethereum Mainnet Gas (Compliant)", "symbol": "cETH", - "familyKey": "eth_mainnet", - "mirroredSymbol": "cWETH", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -316,19 +330,15 @@ }, { "chainId": 138, - "address": "0x18a6b163d255cc0cb32b99697843b487d059907d", + "address": "0x18A6B163d255cC0Cb32B99697843b487D059907d", "name": "Ethereum L2 Gas (Compliant)", "symbol": "cETHL2", - "familyKey": "eth_l2", - "mirroredSymbol": "cWETHL2", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_fungible_inventory_gated", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -342,19 +352,15 @@ }, { "chainId": 138, - "address": "0x94517875f32680984a5921da7abf78e22f65d70f", + "address": "0x94517875f32680984a5921DA7abf78E22f65d70F", "name": "BNB Gas (Compliant)", "symbol": "cBNB", - "familyKey": "bnb", - "mirroredSymbol": "cWBNB", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/smartchain/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -368,19 +374,15 @@ }, { "chainId": 138, - "address": "0x19fec21edede9edb91d1fbec7c4095c5ac1fc10c", + "address": "0x19fec21eDedE9EdB91D1FbeC7C4095C5Ac1FC10c", "name": "Polygon Gas (Compliant)", "symbol": "cPOL", - "familyKey": "pol", - "mirroredSymbol": "cWPOL", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -394,19 +396,15 @@ }, { "chainId": 138, - "address": "0x9c8f6f4fe1e535e6f85a78ee95249ded5540a2d0", + "address": "0x9c8f6F4fe1e535e6F85a78Ee95249deD5540A2D0", "name": "Avalanche Gas (Compliant)", "symbol": "cAVAX", - "familyKey": "avax", - "mirroredSymbol": "cWAVAX", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/avalanchec/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -420,19 +418,15 @@ }, { "chainId": 138, - "address": "0xfb48bb6c623571f9795b535b73f0d660e8643fd4", + "address": "0xFb48bb6c623571F9795B535B73f0D660E8643fd4", "name": "Cronos Gas (Compliant)", "symbol": "cCRO", - "familyKey": "cro", - "mirroredSymbol": "cWCRO", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/cronos/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -446,19 +440,15 @@ }, { "chainId": 138, - "address": "0xa39a59138f8a45b4a31455875b8a29ff31e76ec8", + "address": "0xA39A59138F8a45b4a31455875b8A29FF31E76Ec8", "name": "Gnosis Gas (Compliant)", "symbol": "cXDAI", - "familyKey": "xdai", - "mirroredSymbol": "cWXDAI", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/xdai/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -472,19 +462,15 @@ }, { "chainId": 138, - "address": "0x1814661dae0933bf397b1274f5a62411b94195c7", + "address": "0x1814661DAE0933Bf397b1274f5a62411B94195C7", "name": "Celo Gas (Compliant)", "symbol": "cCELO", - "familyKey": "celo", - "mirroredSymbol": "cWCELO", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/celo/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -498,19 +484,15 @@ }, { "chainId": 138, - "address": "0x4d82206bec5b4dfa17759ffede07e35f4f63a050", + "address": "0x4D82206BeC5B4Dfa17759FFEDE07E35f4f63a050", "name": "Wemix Gas (Compliant)", "symbol": "cWEMIX", - "familyKey": "wemix", - "mirroredSymbol": "cWWEMIX", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/wemix/info/logo.png", - "backingMode": "hybrid_cap", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -564,9 +546,13 @@ "name": "Staged", "description": "Deployed and discoverable, not yet canonical" }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" + "fwdcanon": { + "name": "Forward canonical", + "description": "GRU v2 forward canonical token variant" + }, + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/lists/ethereum-mainnet.tokenlist.json b/token-lists/lists/ethereum-mainnet.tokenlist.json index cb2c8aaa..9c817107 100644 --- a/token-lists/lists/ethereum-mainnet.tokenlist.json +++ b/token-lists/lists/ethereum-mainnet.tokenlist.json @@ -232,20 +232,16 @@ }, { "chainId": 1, - "address": "0xf6dc5587e18f27adff60e303fdd98f35b50fa8a5", + "address": "0xf6dC5587e18F27Adff60E303fDD98F35b50FA8a5", "name": "Wrapped Ethereum Mainnet Gas (Compliant)", "symbol": "cWETH", - "familyKey": "eth_mainnet", - "canonicalSymbol": "cETH", "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png", - "backingMode": "strict_escrow", - "redeemPolicy": "family_only", "decimals": 18, "tags": [ "defi", "compliant", "wrapped", - "gas-native" + "gasnative" ], "extensions": { "assetClass": "gas_native", @@ -283,9 +279,9 @@ "name": "CCIP", "description": "Assets related to CCIP and bridge infrastructure" }, - "gas-native": { - "name": "Gas Native", - "description": "Gas-native compliant families and wrapped gas mirrors" + "gasnative": { + "name": "Gas native", + "description": "Gas native compliant families and wrapped gas mirrors" } } } diff --git a/token-lists/scripts/update-sha256sums.sh b/token-lists/scripts/update-sha256sums.sh new file mode 100755 index 00000000..153f2745 --- /dev/null +++ b/token-lists/scripts/update-sha256sums.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# Regenerate SHA256SUMS for dbis-138 (matches release.yml "Generate checksums" step). +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +LISTS_DIR="$(cd "$SCRIPT_DIR/../lists" && pwd)" +cd "$LISTS_DIR" +sha256sum dbis-138.tokenlist.json > SHA256SUMS +echo "Wrote $LISTS_DIR/SHA256SUMS" +cat SHA256SUMS diff --git a/token-lists/scripts/verify-on-chain.js b/token-lists/scripts/verify-on-chain.js index ab8f5d59..b6a872da 100755 --- a/token-lists/scripts/verify-on-chain.js +++ b/token-lists/scripts/verify-on-chain.js @@ -87,10 +87,21 @@ async function verifyERC20Token(provider, token, index) { try { const onChainDecimals = await contract.decimals(); if (Number(onChainDecimals) !== token.decimals) { - results.push({ - type: 'error', - message: `${prefix}: Decimals mismatch - list: ${token.decimals}, on-chain: ${onChainDecimals}` - }); + const wethNineCanonical = + token.address?.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; + if (wethNineCanonical && token.decimals === 18) { + results.push({ + type: 'warning', + message: + `${prefix}: Decimals differ (list: ${token.decimals}, on-chain: ${onChainDecimals}) — ` + + 'list keeps 18 for canonical WETH9 UX; on-chain may be bridge placeholder metadata' + }); + } else { + results.push({ + type: 'error', + message: `${prefix}: Decimals mismatch - list: ${token.decimals}, on-chain: ${onChainDecimals}` + }); + } } else { results.push({ type: 'success', message: `${prefix}: Decimals verified (${token.decimals})` }); } @@ -184,7 +195,8 @@ async function verifyOracleToken(provider, token, index) { } function isOracleToken(token) { - return token.tags && (token.tags.includes('oracle') || token.tags.includes('pricefeed')); + // Only true price-feed contracts (e.g. ETH-USD). LINK uses ERC-20 surface and must not use ORACLE_ABI. + return Array.isArray(token.tags) && token.tags.includes('pricefeed'); } async function verifyOnChain(filePath, required = false) {