From d8e7e6ca4fad81aa7071dabbdcdce46fd0deb75a Mon Sep 17 00:00:00 2001 From: chefjackson <116779127+chefjackson@users.noreply.github.com> Date: Mon, 18 Sep 2023 15:35:53 +0800 Subject: [PATCH] chore: add opbnb token list --- index.ts | 2 +- ...00000000000000000000000000000000000006.png | Bin 0 -> 3036 bytes ...6b91D9Be155A6Db01f749217d76fF02A7227F2.png | Bin 0 -> 1627 bytes ...798f023fC62146e8Aa1b36Da45fb70855a77Ea.png | Bin 0 -> 1747 bytes lists/pancakeswap-opbnb-default.json | 49 +++++++++++++ src/buildList.ts | 16 ++--- src/constants.ts | 6 ++ src/tokens/pancakeswap-opbnb-default.json | 34 +++++++++ src/utils/publicClients.ts | 68 ++++++++++++------ test/default.test.ts | 3 +- 10 files changed, 148 insertions(+), 30 deletions(-) create mode 100644 lists/images/opbnb/0x4200000000000000000000000000000000000006.png create mode 100644 lists/images/opbnb/0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2.png create mode 100644 lists/images/opbnb/0xE7798f023fC62146e8Aa1b36Da45fb70855a77Ea.png create mode 100644 lists/pancakeswap-opbnb-default.json create mode 100644 src/tokens/pancakeswap-opbnb-default.json diff --git a/index.ts b/index.ts index 0b993f12..7f93d63f 100644 --- a/index.ts +++ b/index.ts @@ -39,7 +39,7 @@ switch (command) { throw new Error(`Failed to generate list ${listName}`); } break; - case 'makeindex': + case "makeindex": await buildIndex(LISTS); break; case "fetch": diff --git a/lists/images/opbnb/0x4200000000000000000000000000000000000006.png b/lists/images/opbnb/0x4200000000000000000000000000000000000006.png new file mode 100644 index 0000000000000000000000000000000000000000..6d362ce0c141b82d20f63c629d31673a6ad8a7f1 GIT binary patch literal 3036 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 A+yDRo literal 0 HcmV?d00001 diff --git a/lists/images/opbnb/0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2.png b/lists/images/opbnb/0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2.png new file mode 100644 index 0000000000000000000000000000000000000000..b22ab4dd8c3c7af8127542cbed177243aaa51ddd GIT binary patch literal 1627 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 { - if (t1.chainId === t2.chainId) { - // CAKE first in extended list - if ((t1.symbol === "CAKE") !== (t2.symbol === "CAKE")) { - return t1.symbol === "CAKE" ? -1 : 1; - } - return t1.symbol.toLowerCase() < t2.symbol.toLowerCase() ? -1 : 1; + if (t1.chainId === t2.chainId) { + // CAKE first in extended list + if ((t1.symbol === "CAKE") !== (t2.symbol === "CAKE")) { + return t1.symbol === "CAKE" ? -1 : 1; } - return t1.chainId < t2.chainId ? -1 : 1; - }) + return t1.symbol.toLowerCase() < t2.symbol.toLowerCase() ? -1 : 1; + } + return t1.chainId < t2.chainId ? -1 : 1; + }) : list, }; }; diff --git a/src/constants.ts b/src/constants.ts index b9e75d07..97be502f 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -120,4 +120,10 @@ export const LISTS = { logoURI: "https://pancakeswap.finance/logo.png", sort: true, }, + "pancakeswap-opbnb-default": { + name: "PancakeSwap OpBnb Default", + keywords: ["pancakeswap", "default", "opbnb"], + logoURI: "https://pancakeswap.finance/logo.png", + sort: false, + }, } as const; diff --git a/src/tokens/pancakeswap-opbnb-default.json b/src/tokens/pancakeswap-opbnb-default.json new file mode 100644 index 00000000..0f8bc523 --- /dev/null +++ b/src/tokens/pancakeswap-opbnb-default.json @@ -0,0 +1,34 @@ +[ + { + "name": "BTCB Token", + "symbol": "BTCB", + "address": "0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2", + "chainId": 204, + "decimals": 18, + "logoURI": "https://tokens.pancakeswap.finance/images/opbnb/0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2.png" + }, + { + "name": "Ethereum Token", + "symbol": "ETH", + "address": "0xE7798f023fC62146e8Aa1b36Da45fb70855a77Ea", + "chainId": 204, + "decimals": 18, + "logoURI": "https://tokens.pancakeswap.finance/images/opbnb/0xE7798f023fC62146e8Aa1b36Da45fb70855a77Ea.png" + }, + { + "name": "Wrapped BNB", + "symbol": "WBNB", + "address": "0x4200000000000000000000000000000000000006", + "chainId": 204, + "decimals": 18, + "logoURI": "https://tokens.pancakeswap.finance/images/opbnb/0x4200000000000000000000000000000000000006.png" + }, + { + "name": "Tether USD", + "symbol": "USDT", + "address": "0x9e5AAC1Ba1a2e6aEd6b32689DFcF62A509Ca96f3", + "chainId": 204, + "decimals": 18, + "logoURI": "https://tokens.pancakeswap.finance/images/symbol/usdt.png" + } +] diff --git a/src/utils/publicClients.ts b/src/utils/publicClients.ts index 20dd13b3..3104723a 100644 --- a/src/utils/publicClients.ts +++ b/src/utils/publicClients.ts @@ -1,50 +1,75 @@ import { createPublicClient, http, Chain } from "viem"; import { arbitrum, base, bsc, mainnet, polygonZkEvm, zkSync } from "viem/chains"; - - export const linea = { id: 59_144, - name: 'Linea Mainnet', - network: 'linea-mainnet', - nativeCurrency: { name: 'Linea Ether', symbol: 'ETH', decimals: 18 }, + name: "Linea Mainnet", + network: "linea-mainnet", + nativeCurrency: { name: "Linea Ether", symbol: "ETH", decimals: 18 }, rpcUrls: { infura: { - http: ['https://linea-mainnet.infura.io/v3'], - webSocket: ['wss://linea-mainnet.infura.io/ws/v3'], + http: ["https://linea-mainnet.infura.io/v3"], + webSocket: ["wss://linea-mainnet.infura.io/ws/v3"], }, default: { - http: ['https://rpc.linea.build'], - webSocket: ['wss://rpc.linea.build'], + http: ["https://rpc.linea.build"], + webSocket: ["wss://rpc.linea.build"], }, public: { - http: ['https://rpc.linea.build'], - webSocket: ['wss://rpc.linea.build'], + http: ["https://rpc.linea.build"], + webSocket: ["wss://rpc.linea.build"], }, }, blockExplorers: { default: { - name: 'Etherscan', - url: 'https://lineascan.build', + name: "Etherscan", + url: "https://lineascan.build", }, etherscan: { - name: 'Etherscan', - url: 'https://lineascan.build', + name: "Etherscan", + url: "https://lineascan.build", }, blockscout: { - name: 'Blockscout', - url: 'https://explorer.linea.build', + name: "Blockscout", + url: "https://explorer.linea.build", }, }, contracts: { multicall3: { - address: '0xcA11bde05977b3631167028862bE2a173976CA11', + address: "0xcA11bde05977b3631167028862bE2a173976CA11", blockCreated: 42, }, }, testnet: false, -} as const satisfies Chain +} as const satisfies Chain; +export const opbnb = { + id: 204, + name: "opBNB Mainnet", + network: "opbnb", + nativeCurrency: { name: "BNB", symbol: "BNB", decimals: 18 }, + rpcUrls: { + default: { + http: ["https://opbnb-mainnet-rpc.bnbchain.org"], + }, + public: { + http: ["https://opbnb-mainnet-rpc.bnbchain.org"], + }, + }, + blockExplorers: { + default: { + name: "opBNBScan", + url: "https://opbnbscan.com", + }, + }, + contracts: { + multicall3: { + address: "0xcA11bde05977b3631167028862bE2a173976CA11", + blockCreated: 512881, + }, + }, + testnet: true, +} as const satisfies Chain; export const publicClients = { [mainnet.id]: createPublicClient({ @@ -75,5 +100,8 @@ export const publicClients = { chain: base, transport: http(), }), + [opbnb.id]: createPublicClient({ + chain: opbnb, + transport: http(), + }), }; - diff --git a/test/default.test.ts b/test/default.test.ts index d63a1430..13e476dc 100644 --- a/test/default.test.ts +++ b/test/default.test.ts @@ -12,7 +12,7 @@ import getTokenChainData from "../src/utils/getTokensChainData.js"; import { getAptosCoinsChainData } from "../src/utils/getAptosCoinChainData.js"; import { LISTS } from "../src/constants.js"; import { arbitrum, base, bsc, mainnet, polygonZkEvm, zkSync } from "viem/chains"; -import { linea } from "../src/utils/publicClients.js"; +import { linea, opbnb } from "../src/utils/publicClients.js"; const CASES = Object.entries(LISTS).map(([key, value]) => "test" in value ? ([key, value.test] as const) : ([key] as const) @@ -49,6 +49,7 @@ const multiChainLogoPath = { [arbitrum.id]: "/arbitrum", [linea.id]: "/linea", [base.id]: "/base", + [opbnb.id]: "/opbnb", }; // Modified https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get