diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..426c6ea9b --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +COINGECKO_API_KEY= \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/1-addTokenForm.yml b/.github/ISSUE_TEMPLATE/1-addTokenForm.yml index acb93734e..ad116082e 100644 --- a/.github/ISSUE_TEMPLATE/1-addTokenForm.yml +++ b/.github/ISSUE_TEMPLATE/1-addTokenForm.yml @@ -40,6 +40,7 @@ body: - LENS - LINEA - PLASMA + - INK validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/2-addImageForm.yml b/.github/ISSUE_TEMPLATE/2-addImageForm.yml index a770b21d3..52793703b 100644 --- a/.github/ISSUE_TEMPLATE/2-addImageForm.yml +++ b/.github/ISSUE_TEMPLATE/2-addImageForm.yml @@ -32,6 +32,7 @@ body: - LENS - LINEA - PLASMA + - INK validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/3-removeTokenForm.yml b/.github/ISSUE_TEMPLATE/3-removeTokenForm.yml index 3a4b094fa..af6d78a40 100644 --- a/.github/ISSUE_TEMPLATE/3-removeTokenForm.yml +++ b/.github/ISSUE_TEMPLATE/3-removeTokenForm.yml @@ -32,6 +32,7 @@ body: - LENS - LINEA - PLASMA + - INK validations: required: true - type: input diff --git a/.github/workflows/updatePermitInfo.yml b/.github/workflows/updatePermitInfo.yml index 612ce21b7..3cc51bc89 100644 --- a/.github/workflows/updatePermitInfo.yml +++ b/.github/workflows/updatePermitInfo.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false # continue parallel jobs even if individual parts fail matrix: - chainId: [ 1, 56, 100, 137, 232, 8453, 9745, 42161, 43114, 59144 ] # all supported chains + chainId: [ 1, 56, 100, 137, 232, 8453, 9745, 42161, 43114, 57073, 59144 ] # all supported chains steps: - name: Checkout code diff --git a/.gitignore b/.gitignore index e83dbdedb..0ab53c883 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,8 @@ src/cowFi/TEMP* # NPM setup .npmrc + +# Env files: +.env +.env.local +.env.*.local \ No newline at end of file diff --git a/README.md b/README.md index fdc73fad0..eed28bd40 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Instructions for setting up and running the various scripts locally ### Prerequisites -Currently runs on Node.js LTS/Gallium v16.20.2 +Currently runs on Node.js v18 (as this scripts use `fetch`, which was introduced in Node.js 18) ```bash # Install dependencies @@ -106,4 +106,33 @@ The script generates token list files in `src/public/` for the following network - Lens (CoinGecko.232.json, Uniswap.232.json) - Linea (CoinGecko.59144.json, Uniswap.59144.json) - Plasma (CoinGecko.9745.json, Uniswap.9745.json) -- Polygon (CoinGecko.137.json, Uniswap.137.json) \ No newline at end of file +- Ink (CoinGecko.57073.json, Uniswap.57073.json) +- Polygon (CoinGecko.137.json, Uniswap.137.json) + +### Adding a new network + +To support a new network (e.g. Ink, chain ID 57073), run these steps in order: + +1. **Generate auxiliary token lists** for the new chain (the chain must already be in `COINGECKO_CHAINS` in `src/scripts/auxLists/utils.ts`): + + ```bash + COINGECKO_API_KEY=your_key yarn generateAuxLists + ``` + + This creates `src/public/CoinGecko..json` and `src/public/Uniswap..json` for the new network. + +2. **Fetch permit info** for the new chain. The default token list (`CowSwap.json`) will not include tokens for new networks yet if you haven't added any, so you must pass the path to the chain-specific list as the **second** argument: + + ```bash + yarn run fetchPermitInfo -- CoinGecko..json + ``` + + Example for Ink: + + ```bash + yarn run fetchPermitInfo -- 57073 CoinGecko.57073.json + ``` + + Without the second argument, the script would use `CowSwap.json` and skip all tokens (they would have the wrong chainId), leaving the permit file empty. + +3. **Include only the new network's files in your PR.** The scripts above may have updated files for other networks too; do not include those changes, as they are updated daily by a cron job. \ No newline at end of file diff --git a/package.json b/package.json index a608b31cd..1f9eebcd5 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "fetchPermitInfo:lens": "yarn run fetchPermitInfo -- 232", "fetchPermitInfo:linea": "yarn run fetchPermitInfo -- 59144", "fetchPermitInfo:plasma": "yarn run fetchPermitInfo -- 9745", + "fetchPermitInfo:ink": "yarn run fetchPermitInfo -- 57073", "recheckPermitInfo:mainnet": "yarn run fetchPermitInfo -- 1 '' '' true", "recheckPermitInfo:arb1": "yarn run fetchPermitInfo -- 42161 '' '' true", "recheckPermitInfo:base": "yarn run fetchPermitInfo -- 8453 '' '' true", @@ -39,16 +40,17 @@ "recheckPermitInfo:sepolia": "yarn run fetchPermitInfo -- 11155111 '' '' true", "recheckPermitInfo:avalanche": "yarn run fetchPermitInfo -- 43114 '' '' true", "recheckPermitInfo:polygon": "yarn run fetchPermitInfo -- 137 '' '' true", - "run-script": "node --loader ts-node/esm --experimental-json-modules --experimental-specifier-resolution=node", "recheckPermitInfo:bnb": "yarn run fetchPermitInfo -- 56 '' '' true", "recheckPermitInfo:lens": "yarn run fetchPermitInfo -- 232 '' '' true", "recheckPermitInfo:linea": "yarn run fetchPermitInfo -- 59144 '' '' true", "recheckPermitInfo:plasma": "yarn run fetchPermitInfo -- 9745 '' '' true", + "recheckPermitInfo:ink": "yarn run fetchPermitInfo -- 57073 '' '' true", + "run-script": "node --loader ts-node/esm --experimental-json-modules --experimental-specifier-resolution=node", "test": "node --test" }, "license": "(MIT OR Apache-2.0)", "dependencies": { - "@cowprotocol/cow-sdk": "7.1.0", + "@cowprotocol/cow-sdk": "7.3.1", "@cowprotocol/permit-utils": "^0.7.0-RC.1", "@uniswap/token-lists": "^1.0.0-beta.33", "ajv": "^8.17.1", diff --git a/scripts/processRequest.mjs b/scripts/processRequest.mjs index 6dcc20962..1b8f1f3af 100644 --- a/scripts/processRequest.mjs +++ b/scripts/processRequest.mjs @@ -9,6 +9,7 @@ export const NETWORK_CONFIG = { GNOSIS: { chainId: 100, blockExplorer: 'gnosisscan.io' }, LINEA: { chainId: 59144, blockExplorer: 'lineascan.build' }, PLASMA: { chainId: 9745, blockExplorer: 'plasmascan.to' }, + INK: { chainId: 57073, blockExplorer: 'explorer.inkonchain.com' }, } export const VALIDATION_RULES = { diff --git a/src/permitInfo/const.ts b/src/permitInfo/const.ts index 5164f4e36..642e652c4 100644 --- a/src/permitInfo/const.ts +++ b/src/permitInfo/const.ts @@ -17,6 +17,7 @@ export const DEFAULT_RPC_URLS: Record = { [SupportedChainId.LENS]: 'https://rpc.lens.xyz', [SupportedChainId.LINEA]: 'https://rpc.linea.build', [SupportedChainId.PLASMA]: 'https://rpc.plasma.to', + [SupportedChainId.INK]: 'https://rpc-ten.inkonchain.com', } export const BASE_PATH = join('..', 'public') diff --git a/src/permitInfo/utils/getTokensFromTokenList.ts b/src/permitInfo/utils/getTokensFromTokenList.ts index 5c5bd6b68..aa6007602 100644 --- a/src/permitInfo/utils/getTokensFromTokenList.ts +++ b/src/permitInfo/utils/getTokensFromTokenList.ts @@ -16,7 +16,7 @@ export async function getTokensFromTokenList( if (tokenListPath?.startsWith('http')) { return (await fetch(tokenListPath).then((r) => r.json())).tokens } else { - const filePath = tokenListPath ? tokenListPath : join(BASE_PATH, tokenListsByNetwork[chainId]) + const filePath = tokenListPath ? join(BASE_PATH, tokenListPath) : join(BASE_PATH, tokenListsByNetwork[chainId]) return JSON.parse(readFileSync(filePath, 'utf-8')).tokens } diff --git a/src/public/CoinGecko.57073.json b/src/public/CoinGecko.57073.json new file mode 100644 index 000000000..3132af72d --- /dev/null +++ b/src/public/CoinGecko.57073.json @@ -0,0 +1,263 @@ +{ + "keywords": [ + "defi" + ], + "version": { + "major": 0, + "minor": 1, + "patch": 0 + }, + "tokens": [ + { + "chainId": 57073, + "address": "0x2d270e6886d130d724215a266106e6832161eaed", + "name": "USDC", + "symbol": "USDC", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/6319/large/USDC.png?1769615602" + }, + { + "chainId": 57073, + "address": "0x71052bae71c25c78e37fd12e5ff1101a71d9018f", + "name": "Chainlink", + "symbol": "LINK", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/877/large/Chainlink_Logo_500.png?1760023405" + }, + { + "chainId": 57073, + "address": "0x0200c29006150606b650577bbe7b6248f58470c1", + "name": "USDT0", + "symbol": "USDT0", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/53705/large/usdt0.jpg?1737086183" + }, + { + "chainId": 57073, + "address": "0xe343167631d89b6ffc58b88d6b7fb0228795491d", + "name": "Global Dollar", + "symbol": "USDG", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/51281/large/GDN_USDG_Token_200x200.png?1730484111" + }, + { + "chainId": 57073, + "address": "0xf50258d3c1dd88946c567920b986a12e65b50dac", + "name": "Tether Gold Tokens", + "symbol": "XAUT0", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/66560/large/XAUt0_Token_Icon_Gold.png?1749747942" + }, + { + "chainId": 57073, + "address": "0xa3d68b74bf0528fdd07263c60d6488749044914b", + "name": "Wrapped eETH", + "symbol": "WEETH", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/33033/large/weETH.png?1701438396" + }, + { + "chainId": 57073, + "address": "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73", + "name": "GHO", + "symbol": "GHO", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/30663/large/gho-token-logo.png?1720517092" + }, + { + "chainId": 57073, + "address": "0xf1815bd50389c46847f0bda824ec8da914045d14", + "name": "Stargate Bridged USDC", + "symbol": "USDC.E", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/69316/large/usdc.jpg?1758186473" + }, + { + "chainId": 57073, + "address": "0x80eede496655fb9047dd39d9f418d5483ed600df", + "name": "Frax USD", + "symbol": "FRXUSD", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/53963/large/frxUSD.png?1737792154" + }, + { + "chainId": 57073, + "address": "0x1217bfe6c773eec6cc4a38b5dc45b92292b6e189", + "name": "OpenUSDT", + "symbol": "OUSDT", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/54815/large/ousdt.jpg?1741848258" + }, + { + "chainId": 57073, + "address": "0x5bcf6b008bf80b9296238546bace1797657b05d6", + "name": "Re Protocol reUSD", + "symbol": "REUSD", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/66291/large/Points_Program_Group_91.png?1749676055" + }, + { + "chainId": 57073, + "address": "0x64445f0aecc51e94ad52d8ac56b7190e764e561a", + "name": "Wrapped FRAX", + "symbol": "WFRAX", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/55432/large/wfrax_64.png?1745993624" + }, + { + "chainId": 57073, + "address": "0x4200000000000000000000000000000000000006", + "name": "Ink Bridged WETH (Ink)", + "symbol": "WETH", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/52918/large/weth_2.jpg?1734684690" + }, + { + "chainId": 57073, + "address": "0x73e0c0d45e048d25fc26fa3159b0aa04bfa4db98", + "name": "Kraken Wrapped BTC", + "symbol": "KBTC", + "decimals": 8, + "logoURI": "https://assets.coingecko.com/coins/images/50879/large/kBTC.png?1730321084" + }, + { + "chainId": 57073, + "address": "0xae4efbc7736f963982aacb17efa37fcbab924cb3", + "name": "Solv Protocol BTC", + "symbol": "SOLVBTC", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/36800/large/solvBTC.png?1719810684" + }, + { + "chainId": 57073, + "address": "0x2416092f143378750bb29b79ed961ab195cceea5", + "name": "Renzo Restaked ETH", + "symbol": "EZETH", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/34753/large/Ezeth_logo_circle.png?1713496404" + }, + { + "chainId": 57073, + "address": "0xd3c8da379d71a33bfee8875f87ac2748beb1d58d", + "name": "Universal BTC", + "symbol": "UNIBTC", + "decimals": 8, + "logoURI": "https://assets.coingecko.com/coins/images/39599/large/uniBTC_200px.png?1723064455" + }, + { + "chainId": 57073, + "address": "0xc3eacf0612346366db554c991d7858716db09f58", + "name": "Kelp DAO Restaked ETH", + "symbol": "RSETH", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/33800/large/Icon___Dark.png?1702991855" + }, + { + "chainId": 57073, + "address": "0xe8245188db1efc91aef32e7aa4cf346b9a5830cf", + "name": "CF Large Cap Index", + "symbol": "LCAP", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/69331/large/LCAP_1024.png?1758220127" + }, + { + "chainId": 57073, + "address": "0x20c69c12abf2b6f8d8ca33604dd25c700c7e70a5", + "name": "Cat Call Agent", + "symbol": "CAT", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/54745/large/DV_dS5E9_400x400_%282%29.png?1741326959" + }, + { + "chainId": 57073, + "address": "0x3d63825b0d8669307366e6c8202f656b9e91d368", + "name": "Wild Goat Coin", + "symbol": "WGC", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/37966/large/wgcCoin-256px.png?1768798052" + }, + { + "chainId": 57073, + "address": "0xc99f5c922dae05b6e2ff83463ce705ef7c91f077", + "name": "Solv Protocol Staked BTC", + "symbol": "XSOLVBTC", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/39384/large/xSolvBTC.png?1744170824" + }, + { + "chainId": 57073, + "address": "0xa161132371c94299d215915d4cbc3b629e2059be", + "name": "Bedrock BTC", + "symbol": "BRBTC", + "decimals": 8, + "logoURI": "https://assets.coingecko.com/coins/images/53039/large/brBTC_200.png?1735074374" + }, + { + "chainId": 57073, + "address": "0x0606fc632ee812ba970af72f8489baaa443c4b98", + "name": "ANITA", + "symbol": "ANITA", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/68173/large/_L_L.png?1754996486" + }, + { + "chainId": 57073, + "address": "0xd642b49d10cc6e1bc1c6945725667c35e0875f22", + "name": "Purple", + "symbol": "PURPLE", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/53880/large/ink_purple.png?1738227741" + }, + { + "chainId": 57073, + "address": "0x17906b1cd88aa8efaefc5e82891b52a22219bd45", + "name": "Superseed", + "symbol": "SUPR", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/55519/large/Small.png?1746469855" + }, + { + "chainId": 57073, + "address": "0xca5f2ccbd9c40b32657df57c716de44237f80f05", + "name": "Kraken", + "symbol": "KRAKEN", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/52919/large/kraken.jpg?1734685461" + }, + { + "chainId": 57073, + "address": "0x62c99fac20b33b5423fdf9226179e973a8353e36", + "name": "Bert", + "symbol": "BERT", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/68104/large/BERT_LOGO_4.jpg?1754802668" + }, + { + "chainId": 57073, + "address": "0x0c5e2d1c98cd265c751e02f8f3293bc5764f9111", + "name": "Shroomy", + "symbol": "SHROOMY", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/54002/large/1000000182.jpg?1737942213" + }, + { + "chainId": 57073, + "address": "0x53eb0098d09b8d1008f382bbd2a5d4f649111710", + "name": "WATCHDOGS", + "symbol": "WATCH", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/67089/large/GkveKRgXcAESEPj_%281%29.png?1751702681" + }, + { + "chainId": 57073, + "address": "0x7160644365e7011fa96ce60706743b434df32690", + "name": "KEK", + "symbol": "KEK", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/67904/large/200x200.jpg?1754222647" + } + ], + "name": "CoinGecko on Ink", + "logoURI": "https://support.coingecko.com/hc/article_attachments/4499575478169/CoinGecko_logo.png", + "timestamp": "2026-01-29T13:31:04.861Z" +} \ No newline at end of file diff --git a/src/public/PermitInfo.57073.json b/src/public/PermitInfo.57073.json new file mode 100644 index 000000000..25dc00b16 --- /dev/null +++ b/src/public/PermitInfo.57073.json @@ -0,0 +1,138 @@ +{ + "0x0200c29006150606b650577bbe7b6248f58470c1": { + "type": "eip-2612", + "version": "1", + "name": "USDâ‚®0" + }, + "0x1217bfe6c773eec6cc4a38b5dc45b92292b6e189": { + "type": "eip-2612", + "version": "1", + "name": "OpenUSDT" + }, + "0x17906b1cd88aa8efaefc5e82891b52a22219bd45": { + "type": "eip-2612", + "version": "1", + "name": "Superseed" + }, + "0x20c69c12abf2b6f8d8ca33604dd25c700c7e70a5": { + "type": "eip-2612", + "version": "1", + "name": "Cat Call Agent" + }, + "0x2416092f143378750bb29b79ed961ab195cceea5": { + "type": "eip-2612", + "version": "1", + "name": "Renzo Restaked ETH" + }, + "0x2d270e6886d130d724215a266106e6832161eaed": { + "type": "eip-2612", + "version": "2", + "name": "USDC" + }, + "0x64445f0aecc51e94ad52d8ac56b7190e764e561a": { + "type": "eip-2612", + "version": "1.1.0", + "name": "Wrapped Frax" + }, + "0x80eede496655fb9047dd39d9f418d5483ed600df": { + "type": "eip-2612", + "version": "1.1.0", + "name": "Frax USD" + }, + "0xe343167631d89b6ffc58b88d6b7fb0228795491d": { + "type": "eip-2612", + "version": "1", + "name": "Global Dollar" + }, + "0xf1815bd50389c46847f0bda824ec8da914045d14": { + "type": "eip-2612", + "version": "2", + "name": "Bridged USDC (Stargate)" + }, + "0xf50258d3c1dd88946c567920b986a12e65b50dac": { + "type": "eip-2612", + "version": "1", + "name": "XAUt0" + }, + "0xfc421ad3c883bf9e7c4f42de845c4e4405799e73": { + "type": "eip-2612", + "version": "1", + "name": "Gho Token" + }, + "0x0606fc632ee812ba970af72f8489baaa443c4b98": { + "type": "unsupported", + "name": "ANITA INK" + }, + "0x0c5e2d1c98cd265c751e02f8f3293bc5764f9111": { + "type": "unsupported", + "name": "Shroomy" + }, + "0x3d63825b0d8669307366e6c8202f656b9e91d368": { + "type": "unsupported", + "name": "Wild Goat Coin" + }, + "0x4200000000000000000000000000000000000006": { + "type": "unsupported", + "name": "Wrapped Ether" + }, + "0x53eb0098d09b8d1008f382bbd2a5d4f649111710": { + "type": "unsupported", + "name": "WATCH DOGS" + }, + "0x5bcf6b008bf80b9296238546bace1797657b05d6": { + "type": "unsupported", + "name": "Re Protocol reUSD" + }, + "0x62c99fac20b33b5423fdf9226179e973a8353e36": { + "type": "unsupported", + "name": "BERT" + }, + "0x71052bae71c25c78e37fd12e5ff1101a71d9018f": { + "type": "unsupported", + "name": "ChainLink Token" + }, + "0x7160644365e7011fa96ce60706743b434df32690": { + "type": "unsupported", + "name": "Kek" + }, + "0x73e0c0d45e048d25fc26fa3159b0aa04bfa4db98": { + "type": "unsupported", + "name": "Kraken Wrapped Bitcoin" + }, + "0xa161132371c94299d215915d4cbc3b629e2059be": { + "type": "unsupported", + "name": "brBTC" + }, + "0xa3d68b74bf0528fdd07263c60d6488749044914b": { + "type": "unsupported", + "name": "Wrapped eETH" + }, + "0xae4efbc7736f963982aacb17efa37fcbab924cb3": { + "type": "unsupported", + "name": "Solv BTC" + }, + "0xc3eacf0612346366db554c991d7858716db09f58": { + "type": "unsupported", + "name": "KelpDao Restaked ETH" + }, + "0xc99f5c922dae05b6e2ff83463ce705ef7c91f077": { + "type": "unsupported", + "name": "xSolvBTC" + }, + "0xca5f2ccbd9c40b32657df57c716de44237f80f05": { + "type": "unsupported", + "name": "Kraken" + }, + "0xd3c8da379d71a33bfee8875f87ac2748beb1d58d": { + "type": "unsupported", + "name": "uniBTC" + }, + "0xd642b49d10cc6e1bc1c6945725667c35e0875f22": { + "type": "unsupported", + "name": "Purple" + }, + "0xe8245188db1efc91aef32e7aa4cf346b9a5830cf": { + "type": "unsupported", + "name": "CF Large Cap Index" + } +} \ No newline at end of file diff --git a/src/public/Uniswap.57073.json b/src/public/Uniswap.57073.json new file mode 100644 index 000000000..5fd76ed8a --- /dev/null +++ b/src/public/Uniswap.57073.json @@ -0,0 +1,39 @@ +{ + "keywords": [ + "defi" + ], + "version": { + "major": 0, + "minor": 1, + "patch": 0 + }, + "tokens": [ + { + "chainId": 57073, + "address": "0x71052bae71c25c78e37fd12e5ff1101a71d9018f", + "name": "Chainlink", + "symbol": "LINK", + "decimals": 18, + "logoURI": "https://assets.coingecko.com/coins/images/877/large/Chainlink_Logo_500.png?1760023405" + }, + { + "chainId": 57073, + "address": "0x2d270e6886d130d724215a266106e6832161eaed", + "name": "USDC", + "symbol": "USDC", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/6319/large/USDC.png?1769615602" + }, + { + "chainId": 57073, + "address": "0xe343167631d89b6ffc58b88d6b7fb0228795491d", + "name": "Global Dollar", + "symbol": "USDG", + "decimals": 6, + "logoURI": "https://assets.coingecko.com/coins/images/51281/large/GDN_USDG_Token_200x200.png?1730484111" + } + ], + "name": "Uniswap on Ink", + "logoURI": "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir", + "timestamp": "2026-01-29T13:31:04.459Z" +} \ No newline at end of file diff --git a/src/scripts/auxLists/utils.ts b/src/scripts/auxLists/utils.ts index 0208b3733..577f8c674 100644 --- a/src/scripts/auxLists/utils.ts +++ b/src/scripts/auxLists/utils.ts @@ -40,6 +40,7 @@ export const COINGECKO_CHAINS: Record = { [SupportedChainId.LENS]: 'lens', [SupportedChainId.LINEA]: 'linea', [SupportedChainId.PLASMA]: 'plasma', + [SupportedChainId.INK]: 'ink', } export const DISPLAY_CHAIN_NAMES: Record = { @@ -54,6 +55,7 @@ export const DISPLAY_CHAIN_NAMES: Record = { [SupportedChainId.LENS]: 'Lens', [SupportedChainId.LINEA]: 'Linea', [SupportedChainId.PLASMA]: 'Plasma', + [SupportedChainId.INK]: 'Ink', } export const VS_CURRENCY = 'usd' diff --git a/src/scripts/downloadImages.js b/src/scripts/downloadImages.js index ee8a0ec64..6631b1904 100644 --- a/src/scripts/downloadImages.js +++ b/src/scripts/downloadImages.js @@ -42,7 +42,7 @@ async function downloadImage(logoURI, filePath) { async function main() { const scriptDir = dirname(fileURLToPath(import.meta.url)) const projectRoot = path.join(scriptDir, '..') - + let downloaded = 0 let skipped = 0 let failed = [] @@ -57,7 +57,7 @@ async function main() { try { const result = await downloadImage(logoURI, filePath) - + if (result.skipped) { console.log(`Skipped ${symbol} - file already exists`) skipped++ diff --git a/src/scripts/mapTokenListToBridge.ts b/src/scripts/mapTokenListToBridge.ts index 3d46e46b6..d43baf9e3 100644 --- a/src/scripts/mapTokenListToBridge.ts +++ b/src/scripts/mapTokenListToBridge.ts @@ -42,14 +42,12 @@ async function generateGnosisChainList(source: string | TokenList, resultFile: s tokenListSource: source, bridgeContractAddress: OMNIBRIDGE_ADDRESS, bridgeContractAbi: OMNIBRIDGE_CONTRACT_ABI, - methodName: 'calculateL2TokenAddress', + methodName: 'bridgedTokenAddress', outputFilePath: resultFile, tokensToReplace: TOKENS_TO_REPLACE_ARBITRUM, }) } - - async function generateArbitrumOneChainList(source: string | TokenList, resultFile: string) { console.log('*** Map tokens from Mainnet to Arbitrum One using Arbitrum bridge ***') diff --git a/tsconfig.json b/tsconfig.json index a8b34dad2..bd36f253e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,8 @@ }, "ts-node": { // Tell ts-node CLI to install the --loader automatically - "esm": true + "esm": true, + "logError": true, + "pretty": true } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b60732003..1e2271c74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,18 +59,18 @@ json-stringify-deterministic "^1.0.8" multiformats "^9.6.4" -"@cowprotocol/cow-sdk@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-7.1.0.tgz#8f327e61d97d51fdbd97500cee91226548fbdd69" - integrity sha512-T26cWE47pr3Z+RQNEzqPLsXy8a/uBulE321FUGREnhpraGlkWn8m68ggutuNXHv9sXsHJBv/8neKSFnROVUqiA== - dependencies: - "@cowprotocol/sdk-app-data" "4.1.6" - "@cowprotocol/sdk-common" "0.3.0" - "@cowprotocol/sdk-config" "0.3.0" - "@cowprotocol/sdk-contracts-ts" "0.4.4" - "@cowprotocol/sdk-order-book" "0.2.0" - "@cowprotocol/sdk-order-signing" "0.1.10" - "@cowprotocol/sdk-trading" "0.4.5" +"@cowprotocol/cow-sdk@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-7.3.1.tgz#6baf1b1eacda4fc7214c0da46312f30420b676b5" + integrity sha512-LgIWfRSZ8FxoGG6vYb4SZo4nN+xV4CsGhJiayQzRkmVfu+Rxn1hJGb0HlieVHV/nPaX6MaO3SIcoz0IeD95f+Q== + dependencies: + "@cowprotocol/sdk-app-data" "4.6.0" + "@cowprotocol/sdk-common" "0.5.2" + "@cowprotocol/sdk-config" "0.7.1" + "@cowprotocol/sdk-contracts-ts" "1.4.0" + "@cowprotocol/sdk-order-book" "0.6.1" + "@cowprotocol/sdk-order-signing" "0.1.28" + "@cowprotocol/sdk-trading" "0.9.2" "@cowprotocol/permit-utils@^0.7.0-RC.1": version "0.7.0-RC.1" @@ -82,71 +82,73 @@ ethers "^5.7.2" tslib "^2.6.1" -"@cowprotocol/sdk-app-data@4.1.6": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.1.6.tgz#e4d5b7843fe875e8a91da48a8fa3a0045b3b778e" - integrity sha512-wPy0p1HibKKBjGrH9iRYDGGYIzIJQORRAdy/IB+PRojBLTeBEkTp9HKvNHwDaPhdAlV19e/U5p65WM4b5sKW5A== +"@cowprotocol/sdk-app-data@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.6.0.tgz#0a1bbb4bedd6f28f38e416efd5c5ff3c1237de0d" + integrity sha512-Rcs7jcYjDlbtD4EdcR2GC18dJlz23uGMVTS8KuozesSuJtuOfa+8VVyBnrQNVJo1qRGnxguq6ZayEnivmfxHIw== dependencies: - "@cowprotocol/sdk-common" "0.3.0" + "@cowprotocol/sdk-common" "0.5.2" ajv "^8.11.0" cross-fetch "^3.1.5" ipfs-only-hash "^4.0.0" json-stringify-deterministic "^1.0.8" multiformats "^9.6.4" -"@cowprotocol/sdk-common@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.3.0.tgz#f03a5e36d67d0c5cdb6be5bd7ceda879b751542d" - integrity sha512-xk2VUjO4+XI5968r1pYFbqUxM2nmBcVPvGIw0pcqDpx4OLef0Flr3tuHtZY42RYYa6nNsNKOBV9Jd4RauYUOgQ== +"@cowprotocol/sdk-common@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.5.2.tgz#3c8e01c71dec33bb7fbc313c692be8dc050c9056" + integrity sha512-JBeLwFxbpJVBQoeC3GSyo0Utg+Cx+J7i7XGIUc3ptXFLVc70Sl7F3+PliK43OT4HKiR81r7D7UHWuG7Mfhvxqw== + dependencies: + "@cowprotocol/sdk-config" "0.7.1" -"@cowprotocol/sdk-config@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-0.3.0.tgz#8a0e8e81daf3e82c60f71ff73893a794dd08c589" - integrity sha512-EUDqXMSYsgLdXDnvC9sc9ozpsjQdP6R738R0kKNWp/mTI9j7wsI9sVrDcKIoX7qH+pu0aRmRxEFbEbW7uXUcIg== +"@cowprotocol/sdk-config@0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-0.7.1.tgz#98f7f2e7a04fd30657b9a0e31cab837220f26c60" + integrity sha512-hTNatJ9ykPNCg0oxKxegSWt5TLKL+B1X+qOlLqSfH6uWx3oba7BEjFEDfYIwSwLzxToe9oiJdW1Dp7GgWrK2CQ== dependencies: exponential-backoff "^3.1.1" limiter "^2.1.0" -"@cowprotocol/sdk-contracts-ts@0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-0.4.4.tgz#28084c697a88ff4e756bdfa3d85a2c187ee5cb3f" - integrity sha512-lZA1P554EXtgu1+SCw9aj/BCUZpaKWuoaJB3iiuAFw/sq9Ax407L5T1v2+sj+hhLy49EjiVNjoZxzC7wVXmOKA== +"@cowprotocol/sdk-contracts-ts@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-1.4.0.tgz#f803a859fb0b7c303a1eb528b74256efad344b6b" + integrity sha512-aHCArZCUzJLNDeLuvYc+gLQ14VHye0mBuyGvXAfgeL3nOZEDbGiGFLjQn70Szsu9XEUUO2WySXl3Ldp3csQa6w== dependencies: - "@cowprotocol/sdk-common" "0.3.0" - "@cowprotocol/sdk-config" "0.3.0" + "@cowprotocol/sdk-common" "0.5.2" + "@cowprotocol/sdk-config" "0.7.1" -"@cowprotocol/sdk-order-book@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-0.2.0.tgz#b4c24baa50c9c9670e951d0b9059dfd66ff7ed52" - integrity sha512-OeSHMGVEx7LCX+7ZnoRwLdIkJX25/tiquCVaocagrqzyPPPxD/TOg6BGLjgvl0kzoXLtfoSQ3CSz3IfvN/Etlg== +"@cowprotocol/sdk-order-book@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-0.6.1.tgz#e14d23f2525309cdb01407dec75d86e3d125451a" + integrity sha512-GOfwFc27iuQQwi2EBkX4iX6UNOLdCvykZCzeZxYJpv1ysbaM+xZDEaWWApBD9Y37vhfyvPkcPwlzWD03tfkhlA== dependencies: - "@cowprotocol/sdk-common" "0.3.0" - "@cowprotocol/sdk-config" "0.3.0" + "@cowprotocol/sdk-common" "0.5.2" + "@cowprotocol/sdk-config" "0.7.1" cross-fetch "^3.2.0" exponential-backoff "^3.1.2" limiter "^3.0.0" -"@cowprotocol/sdk-order-signing@0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.1.10.tgz#2526f05229cda4476c2ff2f6b446789cc12d78da" - integrity sha512-yDiOLAdguJAp/VEFWBBft0FyRZXTyAe7Ic9fzkILN5BG7u+NkGzvN8Kgz/1Fr2OtE4lixfp6S0Mh744kuamvLg== - dependencies: - "@cowprotocol/sdk-common" "0.3.0" - "@cowprotocol/sdk-config" "0.3.0" - "@cowprotocol/sdk-contracts-ts" "0.4.4" - "@cowprotocol/sdk-order-book" "0.2.0" - -"@cowprotocol/sdk-trading@0.4.5": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-0.4.5.tgz#d4979e6642edbdea5ec97a71f686d2f2447fe250" - integrity sha512-bBGr8+X4IlyS7v9uDalWhj1qJ71OciHkq1iVohOJdgEOO7OSX+ZUT14qcERtaRzYDDx3WMYlqjlTUKAtvo7nsA== - dependencies: - "@cowprotocol/sdk-app-data" "4.1.6" - "@cowprotocol/sdk-common" "0.3.0" - "@cowprotocol/sdk-config" "0.3.0" - "@cowprotocol/sdk-contracts-ts" "0.4.4" - "@cowprotocol/sdk-order-book" "0.2.0" - "@cowprotocol/sdk-order-signing" "0.1.10" +"@cowprotocol/sdk-order-signing@0.1.28": + version "0.1.28" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.1.28.tgz#6959d38b238e7fb594cf5c5fd647e0605fcef8ed" + integrity sha512-Kcuay6nnCNvOiiu74P155JrfHF0ZhhgZEDklZp+UdNJST14sdillTxlDe1elc6/EgbBkObsBPbdXWHOE+E4XGw== + dependencies: + "@cowprotocol/sdk-common" "0.5.2" + "@cowprotocol/sdk-config" "0.7.1" + "@cowprotocol/sdk-contracts-ts" "1.4.0" + "@cowprotocol/sdk-order-book" "0.6.1" + +"@cowprotocol/sdk-trading@0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-0.9.2.tgz#3e1c83804406d6d4136a85bacb0d84270ced9be9" + integrity sha512-BmL/YN6yHOWrxcGwX/G1C39kuA4ZreDpLcSOTzOQ+1w5iGZqkL74oPa2MArmiSBoA4fm8YR3FR2E1jILlRZzQw== + dependencies: + "@cowprotocol/sdk-app-data" "4.6.0" + "@cowprotocol/sdk-common" "0.5.2" + "@cowprotocol/sdk-config" "0.7.1" + "@cowprotocol/sdk-contracts-ts" "1.4.0" + "@cowprotocol/sdk-order-book" "0.6.1" + "@cowprotocol/sdk-order-signing" "0.1.28" deepmerge "^4.3.1" "@cspotcode/source-map-support@^0.8.0":