diff --git a/.github/workflows/onpush.yaml b/.github/workflows/onpush.yaml index 2c7c72b6..a10d8055 100644 --- a/.github/workflows/onpush.yaml +++ b/.github/workflows/onpush.yaml @@ -6,9 +6,9 @@ jobs: verify-files: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up python - uses: actions/setup-python@v5 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.11.9' - name: Install dependencies @@ -16,7 +16,7 @@ jobs: python3 -m pip install --upgrade pip setuptools wheel pip3 install -r requirements.txt - name: Store python cache - uses: actions/cache@v4 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} diff --git a/.gitignore b/.gitignore index 2842cf36..712be8f1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ env/ .vscode .idea .token_query_config.json +.env .coingecko_cache global.db .DS_Store diff --git a/docs/automation.md b/docs/automation.md index 4ed9d20c..b21c787e 100644 --- a/docs/automation.md +++ b/docs/automation.md @@ -1,5 +1,51 @@ # Kraken asset automation workflow +## Multi-exchange missing-assets compiler + +For warning files containing multiple exchanges, use the cache-first compiler: + +```bash +.venv/bin/python tools/compile_missing_assets.py \ + --missing missing.txt \ + --version 41 \ + --global-db /path/to/rotkehlchen/data/global.db \ + --refresh +``` + +The compiler: + +- parses and deduplicates every supported exchange warning; +- excludes symbols ending in `UP` or `DOWN`; +- refreshes the large CoinGecko and CryptoCompare catalogues once, then reuses + them according to `--cache-max-age-hours`; +- checks both the global database and pending update SQL before generating rows; +- accepts unique exact CoinGecko symbol/name matches and leaves unsupported or + ambiguous matches unresolved; +- supports evidence-backed decisions in + `updates//asset_compilation/reviewed_overrides.json`; +- invokes the SQL generator per exchange and reconciles collection-main asset + mappings into SQL, JSON, and the root `mappings.csv`; +- backfills missing EVM `started` timestamps using Blockscout PRO when + configured, then chain explorers and batched archive-RPC lookup, with all + successful results stored in a persistent deployment cache; +- writes the full evidence manifest, resolved CSVs, ignored assets, and + unresolved assets under `updates//asset_compilation/`. + +Use `--resolve-only` to rebuild reports without changing SQL or mappings. Use +`--offline` for a fully cached rerun. If CryptoCompare requires authentication, +set `CRYPTOCOMPARE_API_KEY` and rerun with `--refresh`; until then, the manifest +records the missing authentication and CryptoCompare IDs remain null. + +For authenticated Blockscout deployment lookups, create an ignored `.env` file +at the repository root: + +```dotenv +BLOCKSCOUT_API_KEY=your-key +``` + +`tools/backfill_started_dates.py` reads this file automatically and never +writes the credential to generated output or the deployment cache. + This document describes all scripts used in this asset-mapping workflow, the order to run them, and expected outputs. ## Goal diff --git a/tests/test_generate_certain_sql_and_mappings.py b/tests/test_generate_certain_sql_and_mappings.py index 7de8f628..e415fac0 100644 --- a/tests/test_generate_certain_sql_and_mappings.py +++ b/tests/test_generate_certain_sql_and_mappings.py @@ -9,6 +9,7 @@ find_existing_identifier_by_chain_address, find_existing_identifier_by_coingecko, load_existing_evm_address_map, + load_collection_main_by_symbol, load_next_collection_id, merge_location_json_additions, parse_certain_rows, @@ -26,7 +27,7 @@ def test_parse_certain_rows_only_unique(tmp_path: Path) -> None: "CCC,2,ccc1|ccc2,C1|C2\n" ) - assert parse_certain_rows(csv_path) == [("AAA", "aaa-token")] + assert parse_certain_rows(csv_path) == [("AAA", "aaa-token", None, None)] def test_extract_tokens_from_coin_dedupes_and_maps_supported_chains() -> None: @@ -63,15 +64,17 @@ def test_choose_main_asset_prefers_ethereum() -> None: def test_token_sql_uses_started_timestamp() -> None: token = TokenRecord( - address="0xabc", + address="0x0000000000000000000000000000000000000abc", chain=Chain.ETHEREUM, decimals=18, name="Token", symbol="TOK", started=1700000000, ) - sql = token_sql(token, coin_id="token-id", insert_or_ignore=True) - assert ", NULL, NULL, 1700000000, NULL);" in sql + sql = token_sql(token, coin_id="token-id", cryptocompare_id="TOK", insert_or_ignore=True) + assert "'TOK', NULL, 1700000000, NULL);" in sql + assert "'token-id', 'TOK'" in sql + assert "0x0000000000000000000000000000000000000aBc" in sql def test_find_existing_identifier_by_chain_address(tmp_path: Path) -> None: @@ -140,6 +143,25 @@ def test_merge_location_json_additions_preserves_existing_and_dedupes() -> None: } +def test_merge_location_json_additions_replaces_same_location_symbol() -> None: + merged = merge_location_json_additions( + [{"asset": "old", "location": "kraken", "location_symbol": "AAA"}], + [{"asset": "new", "location": "kraken", "location_symbol": "AAA"}], + ) + + assert merged == [{"asset": "new", "location": "kraken", "location_symbol": "AAA"}] + + +def test_load_collection_main_by_symbol(tmp_path: Path) -> None: + path = tmp_path / "collections.sql" + path.write_text( + "INSERT INTO asset_collections(id, name, symbol, main_asset) " + "VALUES (1, 'Nesa', 'NES', 'eip155:56/erc20:0x123');\n" + ) + + assert load_collection_main_by_symbol(path) == {"NES": "eip155:56/erc20:0x123"} + + def test_load_next_collection_id_prefers_collections_sql(tmp_path: Path) -> None: collections_sql = tmp_path / "asset_collections_updates.sql" collections_sql.write_text( diff --git a/tools/backfill_started_dates.py b/tools/backfill_started_dates.py new file mode 100644 index 00000000..890a1574 --- /dev/null +++ b/tools/backfill_started_dates.py @@ -0,0 +1,416 @@ +#!/usr/bin/env python3 +"""Backfill missing EVM asset deployment timestamps in an updates SQL file. + +Explorer results are preferred when available. The keyless fallback finds the +first block containing contract code through batched archive-RPC binary search. +Successful timestamps are cached, making later runs deterministic and offline. +""" + +from __future__ import annotations + +import argparse +import json +import os +import re +import time +from collections import defaultdict +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +import requests + +EVM_ROW_PATTERN = re.compile( + r"evm_tokens\([^)]*\)\s+VALUES\('([^']+)',\s*'A',\s*(\d+),\s*'([^']+)'", + re.IGNORECASE, +) +STARTED_PATTERN = re.compile( + r"(common_asset_details\([^)]*\)\s+VALUES\('[^']+',\s*'[^']*',\s*[^,]*," + r"\s*[^,]*,\s*NULL,\s*)NULL(,\s*NULL\);)", + re.IGNORECASE, +) +ARCHIVE_RPC_URLS = { + 1: ["https://eth-mainnet.public.blastapi.io", "https://eth.blockrazor.xyz"], + 10: ["https://optimism-mainnet.public.blastapi.io", "https://mainnet.optimism.io"], + 56: ["https://bsc-mainnet.public.blastapi.io"], + 100: ["https://gnosis-mainnet.public.blastapi.io", "https://rpc.gnosischain.com"], + 137: ["https://polygon-mainnet.public.blastapi.io", "https://polygon.drpc.org"], + 146: ["https://rpc.soniclabs.com"], + 8453: ["https://base-mainnet.public.blastapi.io", "https://base.llamarpc.com"], + 42161: ["https://arbitrum-one.public.blastapi.io", "https://arb1.arbitrum.io/rpc"], + 43114: [ + "https://ava-mainnet.public.blastapi.io/ext/bc/C/rpc", + "https://api.avax.network/ext/bc/C/rpc", + ], +} +ROUTESCAN_CREATION_CHAINS = {43114} + + +@dataclass(frozen=True) +class MissingStarted: + identifier: str + chain_id: int + address: str + + @property + def cache_key(self) -> str: + return f"{self.chain_id}:{self.address.lower()}" + + +def parse_missing_started(sql_text: str) -> list[MissingStarted]: + rows: list[MissingStarted] = [] + for chunk in sql_text.split("\n*\n"): + if not STARTED_PATTERN.search(chunk): + continue + if match := EVM_ROW_PATTERN.search(chunk): + identifier, chain_id, address = match.groups() + rows.append(MissingStarted(identifier, int(chain_id), address)) + return rows + + +def load_cache(path: Path) -> dict[str, int]: + if not path.exists(): + return {} + data = json.loads(path.read_text()) + return {str(key): int(value) for key, value in data.items() if isinstance(value, int)} + + +def save_cache(path: Path, cache: dict[str, int]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_suffix(f"{path.suffix}.tmp") + temporary.write_text(json.dumps(dict(sorted(cache.items())), indent=2) + "\n") + temporary.replace(path) + + +def load_env_file(path: Path) -> None: + if not path.exists(): + return + for raw_line in path.read_text().splitlines(): + line = raw_line.strip() + if not line or line.startswith("#") or "=" not in line: + continue + key, value = line.split("=", 1) + os.environ.setdefault(key.strip(), value.strip().strip("'\"")) + + +def blockscout_pro_timestamps( + session: requests.Session, + chain_id: int, + rows: list[MissingStarted], + api_key: str, +) -> dict[str, int]: + found: dict[str, int] = {} + for row_chunk in chunked(rows, 10): + response = session.get( + "https://api.blockscout.com/v2/api", + params={ + "chain_id": chain_id, + "module": "contract", + "action": "getcontractcreation", + "contractaddresses": ",".join(row.address for row in row_chunk), + "apikey": api_key, + }, + timeout=60, + ) + response.raise_for_status() + payload = response.json() + result = payload.get("result") or [] + if not isinstance(result, list): + continue + by_address = { + str(item.get("contractAddress") or "").lower(): item + for item in result + if isinstance(item, dict) + } + for row in row_chunk: + item = by_address.get(row.address.lower()) + if not item: + continue + timestamp = item.get("timestamp") + if isinstance(timestamp, str) and timestamp.isdigit(): + found[row.cache_key] = int(timestamp) + elif isinstance(timestamp, int): + found[row.cache_key] = timestamp + return found + + +def routescan_creation_transactions( + session: requests.Session, + chain_id: int, + rows: list[MissingStarted], +) -> dict[str, str]: + if chain_id not in ROUTESCAN_CREATION_CHAINS: + return {} + found: dict[str, str] = {} + for row_chunk in chunked(rows, 10): + response = session.get( + f"https://api.routescan.io/v2/network/mainnet/evm/{chain_id}/etherscan/api", + params={ + "module": "contract", + "action": "getcontractcreation", + "contractaddresses": ",".join(row.address for row in row_chunk), + }, + timeout=60, + ) + response.raise_for_status() + result = response.json().get("result") or [] + by_address = { + str(item.get("contractAddress") or "").lower(): item + for item in result + if isinstance(item, dict) + } + for row in row_chunk: + item = by_address.get(row.address.lower()) + if item and isinstance(tx_hash := item.get("txHash"), str) and tx_hash: + found[row.cache_key] = tx_hash + return found + + +def rpc_batch( + session: requests.Session, + rpc_url: str, + calls: list[tuple[str, list[Any]]], + retries: int = 5, +) -> list[Any]: + payload = [ + {"jsonrpc": "2.0", "id": index, "method": method, "params": params} + for index, (method, params) in enumerate(calls) + ] + for attempt in range(retries): + try: + response = session.post(rpc_url, json=payload, timeout=60) + if response.status_code in {429, 500, 502, 503, 504}: + raise requests.HTTPError(response=response) + response.raise_for_status() + raw = response.json() + items = raw if isinstance(raw, list) else [raw] + by_id = {int(item["id"]): item for item in items if "id" in item} + results = [] + for index in range(len(calls)): + item = by_id.get(index, {}) + if error := item.get("error"): + raise RuntimeError(str(error)) + results.append(item.get("result")) + return results + except (requests.RequestException, RuntimeError, ValueError): + if attempt + 1 == retries: + raise + time.sleep(2 ** attempt) + raise RuntimeError(f"RPC batch failed: {rpc_url}") + + +def chunked(items: list[Any], size: int) -> list[list[Any]]: + return [items[index:index + size] for index in range(0, len(items), size)] + + +def discover_first_code_blocks( + session: requests.Session, + rpc_url: str, + rows: list[MissingStarted], + batch_size: int, +) -> dict[str, int]: + latest_raw = rpc_batch(session, rpc_url, [("eth_blockNumber", [])])[0] + latest_block = int(latest_raw, 16) + bounds = {row.cache_key: [0, latest_block] for row in rows} + by_key = {row.cache_key: row for row in rows} + + latest_calls = [("eth_getCode", [row.address, "latest"]) for row in rows] + latest_results: list[Any] = [] + for calls in chunked(latest_calls, batch_size): + latest_results.extend(rpc_batch(session, rpc_url, calls)) + active = { + row.cache_key + for row, code in zip(rows, latest_results, strict=True) + if isinstance(code, str) and code not in {"0x", "0x0", ""} + } + + while any(bounds[key][0] < bounds[key][1] for key in active): + pending = [key for key in active if bounds[key][0] < bounds[key][1]] + calls = [] + mids = [] + for key in pending: + low, high = bounds[key] + mid = (low + high) // 2 + calls.append(("eth_getCode", [by_key[key].address, hex(mid)])) + mids.append(mid) + results: list[Any] = [] + for call_chunk in chunked(calls, batch_size): + results.extend(rpc_batch(session, rpc_url, call_chunk)) + for key, mid, code in zip(pending, mids, results, strict=True): + if isinstance(code, str) and code not in {"0x", "0x0", ""}: + bounds[key][1] = mid + else: + bounds[key][0] = mid + 1 + return {key: bounds[key][0] for key in active} + + +def timestamps_for_blocks( + session: requests.Session, + rpc_url: str, + blocks: dict[str, int], + batch_size: int, +) -> dict[str, int]: + unique_blocks = sorted(set(blocks.values())) + calls = [("eth_getBlockByNumber", [hex(block), False]) for block in unique_blocks] + results: list[Any] = [] + for call_chunk in chunked(calls, batch_size): + results.extend(rpc_batch(session, rpc_url, call_chunk)) + block_timestamps = { + block: int(result["timestamp"], 16) + for block, result in zip(unique_blocks, results, strict=True) + if isinstance(result, dict) and result.get("timestamp") + } + return { + key: block_timestamps[block] + for key, block in blocks.items() + if block in block_timestamps + } + + +def timestamps_for_transactions( + session: requests.Session, + rpc_url: str, + transactions: dict[str, str], + batch_size: int, +) -> dict[str, int]: + items = list(transactions.items()) + calls = [("eth_getTransactionByHash", [tx_hash]) for _key, tx_hash in items] + results: list[Any] = [] + for call_chunk in chunked(calls, batch_size): + results.extend(rpc_batch(session, rpc_url, call_chunk)) + blocks = { + key: int(result["blockNumber"], 16) + for (key, _tx_hash), result in zip(items, results, strict=True) + if isinstance(result, dict) and result.get("blockNumber") + } + return timestamps_for_blocks(session, rpc_url, blocks, batch_size) + + +def discover_chain_timestamps( + session: requests.Session, + rows: list[MissingStarted], + batch_size: int, + blockscout_api_key: str | None, +) -> tuple[dict[str, int], str | None]: + chain_id = rows[0].chain_id + found: dict[str, int] = {} + if blockscout_api_key: + try: + found.update(blockscout_pro_timestamps( + session, + chain_id, + rows, + blockscout_api_key, + )) + except (requests.RequestException, ValueError): + pass + remaining = [row for row in rows if row.cache_key not in found] + if not remaining: + return found, None + try: + creation_transactions = routescan_creation_transactions(session, chain_id, remaining) + except (requests.RequestException, ValueError): + creation_transactions = {} + if creation_transactions: + for rpc_url in reversed(ARCHIVE_RPC_URLS.get(chain_id, [])): + try: + found.update(timestamps_for_transactions( + session, + rpc_url, + creation_transactions, + batch_size, + )) + break + except Exception: + continue + remaining = [row for row in remaining if row.cache_key not in found] + if not remaining: + return found, None + errors = [] + for rpc_url in ARCHIVE_RPC_URLS.get(chain_id, []): + try: + blocks = discover_first_code_blocks(session, rpc_url, remaining, batch_size) + found.update(timestamps_for_blocks(session, rpc_url, blocks, batch_size)) + return found, None + except Exception as exc: + errors.append(f"{rpc_url}: {exc}") + return {}, "; ".join(errors) or f"no archive RPC configured for chain {chain_id}" + + +def backfill_sql(sql_text: str, timestamps: dict[str, int]) -> tuple[str, int]: + updated_chunks = [] + updated_count = 0 + for chunk in sql_text.split("\n*\n"): + match = EVM_ROW_PATTERN.search(chunk) + if match and STARTED_PATTERN.search(chunk): + identifier, _chain_id, _address = match.groups() + if timestamp := timestamps.get(identifier): + chunk = STARTED_PATTERN.sub(rf"\g<1>{timestamp}\g<2>", chunk, count=1) + updated_count += 1 + updated_chunks.append(chunk) + return "\n*\n".join(updated_chunks), updated_count + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--updates-sql", required=True) + parser.add_argument("--cache", default=".asset_cache/deployment_timestamps.json") + parser.add_argument("--unresolved", default=None) + parser.add_argument("--batch-size", type=int, default=20) + parser.add_argument("--offline", action="store_true") + args = parser.parse_args() + + load_env_file(Path(__file__).resolve().parent.parent / ".env") + updates_sql = Path(args.updates_sql) + cache_path = Path(args.cache) + sql_text = updates_sql.read_text() + missing = parse_missing_started(sql_text) + cache = load_cache(cache_path) + session = requests.Session() + blockscout_api_key = os.getenv("BLOCKSCOUT_API_KEY") + errors: dict[int, str] = {} + + if not args.offline: + grouped: dict[int, list[MissingStarted]] = defaultdict(list) + for row in missing: + if row.cache_key not in cache: + grouped[row.chain_id].append(row) + for chain_id, rows in sorted(grouped.items()): + found, error = discover_chain_timestamps( + session, + rows, + args.batch_size, + blockscout_api_key, + ) + cache.update(found) + save_cache(cache_path, cache) + print(f"chain {chain_id}: resolved {len(found)}/{len(rows)}") + if error: + errors[chain_id] = error + + by_identifier = { + row.identifier: cache[row.cache_key] + for row in missing + if row.cache_key in cache + } + updated_text, updated_count = backfill_sql(sql_text, by_identifier) + updates_sql.write_text(updated_text) + + unresolved_rows = [row for row in missing if row.cache_key not in cache] + unresolved_path = ( + Path(args.unresolved) + if args.unresolved else + updates_sql.with_name("unresolved_started_dates.txt") + ) + unresolved_path.write_text("\n".join( + f"{row.chain_id},{row.address},{row.identifier}" + for row in unresolved_rows + ) + ("\n" if unresolved_rows else "")) + print(f"Backfilled started dates: {updated_count}") + print(f"Remaining unresolved: {len(unresolved_rows)}") + for chain_id, error in errors.items(): + print(f"[warn] chain {chain_id}: {error}") + + +if __name__ == "__main__": + main() diff --git a/tools/generate_certain_sql_and_mappings.py b/tools/generate_certain_sql_and_mappings.py index c9559969..0ee0b087 100644 --- a/tools/generate_certain_sql_and_mappings.py +++ b/tools/generate_certain_sql_and_mappings.py @@ -16,12 +16,14 @@ import os import re import sqlite3 +import time from dataclasses import dataclass from enum import Enum from pathlib import Path from typing import Any import requests +from eth_utils import is_address, to_checksum_address COINGECKO_BASE_URL = "https://api.coingecko.com/api/v3" @@ -31,7 +33,7 @@ ASSETS_QUERY = "{insert} assets(identifier, name, type) VALUES('{identifier}', '{name}', '{asset_type}'); " EVM_TOKENS_QUERY = "{insert} evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('{identifier}', 'A', {blockchain}, '{address}', {decimals}, {protocol}); " SOLANA_TOKENS_QUERY = "{insert} solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('{identifier}', 'D', '{address}', {decimals}, {protocol}); " -COMMON_ASSET_DETAILS_QUERY = "{insert} common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('{identifier}', '{symbol}', {coingecko}, NULL, NULL, {deployed_at}, NULL);" +COMMON_ASSET_DETAILS_QUERY = "{insert} common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('{identifier}', '{symbol}', {coingecko}, {cryptocompare}, NULL, {deployed_at}, NULL);" ASSET_COLLECTION_QUERY = "{insert} asset_collections(id, name, symbol, main_asset) VALUES ({collection}, '{name}', '{symbol}', '{main_asset}');" ASSET_MAPPING_QUERY = "{insert} multiasset_mappings(collection_id, asset) VALUES ({collection}, '{identifier}');" @@ -52,6 +54,10 @@ class Chain(Enum): CRONOS = 25 ZKSYNC = 324 LINEA = 59144 + MONAD = 143 + HYPERLIQUID = 999 + INK = 57073 + MEGAETH = 4326 COINGECKO_PLATFORM_TO_CHAIN = { @@ -69,6 +75,10 @@ class Chain(Enum): "cronos": Chain.CRONOS, "zksync": Chain.ZKSYNC, "linea": Chain.LINEA, + "monad": Chain.MONAD, + "hyperevm": Chain.HYPERLIQUID, + "ink": Chain.INK, + "megaeth": Chain.MEGAETH, "solana": Chain.SOLANA, } @@ -125,6 +135,10 @@ class Chain(Enum): Chain.SCROLL: "https://scroll.drpc.org", Chain.ZKSYNC: "https://1rpc.io/zksync2-era", Chain.LINEA: "https://rpc.linea.build", + Chain.MONAD: "https://rpc.monad.xyz", + Chain.HYPERLIQUID: "https://rpc.hyperliquid.xyz/evm", + Chain.INK: "https://rpc-gel.inkonchain.com", + Chain.MEGAETH: "https://mainnet.megaeth.com/rpc", } BLOCKSCOUT_API = { @@ -135,6 +149,7 @@ class Chain(Enum): Chain.GNOSIS: "https://gnosis.blockscout.com/api", Chain.POLYGON_POS: "https://polygon.blockscout.com/api", Chain.SCROLL: "https://scroll.blockscout.com/api", + Chain.MEGAETH: "https://megaeth.blockscout.com/api", } ETHERSCAN_CHAIN_ID = { @@ -161,6 +176,10 @@ class TokenRecord: symbol: str | None started: int | str | None = "NULL" + def __post_init__(self) -> None: + if self.chain != Chain.SOLANA and is_address(self.address): + self.address = to_checksum_address(self.address) + def identifier(self) -> str: if self.chain == Chain.SOLANA: return SOLANA_IDENTIFIER.format(address=self.address) @@ -244,28 +263,42 @@ def load_existing_location_json_additions(path: Path) -> list[dict[str, str]]: def merge_location_json_additions(existing: list[dict[str, str]], new: list[dict[str, str]]) -> list[dict[str, str]]: - merged: list[dict[str, str]] = [] - seen: set[tuple[str, str, str]] = set() + merged: dict[tuple[str, str], dict[str, str]] = {} for item in existing + new: - key = (item["asset"], item["location"], item["location_symbol"]) - if key in seen: - continue - seen.add(key) - merged.append(item) - return merged + key = (item["location"], item["location_symbol"]) + merged[key] = item + return list(merged.values()) + +def load_collection_main_by_symbol(path: Path) -> dict[str, str]: + if not path.exists(): + return {} + matches = re.findall( + r"asset_collections\(id,\s*name,\s*symbol,\s*main_asset\)\s+VALUES\s*\(\d+,\s*'[^']*',\s*'([^']+)',\s*'([^']+)'\)", + path.read_text(), + re.IGNORECASE, + ) + return {symbol.upper(): main_asset for symbol, main_asset in matches} -def parse_certain_rows(csv_path: Path) -> list[tuple[str, str]]: - rows: list[tuple[str, str]] = [] + +def parse_certain_rows(csv_path: Path) -> list[tuple[str, str | None, str | None, str | None]]: + rows: list[tuple[str, str | None, str | None, str | None]] = [] with csv_path.open("r", newline="") as f: reader = csv.DictReader(f) for row in reader: symbol = (row.get("symbol") or "").strip().upper() ids = (row.get("coingecko_ids") or "").strip() count = int((row.get("match_count") or "0").strip()) - if count != 1 or not ids or not symbol: + asset_identifier = (row.get("asset_identifier") or "").strip() or None + if count != 1 or (not ids and not asset_identifier) or not symbol: continue - rows.append((symbol, ids.split("|")[0])) + cryptocompare_id = (row.get("cryptocompare_id") or "").strip() or None + rows.append(( + symbol, + ids.split("|")[0] if ids else None, + cryptocompare_id, + asset_identifier, + )) return rows @@ -305,6 +338,24 @@ def find_existing_identifier_by_coingecko(db_path: Path | None, coin_id: str) -> def resolve_existing_identifier(db_path: Path | None, coin_id: str, tokens: list[TokenRecord]) -> str | None: + if db_path is not None and db_path.exists(): + try: + with sqlite3.connect(db_path) as conn: + row = conn.execute( + """ + SELECT ac.main_asset + FROM common_asset_details cad + JOIN multiasset_mappings mm ON mm.asset = cad.identifier + JOIN asset_collections ac ON ac.id = mm.collection_id + WHERE cad.coingecko = ? + LIMIT 1 + """, + (coin_id,), + ).fetchone() + if row: + return row[0] + except sqlite3.Error: + pass for token in tokens: identifier = find_existing_identifier_by_chain_address(db_path, token.chain, token.address) if identifier: @@ -320,9 +371,16 @@ def coingecko_get_json(endpoint: str, api_key: str | None = None) -> dict[str, A headers = {} if api_key: headers["x-cg-demo-api-key"] = api_key - r = requests.get(endpoint, headers=headers, timeout=30) - r.raise_for_status() - return r.json() + for attempt in range(6): + response = requests.get(endpoint, headers=headers, timeout=30) + if response.status_code not in {429, 500, 502, 503, 504}: + response.raise_for_status() + return response.json() + if attempt < 5: + retry_after = response.headers.get("Retry-After") + time.sleep(float(retry_after) if retry_after and retry_after.isdigit() else 2 ** attempt) + response.raise_for_status() + raise RuntimeError(f"Unable to fetch {endpoint}") def get_coin_data(coin_id: str, cache_dir: Path, fetch_missing: bool, api_key: str | None) -> dict[str, Any] | None: @@ -497,7 +555,12 @@ def choose_main_asset(tokens: list[TokenRecord]) -> TokenRecord: return tokens[0] -def token_sql(token: TokenRecord, coin_id: str, insert_or_ignore: bool) -> str: +def token_sql( + token: TokenRecord, + coin_id: str, + cryptocompare_id: str | None, + insert_or_ignore: bool, +) -> str: insert = insert_prefix(insert_or_ignore) identifier = token.identifier() decimals = token.decimals if token.decimals is not None else (9 if token.chain == Chain.SOLANA else 18) @@ -510,6 +573,7 @@ def token_sql(token: TokenRecord, coin_id: str, insert_or_ignore: bool) -> str: "asset_type": "Y" if token.chain == Chain.SOLANA else "C", "symbol": sql_escape(token.symbol), "coingecko": f"'{coin_id}'", + "cryptocompare": f"'{sql_escape(cryptocompare_id)}'" if cryptocompare_id else "NULL", "blockchain": token.chain.value, "address": token.address, "decimals": decimals, @@ -523,7 +587,13 @@ def token_sql(token: TokenRecord, coin_id: str, insert_or_ignore: bool) -> str: return sql -def placeholder_sql(symbol: str, coin_id: str, coin_name: str, insert_or_ignore: bool) -> str: +def placeholder_sql( + symbol: str, + coin_id: str, + cryptocompare_id: str | None, + coin_name: str, + insert_or_ignore: bool, +) -> str: insert = insert_prefix(insert_or_ignore) fmt = { "insert": insert, @@ -532,6 +602,7 @@ def placeholder_sql(symbol: str, coin_id: str, coin_name: str, insert_or_ignore: "asset_type": "W", "symbol": sql_escape(symbol), "coingecko": f"'{coin_id}'", + "cryptocompare": f"'{sql_escape(cryptocompare_id)}'" if cryptocompare_id else "NULL", "deployed_at": "NULL", } return ( @@ -644,6 +715,7 @@ def main() -> None: existing_evm_address_map = load_existing_evm_address_map(updates_sql) existing_location_rows = load_existing_location_rows(location_mappings_sql) existing_location_json_additions = load_existing_location_json_additions(location_mappings_json) + collection_main_by_symbol = load_collection_main_by_symbol(collections_sql) next_collection_id = load_next_collection_id( collections_sql, args.collection_start, @@ -661,7 +733,26 @@ def main() -> None: inserted = 0 skipped = 0 - for symbol, coin_id in rows: + db_char = LOCATION_DB_CHAR[location_key] + direct_rows = (row for row in rows if row[3] is not None) + for symbol, _coin_id, _cryptocompare_id, direct_identifier in direct_rows: + assert direct_identifier is not None + row_key = (db_char, symbol, direct_identifier) + if row_key not in existing_location_rows: + location_sql_chunks.append( + f'INSERT INTO location_asset_mappings(location,exchange_symbol,local_id) VALUES ("{db_char}", "{symbol}", "{direct_identifier}");\n*\n' + ) + existing_location_rows.add(row_key) + location_json_additions.append({ + "asset": direct_identifier, + "location": location_key, + "location_symbol": symbol, + }) + print(f"[direct] {symbol} -> {direct_identifier}") + + generated_rows = (row for row in rows if row[3] is None) + for symbol, coin_id, cryptocompare_id, _direct_identifier in generated_rows: + assert coin_id is not None coin_data = get_coin_data( coin_id=coin_id, cache_dir=coin_cache_dir, @@ -687,6 +778,7 @@ def main() -> None: placeholder_sql( symbol=symbol, coin_id=coin_id, + cryptocompare_id=cryptocompare_id, coin_name=coin_data.get("name") or symbol, insert_or_ignore=args.insert_or_ignore, ) + "\n*\n" @@ -716,7 +808,12 @@ def main() -> None: if update_started_in_updates_sql(updates_sql, identifier, token.started): print(f"[started] updated {identifier} -> {token.started}") continue - updates_chunks.append(token_sql(token, coin_id=coin_id, insert_or_ignore=args.insert_or_ignore) + "\n*\n") + updates_chunks.append(token_sql( + token, + coin_id=coin_id, + cryptocompare_id=cryptocompare_id, + insert_or_ignore=args.insert_or_ignore, + ) + "\n*\n") existing_identifiers.add(identifier) if token.chain != Chain.SOLANA: existing_evm_address_map[(token.chain.value, token.address.lower())] = identifier @@ -753,8 +850,10 @@ def main() -> None: ) next_collection_id += 1 + if collection_main := collection_main_by_symbol.get(symbol): + mapped_identifier = collection_main + if mapped_identifier: - db_char = LOCATION_DB_CHAR[location_key] row_key = (db_char, symbol, mapped_identifier) if row_key not in existing_location_rows: location_sql_chunks.append( diff --git a/updates/41/asset_collections_mappings_updates.sql b/updates/41/asset_collections_mappings_updates.sql new file mode 100644 index 00000000..f62386a4 --- /dev/null +++ b/updates/41/asset_collections_mappings_updates.sql @@ -0,0 +1,80 @@ +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:1/erc20:0xB58E61C3098d85632Df34EecfB899A1Ed80921cB'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:137/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:42161/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:10/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:8453/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:43114/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:100/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (602, 'eip155:146/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (603, 'eip155:1/erc20:0xE5F130253fF137f9917C0107659A4c5262abf6b0'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (603, 'eip155:100/erc20:0x6165946250DD04740aB1409217E95a4f38374fE9'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (604, 'solana/token:SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (604, 'eip155:56/erc20:0x02bcC4C181B83a8c0A342BC003389CbEcb4BC54D'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (605, 'eip155:56/erc20:0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (605, 'eip155:1/erc20:0x230f1E241C621d5af670Dad83ebCdd18971E2995'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (606, 'eip155:1/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (606, 'eip155:42161/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (606, 'eip155:56/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (607, 'solana/token:ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (607, 'eip155:56/erc20:0xd5f6ef5dEabE61E6d5CDB49BFB6f156F2c1cA715'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (608, 'solana/token:BMrgsEdrqfP4EAhiRbK5fFkq8xgQrqDAcZrv8R2pG4zG'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (608, 'eip155:1/erc20:0xFC347c996BD66C1d92E2045c80b413ef3fc84A90'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (609, 'eip155:1/erc20:0xAD29F2723fcdBcF665F210F25E06f97477e417cF'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (609, 'eip155:56/erc20:0x46F2564E0FA8248d15125E7e54173cfbdEf91Be7'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (610, 'eip155:1/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (610, 'eip155:56/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (610, 'solana/token:Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (610, 'eip155:42161/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (611, 'eip155:1/erc20:0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (611, 'eip155:43114/erc20:0x61f23250451305f6C4426E81C50aE535Edf94A02'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (612, 'solana/token:CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (612, 'eip155:56/erc20:0x6CEd5c6d3F913b48D59Fa07AbBfe9060C409087C'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (613, 'eip155:1/erc20:0x2103E845C5E135493Bb6c2A4f0B8651956eA8682'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (613, 'solana/token:5aLhp9VnUEKcsdtkfsf2DUgpJfomx7GmYVny24dHUZoB'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (613, 'eip155:56/erc20:0x23AE4fd8E7844cdBc97775496eBd0E8248656028'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (613, 'eip155:137/erc20:0xA7E22972a19dd924aFeEDf3Db28033B146801081'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (614, 'eip155:56/erc20:0x5506599c722389A60580B5213ea1Da60D64754a1'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (614, 'eip155:1/erc20:0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (614, 'eip155:8453/erc20:0x7297968FFb753dd12e4f6B1f18d9865c76707FC2'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (615, 'eip155:137/erc20:0xAC0F66379A6d7801D7726d5a943356A172549Adb'); +* +INSERT INTO multiasset_mappings(collection_id, asset) VALUES (615, 'solana/token:7JA5eZdCzztSfQbJvS8aVVxMFfd81Rs9VvwnocV1mKHu'); +* diff --git a/updates/41/asset_collections_updates.sql b/updates/41/asset_collections_updates.sql new file mode 100644 index 00000000..31d6a7d8 --- /dev/null +++ b/updates/41/asset_collections_updates.sql @@ -0,0 +1,28 @@ +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (602, 'Frankencoin', 'ZCHF', 'eip155:1/erc20:0xB58E61C3098d85632Df34EecfB899A1Ed80921cB'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (603, 'SavingsVault ZCHF', 'svZCHF', 'eip155:1/erc20:0xE5F130253fF137f9917C0107659A4c5262abf6b0'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (604, 'Solstice', 'SLX', 'solana/token:SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (605, 'Nesa', 'NES', 'eip155:56/erc20:0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (606, 'Everything', 'EV', 'eip155:1/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (607, 'Arcium', 'ARX', 'solana/token:ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (608, 'Zand AED', 'AEDZ', 'eip155:1/erc20:0xFC347c996BD66C1d92E2045c80b413ef3fc84A90'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (609, 'GRVT Token', 'GRVT', 'eip155:1/erc20:0xAD29F2723fcdBcF665F210F25E06f97477e417cF'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (610, 'SpaceX xStock', 'SPCXX', 'eip155:1/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (611, 'Fautor', 'FTR', 'eip155:1/erc20:0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (612, 'AntFun', 'ANTFUN', 'solana/token:CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (613, 'Matrixdock Gold', 'XAUM', 'eip155:1/erc20:0x2103E845C5E135493Bb6c2A4f0B8651956eA8682'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (614, 'Zest Protocol', 'ZEST', 'eip155:1/erc20:0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5'); +* +INSERT INTO asset_collections(id, name, symbol, main_asset) VALUES (615, 'Geodnet', 'GEOD', 'eip155:137/erc20:0xAC0F66379A6d7801D7726d5a943356A172549Adb'); +* diff --git a/updates/41/updates.sql b/updates/41/updates.sql new file mode 100644 index 00000000..07b15b52 --- /dev/null +++ b/updates/41/updates.sql @@ -0,0 +1,318 @@ +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xB58E61C3098d85632Df34EecfB899A1Ed80921cB', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xB58E61C3098d85632Df34EecfB899A1Ed80921cB', 'A', 1, '0xB58E61C3098d85632Df34EecfB899A1Ed80921cB', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xB58E61C3098d85632Df34EecfB899A1Ed80921cB', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1698530243, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:137/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:137/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 137, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:137/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749108114, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:42161/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:42161/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 42161, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:42161/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749111515, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:10/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:10/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 10, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:10/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749108769, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 8453, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749111919, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:43114/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:43114/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 43114, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:43114/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749113152, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:100/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:100/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 100, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:100/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749113880, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:146/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'Frankencoin', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:146/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'A', 146, '0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:146/erc20:0xD4dD9e2F021BB459D5A5f6c24C12fE09c5D45553', 'ZCHF', 'frankencoin', 'ZCHF', NULL, 1749114272, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x1bA26788dfDe592fec8bcB0Eaff472a42BE341B2', 'Frankencoin Pool Share', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x1bA26788dfDe592fec8bcB0Eaff472a42BE341B2', 'A', 1, '0x1bA26788dfDe592fec8bcB0Eaff472a42BE341B2', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x1bA26788dfDe592fec8bcB0Eaff472a42BE341B2', 'FPS', '', NULL, NULL, 1698530243, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xE5F130253fF137f9917C0107659A4c5262abf6b0', 'SavingsVault ZCHF', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xE5F130253fF137f9917C0107659A4c5262abf6b0', 'A', 1, '0xE5F130253fF137f9917C0107659A4c5262abf6b0', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xE5F130253fF137f9917C0107659A4c5262abf6b0', 'svZCHF', '', NULL, NULL, 1767008927, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:100/erc20:0x6165946250DD04740aB1409217E95a4f38374fE9', 'SavingsVault ZCHF', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:100/erc20:0x6165946250DD04740aB1409217E95a4f38374fE9', 'A', 100, '0x6165946250DD04740aB1409217E95a4f38374fE9', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:100/erc20:0x6165946250DD04740aB1409217E95a4f38374fE9', 'svZCHF', '', NULL, NULL, 1757586790, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('CLP', 'Chilean Peso', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('CLP', 'CLP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('COP', 'Colombian Peso', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('COP', 'COP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('GEL', 'Georgian Lari', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('GEL', 'GEL', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('VND', 'Vietnamese Dong', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('VND', 'VND', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('UGX', 'Ugandan Shilling', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('UGX', 'UGX', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('LKR', 'Sri Lankan Rupee', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('LKR', 'LKR', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('XOF', 'West African CFA franc', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('XOF', 'XOF', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('GHS', 'Ghanaian Cedi', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('GHS', 'GHS', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:43114/erc20:0xb6314518b61b4864162c7aE7fdc36261e0A14C4b', 'YOM', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:43114/erc20:0xb6314518b61b4864162c7aE7fdc36261e0A14C4b', 'A', 43114, '0xb6314518b61b4864162c7aE7fdc36261e0A14C4b', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:43114/erc20:0xb6314518b61b4864162c7aE7fdc36261e0A14C4b', 'YOM', 'yom', NULL, NULL, 1773611676, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0x11030f79109269d796fd0FB956D6244e502757f7', 'Citrea', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0x11030f79109269d796fd0FB956D6244e502757f7', 'A', 8453, '0x11030f79109269d796fd0FB956D6244e502757f7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0x11030f79109269d796fd0FB956D6244e502757f7', 'CTR', 'citrea', NULL, NULL, 1774348929, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0xFf8104251E7761163faC3211eF5583FB3F8583d6', 'REPPO', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0xFf8104251E7761163faC3211eF5583FB3F8583d6', 'A', 8453, '0xFf8104251E7761163faC3211eF5583FB3F8583d6', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0xFf8104251E7761163faC3211eF5583FB3F8583d6', 'REPPO', 'reppo', NULL, NULL, 1763450231, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x526526528F35AC738177003b8773B402B8Df8143', 'Re Protocol', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x526526528F35AC738177003b8773B402B8Df8143', 'A', 1, '0x526526528F35AC738177003b8773B402B8Df8143', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x526526528F35AC738177003b8773B402B8Df8143', 'RE', 're', NULL, NULL, 1778782127, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0x9B5E262cF9bb04869ab40b19AF91D2dc85761722', 'Nockchain', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0x9B5E262cF9bb04869ab40b19AF91D2dc85761722', 'A', 8453, '0x9B5E262cF9bb04869ab40b19AF91D2dc85761722', 16, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0x9B5E262cF9bb04869ab40b19AF91D2dc85761722', 'NOCK', 'nockchain', NULL, NULL, 1766160165, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:24kAN3xiQZba11BrgEsM9qfcqkD9xM7fBxnizkENpump', 'Genius', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:24kAN3xiQZba11BrgEsM9qfcqkD9xM7fBxnizkENpump', 'D', '24kAN3xiQZba11BrgEsM9qfcqkD9xM7fBxnizkENpump', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:24kAN3xiQZba11BrgEsM9qfcqkD9xM7fBxnizkENpump', 'GENIUS', 'genius-2', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x44Fc58fAaaCA03E5d52e493DAe930fFa63e2A664', 'Manadia', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x44Fc58fAaaCA03E5d52e493DAe930fFa63e2A664', 'A', 56, '0x44Fc58fAaaCA03E5d52e493DAe930fFa63e2A664', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x44Fc58fAaaCA03E5d52e493DAe930fFa63e2A664', 'UMXM', 'manadia', NULL, NULL, 1775563819, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq', 'Solstice', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq', 'D', 'SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq', 9, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:SLXdx4BUt2v9uJQNzWqSfzTJ9UKLUDsvxHFMEEdrfgq', 'SLX', 'solstice', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x02bcC4C181B83a8c0A342BC003389CbEcb4BC54D', 'Solstice', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x02bcC4C181B83a8c0A342BC003389CbEcb4BC54D', 'A', 56, '0x02bcC4C181B83a8c0A342BC003389CbEcb4BC54D', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x02bcC4C181B83a8c0A342BC003389CbEcb4BC54D', 'SLX', 'solstice', NULL, NULL, 1778705828, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5', 'Nesa', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5', 'A', 56, '0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x3131f6B80C26936aB03F7d9D29Eb4Ddf36AC3FB5', 'NES', 'nesa', NULL, NULL, 1779717448, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x230f1E241C621d5af670Dad83ebCdd18971E2995', 'Nesa', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x230f1E241C621d5af670Dad83ebCdd18971E2995', 'A', 1, '0x230f1E241C621d5af670Dad83ebCdd18971E2995', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x230f1E241C621d5af670Dad83ebCdd18971E2995', 'NES', 'nesa', NULL, NULL, 1779864551, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'Everything', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'A', 1, '0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'EV', 'everything', NULL, NULL, 1773765515, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:42161/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'Everything', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:42161/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'A', 42161, '0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:42161/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'EV', 'everything', NULL, NULL, 1773765353, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'Everything', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'A', 56, '0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xE7E7E741C23a4767831A56A8C99F522c5aC1E7E7', 'EV', 'everything', NULL, NULL, 1776257664, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs', 'Arcium', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs', 'D', 'ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs', 9, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs', 'ARX', 'arcium', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xd5f6ef5dEabE61E6d5CDB49BFB6f156F2c1cA715', 'Arcium', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xd5f6ef5dEabE61E6d5CDB49BFB6f156F2c1cA715', 'A', 56, '0xd5f6ef5dEabE61E6d5CDB49BFB6f156F2c1cA715', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xd5f6ef5dEabE61E6d5CDB49BFB6f156F2c1cA715', 'ARX', 'arcium', NULL, NULL, 1781624826, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('1INCHDOWN', 'Binance leveraged token 1INCHDOWN', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('1INCHDOWN', '1INCHDOWN', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('1INCHUP', 'Binance leveraged token 1INCHUP', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('1INCHUP', '1INCHUP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('AMDB', 'Advanced Micro Devices (bStocks)', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('AMDB', 'AMDB', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('ARS', 'Argentine Peso', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('ARS', 'ARS', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x80f3D493EBCe97e343c53D29a137942416B4ffC0', 'Circle Internet Group (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x80f3D493EBCe97e343c53D29a137942416B4ffC0', 'A', 56, '0x80f3D493EBCe97e343c53D29a137942416B4ffC0', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x80f3D493EBCe97e343c53D29a137942416B4ffC0', 'CRCLB', 'circle-internet-group-bstock', NULL, NULL, 1780655744, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('EWYB', 'iShares MSCI South Korea ETF (bStocks)', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('EWYB', 'EWYB', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x1F12B85aAC097E43Aa1555b2881E98a51090e9A6', 'Genius', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x1F12B85aAC097E43Aa1555b2881E98a51090e9A6', 'A', 56, '0x1F12B85aAC097E43Aa1555b2881E98a51090e9A6', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x1F12B85aAC097E43Aa1555b2881E98a51090e9A6', 'GENIUS', 'genius-3', NULL, NULL, 1775853962, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('INTCB', 'Intel (bStocks)', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('INTCB', 'INTCB', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('KZT', 'Kazakhstani Tenge', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('KZT', 'KZT', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('MSTRB', 'Strategy (bStocks)', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('MSTRB', 'MSTRB', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xcdf2f3e0fa43C47A6662a91C9E4a7C5f69762699', 'Micron Technology (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xcdf2f3e0fa43C47A6662a91C9E4a7C5f69762699', 'A', 56, '0xcdf2f3e0fa43C47A6662a91C9E4a7C5f69762699', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xcdf2f3e0fa43C47A6662a91C9E4a7C5f69762699', 'MUB', 'micron-technology-bstock', NULL, NULL, 1780655749, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436', 'NVIDIA (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436', 'A', 56, '0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436', 'NVDAB', 'nvidia-bstocks', NULL, NULL, 1780655759, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x3eE4dF61bd4F867E349BEaE8bFE07bc31b4850fb', 'SanDisk (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x3eE4dF61bd4F867E349BEaE8bFE07bc31b4850fb', 'A', 56, '0x3eE4dF61bd4F867E349BEaE8bFE07bc31b4850fb', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x3eE4dF61bd4F867E349BEaE8bFE07bc31b4850fb', 'SNDKB', 'sandisk-bstocks-tokenized-stock', NULL, NULL, 1780655754, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1', 'SpaceX (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1', 'A', 56, '0xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1', 'SPCXB', 'spacex-bstocks-tokenized-stock', NULL, NULL, 1780655764, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SUSHIDOWN', 'Binance leveraged token SUSHIDOWN', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SUSHIDOWN', 'SUSHIDOWN', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SUSHIUP', 'Binance leveraged token SUSHIUP', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SUSHIUP', 'SUSHIUP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SXPDOWN', 'Binance leveraged token SXPDOWN', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SXPDOWN', 'SXPDOWN', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SXPUP', 'Binance leveraged token SXPUP', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SXPUP', 'SXPUP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x5b1910eAaD6450E50f816082Aa078C41F10C292f', 'Tesla (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x5b1910eAaD6450E50f816082Aa078C41F10C292f', 'A', 56, '0x5b1910eAaD6450E50f816082Aa078C41F10C292f', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x5b1910eAaD6450E50f816082Aa078C41F10C292f', 'TSLAB', 'tesla-bstocks-tokenized-stock', NULL, NULL, 1780655738, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('UAH', 'Ukrainian Hryvnia', 'A'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('UAH', 'UAH', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:CeJcYcx8484ZbtThaa1UKCPBubA9Pwsz4fLMpGnipump', 'USDSB', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:CeJcYcx8484ZbtThaa1UKCPBubA9Pwsz4fLMpGnipump', 'D', 'CeJcYcx8484ZbtThaa1UKCPBubA9Pwsz4fLMpGnipump', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:CeJcYcx8484ZbtThaa1UKCPBubA9Pwsz4fLMpGnipump', 'USDSB', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('XLMDOWN', 'Binance leveraged token XLMDOWN', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('XLMDOWN', 'XLMDOWN', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('XLMUP', 'Binance leveraged token XLMUP', 'B'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('XLMUP', 'XLMUP', '', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH', 'Sandisk (Backpack Securities)', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH', 'D', 'SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:SNDKbwMUQvZhnLnxLduradgLHG5KrPuKwpnrkkGRhfH', 'SNDK', 'sandisk-backpack-securities', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('GRAM', 'Gram', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('GRAM', 'GRAM', 'gram-2', '', NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x10343EF7da3301493D7Ecb647d68A288C6c1Db2F', 'Applied Optoelectronics (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x10343EF7da3301493D7Ecb647d68A288C6c1Db2F', 'A', 56, '0x10343EF7da3301493D7Ecb647d68A288C6c1Db2F', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x10343EF7da3301493D7Ecb647d68A288C6c1Db2F', 'AAOIB', 'applied-optoelectronics-bstocks-tokenized-stock', NULL, NULL, 1783389151, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A', 'Apple (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A', 'A', 56, '0x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A', 'AAPLB', 'apple-bstocks-tokenized-stock', NULL, NULL, 1784684948, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xa304BD78e739C0F777202B3eB73Ac3736d1df801', 'Applied Materials (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xa304BD78e739C0F777202B3eB73Ac3736d1df801', 'A', 56, '0xa304BD78e739C0F777202B3eB73Ac3736d1df801', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xa304BD78e739C0F777202B3eB73Ac3736d1df801', 'AMATB', 'applied-materials-bstocks-tokenized-stock', NULL, NULL, 1784684979, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x1a4b499833A79A09ad7Cf1D42D7DacF71e92eb00', 'Amazon (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x1a4b499833A79A09ad7Cf1D42D7DacF71e92eb00', 'A', 56, '0x1a4b499833A79A09ad7Cf1D42D7DacF71e92eb00', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x1a4b499833A79A09ad7Cf1D42D7DacF71e92eb00', 'AMZNB', 'amazon-bstocks-tokenized-stock', NULL, NULL, 1784684958, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xD42A79ebb7F527F40fAecD196FFB47aD5e8D6f8C', 'Arm (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xD42A79ebb7F527F40fAecD196FFB47aD5e8D6f8C', 'A', 56, '0xD42A79ebb7F527F40fAecD196FFB47aD5e8D6f8C', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xD42A79ebb7F527F40fAecD196FFB47aD5e8D6f8C', 'ARMB', 'arm-bstocks-tokenized-stock', NULL, NULL, 1783389197, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x76682c454467b3A1150Ad8b6a92FC5eE2C21d7eD', 'Broadcom (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x76682c454467b3A1150Ad8b6a92FC5eE2C21d7eD', 'A', 56, '0x76682c454467b3A1150Ad8b6a92FC5eE2C21d7eD', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x76682c454467b3A1150Ad8b6a92FC5eE2C21d7eD', 'AVGOB', 'broadcom-bstocks-tokenized-stock', NULL, NULL, 1783389182, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x9BDC8B470dbf89DbCb123587C6f5E49cCA3463BE', 'AXT (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x9BDC8B470dbf89DbCb123587C6f5E49cCA3463BE', 'A', 56, '0x9BDC8B470dbf89DbCb123587C6f5E49cCA3463BE', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x9BDC8B470dbf89DbCb123587C6f5E49cCA3463BE', 'AXTIB', 'axt-bstocks-tokenized-stock', NULL, NULL, 1784012900, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec', 'Alibaba (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec', 'A', 56, '0x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec', 'BABAB', 'alibaba-bstocks-tokenized-stock', NULL, NULL, 1783389177, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x5519de00F5388c17d886b97Cb5D2D43a812a82bC', 'Bloom Energy (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x5519de00F5388c17d886b97Cb5D2D43a812a82bC', 'A', 56, '0x5519de00F5388c17d886b97Cb5D2D43a812a82bC', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x5519de00F5388c17d886b97Cb5D2D43a812a82bC', 'BEB', 'bloom-energy-bstocks-tokenized-stock', NULL, NULL, 1784684953, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xe81C6bB0266cd68B4F17278531Dd03eA1F12dA4E', 'Cerebras (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xe81C6bB0266cd68B4F17278531Dd03eA1F12dA4E', 'A', 56, '0xe81C6bB0266cd68B4F17278531Dd03eA1F12dA4E', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xe81C6bB0266cd68B4F17278531Dd03eA1F12dA4E', 'CBRSB', 'cerebras-bstocks-tokenized-stock', NULL, NULL, 1782872841, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x585BDE7C54ABB5cCD7791F923D6c2187635f3952', 'Coinbase (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x585BDE7C54ABB5cCD7791F923D6c2187635f3952', 'A', 56, '0x585BDE7C54ABB5cCD7791F923D6c2187635f3952', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x585BDE7C54ABB5cCD7791F923D6c2187635f3952', 'COINB', 'coinbase-bstocks-tokenized-stock', NULL, NULL, 1782872804, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x33E7317e17838fEE56b10Fe8D0B9cA6CA3090c95', 'CoreWeave (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x33E7317e17838fEE56b10Fe8D0B9cA6CA3090c95', 'A', 56, '0x33E7317e17838fEE56b10Fe8D0B9cA6CA3090c95', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x33E7317e17838fEE56b10Fe8D0B9cA6CA3090c95', 'CRWVB', 'coreweave-bstocks-tokenized-stock', NULL, NULL, 1784012905, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x0e7A51966c66648999d506e1372EFDeA1B78cb0B', 'Dell (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x0e7A51966c66648999d506e1372EFDeA1B78cb0B', 'A', 56, '0x0e7A51966c66648999d506e1372EFDeA1B78cb0B', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x0e7A51966c66648999d506e1372EFDeA1B78cb0B', 'DELLB', 'dell-bstocks-tokenized-stock', NULL, NULL, 1784684968, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x93862d63fd9Fd488B1328E9b47717d75e994a84B', 'Roundhill Memory ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x93862d63fd9Fd488B1328E9b47717d75e994a84B', 'A', 56, '0x93862d63fd9Fd488B1328E9b47717d75e994a84B', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x93862d63fd9Fd488B1328E9b47717d75e994a84B', 'DRAMB', 'roundhill-memory-etf-bstocks-tokenized-stock', NULL, NULL, 1782872836, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac', 'Fluence Energy (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac', 'A', 56, '0x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac', 'FLNCB', 'fluence-energy-bstocks-tokenized-stock', NULL, NULL, 1784684974, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x740e075cBbEa22a082B9d6679e65e82767875b6A', 'Corning (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x740e075cBbEa22a082B9d6679e65e82767875b6A', 'A', 56, '0x740e075cBbEa22a082B9d6679e65e82767875b6A', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x740e075cBbEa22a082B9d6679e65e82767875b6A', 'GLWB', 'corning-bstocks-tokenized-stock', NULL, NULL, 1782872820, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x3F53De71c126BdaBAe20f9cD64848d317f6C3238', 'Alphabet (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x3F53De71c126BdaBAe20f9cD64848d317f6C3238', 'A', 56, '0x3F53De71c126BdaBAe20f9cD64848d317f6C3238', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x3F53De71c126BdaBAe20f9cD64848d317f6C3238', 'GOOGLB', 'alphabet-bstocks-tokenized-stock', NULL, NULL, 1782872794, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x20CCe6656E5F7F79f280E2D0F5dB55b401BDbfCe', 'Goldman Sachs (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x20CCe6656E5F7F79f280E2D0F5dB55b401BDbfCe', 'A', 56, '0x20CCe6656E5F7F79f280E2D0F5dB55b401BDbfCe', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x20CCe6656E5F7F79f280E2D0F5dB55b401BDbfCe', 'GSB', 'goldman-sachs-bstocks-tokenized-stock', NULL, NULL, 1784684989, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xA394dCEa3fd3847fD793afBFd163E2e3858B7c65', 'Robinhood (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xA394dCEa3fd3847fD793afBFd163E2e3858B7c65', 'A', 56, '0xA394dCEa3fd3847fD793afBFd163E2e3858B7c65', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xA394dCEa3fd3847fD793afBFd163E2e3858B7c65', 'HOODB', 'robinhood-bstocks-tokenized-stock', NULL, NULL, 1783389192, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xfA273B076Feb8c0FB34e554ae341082323D016A3', 'IBM (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xfA273B076Feb8c0FB34e554ae341082323D016A3', 'A', 56, '0xfA273B076Feb8c0FB34e554ae341082323D016A3', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xfA273B076Feb8c0FB34e554ae341082323D016A3', 'IBMB', 'ibm-bstocks-tokenized-stock', NULL, NULL, 1783389156, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x0735D9904b7e34e6fe39B0f66E00c111b3f2b681', 'GraniteShares 2X Long INTC ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x0735D9904b7e34e6fe39B0f66E00c111b3f2b681', 'A', 56, '0x0735D9904b7e34e6fe39B0f66E00c111b3f2b681', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x0735D9904b7e34e6fe39B0f66E00c111b3f2b681', 'INTWB', 'graniteshares-2x-long-intc-etf-bstocks-tokenized-stock', NULL, NULL, 1784012925, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x1FFAD32d69c5FEAd99f88C25ca0191Edc3757636', 'South Korea Bull 3X ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x1FFAD32d69c5FEAd99f88C25ca0191Edc3757636', 'A', 56, '0x1FFAD32d69c5FEAd99f88C25ca0191Edc3757636', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x1FFAD32d69c5FEAd99f88C25ca0191Edc3757636', 'KORUB', 'south-korea-bull-3x-etf-bstocks-tokenized-stock', NULL, NULL, 1784012894, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x64748BeA17b6D19e242ADf20425DE2440c656142', 'Lumentum Holdings (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x64748BeA17b6D19e242ADf20425DE2440c656142', 'A', 56, '0x64748BeA17b6D19e242ADf20425DE2440c656142', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x64748BeA17b6D19e242ADf20425DE2440c656142', 'LITEB', 'lumentum-holdings-bstocks-tokenized-stock', NULL, NULL, 1782262026, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x7425889FE94F9d693E8daefE88BCCed6AcFEf4c0', 'Meta Platforms (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x7425889FE94F9d693E8daefE88BCCed6AcFEf4c0', 'A', 56, '0x7425889FE94F9d693E8daefE88BCCed6AcFEf4c0', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x7425889FE94F9d693E8daefE88BCCed6AcFEf4c0', 'METAB', 'meta-platforms-bstocks-tokenized-stock', NULL, NULL, 1782262021, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x16cd4fe7e8880ECc3ba222795229E20489fc2C76', 'Marvell Technology (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x16cd4fe7e8880ECc3ba222795229E20489fc2C76', 'A', 56, '0x16cd4fe7e8880ECc3ba222795229E20489fc2C76', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x16cd4fe7e8880ECc3ba222795229E20489fc2C76', 'MRVLB', 'marvell-technology-bstocks-tokenized-stock', NULL, NULL, 1783389187, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x80106cb3EAD06659A5ad19DF39D9b4733863B9b0', 'Microsoft (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x80106cb3EAD06659A5ad19DF39D9b4733863B9b0', 'A', 56, '0x80106cb3EAD06659A5ad19DF39D9b4733863B9b0', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x80106cb3EAD06659A5ad19DF39D9b4733863B9b0', 'MSFTB', 'microsoft-bstocks-tokenized-stock', NULL, NULL, 1782262037, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x0bB3fA77E0809f42948E435F04883C25415e8263', 'Direxion MU Bull 2X ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x0bB3fA77E0809f42948E435F04883C25415e8263', 'A', 56, '0x0bB3fA77E0809f42948E435F04883C25415e8263', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x0bB3fA77E0809f42948E435F04883C25415e8263', 'MUUB', 'direxion-mu-bull-2x-etf-bstocks-tokenized-stock', NULL, NULL, 1784012910, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x7C26a12f20507E2ceE22CeEBed9e88FDA47f866c', 'GraniteShares 2X Long MRVL ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x7C26a12f20507E2ceE22CeEBed9e88FDA47f866c', 'A', 56, '0x7C26a12f20507E2ceE22CeEBed9e88FDA47f866c', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x7C26a12f20507E2ceE22CeEBed9e88FDA47f866c', 'MVLLB', 'graniteshares-2x-long-mrvl-etf-bstocks-tokenized-stock', NULL, NULL, 1784012915, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xE256BC2A4F5297F8ba6f043F180a46300eCbCbB1', 'Nebius (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xE256BC2A4F5297F8ba6f043F180a46300eCbCbB1', 'A', 56, '0xE256BC2A4F5297F8ba6f043F180a46300eCbCbB1', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xE256BC2A4F5297F8ba6f043F180a46300eCbCbB1', 'NBISB', 'nebius-bstocks-tokenized-stock', NULL, NULL, 1782872825, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x7c4d7a180D737Dd5A70d8065a90E6746a69C37EA', 'Nokia (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x7c4d7a180D737Dd5A70d8065a90E6746a69C37EA', 'A', 56, '0x7c4d7a180D737Dd5A70d8065a90E6746a69C37EA', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x7c4d7a180D737Dd5A70d8065a90E6746a69C37EA', 'NOKB', 'nokia-bstocks-tokenized-stock', NULL, NULL, 1783389166, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x4684D9887fC1c71cBa7baB8E88835CEC217eB598', 'Oracle (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x4684D9887fC1c71cBa7baB8E88835CEC217eB598', 'A', 56, '0x4684D9887fC1c71cBa7baB8E88835CEC217eB598', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x4684D9887fC1c71cBa7baB8E88835CEC217eB598', 'ORCLB', 'oracle-bstocks-tokenized-stock', NULL, NULL, 1784012941, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x0Ca5D51D0277Bd006fd9607d3E560785EBad8222', 'Palantir Technologies (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x0Ca5D51D0277Bd006fd9607d3E560785EBad8222', 'A', 56, '0x0Ca5D51D0277Bd006fd9607d3E560785EBad8222', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x0Ca5D51D0277Bd006fd9607d3E560785EBad8222', 'PLTRB', 'palantir-technologies-bstocks-tokenized-stock', NULL, NULL, 1782262032, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x2806a561fC1F9259B2d54A281796Bde0D92762aE', 'Paypal (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x2806a561fC1F9259B2d54A281796Bde0D92762aE', 'A', 56, '0x2806a561fC1F9259B2d54A281796Bde0D92762aE', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x2806a561fC1F9259B2d54A281796Bde0D92762aE', 'PYPLB', 'paypal-bstocks-tokenized-stock', NULL, NULL, 1784684984, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x5F7A56e877B9130608Bf8BE962621011182fEfE1', 'Qualcomm (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x5F7A56e877B9130608Bf8BE962621011182fEfE1', 'A', 56, '0x5F7A56e877B9130608Bf8BE962621011182fEfE1', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x5F7A56e877B9130608Bf8BE962621011182fEfE1', 'QCOMB', 'qualcomm-bstocks-tokenized-stock', NULL, NULL, 1782872799, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xd721c192d612Db77621DF57A9fAb38418033c02E', 'Quantinuum (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xd721c192d612Db77621DF57A9fAb38418033c02E', 'A', 56, '0xd721c192d612Db77621DF57A9fAb38418033c02E', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xd721c192d612Db77621DF57A9fAb38418033c02E', 'QNTB', 'quantinuum-bstocks-tokenized-stock', NULL, NULL, 1784012936, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x205812CdBed920aFf76C6580abD681a46D11efc7', 'Invesco QQQ Trust (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x205812CdBed920aFf76C6580abD681a46D11efc7', 'A', 56, '0x205812CdBed920aFf76C6580abD681a46D11efc7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x205812CdBed920aFf76C6580abD681a46D11efc7', 'QQQB', 'invesco-qqq-trust-bstocks-tokenized-stock', NULL, NULL, 1782262016, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xC8Da12cbCCE7c45180692a6420b0076e03a5179a', 'Rocket Lab (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xC8Da12cbCCE7c45180692a6420b0076e03a5179a', 'A', 56, '0xC8Da12cbCCE7c45180692a6420b0076e03a5179a', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xC8Da12cbCCE7c45180692a6420b0076e03a5179a', 'RKLBB', 'rocket-lab-bstocks-tokenized-stock', NULL, NULL, 1783389161, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xCA750eF65f295BBECd685Abf54e82CAf297BDB61', 'SK Hynix (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xCA750eF65f295BBECd685Abf54e82CAf297BDB61', 'A', 56, '0xCA750eF65f295BBECd685Abf54e82CAf297BDB61', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xCA750eF65f295BBECd685Abf54e82CAf297BDB61', 'SKHYB', 'sk-hynix-bstocks-tokenized-stock', NULL, NULL, 1782872846, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xBE1fceD7047fdCE935F45700727845df2c76877a', 'VanEck Semiconductor ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xBE1fceD7047fdCE935F45700727845df2c76877a', 'A', 56, '0xBE1fceD7047fdCE935F45700727845df2c76877a', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xBE1fceD7047fdCE935F45700727845df2c76877a', 'SMHB', 'vaneck-semiconductor-etf-bstocks-tokenized-stock', NULL, NULL, 1784684994, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x9e82e3da8f1115B73d24bB24113ab836FfDAb6b6', 'Tradr 2X Long SNDK ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x9e82e3da8f1115B73d24bB24113ab836FfDAb6b6', 'A', 56, '0x9e82e3da8f1115B73d24bB24113ab836FfDAb6b6', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x9e82e3da8f1115B73d24bB24113ab836FfDAb6b6', 'SNXXB', 'tradr-2x-long-sndk-etf-bstocks-tokenized-stock', NULL, NULL, 1784012920, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xd97d097a89113fa59b76c572E5b2Eb647E8eefaf', 'Semicon Bull 3X ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xd97d097a89113fa59b76c572E5b2Eb647E8eefaf', 'A', 56, '0xd97d097a89113fa59b76c572E5b2Eb647E8eefaf', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xd97d097a89113fa59b76c572E5b2Eb647E8eefaf', 'SOXLB', 'semicon-bull-3x-etf-bstocks-tokenized-stock', NULL, NULL, 1782872830, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F', 'Direxion Semiconductor Bear 3X ETF (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F', 'A', 56, '0xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F', 'SOXSB', 'direxion-semiconductor-bear-3x-etf-bstocks-tokenized-stock', NULL, NULL, 1784684964, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x7138b48df7D98D7e3cc221BfE7192D0a178182D8', 'SPY (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x7138b48df7D98D7e3cc221BfE7192D0a178182D8', 'A', 56, '0x7138b48df7D98D7e3cc221BfE7192D0a178182D8', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x7138b48df7D98D7e3cc221BfE7192D0a178182D8', 'SPYB', 'spy-bstocks-tokenized-stock', NULL, NULL, 1782872810, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x462B5F13B7C7748279358962925c5De83BB9E598', 'ProShares UltraPro QQQ (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x462B5F13B7C7748279358962925c5De83BB9E598', 'A', 56, '0x462B5F13B7C7748279358962925c5De83BB9E598', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x462B5F13B7C7748279358962925c5De83BB9E598', 'TQQQB', 'proshares-ultrapro-qqq-bstocks-tokenized-stock', NULL, NULL, 1784012931, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xAB78b89B5bb00236Be0B4B20704cBfa04EfC711c', 'TSMC (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xAB78b89B5bb00236Be0B4B20704cBfa04EfC711c', 'A', 56, '0xAB78b89B5bb00236Be0B4B20704cBfa04EfC711c', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xAB78b89B5bb00236Be0B4B20704cBfa04EfC711c', 'TSMB', 'tsmc-bstocks-tokenized-stock', NULL, NULL, 1783389171, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xebe29695F8047C13d36e7a790ca8c1b239FfAD1C', 'Western Digital (bStocks Tokenized Stock)', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xebe29695F8047C13d36e7a790ca8c1b239FfAD1C', 'A', 56, '0xebe29695F8047C13d36e7a790ca8c1b239FfAD1C', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xebe29695F8047C13d36e7a790ca8c1b239FfAD1C', 'WDCB', 'western-digital-bstocks-tokenized-stock', NULL, NULL, 1782872815, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:BMrgsEdrqfP4EAhiRbK5fFkq8xgQrqDAcZrv8R2pG4zG', 'Zand AED', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:BMrgsEdrqfP4EAhiRbK5fFkq8xgQrqDAcZrv8R2pG4zG', 'D', 'BMrgsEdrqfP4EAhiRbK5fFkq8xgQrqDAcZrv8R2pG4zG', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:BMrgsEdrqfP4EAhiRbK5fFkq8xgQrqDAcZrv8R2pG4zG', 'AEDZ', 'zand-aed', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xFC347c996BD66C1d92E2045c80b413ef3fc84A90', 'Zand AED', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xFC347c996BD66C1d92E2045c80b413ef3fc84A90', 'A', 1, '0xFC347c996BD66C1d92E2045c80b413ef3fc84A90', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xFC347c996BD66C1d92E2045c80b413ef3fc84A90', 'AEDZ', 'zand-aed', NULL, NULL, 1764175835, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xB30FE1Cf884B48a22a50D22a9282004F2c5E9406', 'Grove', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xB30FE1Cf884B48a22a50D22a9282004F2c5E9406', 'A', 1, '0xB30FE1Cf884B48a22a50D22a9282004F2c5E9406', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xB30FE1Cf884B48a22a50D22a9282004F2c5E9406', 'GROVE', 'grove-2', NULL, NULL, 1767804311, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xAD29F2723fcdBcF665F210F25E06f97477e417cF', 'GRVT Token', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xAD29F2723fcdBcF665F210F25E06f97477e417cF', 'A', 1, '0xAD29F2723fcdBcF665F210F25E06f97477e417cF', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xAD29F2723fcdBcF665F210F25E06f97477e417cF', 'GRVT', 'grvt', NULL, NULL, 1780654631, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x46F2564E0FA8248d15125E7e54173cfbdEf91Be7', 'GRVT Token', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x46F2564E0FA8248d15125E7e54173cfbdEf91Be7', 'A', 56, '0x46F2564E0FA8248d15125E7e54173cfbdEf91Be7', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x46F2564E0FA8248d15125E7e54173cfbdEf91Be7', 'GRVT', 'grvt', NULL, NULL, 1780656221, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SpaceX xStock', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'A', 1, '0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SPCXX', 'spacex-xstocks', NULL, NULL, 1780322747, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SpaceX xStock', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'A', 56, '0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SPCXX', 'spacex-xstocks', NULL, NULL, 1780322488, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8', 'SpaceX xStock', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8', 'D', 'Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8', 8, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:Xs3oZwbHvqis4NYcf4YKWmEia2eC84wSiVrcYcTqpH8', 'SPCXX', 'spacex-xstocks', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:42161/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SpaceX xStock', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:42161/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'A', 42161, '0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:42161/erc20:0x68fa48B1C2FE52b3D776E1953e0E782b5044Ce28', 'SPCXX', 'spacex-xstocks', NULL, NULL, 1780322509, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('VERONA', 'Verona', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('VERONA', 'VERONA', 'verona', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x00BAC91fd8f5b4a0dc03C8021139B76F6549Ee7E', 'KAIO', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x00BAC91fd8f5b4a0dc03C8021139B76F6549Ee7E', 'A', 1, '0x00BAC91fd8f5b4a0dc03C8021139B76F6549Ee7E', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x00BAC91fd8f5b4a0dc03C8021139B76F6549Ee7E', 'KAIO', 'kaio', NULL, NULL, 1776354107, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0x10ED0050b7A5d5e1E9Cc164F77a71d0bF69f64BD', 'ONED USD', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0x10ED0050b7A5d5e1E9Cc164F77a71d0bF69f64BD', 'A', 8453, '0x10ED0050b7A5d5e1E9Cc164F77a71d0bF69f64BD', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0x10ED0050b7A5d5e1E9Cc164F77a71d0bF69f64BD', 'ONED', 'oned', NULL, NULL, 1776192619, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('WRON', 'Wrapped Ronin', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('WRON', 'WRON', 'wrapped-ronin', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454', 'Fautor', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454', 'A', 1, '0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xD6C7bB8531295e88D364EA67D5D1acC7D3F87454', 'FTR', 'fautor', NULL, NULL, 1684923551, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:43114/erc20:0x61f23250451305f6C4426E81C50aE535Edf94A02', 'Fautor', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:43114/erc20:0x61f23250451305f6C4426E81C50aE535Edf94A02', 'A', 43114, '0x61f23250451305f6C4426E81C50aE535Edf94A02', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:43114/erc20:0x61f23250451305f6C4426E81C50aE535Edf94A02', 'FTR', 'fautor', NULL, NULL, 1719923044, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xE76c5b78f93909d34404E9eb4C1f19e7582a5dE1', 'Humanity', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xE76c5b78f93909d34404E9eb4C1f19e7582a5dE1', 'A', 1, '0xE76c5b78f93909d34404E9eb4C1f19e7582a5dE1', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xE76c5b78f93909d34404E9eb4C1f19e7582a5dE1', 'H', 'humanity', NULL, NULL, 1781107379, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x59c323346F4f62aE18289F346501389392cf5939', 'NatGold', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x59c323346F4f62aE18289F346501389392cf5939', 'A', 1, '0x59c323346F4f62aE18289F346501389392cf5939', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x59c323346F4f62aE18289F346501389392cf5939', 'NATG', 'natgold', NULL, NULL, 1773417587, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('PATHUSD', 'pathUSD', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('PATHUSD', 'PATHUSD', 'pathusd', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('QUID', 'Squid', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('QUID', 'QUID', 'squid-3', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN44', 'Score', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN44', 'SN44', 'score', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN51', 'lium', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN51', 'SN51', 'celium', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN62', 'Ridges AI', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN62', 'SN62', 'ridges-ai', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN64', 'Chutes', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN64', 'SN64', 'chutes', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN75', 'Hippius', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN75', 'SN75', 'hippius', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN8', 'Vanta Network', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN8', 'SN8', 'proprietary-trading-network', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:HVWf8JmLoHs99Lw8Psf3fyqAtA4crWxCPkrmSdNjhNH3', 'USDPT | Western Union', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:HVWf8JmLoHs99Lw8Psf3fyqAtA4crWxCPkrmSdNjhNH3', 'D', 'HVWf8JmLoHs99Lw8Psf3fyqAtA4crWxCPkrmSdNjhNH3', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:HVWf8JmLoHs99Lw8Psf3fyqAtA4crWxCPkrmSdNjhNH3', 'USDPT', 'usdpt-western-union', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt', 'AntFun', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt', 'D', 'CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:CWZ6BsdnjkDVTGkmL6bGbJXXig6ceef12KvyGQW14cMt', 'ANTFUN', 'antfun', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x6CEd5c6d3F913b48D59Fa07AbBfe9060C409087C', 'AntFun', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x6CEd5c6d3F913b48D59Fa07AbBfe9060C409087C', 'A', 56, '0x6CEd5c6d3F913b48D59Fa07AbBfe9060C409087C', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x6CEd5c6d3F913b48D59Fa07AbBfe9060C409087C', 'ANTFUN', 'antfun', NULL, NULL, 1777820846, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0x499D35eBE6cEe9B2Ac35Fd003fcBbeeB9CFc7B32', 'Arena Two', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0x499D35eBE6cEe9B2Ac35Fd003fcBbeeB9CFc7B32', 'A', 8453, '0x499D35eBE6cEe9B2Ac35Fd003fcBbeeB9CFc7B32', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0x499D35eBE6cEe9B2Ac35Fd003fcBbeeB9CFc7B32', 'ATWO', 'arena-two', NULL, NULL, 1767875293, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('CASHCAT', 'Cash Cat', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('CASHCAT', 'CASHCAT', 'cash-cat', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:FPJfY8mMTRwaePD2f46TFLqVov4X9svBaUgR1a8oTwTF', 'HOOLI', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:FPJfY8mMTRwaePD2f46TFLqVov4X9svBaUgR1a8oTwTF', 'D', 'FPJfY8mMTRwaePD2f46TFLqVov4X9svBaUgR1a8oTwTF', 9, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:FPJfY8mMTRwaePD2f46TFLqVov4X9svBaUgR1a8oTwTF', 'HOOLI', 'hooli', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xe33fbE7584EB79e2673abe576B7AC8C0De62565c', 'House Party Protocol', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xe33fbE7584EB79e2673abe576B7AC8C0De62565c', 'A', 1, '0xe33fbE7584EB79e2673abe576B7AC8C0De62565c', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xe33fbE7584EB79e2673abe576B7AC8C0De62565c', 'HPP', 'aergo-2', NULL, NULL, 1752814775, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('KONET', 'KONET', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('KONET', 'KONET', 'konet', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:METAwkXcqyXKy1AtsSgJ8JiUHwGCafnZL38n3vYmeta', 'MetaDAO', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:METAwkXcqyXKy1AtsSgJ8JiUHwGCafnZL38n3vYmeta', 'D', 'METAwkXcqyXKy1AtsSgJ8JiUHwGCafnZL38n3vYmeta', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:METAwkXcqyXKy1AtsSgJ8JiUHwGCafnZL38n3vYmeta', 'META', 'meta-2-2', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:CQ4PZEmJkR8Zchhfp21fkoCAJuZiv2dhA4QfKqupump', 'MUSH', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:CQ4PZEmJkR8Zchhfp21fkoCAJuZiv2dhA4QfKqupump', 'D', 'CQ4PZEmJkR8Zchhfp21fkoCAJuZiv2dhA4QfKqupump', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:CQ4PZEmJkR8Zchhfp21fkoCAJuZiv2dhA4QfKqupump', 'MUSH', 'mush', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xE3872dD4ebA50598C54b2Aa21b04c71Fc37b000B', 'Nexira DAEP', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xE3872dD4ebA50598C54b2Aa21b04c71Fc37b000B', 'A', 1, '0xE3872dD4ebA50598C54b2Aa21b04c71Fc37b000B', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xE3872dD4ebA50598C54b2Aa21b04c71Fc37b000B', 'NEXI', 'nexira-daep', NULL, NULL, 1768387643, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('OPT', 'Optio', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('OPT', 'OPT', 'optio', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x4d41A5d412f4Ef44A35b9f53b06DB65edE249493', 'QAIT', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x4d41A5d412f4Ef44A35b9f53b06DB65edE249493', 'A', 56, '0x4d41A5d412f4Ef44A35b9f53b06DB65edE249493', 8, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x4d41A5d412f4Ef44A35b9f53b06DB65edE249493', 'QAIT', 'sealcoin', NULL, NULL, 1768578198, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x30C0ef9361645ec56a7e640CD05ce6aBdFce8422', 'STAYNEX', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x30C0ef9361645ec56a7e640CD05ce6aBdFce8422', 'A', 56, '0x30C0ef9361645ec56a7e640CD05ce6aBdFce8422', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x30C0ef9361645ec56a7e640CD05ce6aBdFce8422', 'STAY', 'staynex', NULL, NULL, 1773807960, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0xc6A031fd206C72c614dB391590F48a5Ed9B2f9dC', 'Wallitelli', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0xc6A031fd206C72c614dB391590F48a5Ed9B2f9dC', 'A', 56, '0xc6A031fd206C72c614dB391590F48a5Ed9B2f9dC', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0xc6A031fd206C72c614dB391590F48a5Ed9B2f9dC', 'WALLI', 'wallitelli', NULL, NULL, 1778118204, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x2103E845C5E135493Bb6c2A4f0B8651956eA8682', 'Matrixdock Gold', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x2103E845C5E135493Bb6c2A4f0B8651956eA8682', 'A', 1, '0x2103E845C5E135493Bb6c2A4f0B8651956eA8682', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x2103E845C5E135493Bb6c2A4f0B8651956eA8682', 'XAUM', 'matrixdock-gold', NULL, NULL, 1724813639, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:5aLhp9VnUEKcsdtkfsf2DUgpJfomx7GmYVny24dHUZoB', 'Matrixdock Gold', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:5aLhp9VnUEKcsdtkfsf2DUgpJfomx7GmYVny24dHUZoB', 'D', '5aLhp9VnUEKcsdtkfsf2DUgpJfomx7GmYVny24dHUZoB', 9, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:5aLhp9VnUEKcsdtkfsf2DUgpJfomx7GmYVny24dHUZoB', 'XAUM', 'matrixdock-gold', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x23AE4fd8E7844cdBc97775496eBd0E8248656028', 'Matrixdock Gold', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x23AE4fd8E7844cdBc97775496eBd0E8248656028', 'A', 56, '0x23AE4fd8E7844cdBc97775496eBd0E8248656028', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x23AE4fd8E7844cdBc97775496eBd0E8248656028', 'XAUM', 'matrixdock-gold', NULL, NULL, 1724902973, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:137/erc20:0xA7E22972a19dd924aFeEDf3Db28033B146801081', 'Matrixdock Gold', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:137/erc20:0xA7E22972a19dd924aFeEDf3Db28033B146801081', 'A', 137, '0xA7E22972a19dd924aFeEDf3Db28033B146801081', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:137/erc20:0xA7E22972a19dd924aFeEDf3Db28033B146801081', 'XAUM', 'matrixdock-gold', NULL, NULL, 1766130437, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:56/erc20:0x5506599c722389A60580B5213ea1Da60D64754a1', 'Zest Protocol', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:56/erc20:0x5506599c722389A60580B5213ea1Da60D64754a1', 'A', 56, '0x5506599c722389A60580B5213ea1Da60D64754a1', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:56/erc20:0x5506599c722389A60580B5213ea1Da60D64754a1', 'ZEST', 'zest-protocol', NULL, NULL, 1771483308, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5', 'Zest Protocol', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5', 'A', 1, '0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xf326C8c9A691319f6330e27aa4A39F2d22C88dC5', 'ZEST', 'zest-protocol', NULL, NULL, 1780446863, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:8453/erc20:0x7297968FFb753dd12e4f6B1f18d9865c76707FC2', 'Zest Protocol', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:8453/erc20:0x7297968FFb753dd12e4f6B1f18d9865c76707FC2', 'A', 8453, '0x7297968FFb753dd12e4f6B1f18d9865c76707FC2', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:8453/erc20:0x7297968FFb753dd12e4f6B1f18d9865c76707FC2', 'ZEST', 'zest-protocol', NULL, NULL, 1780449197, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:137/erc20:0xAC0F66379A6d7801D7726d5a943356A172549Adb', 'Geodnet', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:137/erc20:0xAC0F66379A6d7801D7726d5a943356A172549Adb', 'A', 137, '0xAC0F66379A6d7801D7726d5a943356A172549Adb', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:137/erc20:0xAC0F66379A6d7801D7726d5a943356A172549Adb', 'GEOD', 'geodnet', NULL, NULL, 1651638101, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:7JA5eZdCzztSfQbJvS8aVVxMFfd81Rs9VvwnocV1mKHu', 'Geodnet', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:7JA5eZdCzztSfQbJvS8aVVxMFfd81Rs9VvwnocV1mKHu', 'D', '7JA5eZdCzztSfQbJvS8aVVxMFfd81Rs9VvwnocV1mKHu', 9, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:7JA5eZdCzztSfQbJvS8aVVxMFfd81Rs9VvwnocV1mKHu', 'GEOD', 'geodnet', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('solana/token:9cRCn9rGT8V2imeM2BaKs13yhMEais3ruM3rPvTGpump', 'The Black Bull', 'Y'); INSERT INTO solana_tokens(identifier, token_kind, address, decimals, protocol) VALUES('solana/token:9cRCn9rGT8V2imeM2BaKs13yhMEais3ruM3rPvTGpump', 'D', '9cRCn9rGT8V2imeM2BaKs13yhMEais3ruM3rPvTGpump', 6, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('solana/token:9cRCn9rGT8V2imeM2BaKs13yhMEais3ruM3rPvTGpump', 'ANSEM', 'the-black-bull', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('SN3', 'τemplar', 'W'); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('SN3', 'SN3', 'templar', NULL, NULL, NULL, NULL); +* +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D', 'Reputation', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D', 'A', 1, '0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D', 'REPv2_Yes_1', 'augur', 'REP', NULL, 1780528115, NULL); +* +UPDATE common_asset_details SET swapped_for='eip155:1/erc20:0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D' WHERE identifier='eip155:1/erc20:0x221657776846890989a759BA2973e427DfF5C9bB'; +INSERT INTO assets(identifier, name, type) VALUES('eip155:1/erc20:0x221657776846890989a759BA2973e427DfF5C9bB', 'Augur', 'C'); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES('eip155:1/erc20:0x221657776846890989a759BA2973e427DfF5C9bB', 'A', 1, '0x221657776846890989a759BA2973e427DfF5C9bB', 18, NULL); INSERT INTO common_asset_details(identifier, symbol, coingecko, cryptocompare, forked, started, swapped_for) VALUES('eip155:1/erc20:0x221657776846890989a759BA2973e427DfF5C9bB', 'REPv2', 'augur', 'REP', NULL, 1595886655, 'eip155:1/erc20:0xCf6A0A7826fa124B7705d6f3c675eAD76f1e540D'); diff --git a/updates/info.json b/updates/info.json index d4a5fa5c..6e351d2b 100644 --- a/updates/info.json +++ b/updates/info.json @@ -1 +1 @@ -{"latest": 40, "updates": {"1": {"changes": 249, "max_schema_version": 2, "min_schema_version": 2}, "2": {"changes": 27, "max_schema_version": 2, "min_schema_version": 2}, "3": {"changes": 64, "max_schema_version": 2, "min_schema_version": 2}, "4": {"changes": 23, "max_schema_version": 2, "min_schema_version": 2}, "5": {"changes": 25, "max_schema_version": 2, "min_schema_version": 2}, "6": {"changes": 239, "max_schema_version": 2, "min_schema_version": 2}, "7": {"changes": 34, "max_schema_version": 2, "min_schema_version": 2}, "8": {"changes": 81, "max_schema_version": 2, "min_schema_version": 2}, "9": {"changes": 59, "max_schema_version": 2, "min_schema_version": 2}, "10": {"changes": 30, "max_schema_version": 2, "min_schema_version": 2}, "11": {"changes": 71, "max_schema_version": 2, "min_schema_version": 2}, "12": {"changes": 174, "max_schema_version": 2, "min_schema_version": 2}, "13": {"changes": 311, "max_schema_version": 2, "min_schema_version": 2}, "14": {"changes": 94, "max_schema_version": 2, "min_schema_version": 2}, "15": {"changes": 116, "max_schema_version": 4, "min_schema_version": 3}, "16": {"changes": 153, "max_schema_version": 9, "min_schema_version": 4}, "17": {"changes": 137, "max_schema_version": 9, "min_schema_version": 4}, "18": {"changes": 189, "max_schema_version": 9, "min_schema_version": 4}, "19": {"changes": 183, "max_schema_version": 9, "min_schema_version": 4}, "20": {"changes": 105, "max_schema_version": 9, "min_schema_version": 4}, "21": {"changes": 47, "max_schema_version": 9, "min_schema_version": 6}, "22": {"changes": 145, "max_schema_version": 9, "min_schema_version": 6}, "23": {"changes": 4, "max_schema_version": 9, "min_schema_version": 6}, "24": {"changes": 534, "max_schema_version": 9, "min_schema_version": 6}, "25": {"changes": 407, "max_schema_version": 9, "min_schema_version": 6}, "26": {"changes": 349, "max_schema_version": 9, "min_schema_version": 6}, "27": {"changes": 1157, "max_schema_version": 9, "min_schema_version": 6}, "28": {"changes": 47, "max_schema_version": 9, "min_schema_version": 9}, "29": {"changes": 8, "max_schema_version": 9, "min_schema_version": 9}, "30": {"changes": 85, "max_schema_version": 9, "min_schema_version": 9}, "31": {"changes": 58, "max_schema_version": 9, "min_schema_version": 9}, "32": {"changes": 4, "max_schema_version": 9, "min_schema_version": 9}, "33": {"changes": 4, "max_schema_version": 12, "min_schema_version": 10}, "34": {"changes": 5, "max_schema_version": 12, "min_schema_version": 10}, "35": {"changes": 1214, "max_schema_version": 12, "min_schema_version": 11}, "36": {"changes": 177, "max_schema_version": 12, "min_schema_version": 12}, "37": {"min_schema_version": 13, "max_schema_version": 17, "changes": 230}, "38": {"min_schema_version": 13, "max_schema_version": 17, "changes": 211}, "39": {"min_schema_version": 13, "max_schema_version": 17, "changes": 264}, "40": {"min_schema_version": 16, "max_schema_version": 17, "changes": 85}}} \ No newline at end of file +{"latest": 41, "updates": {"1": {"changes": 249, "max_schema_version": 2, "min_schema_version": 2}, "2": {"changes": 27, "max_schema_version": 2, "min_schema_version": 2}, "3": {"changes": 64, "max_schema_version": 2, "min_schema_version": 2}, "4": {"changes": 23, "max_schema_version": 2, "min_schema_version": 2}, "5": {"changes": 25, "max_schema_version": 2, "min_schema_version": 2}, "6": {"changes": 239, "max_schema_version": 2, "min_schema_version": 2}, "7": {"changes": 34, "max_schema_version": 2, "min_schema_version": 2}, "8": {"changes": 81, "max_schema_version": 2, "min_schema_version": 2}, "9": {"changes": 59, "max_schema_version": 2, "min_schema_version": 2}, "10": {"changes": 30, "max_schema_version": 2, "min_schema_version": 2}, "11": {"changes": 71, "max_schema_version": 2, "min_schema_version": 2}, "12": {"changes": 174, "max_schema_version": 2, "min_schema_version": 2}, "13": {"changes": 311, "max_schema_version": 2, "min_schema_version": 2}, "14": {"changes": 94, "max_schema_version": 2, "min_schema_version": 2}, "15": {"changes": 116, "max_schema_version": 4, "min_schema_version": 3}, "16": {"changes": 153, "max_schema_version": 9, "min_schema_version": 4}, "17": {"changes": 137, "max_schema_version": 9, "min_schema_version": 4}, "18": {"changes": 189, "max_schema_version": 9, "min_schema_version": 4}, "19": {"changes": 183, "max_schema_version": 9, "min_schema_version": 4}, "20": {"changes": 105, "max_schema_version": 9, "min_schema_version": 4}, "21": {"changes": 47, "max_schema_version": 9, "min_schema_version": 6}, "22": {"changes": 145, "max_schema_version": 9, "min_schema_version": 6}, "23": {"changes": 4, "max_schema_version": 9, "min_schema_version": 6}, "24": {"changes": 534, "max_schema_version": 9, "min_schema_version": 6}, "25": {"changes": 407, "max_schema_version": 9, "min_schema_version": 6}, "26": {"changes": 349, "max_schema_version": 9, "min_schema_version": 6}, "27": {"changes": 1157, "max_schema_version": 9, "min_schema_version": 6}, "28": {"changes": 47, "max_schema_version": 9, "min_schema_version": 9}, "29": {"changes": 8, "max_schema_version": 9, "min_schema_version": 9}, "30": {"changes": 85, "max_schema_version": 9, "min_schema_version": 9}, "31": {"changes": 58, "max_schema_version": 9, "min_schema_version": 9}, "32": {"changes": 4, "max_schema_version": 9, "min_schema_version": 9}, "33": {"changes": 4, "max_schema_version": 12, "min_schema_version": 10}, "34": {"changes": 5, "max_schema_version": 12, "min_schema_version": 10}, "35": {"changes": 1214, "max_schema_version": 12, "min_schema_version": 11}, "36": {"changes": 177, "max_schema_version": 12, "min_schema_version": 12}, "37": {"min_schema_version": 13, "max_schema_version": 17, "changes": 230}, "38": {"min_schema_version": 13, "max_schema_version": 17, "changes": 211}, "39": {"min_schema_version": 13, "max_schema_version": 17, "changes": 264}, "40": {"min_schema_version": 16, "max_schema_version": 17, "changes": 85}, "41": {"min_schema_version": 0, "max_schema_version": 0, "changes": 159}}} \ No newline at end of file diff --git a/updates/pretty_info.json b/updates/pretty_info.json index fc64b12a..2fc21d11 100644 --- a/updates/pretty_info.json +++ b/updates/pretty_info.json @@ -1,5 +1,5 @@ { - "latest": 40, + "latest": 41, "updates": { "1": { "changes": 249, @@ -200,6 +200,11 @@ "min_schema_version": 16, "max_schema_version": 17, "changes": 85 + }, + "41": { + "min_schema_version": 0, + "max_schema_version": 0, + "changes": 159 } } } \ No newline at end of file diff --git a/validator/checker.py b/validator/checker.py index 2abe6aa1..268541de 100644 --- a/validator/checker.py +++ b/validator/checker.py @@ -134,6 +134,7 @@ class UpdateChecker: def __init__(self): self.versions = { + 0: REGEX_ASSETS_V3, 2: REGEX_ASSETS_V2, 3: REGEX_ASSETS_V3, 4: REGEX_ASSETS_V3, @@ -304,10 +305,12 @@ def _parse_full_insert(self, insert_text: str, schema_version: int) -> AssetData 'chain': None, 'token_kind': None, } + modern_schema = schema_version == 0 or schema_version >= 3 + supports_solana = schema_version == 0 or schema_version > 12 if asset_data['asset_type'] == 'C': evm_data = self._parse_evm_token_data(insert_text, schema_version) token_data.update(evm_data) - elif asset_data['asset_type'] == 'Y' and schema_version > 12: + elif asset_data['asset_type'] == 'Y' and supports_solana: solana_data = self._parse_solana_token_data(insert_text, schema_version) token_data.update(solana_data) @@ -329,7 +332,7 @@ def _parse_full_insert(self, insert_text: str, schema_version: int) -> AssetData ) elif schema_version == 2: common_details = {'forked': None} - elif schema_version >= 3: + elif modern_schema: match = self.versions[schema_version]['common_asset_details_re'].match(insert_text) if match is None: raise DeserializationError( @@ -337,7 +340,7 @@ def _parse_full_insert(self, insert_text: str, schema_version: int) -> AssetData f'details data out of {insert_text}', ) assert self._parse_str(match.group(1), 'identifier', insert_text) == asset_data['identifier'], f'Identifiers of assets {asset_data["identifier"]} and common_asset_details {match.group(1)} are not same' - if asset_data['asset_type'] == 'C' or (asset_data['asset_type'] == 'Y' and schema_version > 12): + if asset_data['asset_type'] == 'C' or (asset_data['asset_type'] == 'Y' and supports_solana): assert token_data['identifier'] == asset_data['identifier'], f'Identifiers of assets {asset_data["identifier"]} and token {token_data["identifier"]} are not same' common_details = { @@ -390,9 +393,11 @@ def check_single_version_update( assert len(asset_data.symbol) != 0 # Validate identifier formats for tokens - if asset_data.asset_type == 'C' and schema_version > 2: + modern_schema = schema_version == 0 or schema_version > 2 + supports_solana = schema_version == 0 or schema_version > 12 + if asset_data.asset_type == 'C' and modern_schema: assert asset_data.identifier == f'eip155:{asset_data.chain}/erc20:{asset_data.address}', f'Mismatch in identifier, chain id, and/or address for {asset_data.identifier}' - elif asset_data.asset_type == 'Y' and schema_version > 12: + elif asset_data.asset_type == 'Y' and supports_solana: assert asset_data.identifier == f'solana/token:{asset_data.address}', f'Solana token identifier should be solana/token:
for {asset_data.identifier}' # Check address-related validations @@ -401,7 +406,7 @@ def check_single_version_update( if asset_data.asset_type == 'C': assert is_checksum_address(asset_data.address), f'Address not checksummed in {asset_data}, {asset_data.address}' address_validations.append(('ethereum', (asset_data.address, asset_data.chain))) - elif asset_data.asset_type == 'Y' and schema_version > 12: + elif asset_data.asset_type == 'Y' and supports_solana: address_validations.append(('solana', asset_data.address)) # ensure address appears in the action text