From 8f201ae7d735d495dd71f8f5cbbfe05855d27931 Mon Sep 17 00:00:00 2001 From: JOY <5027251+JOY@users.noreply.github.com> Date: Wed, 29 Jul 2026 20:15:03 +0700 Subject: [PATCH 1/3] add DOS Chain token list --- .github/workflows/checks.yaml | 41 ++++++++++++++++++++++++++++++++ configs/token-icons/WDOS.svg | 4 ++++ configs/token-lists/README.md | 16 +++++++++++++ configs/token-lists/mainnet.json | 19 +++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 configs/token-icons/WDOS.svg create mode 100644 configs/token-lists/README.md create mode 100644 configs/token-lists/mainnet.json diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index eec54e61..9efe96b2 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -38,3 +38,44 @@ jobs: - name: Validate footer links config schema run: yarn validate:footer-links + + - name: Validate DOS Chain token list + shell: bash + run: | + set -euo pipefail + schema_url="https://raw.githubusercontent.com/Uniswap/token-lists/01705f94a307270b6c0fe5f55c7e66f7b92373cc/src/tokenlist.schema.json" + curl --fail --silent --show-error --location "${schema_url}" --output "${RUNNER_TEMP}/tokenlist.schema.json" + npx --yes ajv-cli@5.0.0 validate \ + --strict=false \ + -s "${RUNNER_TEMP}/tokenlist.schema.json" \ + -d configs/token-lists/mainnet.json + jq -e ' + (.tokens | length > 0) and + ([.tokens[] | + (.chainId == 7979) and + (.logoURI | test("^https://raw\\.githubusercontent\\.com/DOS/DOScan-Frontend-Configs/main/configs/token-icons/[A-Za-z0-9._-]+\\.(svg|png)$")) + ] | all) + ' configs/token-lists/mainnet.json >/dev/null + icon_prefix="https://raw.githubusercontent.com/DOS/DOScan-Frontend-Configs/main/" + while IFS= read -r icon_url; do + icon_path="${icon_url#${icon_prefix}}" + test -s "${icon_path}" + if [[ "${icon_path}" == *.svg ]]; then + python3 - "${icon_path}" <<'PY' + import sys + import xml.etree.ElementTree as ET + + root = ET.parse(sys.argv[1]).getroot() + for element in root.iter(): + tag = element.tag.rsplit("}", 1)[-1].lower() + if tag == "script": + raise SystemExit("SVG scripts are not allowed") + for attribute, value in element.attrib.items(): + name = attribute.rsplit("}", 1)[-1].lower() + if name.startswith("on"): + raise SystemExit("SVG event handlers are not allowed") + if name == "href" and value and not value.startswith("#"): + raise SystemExit("External SVG references are not allowed") + PY + fi + done < <(jq --raw-output ".tokens[].logoURI" configs/token-lists/mainnet.json) diff --git a/configs/token-icons/WDOS.svg b/configs/token-icons/WDOS.svg new file mode 100644 index 00000000..21d8abab --- /dev/null +++ b/configs/token-icons/WDOS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/configs/token-lists/README.md b/configs/token-lists/README.md new file mode 100644 index 00000000..ee4b4a19 --- /dev/null +++ b/configs/token-lists/README.md @@ -0,0 +1,16 @@ +# DOS Chain token lists + +This directory contains the public Uniswap Token Lists consumed by DOScan +backend deployments through `TOKEN_LIST_URL`. + +Blockscout does not ship per-chain token-list files. Each deployment owns and +hosts its list at a stable HTTP(S) URL. Token icons belong in +`configs/token-icons/` and each `logoURI` must use the canonical raw GitHub URL. + +## Adding a token + +1. Add a permanent SVG or PNG under `configs/token-icons/`. +2. Add the token to the matching network JSON file. +3. Use the checksummed contract address and exact chain ID. +4. Increment the list version and timestamp. +5. Confirm the contract and its on-chain metadata before merging. diff --git a/configs/token-lists/mainnet.json b/configs/token-lists/mainnet.json new file mode 100644 index 00000000..1b1b1f37 --- /dev/null +++ b/configs/token-lists/mainnet.json @@ -0,0 +1,19 @@ +{ + "name": "DOS Chain Token List", + "timestamp": "2026-07-29T00:00:00Z", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "tokens": [ + { + "chainId": 7979, + "address": "0x1111111111111111111111111111111111111111", + "name": "Wrapped DOS", + "symbol": "WDOS", + "decimals": 18, + "logoURI": "https://raw.githubusercontent.com/DOS/DOScan-Frontend-Configs/main/configs/token-icons/WDOS.svg" + } + ] +} From 8798b5c141ed372254bce9575e4fba10886fabb6 Mon Sep 17 00:00:00 2001 From: JOY <5027251+JOY@users.noreply.github.com> Date: Wed, 29 Jul 2026 20:21:25 +0700 Subject: [PATCH 2/3] fix duplicate MetaDOS author --- configs/marketplace/dos.json | 1 - 1 file changed, 1 deletion(-) diff --git a/configs/marketplace/dos.json b/configs/marketplace/dos.json index 42a35991..ce0bf4f2 100644 --- a/configs/marketplace/dos.json +++ b/configs/marketplace/dos.json @@ -106,7 +106,6 @@ "external": true }, { - "author": "MetaDOS", "id": "metados", "title": "MetaDOS", "logo": "https://raw.githubusercontent.com/DOSLabs/DOScan-Frontend-Configs/main/configs/marketplace-logos/metados.png", From cc365d4577a0c0217fb0fa5726cb70bf4d5b946c Mon Sep 17 00:00:00 2001 From: JOY <5027251+JOY@users.noreply.github.com> Date: Wed, 29 Jul 2026 20:25:46 +0700 Subject: [PATCH 3/3] fix DOS marketplace categories --- configs/marketplace/dos.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/marketplace/dos.json b/configs/marketplace/dos.json index ce0bf4f2..f39b2405 100644 --- a/configs/marketplace/dos.json +++ b/configs/marketplace/dos.json @@ -110,7 +110,7 @@ "title": "MetaDOS", "logo": "https://raw.githubusercontent.com/DOSLabs/DOScan-Frontend-Configs/main/configs/marketplace-logos/metados.png", "categories": [ - "Gaming" + "Games" ], "shortDescription": "Next-gen battle royale game using TIME-as-currency concept supporting up to 100 players.", "description": "Next-gen battle royale game using TIME-as-currency concept supporting up to 100 players.", @@ -129,7 +129,7 @@ "title": "Heroes & Empires", "logo": "https://raw.githubusercontent.com/DOSLabs/DOScan-Frontend-Configs/main/configs/marketplace-logos/he.png", "categories": [ - "Gaming" + "Games" ], "shortDescription": "Idle RPG combined with battle royale gameplay.", "site": "https://heroesempires.com",