# PR Additions Validation Report — Format and Content Checks **Last Updated:** 2026-02-28 **Purpose:** Double-check formatting and content for each PR addition before submission. --- ## 1. Token List (dbis-138.tokenlist.json) — tokenlists.org / Uniswap schema ### Schema requirements (from tokenlist.schema.json) | Field | Requirement | Our value | Status | |-------|--------------|-----------|--------| | **name** | string, 1–30 chars, pattern `^[\w ]+$` | "DBIS Chain 138 Token List" (24 chars) | ✅ | | **timestamp** | date-time format | "2026-02-16T00:00:00.000Z" | ✅ | | **version** | { major, minor, patch } | { 1, 3, 0 } | ✅ | | **tokens** | array, 1–10000 items | 6 tokens | ✅ | | **token.chainId** | integer, min 1 | 138 | ✅ | | **token.address** | checksummed 0x hex or Solana | Must be EIP-55 | ⚠️ Verify | | **token.decimals** | 0–255 | 6, 8, 18 | ✅ | | **token.name** | max 60 chars | All valid | ✅ | | **token.symbol** | max 20 chars, `^\S+$` | ETH-USD, WETH, etc. | ✅ | | **tags** (in tokens) | must exist in list-level tags | oracle, pricefeed, defi, wrapped, stablecoin, compliant, ccip | ✅ | | **logoURI** | format uri | https://... | ✅ | ### Issues to fix 1. **ETH/USD Price Feed** — Oracle contract at `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` is not a standard ERC20; tokenlists.org typically lists ERC20 tokens. Consider removing or confirming it's acceptable. 2. **Address checksums** — Run `cast to-checksum-address` for each address to ensure EIP-55. WETH10: CHAIN138_TOKEN_ADDRESSES has `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` (lowercase f); token list has `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F` (uppercase F). One is wrong. 3. **tokenMap** — Schema allows optional `tokenMap`; our list omits it. Optional, no change needed. ### Validation command ```bash cd /home/intlc/projects/token-lists && npm install && npx ajv validate -s src/tokenlist.schema.json -d /home/intlc/projects/proxmox/token-lists/lists/dbis-138.tokenlist.json ``` --- ## 2. Chainlist (eip155-138.json) — ethereum-lists/chains ### Schema requirements (chainSchema.json) | Field | Required | Our value | Status | |-------|----------|-----------|--------| | **name** | ✅ | "Defi Oracle Meta Mainnet" | ✅ | | **shortName** | ✅ | "dfio-meta-main" — pattern `^[A-Za-z0-9-_]{1,64}$` | ✅ | | **chain** | ✅ | "dfiometa" | ✅ | | **chainId** | ✅ | 138 | ✅ | | **networkId** | ✅ | 1 | ⚠️ Verify | | **rpc** | ✅ | array of strings | ✅ | | **faucets** | ✅ | [] | ✅ | | **infoURL** | ✅ | "https://d-bis.org" | ✅ | | **nativeCurrency** | ✅ | { name, symbol, decimals } | ✅ | | **icon** | ❌ | "defioraclemeta" | ⚠️ Requires icon file | ### Issues to fix 1. **networkId** — Currently `1`. Most EVM mainnets use `networkId === chainId`. Chain 138 may use networkId 138; verify from chain config. If wrong, change to `138`. 2. **icon** — Using `"icon": "defioraclemeta"` requires `_data/icons/defioraclemeta.json` to exist. Format: ```json [{"url":"ipfs://Qm...","width":1000,"height":1628,"format":"png"}] ``` The URL must be IPFS and retrievable via `ipfs get`. **Option:** Remove `icon` field to avoid needing the icon file (some chains omit it). 3. **explorers[].icon** — We don't use explorer icon; OK. 4. **Prettier** — Run `npx prettier --write _data/chains/eip155-138.json` before PR. ### Validation command ```bash cd /home/intlc/projects/chains cp /home/intlc/projects/proxmox/docs/04-configuration/pr-ready/eip155-138.json _data/chains/ ./gradlew run npx prettier --write _data/chains/eip155-138.json ``` --- ## 3. Trust Wallet (trust-wallet-registry-chain138.json) — wallet-core ### Registry format (from registry-fields.md) | Field | Requirement | Our value | Status | |-------|--------------|-----------|--------| | **id** | lowercase, never change | "dfiometa" | ✅ | | **name** | readable | "Defi Oracle Meta Mainnet" | ✅ | | **coinId** | 10000000 + chainId for EVM clones | 10000138 | ✅ | | **symbol** | native coin | "ETH" | ✅ | | **decimals** | 18 | 18 | ✅ | | **blockchain** | "Ethereum" for EVM | "Ethereum" | ✅ | | **derivation** | path m/44'/60'/0'/0/0 | ✅ | ✅ | | **chainId** | string | "138" | ✅ | | **explorer.sampleTx** | Real tx hash for URL validation | "" | ❌ **MUST FIX** | | **explorer.sampleAccount** | Real address for URL validation | "" | ❌ **MUST FIX** | ### Issues to fix 1. **sampleTx** — Must be a real transaction hash from Chain 138. Get from https://explorer.d-bis.org (any recent tx). 2. **sampleAccount** — Must be a real address. Use any address that has had activity. From registry-fields.md: *"Note that the sample values should include existing IDs, so that the resulting full URL is valid."* ### How to get sample values ```bash # From explorer or RPC curl -s "https://explorer.d-bis.org/api/v2/transactions" | jq '.items[0].hash' curl -s "https://explorer.d-bis.org/api/v2/addresses/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" | jq '.hash' # Or use a known address: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 (WETH) ``` --- ## 4. DefiLlama-Adapters — Protocol TVL ### Not a token list DefiLlama adapters return TVL (total value locked), not token lists. Each protocol (e.g. DODO) has an `index.js` exporting `tvl(api)` per chain. ### Chain 138 support - DefiLlama uses chain keys: `ethereum`, `bsc`, `polygon`, `arbitrum`, etc. - Chain 138 is likely **not** a built-in chain key. Check `DefiLlama-Adapters/helper/chains.js` or similar. - If adding DODO on Chain 138, you must: 1. Confirm DefiLlama supports chain 138 (may need PR to add chain first) 2. Add config entry and tvl logic for the chain key they use (e.g. `chain138` or `defi-oracle-meta`) ### No PR-ready file We do not have a DefiLlama adapter file. Create one only after confirming chain support. --- ## Summary — Action Items | Addition | File | Status | |----------|------|--------| | **Token list** | dbis-138.tokenlist.json | ✅ WETH10 address fixed to checksum per CHAIN138_TOKEN_ADDRESSES | | **Chainlist** | eip155-138.json | ✅ networkId→138; icon removed (avoids needing _data/icons file) | | **Trust Wallet** | trust-wallet-registry-chain138.json | ✅ sampleTx and sampleAccount added (real tx from explorer) | | **DefiLlama** | N/A | No PR until chain 138 is supported; adapter structure differs | --- ## Verification commands (run before PR) ```bash # Token list (from token-lists repo) cd /home/intlc/projects/token-lists npm install # Validate schema (if ajv available) node -e " const schema = require('./src/tokenlist.schema.json'); const list = require('/home/intlc/projects/proxmox/token-lists/lists/dbis-138.tokenlist.json'); console.log('name length:', list.name.length, '(max 30)'); console.log('tokens:', list.tokens.length); list.tokens.forEach(t => console.log(t.symbol, t.address)); " # Chains cd /home/intlc/projects/chains cp ../../proxmox/docs/04-configuration/pr-ready/eip155-138.json _data/chains/ npx prettier --write _data/chains/eip155-138.json ./gradlew run # Trust Wallet - use registry id, not chainId # Add entry from pr-ready/trust-wallet-registry-chain138.json to registry.json first . "$HOME/.cargo/env" # if Rust installed via rustup cd /home/intlc/projects/wallet-core ./tools/new-evmchain dfiometa # use registry id, NOT 138 ```