From a6f16262dcbb8d9ab56e4e7edc918aac4840d4c3 Mon Sep 17 00:00:00 2001 From: codingsh Date: Mon, 27 Dec 2021 18:58:23 +0000 Subject: [PATCH 01/14] feat(Metis): add Netswap dex --- cspell.json | 130 ++++++------ .../Labs/components/SwapSettingDialog.tsx | 12 ++ packages/dashboard/src/pages/Settings/api.ts | 5 + packages/mask/shared/flags.ts | 1 + .../components/shared/ApplicationBoard.tsx | 20 +- .../background-script/SettingsService.ts | 3 + .../EVM/assets/logo_white.016a0880.svg | 24 +++ .../mask/src/plugins/EVM/assets/metis.png | Bin 0 -> 12156 bytes packages/mask/src/plugins/EVM/constants.ts | 10 + .../SNSAdaptor/trader/TradeProviderIcon.tsx | 3 + .../src/plugins/Trader/apis/trader/index.ts | 2 + .../mask/src/plugins/Trader/constants/0x.ts | 1 + .../mask/src/plugins/Trader/constants/dodo.ts | 1 + .../src/plugins/Trader/constants/netswap.ts | 37 ++++ .../src/plugins/Trader/constants/sushiswap.ts | 1 + .../src/plugins/Trader/constants/trader.ts | 2 + packages/mask/src/plugins/Trader/pipes.ts | 10 + packages/mask/src/plugins/Trader/services.ts | 9 + packages/mask/src/plugins/Trader/settings.ts | 9 + .../src/plugins/Trader/trader/0x/useTrade.ts | 2 + .../Trader/trader/useGetTradeContext.ts | 12 ++ .../plugins/Trader/trader/useTradeCallback.ts | 2 + .../plugins/Trader/trader/useTradeContext.ts | 12 ++ .../trending/useCurrentTradeProvider.ts | 4 + .../mask/src/plugins/Trader/types/trader.ts | 1 + .../src/plugins/Wallet/services/account.ts | 1 + packages/mask/src/resources/NETSWAPIcon.tsx | 69 ++++++ packages/mask/src/settings/listener.ts | 2 + packages/mask/src/utils/native-rpc/Web.ts | 4 + packages/public-api/src/web.ts | 2 + packages/shared-base/src/Messages/Mask.ts | 1 + .../src/UI/components/NetworkIcon/index.tsx | 36 ++++ packages/web3-constants/compile-constants.ts | 2 + packages/web3-constants/evm/airdrop.json | 4 +- packages/web3-constants/evm/coingecko.json | 8 +- .../web3-constants/evm/coinmarketcap.json | 4 +- packages/web3-constants/evm/cryptoartai.json | 12 +- packages/web3-constants/evm/debank.json | 4 +- packages/web3-constants/evm/dhedge.json | 8 +- packages/web3-constants/evm/ethereum.json | 16 +- packages/web3-constants/evm/explorer.json | 8 +- packages/web3-constants/evm/gitcoin.json | 16 +- .../web3-constants/evm/good-ghosting.json | 8 +- packages/web3-constants/evm/ito.json | 28 ++- packages/web3-constants/evm/lbp.json | 4 +- packages/web3-constants/evm/mask-box.json | 20 +- packages/web3-constants/evm/pooltogether.json | 8 +- packages/web3-constants/evm/red-packet.json | 24 ++- packages/web3-constants/evm/rpc.json | 8 +- .../evm/space-station-galaxy.json | 8 +- .../evm/token-asset-base-url.json | 4 +- packages/web3-constants/evm/token-list.json | 6 +- packages/web3-constants/evm/token.json | 168 +++++++++++---- packages/web3-constants/evm/trader.json | 196 +++++++++++++++--- packages/web3-constants/evm/trending.json | 12 +- packages/web3-constants/evm/zerion.json | 6 +- packages/web3-shared/evm/assets/chains.json | 46 +++- packages/web3-shared/evm/pipes/index.ts | 4 + packages/web3-shared/evm/types/index.ts | 5 + .../web3-shared/evm/utils/chainDetailed.ts | 2 + 60 files changed, 861 insertions(+), 206 deletions(-) create mode 100644 packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg create mode 100644 packages/mask/src/plugins/EVM/assets/metis.png create mode 100644 packages/mask/src/plugins/Trader/constants/netswap.ts create mode 100644 packages/mask/src/resources/NETSWAPIcon.tsx create mode 100644 packages/shared/src/UI/components/NetworkIcon/index.tsx diff --git a/cspell.json b/cspell.json index b01dfbf3f611..17dda7b15735 100644 --- a/cspell.json +++ b/cspell.json @@ -12,53 +12,17 @@ "*.snap" ], "words": [ - "AMPL", - "Adai", - "Amountstate", - "Ampleforth", - "ARETH", - "Bolivarian", - "Bouvet", - "Burkina", - "CAIP", - "Caicos", - "Celo", - "Checksummed", - "Cunha", - "Cura", - "DHEDGE", - "Darussalam", - "ECID", - "Eustatius", - "Exchangetoken", - "Faso", - "Futuna", - "IDBP", - "IHDR", - "Kitts", - "Leste", - "Maarten", - "Marino", - "Maskbook", - "Mastdon", - "Mayen", - "Merkle", - "Mutex", - "Plurinational", - "Polkadot", - "Pooltogether", - "Rhonin", - "Rica", - "Sint", - "Tokelau", - "Transak", - "Vcent", - "Viet", "aave", + "Adai", "addrs", + "Amountstate", "ampl", + "AMPL", + "Ampleforth", "anchorme", + "apikey", "arbitrum", + "ARETH", "arweave", "bgcolor", "bignumber", @@ -67,9 +31,17 @@ "blockie", "blockies", "bluebar", + "Bolivarian", + "Bouvet", "builtins", + "Burkina", + "Caicos", + "CAIP", "canonify", "cashtag", + "Celo", + "Checksummed", + "Choudhary", "cipherparams", "ciphertext", "clearfix", @@ -78,9 +50,15 @@ "commentid", "consolas", "contenteditable", + "contrib", + "contribs", "cooldown", + "counterparty", "crwdne", + "Cunha", + "Cura", "d'Ivoire", + "Darussalam", "datas", "debank", "denorm", @@ -88,30 +66,40 @@ "deserialization", "destory", "dfyn", + "DHEDGE", "dimensiondev", "dklen", "dompurify", + "ECID", "ecsign", "elec", "encryptedmsg", "endregion", "ethersproject", + "Eustatius", "everytime", + "Exchangetoken", + "Faso", "fbid", "filelist", "fileservice", "formating", "fullfilled", "furucombo", + "Futuna", "gasnow", "geckoview", "gltf", "goodghosting", + "Görli", "gundb", "hashmasks", + "hexlify", "holoflows", "iconbar", + "IDBP", "ifclaimed", + "IHDR", "imagebitmap", "immer", "importmap", @@ -120,27 +108,40 @@ "ipfs", "ipfsurl", "ittr", + "jailbroken", "jsbi", "jsonml", "kdfparams", "keccak", + "Kitts", "kred", "labelledby", "languagedetector", "lemy", + "Leste", "linkedin", "linkswap", "locationchange", "lowercased", + "Maarten", + "macbinary", + "majeure", + "Marino", + "Maskbook", "maskbookjsonrpc", "maskface", "masknet", "masknetwork", "masknightly", "masktext", + "Mastdon", + "Mayen", + "Merkle", "messagepack", "metas", + "metaverse", "millify", + "misoperation", "monofont", "monospace", "mooniswap", @@ -150,18 +151,26 @@ "mskc", "multicall", "multihop", + "Mutex", + "NETSWAP", "newsfeed", + "NFTRSS", + "nftscan", "nowallet", "nums", "opensea", "overridable", "overscan", + "Pageable", "pagelet", "pancakeswap", "pathnames", "perma", "pid", "pids", + "Plurinational", + "Polkadot", + "Pooltogether", "popper", "popperjs", "porportion", @@ -170,7 +179,6 @@ "promi", "proxied", "pushstate", - "unstyled", "pvtsutils", "qrcode", "quickswap", @@ -180,6 +188,9 @@ "redpacket", "replacestate", "repost", + "resizer", + "Rhonin", + "Rica", "rindexed", "rpid", "rpids", @@ -187,7 +198,10 @@ "sashimiswap", "scroller", "secp", + "Serializers", "shink", + "Sint", + "solana", "steelblue", "steganographic", "steganography", @@ -196,6 +210,7 @@ "superrare", "sushiswap", "swappable", + "Swither", "tabindex", "tablist", "testid", @@ -203,6 +218,9 @@ "thegraph", "timelock", "timelocked", + "Tokelau", + "tokenid", + "Transak", "twimg", "txid", "typechain", @@ -211,9 +229,12 @@ "unencrypted", "unreviewed", "unstake", + "unstyled", "untrusted", "urlcat", "usermenu", + "Vcent", + "Viet", "viewbox", "visualcompletion", "walletconnect", @@ -227,28 +248,7 @@ "xlarge", "xlink", "zerion", - "Zubin", - "Choudhary", - "macbinary", - "Choudhary", - "counterparty", - "jailbroken", - "misoperation", - "majeure", - "Serializers", - "Swither", - "nftscan", - "apikey", - "tokenid", - "NFTRSS", - "solana", - "Görli", - "resizer", - "Pageable", - "metaverse", - "hexlify", - "contribs", - "contrib" + "Zubin" ], "ignoreWords": [ "cryptopunks", diff --git a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx index dfc4b6ab3c50..1b6667b9c481 100644 --- a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx +++ b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx @@ -10,6 +10,7 @@ import { useArbitrumNetworkTradeProvider, useXDaiNetworkTradeProvider, useCeloNetworkTradeProvider, + useMetisNetworkTradeProvider, } from '../../Settings/api' import SettingItem from './SettingItem' @@ -50,6 +51,11 @@ export default function SwapSettingDialog({ open, onClose }: SettingDialogProps) const celoOptions = [{ label: 'SushiSwap', value: TradeProvider.SUSHISWAP }] + const metisOptions = [ + { label: 'SushiSwap', value: TradeProvider.SUSHISWAP }, + { label: 'NetSwap', value: TradeProvider.NETSWAP }, + ] + const t = useDashboardI18N() const items = [ @@ -89,6 +95,12 @@ export default function SwapSettingDialog({ open, onClose }: SettingDialogProps) options: celoOptions, onChange: (value: string) => Services.Settings.setCeloNetworkTradeProvider(Number.parseInt(value, 10)), }, + { + legend: t.labs_settings_swap_network({ network: 'Metis' }), + value: useMetisNetworkTradeProvider(), + options: metisOptions, + onChange: (value: string) => Services.Settings.setMetisNetworkTradeProvider(Number.parseInt(value, 10)), + }, ] return ( diff --git a/packages/dashboard/src/pages/Settings/api.ts b/packages/dashboard/src/pages/Settings/api.ts index 9461090c25df..cfbeb0da69f8 100644 --- a/packages/dashboard/src/pages/Settings/api.ts +++ b/packages/dashboard/src/pages/Settings/api.ts @@ -39,6 +39,11 @@ export const [useCeloNetworkTradeProvider] = createGlobalState( Messages.events.celoNetworkTradeProviderSettings.on, ) +export const [useMetisNetworkTradeProvider] = createGlobalState( + Services.Settings.getMetisNetworkTradeProvider, + Messages.events.metisNetworkTradeProviderSettings.on, +) + const BASE_RUL = 'https://vaalh28dbi.execute-api.ap-east-1.amazonaws.com/api' interface BackupBaseRequest { diff --git a/packages/mask/shared/flags.ts b/packages/mask/shared/flags.ts index 37e2d34542cb..123d0905294e 100644 --- a/packages/mask/shared/flags.ts +++ b/packages/mask/shared/flags.ts @@ -53,6 +53,7 @@ export const Flags = { xdai_enabled: true, flow_enabled: true, celo_enabled: true, + metis_enabled: true, nft_airdrop_enabled: false, //#region Functionality missing / broken diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 7ad72de47317..aa1ace3edbbc 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -282,7 +282,15 @@ export function ApplicationBoard({ secondEntries, secondEntryChainTabs }: MaskAp ]), createEntry('dHEDGE', new URL('./assets/dHEDGE.png', import.meta.url).toString(), () => {}), ], - [ChainId.Mainnet, ChainId.BSC, ChainId.Matic, ChainId.Arbitrum, ChainId.xDai, ChainId.Celo], + [ + ChainId.Mainnet, + ChainId.BSC, + ChainId.Matic, + ChainId.Arbitrum, + ChainId.xDai, + ChainId.Celo, + ChainId.Metis, + ], ), undefined, true, @@ -301,7 +309,15 @@ export function ApplicationBoard({ secondEntries, secondEntryChainTabs }: MaskAp () => {}, ), ], - [ChainId.Mainnet, ChainId.BSC, ChainId.Matic, ChainId.Arbitrum, ChainId.xDai, ChainId.Celo], + [ + ChainId.Mainnet, + ChainId.BSC, + ChainId.Matic, + ChainId.Arbitrum, + ChainId.xDai, + ChainId.Celo, + ChainId.Metis, + ], ), undefined, true, diff --git a/packages/mask/src/extension/background-script/SettingsService.ts b/packages/mask/src/extension/background-script/SettingsService.ts index c56eede26932..c2a1fc4e9a98 100644 --- a/packages/mask/src/extension/background-script/SettingsService.ts +++ b/packages/mask/src/extension/background-script/SettingsService.ts @@ -16,6 +16,7 @@ import { arbitrumNetworkTradeProviderSettings, xdaiNetworkTradeProviderSettings, celoNetworkTradeProviderSettings, + metisNetworkTradeProviderSettings, } from '../../plugins/Trader/settings' import { queryMyPersonas } from './IdentityService' import { @@ -76,6 +77,8 @@ export const [getxDaiNetworkTradeProvider, setxDaiNetworkTradeProvider] = create export const [getCeloNetworkTradeProvider, setCeloNetworkTradeProvider] = create(celoNetworkTradeProviderSettings) +export const [getMetisNetworkTradeProvider, setMetisNetworkTradeProvider] = create(metisNetworkTradeProviderSettings) + export const [getCurrentSelectedWalletProvider, setCurrentSelectedWalletProvider] = create(currentProviderSettings) export const [getCurrentSelectedWalletNetwork, setCurrentSelectedWalletNetwork] = create(currentNetworkSettings) diff --git a/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg b/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg new file mode 100644 index 000000000000..dc5def19236f --- /dev/null +++ b/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg @@ -0,0 +1,24 @@ + + + Untitled + + + + \ No newline at end of file diff --git a/packages/mask/src/plugins/EVM/assets/metis.png b/packages/mask/src/plugins/EVM/assets/metis.png new file mode 100644 index 0000000000000000000000000000000000000000..53275676fb393973152f1f65cce236594574bfa6 GIT binary patch literal 12156 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 YrsiFn+JISFnE^c~7GCFN case TradeProvider.BANCOR: return + case TradeProvider.NETSWAP: + return default: unreachable(props.provider) } diff --git a/packages/mask/src/plugins/Trader/apis/trader/index.ts b/packages/mask/src/plugins/Trader/apis/trader/index.ts index a211641dff76..d8eca0afdb65 100644 --- a/packages/mask/src/plugins/Trader/apis/trader/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trader/index.ts @@ -27,6 +27,8 @@ export async function getAvailableTraderProviders(chainId: ChainId) { return [TradeProvider.SUSHISWAP] case NetworkType.Celo: return [TradeProvider.SUSHISWAP] + case NetworkType.Metis: + return [TradeProvider.SUSHISWAP, TradeProvider.NETSWAP] default: safeUnreachable(networkType) return [] diff --git a/packages/mask/src/plugins/Trader/constants/0x.ts b/packages/mask/src/plugins/Trader/constants/0x.ts index a68c5823aba4..f7d981a4ec4e 100644 --- a/packages/mask/src/plugins/Trader/constants/0x.ts +++ b/packages/mask/src/plugins/Trader/constants/0x.ts @@ -7,6 +7,7 @@ export const ZRX_BASE_URL: Record = { [NetworkType.Arbitrum]: 'https://arbitrum.api.0x.org/', [NetworkType.xDai]: 'https://xdai.api.0x.org/', [NetworkType.Celo]: 'https://celo.api.0x.org/', + [NetworkType.Metis]: 'https://metis.api.0x.org/', } export const ZRX_AFFILIATE_ADDRESS = '0x934B510D4C9103E6a87AEf13b816fb080286D649' diff --git a/packages/mask/src/plugins/Trader/constants/dodo.ts b/packages/mask/src/plugins/Trader/constants/dodo.ts index 7577f232cb60..431780f64004 100644 --- a/packages/mask/src/plugins/Trader/constants/dodo.ts +++ b/packages/mask/src/plugins/Trader/constants/dodo.ts @@ -9,4 +9,5 @@ export const networkNames: Record = { [NetworkType.Arbitrum]: 'arbitrum', [NetworkType.xDai]: 'xdai', [NetworkType.Celo]: 'celo', + [NetworkType.Metis]: 'metis', } diff --git a/packages/mask/src/plugins/Trader/constants/netswap.ts b/packages/mask/src/plugins/Trader/constants/netswap.ts new file mode 100644 index 000000000000..682831e78d7f --- /dev/null +++ b/packages/mask/src/plugins/Trader/constants/netswap.ts @@ -0,0 +1,37 @@ +import { ChainId } from '@masknet/web3-shared-evm' +import { + DAI, + MSKA, + MSKB, + MSKC, + RUNE, + USDC, + USDT, + WBTC, + WNATIVE, + WNATIVE_ONLY, + NFTX, + STETH, + BUSD, + BTCB, + CUSD, + CEUR, +} from './trader' +import type { ERC20AgainstToken, ERC20TokenCustomizedBase } from './types' + +/** + * Some tokens can only be swapped via certain pairs, + * so we override the list of bases that are considered for these tokens. + */ +export const SUSHISWAP_CUSTOM_BASES: ERC20TokenCustomizedBase = {} + +export const SUSHISWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { + ...WNATIVE_ONLY, + [ChainId.Mainnet]: [WNATIVE, DAI, USDC, USDT, WBTC, RUNE, NFTX, STETH].map((x) => x[ChainId.Mainnet]), + [ChainId.Rinkeby]: [WNATIVE, MSKA, MSKB, MSKC].map((x) => x[ChainId.Rinkeby]), + [ChainId.Matic]: [WNATIVE, USDC, WBTC, DAI, USDT].map((x) => x[ChainId.Matic]), + [ChainId.BSC]: [WNATIVE, DAI, BUSD, USDC, USDT, BTCB].map((x) => x[ChainId.BSC]), + [ChainId.xDai]: [WNATIVE, USDC, USDT, WBTC].map((x) => x[ChainId.xDai]), + [ChainId.Celo]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Celo]), + [ChainId.Metis]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Metis]), +} diff --git a/packages/mask/src/plugins/Trader/constants/sushiswap.ts b/packages/mask/src/plugins/Trader/constants/sushiswap.ts index d8d3ab05efb5..682831e78d7f 100644 --- a/packages/mask/src/plugins/Trader/constants/sushiswap.ts +++ b/packages/mask/src/plugins/Trader/constants/sushiswap.ts @@ -33,4 +33,5 @@ export const SUSHISWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { [ChainId.BSC]: [WNATIVE, DAI, BUSD, USDC, USDT, BTCB].map((x) => x[ChainId.BSC]), [ChainId.xDai]: [WNATIVE, USDC, USDT, WBTC].map((x) => x[ChainId.xDai]), [ChainId.Celo]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Celo]), + [ChainId.Metis]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Metis]), } diff --git a/packages/mask/src/plugins/Trader/constants/trader.ts b/packages/mask/src/plugins/Trader/constants/trader.ts index 33a343a36b3c..0180a75173c1 100644 --- a/packages/mask/src/plugins/Trader/constants/trader.ts +++ b/packages/mask/src/plugins/Trader/constants/trader.ts @@ -64,6 +64,8 @@ export const WNATIVE_ONLY: ERC20AgainstToken = { [ChainId.Arbitrum_Rinkeby]: [WNATIVE[ChainId.Arbitrum_Rinkeby]], [ChainId.xDai]: [WNATIVE[ChainId.xDai]], [ChainId.Celo]: [WNATIVE[ChainId.Celo]], + [ChainId.Metis]: [WNATIVE[ChainId.Metis]], + [ChainId.Metis_Stardust]: [WNATIVE[ChainId.Metis_Stardust]], } export const BIPS_BASE = new BigNumber(10000) diff --git a/packages/mask/src/plugins/Trader/pipes.ts b/packages/mask/src/plugins/Trader/pipes.ts index 0093d1cb1ea4..379129541bec 100644 --- a/packages/mask/src/plugins/Trader/pipes.ts +++ b/packages/mask/src/plugins/Trader/pipes.ts @@ -56,6 +56,7 @@ export const resolveTradeProviderName = createLookupTableResolver { throw new Error(`Unknown provider type: ${tradeProvider}`) @@ -82,6 +83,8 @@ export function resolveTradeProviderLink(tradeProvider: TradeProvider, networkTy return 'https://xdai.api.0x.org/' case NetworkType.Celo: return 'https://celo.api.0x.org/' + case NetworkType.Metis: + return 'https://metis.api.0x.org/' default: safeUnreachable(networkType) return '' @@ -100,6 +103,8 @@ export function resolveTradeProviderLink(tradeProvider: TradeProvider, networkTy return 'https://app.dodoex.io' case TradeProvider.BANCOR: return 'https://app.bancor.network/eth/swap' + case TradeProvider.NETSWAP: + return 'https://netswap.io/#/swap' default: unreachable(tradeProvider) } @@ -138,6 +143,8 @@ export function resolveTradePairLink(tradeProvider: TradeProvider, address: stri return `https://analytics-xdai.sushi.com/pairs/${address}` case NetworkType.Celo: return `https://analytics-celo.sushi.com/pairs/${address}` + case NetworkType.Metis: + return `https://analytics-sushi.sushi.com/pairs/${address}` default: safeUnreachable(networkType) return '' @@ -153,6 +160,8 @@ export function resolveTradePairLink(tradeProvider: TradeProvider, address: stri case TradeProvider.BANCOR: // TODO - Bancor analytics should be available with V3 return `` + case TradeProvider.NETSWAP: + return `https://info.netswap.io/pair/${address}` default: unreachable(tradeProvider) } @@ -242,6 +251,7 @@ export const resolveZrxTradePoolName = createLookupTableResolver { if (currentDataProviderSettings.value === DataProvider.UNISWAP_INFO) currentDataProviderSettings.value = DataProvider.COIN_GECKO break + case NetworkType.Metis: + currentTradeProviderSettings.value = TradeProvider.SUSHISWAP + if (currentDataProviderSettings.value === DataProvider.UNISWAP_INFO) + currentDataProviderSettings.value = DataProvider.COIN_GECKO + break default: unreachable(networkType) } @@ -74,6 +80,9 @@ currentTradeProviderSettings.addListener((tradeProvider: TradeProvider) => { case NetworkType.Celo: celoNetworkTradeProviderSettings.value = tradeProvider break + case NetworkType.Metis: + metisNetworkTradeProviderSettings.value = tradeProvider + break default: unreachable(networkType) } diff --git a/packages/mask/src/plugins/Trader/settings.ts b/packages/mask/src/plugins/Trader/settings.ts index 931337c8f068..537515819ecc 100644 --- a/packages/mask/src/plugins/Trader/settings.ts +++ b/packages/mask/src/plugins/Trader/settings.ts @@ -83,6 +83,12 @@ export const celoNetworkTradeProviderSettings = createGlobalSettings '' }, ) +export const metisNetworkTradeProviderSettings = createGlobalSettings( + `${PLUGIN_IDENTIFIER}+metis+tradeProvider`, + TradeProvider.SUSHISWAP, + { primary: () => '' }, +) + //#region trade provider general settings export interface TradeProviderSettings { pools: ZrxTradePool[] @@ -98,6 +104,7 @@ const pancakeswapSettings = createInternalSettings(`${PLUGIN_IDENTIFIER} const balancerSettings = createInternalSettings(`${PLUGIN_IDENTIFIER}+tradeProvider+balancer`, '') const dodoSettings = createInternalSettings(`${PLUGIN_IDENTIFIER}+tradeProvider+dodo`, '') const bancorSettings = createInternalSettings(`${PLUGIN_IDENTIFIER}+tradeProvider+bancor`, '') +const netswapSettings = createInternalSettings(`${PLUGIN_IDENTIFIER}+tradeProvider+netswap`, '') /** * The general settings of specific tarde provider @@ -124,6 +131,8 @@ export function getCurrentTradeProviderGeneralSettings(tradeProvider: TradeProvi return dodoSettings case TradeProvider.BANCOR: return bancorSettings + case TradeProvider.NETSWAP: + return netswapSettings default: unreachable(tradeProvider) } diff --git a/packages/mask/src/plugins/Trader/trader/0x/useTrade.ts b/packages/mask/src/plugins/Trader/trader/0x/useTrade.ts index 354c465cd33e..bc44228480e3 100644 --- a/packages/mask/src/plugins/Trader/trader/0x/useTrade.ts +++ b/packages/mask/src/plugins/Trader/trader/0x/useTrade.ts @@ -32,6 +32,8 @@ export function getNativeTokenLabel(networkType: NetworkType) { return '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' case NetworkType.Celo: return '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + case NetworkType.Metis: + return '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' default: safeUnreachable(networkType) return '' diff --git a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts index c0eb7e4df671..4f50276311fa 100644 --- a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts @@ -113,6 +113,18 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { TYPE: tradeProvider, ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, } + case TradeProvider.NETSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, + INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SUSHISWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SUSHISWAP_CUSTOM_BASES, + } default: if (tradeProvider) unreachable(tradeProvider) return null diff --git a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts index 5994a0906bcd..5ec098a6b45c 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts @@ -96,6 +96,8 @@ export function useTradeCallback( return dodo case TradeProvider.BANCOR: return bancor + case TradeProvider.NETSWAP: + return uniswapV2Like default: if (provider) unreachable(provider) return [] diff --git a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts index b5b6dfc7f350..129ab51b868c 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts @@ -114,6 +114,18 @@ export function useTradeContext(tradeProvider: TradeProvider) { TYPE: tradeProvider, ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, } + case TradeProvider.NETSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, + INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SUSHISWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SUSHISWAP_CUSTOM_BASES, + } default: unreachable(tradeProvider) } diff --git a/packages/mask/src/plugins/Trader/trending/useCurrentTradeProvider.ts b/packages/mask/src/plugins/Trader/trending/useCurrentTradeProvider.ts index 832ec9767f0b..472f022af5ec 100644 --- a/packages/mask/src/plugins/Trader/trending/useCurrentTradeProvider.ts +++ b/packages/mask/src/plugins/Trader/trending/useCurrentTradeProvider.ts @@ -6,6 +6,7 @@ import { arbitrumNetworkTradeProviderSettings, xdaiNetworkTradeProviderSettings, celoNetworkTradeProviderSettings, + metisNetworkTradeProviderSettings, } from '../settings' import { ChainId, getNetworkTypeFromChainId, NetworkType } from '@masknet/web3-shared-evm' import { unreachable } from '@dimensiondev/kit' @@ -20,6 +21,7 @@ export function useCurrentTradeProvider(chainId?: ChainId) { const arbitrumNetworkTradeProvider = useValueRef(arbitrumNetworkTradeProviderSettings) const xdaiNetworkTradeProvider = useValueRef(xdaiNetworkTradeProviderSettings) const celoNetworkTradeProvider = useValueRef(celoNetworkTradeProviderSettings) + const metisNetworkTradeProvider = useValueRef(metisNetworkTradeProviderSettings) if (!networkType) return TradeProvider.UNISWAP_V2 switch (networkType) { @@ -35,6 +37,8 @@ export function useCurrentTradeProvider(chainId?: ChainId) { return xdaiNetworkTradeProvider case NetworkType.Celo: return celoNetworkTradeProvider + case NetworkType.Metis: + return metisNetworkTradeProvider default: unreachable(networkType) } diff --git a/packages/mask/src/plugins/Trader/types/trader.ts b/packages/mask/src/plugins/Trader/types/trader.ts index 2ac65f17e4be..8578d2b1e7a9 100644 --- a/packages/mask/src/plugins/Trader/types/trader.ts +++ b/packages/mask/src/plugins/Trader/types/trader.ts @@ -66,6 +66,7 @@ export enum ZrxTradePool { UniswapV3 = 'Uniswap_V3', WaultSwap = 'WaultSwap', xSigma = 'xSigma', + NetSwap = 'NetSwap', } export interface TradeComputed { diff --git a/packages/mask/src/plugins/Wallet/services/account.ts b/packages/mask/src/plugins/Wallet/services/account.ts index 4ba65254d43e..afa86f489265 100644 --- a/packages/mask/src/plugins/Wallet/services/account.ts +++ b/packages/mask/src/plugins/Wallet/services/account.ts @@ -125,5 +125,6 @@ export async function getSupportedNetworks() { Flags.arbitrum_enabled ? NetworkType.Arbitrum : undefined, Flags.xdai_enabled ? NetworkType.xDai : undefined, Flags.celo_enabled ? NetworkType.Celo : undefined, + Flags.metis_enabled ? NetworkType.Metis : undefined, ].filter(Boolean) as NetworkType[] } diff --git a/packages/mask/src/resources/NETSWAPIcon.tsx b/packages/mask/src/resources/NETSWAPIcon.tsx new file mode 100644 index 000000000000..218e3a8937f7 --- /dev/null +++ b/packages/mask/src/resources/NETSWAPIcon.tsx @@ -0,0 +1,69 @@ +import { SvgIconProps, SvgIcon } from '@mui/material' + +const svg = ( + + + + + + + + + + + + + + + + + + + + +) + +export function NETSWAPIcon(props: SvgIconProps) { + return {svg} +} diff --git a/packages/mask/src/settings/listener.ts b/packages/mask/src/settings/listener.ts index 974d4a21988b..2990f10c9ffe 100644 --- a/packages/mask/src/settings/listener.ts +++ b/packages/mask/src/settings/listener.ts @@ -26,6 +26,7 @@ import { arbitrumNetworkTradeProviderSettings, xdaiNetworkTradeProviderSettings, celoNetworkTradeProviderSettings, + metisNetworkTradeProviderSettings, } from '../plugins/Trader/settings' import type { InternalSettings } from './createSettings' @@ -54,5 +55,6 @@ export function ToBeListened(): ToBeListedSettings { arbitrumNetworkTradeProviderSettings, xdaiNetworkTradeProviderSettings, celoNetworkTradeProviderSettings, + metisNetworkTradeProviderSettings, } } diff --git a/packages/mask/src/utils/native-rpc/Web.ts b/packages/mask/src/utils/native-rpc/Web.ts index 3bef5fa0e2c7..42cf775f30be 100644 --- a/packages/mask/src/utils/native-rpc/Web.ts +++ b/packages/mask/src/utils/native-rpc/Web.ts @@ -117,6 +117,8 @@ export const MaskNetworkAPI: MaskNetworkAPIs = { return Services.Settings.getxDaiNetworkTradeProvider() case NetworkType.Celo: return Services.Settings.getCeloNetworkTradeProvider() + case NetworkType.Metis: + return Services.Settings.getMetisNetworkTradeProvider() default: unreachable(network) } @@ -135,6 +137,8 @@ export const MaskNetworkAPI: MaskNetworkAPIs = { return Services.Settings.setxDaiNetworkTradeProvider(provider) case NetworkType.Celo: return Services.Settings.setCeloNetworkTradeProvider(provider) + case NetworkType.Metis: + return Services.Settings.setMetisNetworkTradeProvider(provider) default: unreachable(network) } diff --git a/packages/public-api/src/web.ts b/packages/public-api/src/web.ts index 8455cdefd60b..ee90c8b67ad9 100644 --- a/packages/public-api/src/web.ts +++ b/packages/public-api/src/web.ts @@ -192,6 +192,7 @@ export enum NetworkType { Arbitrum = 'Arbitrum', xDai = 'xDai', Celo = 'Celo', + Metis = 'Metis', } export enum DataProvider { @@ -211,6 +212,7 @@ export enum TradeProvider { DODO = 7, UNISWAP_V3 = 8, BANCOR = 9, + NETSWAP = 10, } /** Supported language settings */ export enum LanguageOptions { diff --git a/packages/shared-base/src/Messages/Mask.ts b/packages/shared-base/src/Messages/Mask.ts index 7f01aee43478..4bb886e0ea88 100644 --- a/packages/shared-base/src/Messages/Mask.ts +++ b/packages/shared-base/src/Messages/Mask.ts @@ -34,6 +34,7 @@ export interface MaskSettingsEvents { arbitrumNetworkTradeProviderSettings: TradeProvider xdaiNetworkTradeProviderSettings: TradeProvider celoNetworkTradeProviderSettings: TradeProvider + metisNetworkTradeProviderSettings: TradeProvider } export interface MaskMobileOnlyEvents { diff --git a/packages/shared/src/UI/components/NetworkIcon/index.tsx b/packages/shared/src/UI/components/NetworkIcon/index.tsx new file mode 100644 index 000000000000..ff038bafb2b2 --- /dev/null +++ b/packages/shared/src/UI/components/NetworkIcon/index.tsx @@ -0,0 +1,36 @@ +import { makeStyles } from '@masknet/theme' +import { NetworkType } from '@masknet/web3-shared-evm' +import { useStylesExtends } from '@masknet/theme' + +const useStyles = makeStyles()({ + icon: { + borderRadius: '50%', + backgroundColor: '#F7F9FA', + }, +}) + +export interface NetworkIconProps extends withClasses<'icon'> { + size?: number + networkType?: NetworkType +} + +const icons: Record = { + [NetworkType.Ethereum]: new URL('./wallet-network-icon/ethereum.png', import.meta.url).toString(), + [NetworkType.Binance]: new URL('./wallet-network-icon/binance.png', import.meta.url).toString(), + [NetworkType.Polygon]: new URL('./wallet-network-icon/polygon.png', import.meta.url).toString(), + [NetworkType.Arbitrum]: new URL('./wallet-network-icon/arbitrum.png', import.meta.url).toString(), + [NetworkType.xDai]: new URL('./wallet-network-icon/xdai.png', import.meta.url).toString(), + [NetworkType.Celo]: new URL('./wallet-network-icon/celo.png', import.meta.url).toString(), + [NetworkType.Metis]: new URL('./wallet-network-icon/metis.png', import.meta.url).toString(), +} + +export function NetworkIcon(props: NetworkIconProps) { + const { size = 48, networkType } = props + const classes = useStylesExtends(useStyles(), props) + + if (!networkType) return null + + return icons[networkType] ? ( + + ) : null +} diff --git a/packages/web3-constants/compile-constants.ts b/packages/web3-constants/compile-constants.ts index a2359f699e1d..870fe2bb227c 100644 --- a/packages/web3-constants/compile-constants.ts +++ b/packages/web3-constants/compile-constants.ts @@ -53,6 +53,8 @@ compileConstants(path.join(__dirname, 'evm'), [ 'Arbitrum_Rinkeby', 'xDai', 'Celo', + 'Metis', + 'Metis_Stardust', ]) compileConstants(path.join(__dirname, 'solana'), ['mainnet-beta', 'testnet', 'devnet']) diff --git a/packages/web3-constants/evm/airdrop.json b/packages/web3-constants/evm/airdrop.json index b00324865ee1..b34c32214013 100644 --- a/packages/web3-constants/evm/airdrop.json +++ b/packages/web3-constants/evm/airdrop.json @@ -12,6 +12,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/coingecko.json b/packages/web3-constants/evm/coingecko.json index 2b5d22fc8ad2..5e0018bd48bb 100644 --- a/packages/web3-constants/evm/coingecko.json +++ b/packages/web3-constants/evm/coingecko.json @@ -12,7 +12,9 @@ "Arbitrum": "arbitrum-one", "Arbitrum_Rinkeby": "", "xDai": "xdai", - "Celo": "celo" + "Celo": "celo", + "Metis": "metis", + "Metis_Stardust": "" }, "COIN_ID": { "Mainnet": "ethereum", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "xdai", - "Celo": "celo" + "Celo": "celo", + "Metis": "metis", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/coinmarketcap.json b/packages/web3-constants/evm/coinmarketcap.json index 3ae7ed1239d6..863e5c655ce5 100644 --- a/packages/web3-constants/evm/coinmarketcap.json +++ b/packages/web3-constants/evm/coinmarketcap.json @@ -12,6 +12,8 @@ "Arbitrum": "11841", "Arbitrum_Rinkeby": "", "xDai": "5601", - "Celo": "5567" + "Celo": "5567", + "Metis": "1088", + "Metis_Stardust": "588" } } diff --git a/packages/web3-constants/evm/cryptoartai.json b/packages/web3-constants/evm/cryptoartai.json index 01e13450dedf..ca2f1d00fef6 100644 --- a/packages/web3-constants/evm/cryptoartai.json +++ b/packages/web3-constants/evm/cryptoartai.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "ARTIST_ACCEPTING_BIDS_V2": { "Mainnet": "0x78C889749f29D2965a76Ede3BBb232A9729Ccf0b", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "CANFT_MARKET": { "Mainnet": "0x72d081953957723e540780a0C6bA31725469238E", @@ -42,6 +46,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/debank.json b/packages/web3-constants/evm/debank.json index 27e8ed397c4f..bf5f65df9b69 100644 --- a/packages/web3-constants/evm/debank.json +++ b/packages/web3-constants/evm/debank.json @@ -12,6 +12,8 @@ "Arbitrum": "arb", "Arbitrum_Rinkeby": "", "xDai": "xdai", - "Celo": "celo" + "Celo": "celo", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/dhedge.json b/packages/web3-constants/evm/dhedge.json index b3c359201854..c6918afdcfa8 100644 --- a/packages/web3-constants/evm/dhedge.json +++ b/packages/web3-constants/evm/dhedge.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "API_URL": { "Mainnet": "https://api-v2.dhedge.org/graphql", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/ethereum.json b/packages/web3-constants/evm/ethereum.json index 13feadda2f6c..032193fe70c7 100644 --- a/packages/web3-constants/evm/ethereum.json +++ b/packages/web3-constants/evm/ethereum.json @@ -12,7 +12,9 @@ "Arbitrum": "0xAb7B1bE4233A04e5C43a810E75657ECED8E5463B", "Arbitrum_Rinkeby": "0xF98dC9391273c5ab9fa2c980A8d4F875ece802db", "xDai": "0x96c7D011cdFD467f551605f0f5Fce279F86F4186", - "Celo": "0x8e28F1d64ceD52b9A09aB1AA3071Aa3c05802d1F" + "Celo": "0x8e28F1d64ceD52b9A09aB1AA3071Aa3c05802d1F", + "Metis": "", + "Metis_Stardust": "" }, "MULTICALL_ADDRESS": { "Mainnet": "0x1F98415757620B543A52E61c46B32eB19261F984", @@ -27,7 +29,9 @@ "Arbitrum": "0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB", "Arbitrum_Rinkeby": "0xa501c031958F579dB7676fF1CE78AD305794d579", "xDai": "0xAb7B1bE4233A04e5C43a810E75657ECED8E5463B", - "Celo": "0x072453AdEC16cFC7FB6Af1517c3f25407180cccC" + "Celo": "0x072453AdEC16cFC7FB6Af1517c3f25407180cccC", + "Metis": "0x0071DDb5a2e80B6b22317594a0307599836621CD", + "Metis_Stardust": "0xb96EC7593A05cA620585fCfb2EAd7da01EE64619" }, "ENS_REGISTRAR_ADDRESS": { "Mainnet": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", @@ -42,7 +46,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "ENS_REVERSE_RECORDS_ADDRESS": { "Mainnet": "0x3671aE578E63FdF66ad4F3E12CC0c0d71Ac7510C", @@ -57,6 +63,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/explorer.json b/packages/web3-constants/evm/explorer.json index 2f0da4228889..7b6f662a4d00 100644 --- a/packages/web3-constants/evm/explorer.json +++ b/packages/web3-constants/evm/explorer.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "EXPLORER_API_KEY": { "Mainnet": "99IX9MBZKG8FYQUECXDNDPATGVDDH6JCWW", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/gitcoin.json b/packages/web3-constants/evm/gitcoin.json index 75ecb98271a0..c7e679e8def2 100644 --- a/packages/web3-constants/evm/gitcoin.json +++ b/packages/web3-constants/evm/gitcoin.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BULK_CHECKOUT_ADDRESS": { "Mainnet": "0x7d655c57f71464B6f83811C55D84009Cd9f5221C", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "GITCOIN_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -42,7 +46,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "GITCOIN_TIP_PERCENTAGE": { "Mainnet": 5, @@ -57,6 +63,8 @@ "Arbitrum": 5, "Arbitrum_Rinkeby": 5, "xDai": 5, - "Celo": 0 + "Celo": 0, + "Metis": 0, + "Metis_Stardust": 5 } } diff --git a/packages/web3-constants/evm/good-ghosting.json b/packages/web3-constants/evm/good-ghosting.json index 4dbba428c102..471aa202c6ed 100644 --- a/packages/web3-constants/evm/good-ghosting.json +++ b/packages/web3-constants/evm/good-ghosting.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "GOOD_GHOSTING_INCENTIVES_CONTRACT_ADDRESS": { "Mainnet": "", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/ito.json b/packages/web3-constants/evm/ito.json index 4db5af74dcf4..d4b2539145f8 100644 --- a/packages/web3-constants/evm/ito.json +++ b/packages/web3-constants/evm/ito.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MASK_ITO_CONTRACT_ADDRESS": { "Mainnet": "0x86812da3A623ab9606976078588b80C315E55FA3", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "ITO2_CONTRACT_ADDRESS": { "Mainnet": "0xc2CFbF22d6Dc87D0eE18d38d73733524c109Ff46", @@ -42,7 +46,9 @@ "Arbitrum": "0x71834a3FDeA3E70F14a93ED85c6be70925D0CAd9", "Arbitrum_Rinkeby": "0x9b3649eC8C9f68484acC76D437B145a4e58Bf2A2", "xDai": "0x913975af2Bb8a6Be4100D7dc5e9765B77F6A5d6c", - "Celo": "0xaA5bfd7355637eA7405CB194a55303e821c4c569" + "Celo": "0xaA5bfd7355637eA7405CB194a55303e821c4c569", + "Metis": "", + "Metis_Stardust": "" }, "ITO2_CONTRACT_CREATION_BLOCK_HEIGHT": { "Mainnet": 12766513, @@ -57,7 +63,9 @@ "Arbitrum": 102022, "Arbitrum_Rinkeby": 708696, "xDai": 17865755, - "Celo": 10278776 + "Celo": 10278776, + "Metis": 0, + "Metis_Stardust": 0 }, "DEFAULT_QUALIFICATION_ADDRESS": { "Mainnet": "0x81b6ae377e360dcad63611846a2516f4ba8c88ac", @@ -72,7 +80,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "DEFAULT_QUALIFICATION2_ADDRESS": { "Mainnet": "0x4dC5f343Fe57E4fbDA1B454d125D396A3181272c", @@ -87,7 +97,9 @@ "Arbitrum": "0x913975af2Bb8a6Be4100D7dc5e9765B77F6A5d6c", "Arbitrum_Rinkeby": "0xEbd753E66649C824241E63894301BA8Db5DBF5Bb", "xDai": "0x71834a3FDeA3E70F14a93ED85c6be70925D0CAd9", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SUBGRAPH_URL": { "Mainnet": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-ito-mainnet", @@ -102,6 +114,8 @@ "Arbitrum": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-ito-arbitrum-one", "Arbitrum_Rinkeby": "", "xDai": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-ito-xdai", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/lbp.json b/packages/web3-constants/evm/lbp.json index 0fbabf92c555..0a37df0de8eb 100644 --- a/packages/web3-constants/evm/lbp.json +++ b/packages/web3-constants/evm/lbp.json @@ -12,6 +12,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/mask-box.json b/packages/web3-constants/evm/mask-box.json index 06a73c98d640..1f63d043125e 100644 --- a/packages/web3-constants/evm/mask-box.json +++ b/packages/web3-constants/evm/mask-box.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MASK_BOX_CONTRACT_FROM_BLOCK": { "Mainnet": 13687866, @@ -27,7 +29,9 @@ "Arbitrum": 0, "Arbitrum_Rinkeby": 0, "xDai": 0, - "Celo": 0 + "Celo": 0, + "Metis": 0, + "Metis_Stardust": 0 }, "MASK_BOX_TEST_NFT": { "Mainnet": "0x56136E69A5771436a9598804c5eA792230c21181", @@ -42,7 +46,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "WHITE_LIST_QUALIFICATION_CONTRACT_ADDRESS": { "Mainnet": "", @@ -57,7 +63,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SIG_VERIFY_QULIFICATION_CONTRACT_ADDRESS": { "Mainnet": "", @@ -72,6 +80,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/pooltogether.json b/packages/web3-constants/evm/pooltogether.json index 0166fe083353..924b4f0dff24 100644 --- a/packages/web3-constants/evm/pooltogether.json +++ b/packages/web3-constants/evm/pooltogether.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MASK_POOL_ADDRESS": { "Mainnet": "", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/red-packet.json b/packages/web3-constants/evm/red-packet.json index 553c8cf4ae04..329836065d81 100644 --- a/packages/web3-constants/evm/red-packet.json +++ b/packages/web3-constants/evm/red-packet.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "HAPPY_RED_PACKET_ADDRESS_V2": { "Mainnet": "0x8D8912E1237F9FF3EF661F32743CFB276E052F98", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "HAPPY_RED_PACKET_ADDRESS_V3": { "Mainnet": "", @@ -42,7 +46,9 @@ "Arbitrum": "0x02Ea0720254F7fa4eca7d09A1b9C783F1020EbEF", "Arbitrum_Rinkeby": "0x6B70EC653c4331bdD0D0DCC7C941eb594e69a91d", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "HAPPY_RED_PACKET_ADDRESS_V4": { "Mainnet": "0xaBBe1101FD8fa5847c452A6D70C8655532B03C33", @@ -57,7 +63,9 @@ "Arbitrum": "0x83D6b366f21e413f214EB077D5378478e71a5eD2", "Arbitrum_Rinkeby": "", "xDai": "0x54a0A221C25Fc0a347EC929cFC5db0be17fA2a2B", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "HAPPY_RED_PACKET_ADDRESS_V4_BLOCK_HEIGHT": { "Mainnet": 12939427, @@ -72,7 +80,9 @@ "Arbitrum": 909051, "Arbitrum_Rinkeby": 0, "xDai": 18101937, - "Celo": 0 + "Celo": 0, + "Metis": 0, + "Metis_Stardust": 0 }, "SUBGRAPH_URL": { "Mainnet": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-mainnet", @@ -87,6 +97,8 @@ "Arbitrum": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-arbitrum-one", "Arbitrum_Rinkeby": "", "xDai": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-xdai", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/rpc.json b/packages/web3-constants/evm/rpc.json index 31838eb21a4f..85991026e21a 100644 --- a/packages/web3-constants/evm/rpc.json +++ b/packages/web3-constants/evm/rpc.json @@ -12,7 +12,9 @@ "Arbitrum": ["https://arb1.arbitrum.io/rpc"], "Arbitrum_Rinkeby": ["https://rinkeby.arbitrum.io/rpc"], "xDai": ["https://rpc.xdaichain.com/"], - "Celo": ["https://forno.celo.org"] + "Celo": ["https://forno.celo.org"], + "Metis": ["https://andromeda.metis.io/?owner=1088"], + "Metis_Stardust": ["https://stardust.metis.io/?owner=588"] }, "RPC_WEIGHTS": { "Mainnet": [0, 0, 0, 0], @@ -27,6 +29,8 @@ "Arbitrum": [0, 0, 0, 0], "Arbitrum_Rinkeby": [0, 0, 0, 0], "xDai": [0, 0, 0, 0], - "Celo": [0, 0, 0, 0] + "Celo": [0, 0, 0, 0], + "Metis": [0, 0, 0, 0], + "Metis_Stardust": [0, 0, 0, 0] } } diff --git a/packages/web3-constants/evm/space-station-galaxy.json b/packages/web3-constants/evm/space-station-galaxy.json index 1fa4e0ac5c41..cda2cb856bef 100644 --- a/packages/web3-constants/evm/space-station-galaxy.json +++ b/packages/web3-constants/evm/space-station-galaxy.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SUBGRAPH_URL": { "Mainnet": "", @@ -27,6 +29,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/token-asset-base-url.json b/packages/web3-constants/evm/token-asset-base-url.json index 190698b191d7..a5726c08d1e1 100644 --- a/packages/web3-constants/evm/token-asset-base-url.json +++ b/packages/web3-constants/evm/token-asset-base-url.json @@ -39,6 +39,8 @@ "Arbitrum": [], "Arbitrum_Rinkeby": [], "xDai": [], - "Celo": [] + "Celo": [], + "Metis": [], + "Metis_Stardust": [] } } diff --git a/packages/web3-constants/evm/token-list.json b/packages/web3-constants/evm/token-list.json index 65fa065bfde3..d4a0539df0d0 100644 --- a/packages/web3-constants/evm/token-list.json +++ b/packages/web3-constants/evm/token-list.json @@ -25,6 +25,10 @@ "https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/421611/tokens.json" ], "xDai": ["https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/100/tokens.json"], - "Celo": ["https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/42220/tokens.json"] + "Celo": ["https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/42220/tokens.json"], + "Metis": ["https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/1088/tokens.json"], + "Metis_Stardust": [ + "https://raw.githubusercontent.com/DimensionDev/Mask-Token-List/gh-pages/latest/588/tokens.json" + ] } } diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index 0a2e054d139d..520c79b48de0 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -12,7 +12,9 @@ "Arbitrum": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", "Arbitrum_Rinkeby": "0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681", "xDai": "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d", - "Celo": "0x471EcE3750Da237f93B8E339c536989b8978a438" + "Celo": "0x471EcE3750Da237f93B8E339c536989b8978a438", + "Metis": "", + "Metis_Stardust": "" }, "USDC_ADDRESS": { "Mainnet": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", @@ -27,7 +29,9 @@ "Arbitrum": "0xe865dF68133fcEd7c2285ff3896B406CAfAa2dB8", "Arbitrum_Rinkeby": "", "xDai": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", - "Celo": "0x2A3684e9Dc20B857375EA04235F2F7edBe818FA7" + "Celo": "0x2A3684e9Dc20B857375EA04235F2F7edBe818FA7", + "Metis": "", + "Metis_Stardust": "" }, "USDT_ADDRESS": { "Mainnet": "0xdAC17F958D2ee523a2206206994597C13D831ec7", @@ -42,7 +46,9 @@ "Arbitrum": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", "Arbitrum_Rinkeby": "", "xDai": "0x4ECaBa5870353805a9F068101A40E0f32ed605C6", - "Celo": "0xb020d981420744f6b0fedd22bb67cd37ce18a1d5" + "Celo": "0xb020d981420744f6b0fedd22bb67cd37ce18a1d5", + "Metis": "", + "Metis_Stardust": "" }, "HUSD_ADDRESS": { "Mainnet": "0xdf574c24545e5ffecb9a659c229253d4111d87e1", @@ -57,7 +63,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "0x1e37E5b504F7773460d6eB0e24D2e7C223B66EC7", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BUSD_ADDRESS": { "Mainnet": "0x4fabb145d64652a948d72533023f6e7a623c7c53", @@ -72,7 +80,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "0xdd96B45877d0E8361a4DDb732da741e97f3191Ff", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "COMP_ADDRESS": { "Mainnet": "0xc00e94Cb662C3520282E6f5717214004A7f26888", @@ -87,7 +97,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "EASY_ADDRESS": { "Mainnet": "", @@ -102,7 +114,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MKR_ADDRESS": { "Mainnet": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", @@ -117,7 +131,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MASK_ADDRESS": { "Mainnet": "0x69af81e73A73B40adF4f3d4223Cd9b1ECE623074", @@ -132,7 +148,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MSKA_ADDRESS": { "Mainnet": "", @@ -147,7 +165,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MSKB_ADDRESS": { "Mainnet": "", @@ -162,7 +182,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MSKC_ADDRESS": { "Mainnet": "", @@ -177,7 +199,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MSKD_ADDRESS": { "Mainnet": "", @@ -192,7 +216,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "MSKE_ADDRESS": { "Mainnet": "", @@ -207,7 +233,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "DAI_ADDRESS": { "Mainnet": "0x6B175474E89094C44Da98b954EedeAC495271d0F", @@ -222,7 +250,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "AMPL_ADDRESS": { "Mainnet": "0xD46bA6D942050d489DBd938a2C909A5d5039A161", @@ -237,7 +267,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "OKB_ADDRESS": { "Mainnet": "0x75231F58b43240C9718Dd58B4967c5114342a86c", @@ -252,7 +284,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UST_ADDRESS": { "Mainnet": "0xa47c8bf37f92aBed4A126BDA807A7b7498661acD", @@ -267,7 +301,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "eUSDC_ADDRESS": { "Mainnet": "", @@ -282,7 +318,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "eUSDT_ADDRESS": { "Mainnet": "", @@ -297,7 +335,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "eDAI_ADDRESS": { "Mainnet": "", @@ -312,7 +352,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNITOKEN_ADDRESS": { "Mainnet": "", @@ -327,7 +369,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "TT01_ADDRESS": { "Mainnet": "", @@ -342,7 +386,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "TT02_ADDRESS": { "Mainnet": "", @@ -357,7 +403,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "QUICK_ADDRESS": { "Mainnet": "", @@ -372,7 +420,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "WBTC_ADDRESS": { "Mainnet": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", @@ -387,7 +437,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "0x8e5bBbb09Ed1ebdE8674Cda39A0c169401db4252", - "Celo": "0xBe50a3013A1c94768A1ABb78c3cB79AB28fc1aCE" + "Celo": "0xBe50a3013A1c94768A1ABb78c3cB79AB28fc1aCE", + "Metis": "", + "Metis_Stardust": "" }, "IGG_ADDRESS": { "Mainnet": "", @@ -402,7 +454,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "OM_ADDRESS": { "Mainnet": "", @@ -417,7 +471,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SUSHI_ADDRESS": { "Mainnet": "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", @@ -432,7 +488,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "YAM_ADDRESS": { "Mainnet": "0x0e2298E3B3390e3b945a5456fBf59eCc3f55DA16", @@ -447,7 +505,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "RUNE_ADDRESS": { "Mainnet": "0x3155BA85D5F96b2d030a4966AF206230e46849cb", @@ -462,7 +522,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "YFI_ADDRESS": { "Mainnet": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", @@ -477,7 +539,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "sUSD_ADDRESS": { "Mainnet": "0x57ab1ec28d129707052df4df418d58a2d46d5f51", @@ -492,7 +556,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BTCB_ADDRESS": { "Mainnet": "", @@ -507,7 +573,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "CAKE_ADDRESS": { "Mainnet": "", @@ -522,7 +590,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "maUSDC_ADDRESS": { "Mainnet": "", @@ -537,7 +607,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "stETH_ADDRESS": { "Mainnet": "0xDFe66B14D37C77F4E9b180cEb433d1b164f0281D", @@ -552,7 +624,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "NFTX_ADDRESS": { "Mainnet": "0x87d73E916D7057945c9BcD8cdd94e42A6F47f776", @@ -567,7 +641,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "cUSD_ADDRESS": { "Mainnet": "", @@ -582,7 +658,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "0x765de816845861e75a25fca122bb6898b8b1282a" + "Celo": "0x765de816845861e75a25fca122bb6898b8b1282a", + "Metis": "", + "Metis_Stardust": "" }, "cEUR_ADDRESS": { "Mainnet": "", @@ -597,7 +675,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "0x765de816845861e75a25fca122bb6898b8b1282a" + "Celo": "0x765de816845861e75a25fca122bb6898b8b1282a", + "Metis": "", + "Metis_Stardust": "" }, "ETHER_ADDRESS": { "Mainnet": "", @@ -612,7 +692,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "NATIVE_TOKEN_ADDRESS": { "Mainnet": "0x0000000000000000000000000000000000000000", @@ -627,6 +709,8 @@ "Arbitrum": "0x0000000000000000000000000000000000000000", "Arbitrum_Rinkeby": "0x0000000000000000000000000000000000000000", "xDai": "0x0000000000000000000000000000000000000000", - "Celo": "0x471ece3750da237f93b8e339c536989b8978a438" + "Celo": "0x471ece3750da237f93b8e339c536989b8978a438", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/trader.json b/packages/web3-constants/evm/trader.json index c8281b2d0e0f..945cc82cbf04 100644 --- a/packages/web3-constants/evm/trader.json +++ b/packages/web3-constants/evm/trader.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V2_FACTORY_ADDRESS": { "Mainnet": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V2_THEGRAPH": { "Mainnet": "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2", @@ -42,7 +46,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V2_INIT_CODE_HASH": { "Mainnet": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f", @@ -57,7 +63,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_SWAP_ROUTER_ADDRESS": { "Mainnet": "0xe592427a0aece92de3edee1f18e0157c05861564", @@ -72,7 +80,9 @@ "Arbitrum": "0xE592427A0AEce92De3Edee1F18E0157C05861564", "Arbitrum_Rinkeby": "0xE592427A0AEce92De3Edee1F18E0157C05861564", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V3_FACTORY_ADDRESS": { "Mainnet": "0x1F98431c8aD98523631AE4a59f267346ea31F984", @@ -87,7 +97,9 @@ "Arbitrum": "0x1F98431c8aD98523631AE4a59f267346ea31F984", "Arbitrum_Rinkeby": "0x1F98431c8aD98523631AE4a59f267346ea31F984", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V3_QUOTER_ADDRESS": { "Mainnet": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", @@ -102,7 +114,9 @@ "Arbitrum": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", "Arbitrum_Rinkeby": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V3_THEGRAPH": { "Mainnet": "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3", @@ -117,7 +131,9 @@ "Arbitrum": "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3", "Arbitrum_Rinkeby": "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V3_INIT_CODE_HASH": { "Mainnet": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54", @@ -132,7 +148,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SUSHISWAP_ROUTER_ADDRESS": { "Mainnet": "0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F", @@ -147,7 +165,9 @@ "Arbitrum": "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "Arbitrum_Rinkeby": "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", "xDai": "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - "Celo": "0x1421bDe4B10e8dd459b3BCb598810B1337D56842" + "Celo": "0x1421bDe4B10e8dd459b3BCb598810B1337D56842", + "Metis": "", + "Metis_Stardust": "" }, "SUSHISWAP_FACTORY_ADDRESS": { "Mainnet": "0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac", @@ -162,7 +182,9 @@ "Arbitrum": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", "Arbitrum_Rinkeby": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", "xDai": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - "Celo": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4" + "Celo": "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", + "Metis": "", + "Metis_Stardust": "" }, "SUSHISWAP_THEGRAPH": { "Mainnet": "https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork", @@ -177,7 +199,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SUSHISWAP_INIT_CODE_HASH": { "Mainnet": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303", @@ -192,7 +216,9 @@ "Arbitrum": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303", "Arbitrum_Rinkeby": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303", "xDai": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303", - "Celo": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303" + "Celo": "0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303", + "Metis": "", + "Metis_Stardust": "" }, "SASHIMISWAP_ROUTER_ADDRESS": { "Mainnet": "0xe4fe6a45f354e845f954cddee6084603cedb9410", @@ -207,7 +233,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SASHIMISWAP_FACTORY_ADDRESS": { "Mainnet": "0xF028F723ED1D0fE01cC59973C49298AA95c57472", @@ -222,7 +250,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SASHIMISWAP_THEGRAPH": { "Mainnet": "https://api.thegraph.com/subgraphs/name/sashimiproject/sashimi", @@ -237,7 +267,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "SASHIMISWAP_INIT_CODE_HASH": { "Mainnet": "0xb465bbe4edb8c9b0da8ff0b2b36ce0065de9fcd5a33f32c6856ea821779c8b72", @@ -252,7 +284,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "QUICKSWAP_ROUTER_ADDRESS": { "Mainnet": "", @@ -267,7 +301,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "QUICKSWAP_FACTORY_ADDRESS": { "Mainnet": "", @@ -282,7 +318,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "QUICKSWAP_THEGRAPH": { "Mainnet": "", @@ -297,7 +335,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "QUICKSWAP_INIT_CODE_HASH": { "Mainnet": "", @@ -312,7 +352,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "PANCAKESWAP_ROUTER_ADDRESS": { "Mainnet": "", @@ -327,7 +369,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "PANCAKESWAP_FACTORY_ADDRESS": { "Mainnet": "", @@ -342,7 +386,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "PANCAKESWAP_THEGRAPH": { "Mainnet": "", @@ -357,7 +403,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "PANCAKESWAP_INIT_CODE_HASH": { "Mainnet": "", @@ -372,7 +420,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BALANCER_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -387,7 +437,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BALANCER_EXCHANGE_PROXY_ADDRESS": { "Mainnet": "0x3E66B66Fd1d0b02fDa6C811Da9E0547970DB2f21", @@ -402,7 +454,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BALANCER_POOLS_URL": { "Mainnet": "https://ipfs.fleek.co/ipns/balancer-bucket.storage.fleek.co/balancer-exchange/pools", @@ -417,7 +471,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "DODO_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -432,7 +488,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "DODO_EXCHANGE_PROXY_ADDRESS": { "Mainnet": "0xCB859eA579b28e02B87A1FDE08d087ab9dbE5149", @@ -447,7 +505,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BANCOR_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -462,7 +522,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "BANCOR_EXCHANGE_PROXY_ADDRESS": { "Mainnet": "0x2F9EC37d6CcFFf1caB21733BdaDEdE11c823cCB0", @@ -477,6 +539,76 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" + }, + "NETSWAP_ROUTER_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x1E876cCe41B7b844FDe09E38Fa1cf00f213bFf56", + "Metis_Stardust": "0x19BCFEe83ee0D77158b0c151150aFb0f389E4721" + }, + "NETSWAP_FACTORY_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "4", + "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" + }, + "NETSWAP_THEGRAPH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "", + "Metis_Stardust": "" + }, + "NETSWAP_INIT_CODE_HASH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x966d65068a6a30f10fd1fa814258637a34e059081d79daa94f3e2b6cec48e810", + "Metis_Stardust": "0x68cc803ebc27f23a62dd9f9251e76a9d6f2c659f76c92ffbd5e62d5b877384d6" } } diff --git a/packages/web3-constants/evm/trending.json b/packages/web3-constants/evm/trending.json index 654357fa69b8..f2b924badef6 100644 --- a/packages/web3-constants/evm/trending.json +++ b/packages/web3-constants/evm/trending.json @@ -12,7 +12,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "UNISWAP_V2_HEALTH_URL": { "Mainnet": "https://api.thegraph.com/index-node/graphql", @@ -27,7 +29,9 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" }, "ETHEREUM_BLOCKS_SUBGRAPH_URL": { "Mainnet": "https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks", @@ -42,6 +46,8 @@ "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", - "Celo": "" + "Celo": "", + "Metis": "", + "Metis_Stardust": "" } } diff --git a/packages/web3-constants/evm/zerion.json b/packages/web3-constants/evm/zerion.json index 2fd9b0d1e504..2600eaa9d9bd 100644 --- a/packages/web3-constants/evm/zerion.json +++ b/packages/web3-constants/evm/zerion.json @@ -12,7 +12,8 @@ "Arbitrum": "arbitrum-assets", "Arbitrum_Rinkeby": "", "xDai": "xdai-assets", - "Celo": "celo-assets" + "Celo": "celo-assets", + "Metis": "metis-assets" }, "TRANSACTIONS_SCOPE_NAME": { "Mainnet": "transactions", @@ -27,6 +28,7 @@ "Arbitrum": "arbitrum-transactions", "Arbitrum_Rinkeby": "", "xDai": "xdai-transactions", - "Celo": "celo-transactions" + "Celo": "celo-transactions", + "Metis": "metis-transactions" } } diff --git a/packages/web3-shared/evm/assets/chains.json b/packages/web3-shared/evm/assets/chains.json index 5c54cfc35a91..3fbd690f6b07 100644 --- a/packages/web3-shared/evm/assets/chains.json +++ b/packages/web3-shared/evm/assets/chains.json @@ -195,28 +195,52 @@ "infoURL": "https://matic.network/" }, { - "name": "Matic Testnet Mumbai", + "name": "Metis Andromeda Mainnet", "chainId": 80001, - "fullName": "Polygon", - "shortName": "maticmum", - "chain": "Matic", + "fullName": "Metis", + "shortName": "metis", + "chain": "Metis", + "network": "mainnet", + "networkId": 1088, + "nativeCurrency": { + "name": "Metis", + "symbol": "METIS", + "decimals": 18 + }, + "faucets": [], + "features": [], + "explorers": [ + { + "name": "metis", + "url": "https://andromeda-explorer.metis.io/", + "standard": "EIP3091" + } + ], + "infoURL": "https://metis.io/" + }, + { + "name": "Metis Stardust Testnet", + "chainId": 588, + "fullName": "Metis", + "shortName": "metis", + "chain": "Metis", "network": "testnet", - "networkId": 80001, + "networkId": 588, "nativeCurrency": { - "name": "Matic", - "symbol": "tMATIC", + "name": "Metis", + "symbol": "Metis", "decimals": 18 }, - "faucets": ["https://faucet.matic.network/"], + "faucets": ["https://faucets.chain.link/rinkeby"], "features": [], "explorers": [ { - "name": "matic", - "url": "https://explorer-mumbai.maticvigil.com", + "name": "metis", + "url": "https://stardust-explorer.metis.io/", "standard": "EIP3091" } ], - "infoURL": "https://matic.network/" + "infoURL": "https://metis.io/" }, { "name": "Arbitrum One", diff --git a/packages/web3-shared/evm/pipes/index.ts b/packages/web3-shared/evm/pipes/index.ts index 16f2f6b9b2c4..c50ff816f796 100644 --- a/packages/web3-shared/evm/pipes/index.ts +++ b/packages/web3-shared/evm/pipes/index.ts @@ -65,6 +65,7 @@ export const resolveNetworkAddressPrefix = createLookupTableResolver [NetworkType.Arbitrum]: 'Arbitrum', [NetworkType.xDai]: 'xDai', [NetworkType.Celo]: 'Celo', + [NetworkType.Metis]: 'Metis', }, 'Unknown', ) @@ -106,6 +108,8 @@ export const resolveChainColor = createLookupTableResolver( [ChainId.Arbitrum_Rinkeby]: 'rgb(36, 150, 238)', [ChainId.xDai]: 'rgb(73, 169, 166)', [ChainId.Celo]: 'rgb(53, 208, 127)', + [ChainId.Metis]: 'rgb(72, 244, 245)', + [ChainId.Metis_Stardust]: 'rgb(72, 244, 245)', }, 'rgb(214, 217, 220)', ) diff --git a/packages/web3-shared/evm/types/index.ts b/packages/web3-shared/evm/types/index.ts index 42facfc48c4c..3391c8c92328 100644 --- a/packages/web3-shared/evm/types/index.ts +++ b/packages/web3-shared/evm/types/index.ts @@ -64,6 +64,10 @@ export enum ChainId { // Celo Celo = 42220, + + // Metis + Metis = 1088, + Metis_Stardust = 588, } export enum ProviderType { @@ -92,6 +96,7 @@ export enum NetworkType { Arbitrum = 'Arbitrum', xDai = 'xDai', Celo = 'Celo', + Metis = 'Metis', } export interface Wallet { diff --git a/packages/web3-shared/evm/utils/chainDetailed.ts b/packages/web3-shared/evm/utils/chainDetailed.ts index 5cb5902b6b7d..99605789c306 100644 --- a/packages/web3-shared/evm/utils/chainDetailed.ts +++ b/packages/web3-shared/evm/utils/chainDetailed.ts @@ -92,6 +92,7 @@ export const getChainIdFromNetworkType = createLookupTableResolver { From f4c396ea8619eeb9b9af7f461a6ebeaaf46a7546 Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 30 Dec 2021 00:32:56 +0000 Subject: [PATCH 02/14] chore(component): remove networkIcon component --- .../src/UI/components/NetworkIcon/index.tsx | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 packages/shared/src/UI/components/NetworkIcon/index.tsx diff --git a/packages/shared/src/UI/components/NetworkIcon/index.tsx b/packages/shared/src/UI/components/NetworkIcon/index.tsx deleted file mode 100644 index ff038bafb2b2..000000000000 --- a/packages/shared/src/UI/components/NetworkIcon/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { makeStyles } from '@masknet/theme' -import { NetworkType } from '@masknet/web3-shared-evm' -import { useStylesExtends } from '@masknet/theme' - -const useStyles = makeStyles()({ - icon: { - borderRadius: '50%', - backgroundColor: '#F7F9FA', - }, -}) - -export interface NetworkIconProps extends withClasses<'icon'> { - size?: number - networkType?: NetworkType -} - -const icons: Record = { - [NetworkType.Ethereum]: new URL('./wallet-network-icon/ethereum.png', import.meta.url).toString(), - [NetworkType.Binance]: new URL('./wallet-network-icon/binance.png', import.meta.url).toString(), - [NetworkType.Polygon]: new URL('./wallet-network-icon/polygon.png', import.meta.url).toString(), - [NetworkType.Arbitrum]: new URL('./wallet-network-icon/arbitrum.png', import.meta.url).toString(), - [NetworkType.xDai]: new URL('./wallet-network-icon/xdai.png', import.meta.url).toString(), - [NetworkType.Celo]: new URL('./wallet-network-icon/celo.png', import.meta.url).toString(), - [NetworkType.Metis]: new URL('./wallet-network-icon/metis.png', import.meta.url).toString(), -} - -export function NetworkIcon(props: NetworkIconProps) { - const { size = 48, networkType } = props - const classes = useStylesExtends(useStyles(), props) - - if (!networkType) return null - - return icons[networkType] ? ( - - ) : null -} From d6b1d3039f821768ec80e73b3f9bc714548f894a Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 30 Dec 2021 16:30:31 +0000 Subject: [PATCH 03/14] chore(svg): remove unecessary files --- .../EVM/assets/logo_white.016a0880.svg | 24 ------- packages/mask/src/resources/NETSWAPIcon.tsx | 69 ------------------- 2 files changed, 93 deletions(-) delete mode 100644 packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg delete mode 100644 packages/mask/src/resources/NETSWAPIcon.tsx diff --git a/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg b/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg deleted file mode 100644 index dc5def19236f..000000000000 --- a/packages/mask/src/plugins/EVM/assets/logo_white.016a0880.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - Untitled - - - - \ No newline at end of file diff --git a/packages/mask/src/resources/NETSWAPIcon.tsx b/packages/mask/src/resources/NETSWAPIcon.tsx deleted file mode 100644 index 218e3a8937f7..000000000000 --- a/packages/mask/src/resources/NETSWAPIcon.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { SvgIconProps, SvgIcon } from '@mui/material' - -const svg = ( - - - - - - - - - - - - - - - - - - - - -) - -export function NETSWAPIcon(props: SvgIconProps) { - return {svg} -} From fbdbe3a11e8f7cfc94874f48cd320a617f0a9593 Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 30 Dec 2021 16:35:43 +0000 Subject: [PATCH 04/14] chore(netswap): remove id --- packages/mask/src/plugins/Trader/settings.ts | 2 +- packages/mask/src/resources/NETSWAPIcon.tsx | 36 ++++++++++++++++++++ pnpm-lock.yaml | 11 +++--- 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 packages/mask/src/resources/NETSWAPIcon.tsx diff --git a/packages/mask/src/plugins/Trader/settings.ts b/packages/mask/src/plugins/Trader/settings.ts index a92d63564fac..98485e0f4602 100644 --- a/packages/mask/src/plugins/Trader/settings.ts +++ b/packages/mask/src/plugins/Trader/settings.ts @@ -89,7 +89,7 @@ export const celoNetworkTradeProviderSettings = createGlobalSettings( - `${PLUGIN_IDENTIFIER}+metis+tradeProvider`, + `${PLUGIN_ID}+metis+tradeProvider`, TradeProvider.SUSHISWAP, { primary: () => '' }, ) diff --git a/packages/mask/src/resources/NETSWAPIcon.tsx b/packages/mask/src/resources/NETSWAPIcon.tsx new file mode 100644 index 000000000000..c47b0fb1078d --- /dev/null +++ b/packages/mask/src/resources/NETSWAPIcon.tsx @@ -0,0 +1,36 @@ +import { SvgIconProps, SvgIcon } from '@mui/material' + +const svg = ( + + + + + + + + + + + + + + + + +) + +export function NETSWAPIcon(props: SvgIconProps) { + return {svg} +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1935102b547c..71abef900029 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1072,7 +1072,7 @@ packages: bintrees: 1.0.2 bn.js: 4.12.0 compare-versions: 3.6.0 - ethereumjs-abi: 0.6.6 + ethereumjs-abi: 0.6.8 ethereumjs-blockstream: 2.0.7 ethereumjs-util: 5.2.1 find-versions: 2.0.0 @@ -9492,7 +9492,7 @@ packages: /axios/0.21.1: resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} dependencies: - follow-redirects: 1.14.6 + follow-redirects: 1.14.5 transitivePeerDependencies: - debug dev: false @@ -13531,11 +13531,11 @@ packages: resolution: {integrity: sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg==} dev: false - /ethereumjs-abi/0.6.6: - resolution: {integrity: sha512-w8KubDsA/+OAuqtIR9RGsMcoZ5nhM8vxwjJAJvEIY+clhxA3BHoLG3+ClYQaQhD0n3mlDt3U5rBrmSVJvI3c8A==} + /ethereumjs-abi/0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: bn.js: 4.12.0 - ethereumjs-util: 5.2.1 + ethereumjs-util: 6.2.1 dev: false /ethereumjs-account/2.0.5: @@ -14372,7 +14372,6 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} From beb917354fa24bced9895f1389ecf9ed82a508f6 Mon Sep 17 00:00:00 2001 From: codingsh Date: Sat, 1 Jan 2022 12:50:33 +0000 Subject: [PATCH 05/14] feat(Metis): add Tethys DEX --- cspell.json | 26 +----- .../Labs/components/SwapSettingDialog.tsx | 1 + .../SNSAdaptor/trader/TradeProviderIcon.tsx | 9 ++ .../src/plugins/Trader/constants/index.ts | 1 + .../src/plugins/Trader/constants/netswap.ts | 31 +----- .../src/plugins/Trader/constants/openocean.ts | 1 + .../src/plugins/Trader/constants/tethys.ts | 14 +++ .../src/plugins/Trader/constants/trader.ts | 3 + packages/mask/src/plugins/Trader/pipes.ts | 7 ++ packages/mask/src/plugins/Trader/settings.ts | 3 + .../Trader/trader/useGetTradeContext.ts | 38 +++++--- .../plugins/Trader/trader/useTradeCallback.ts | 2 + .../plugins/Trader/trader/useTradeContext.ts | 14 +++ .../mask/src/plugins/Trader/types/trader.ts | 1 + packages/mask/src/resources/TethysIcon.tsx | 36 +++++++ packages/mask/src/resources/tethys.png | Bin 0 -> 16909 bytes packages/public-api/src/web.ts | 1 + packages/web3-constants/evm/token.json | 20 +++- packages/web3-constants/evm/trader.json | 84 ++++++++++++++++- pnpm-lock.yaml | 88 ++++++++++-------- 20 files changed, 276 insertions(+), 104 deletions(-) create mode 100644 packages/mask/src/plugins/Trader/constants/tethys.ts create mode 100644 packages/mask/src/resources/TethysIcon.tsx create mode 100644 packages/mask/src/resources/tethys.png diff --git a/cspell.json b/cspell.json index a7242d8eb8bc..7f4980f73949 100644 --- a/cspell.json +++ b/cspell.json @@ -111,6 +111,7 @@ "jailbroken", "jsbi", "jsonml", + "juicebox", "kdfparams", "keccak", "Kitts", @@ -153,6 +154,7 @@ "multihop", "Mutex", "NETSWAP", + "NETT", "newsfeed", "NFTRSS", "nftscan", @@ -248,29 +250,7 @@ "xlarge", "xlink", "zerion", - "Zubin", - "Choudhary", - "macbinary", - "Choudhary", - "counterparty", - "jailbroken", - "misoperation", - "majeure", - "Serializers", - "Swither", - "nftscan", - "apikey", - "tokenid", - "NFTRSS", - "solana", - "Görli", - "resizer", - "Pageable", - "metaverse", - "hexlify", - "contribs", - "contrib", - "juicebox" + "Zubin" ], "ignoreWords": [ "cryptopunks", diff --git a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx index bc64ba1001cd..cf4e73cad297 100644 --- a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx +++ b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx @@ -65,6 +65,7 @@ export default function SwapSettingDialog({ open, onClose }: SettingDialogProps) const metisOptions = [ { label: 'SushiSwap', value: TradeProvider.SUSHISWAP }, { label: 'NetSwap', value: TradeProvider.NETSWAP }, + { label: 'Tethys', value: TradeProvider.TETHYS }, ] const t = useDashboardI18N() diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx index 4e4ce40668ec..3be8587b31d1 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx @@ -14,6 +14,7 @@ import { resolveTradeProviderName } from '../../pipes' const quickswapIcon = new URL('../../../../resources/quickswap.png', import.meta.url).toString() const pancakeswapIcon = new URL('../../../../resources/pancakeswap.png', import.meta.url).toString() +const tethysIcon = new URL('../../../../resources/tethys.png', import.meta.url).toString() const useStyles = makeStyles()((theme) => ({ icon: { @@ -57,6 +58,14 @@ export function TradeProviderIcon(props: TradeProviderIconProps) { className={classes.icon} /> ) + case TradeProvider.TETHYS: + return ( + {resolveTradeProviderName(TradeProvider.PANCAKESWAP)} + ) case TradeProvider.DODO: return case TradeProvider.BANCOR: diff --git a/packages/mask/src/plugins/Trader/constants/index.ts b/packages/mask/src/plugins/Trader/constants/index.ts index 1f69094e5ee1..d295c14a0b60 100644 --- a/packages/mask/src/plugins/Trader/constants/index.ts +++ b/packages/mask/src/plugins/Trader/constants/index.ts @@ -10,4 +10,5 @@ export * from './pancakeswap' export * from './dodo' export * from './bancor' export * from './netswap' +export * from './tethys' export type { ERC20TokenCustomizedBase, ERC20AgainstToken } from './types' diff --git a/packages/mask/src/plugins/Trader/constants/netswap.ts b/packages/mask/src/plugins/Trader/constants/netswap.ts index 682831e78d7f..a65e29342581 100644 --- a/packages/mask/src/plugins/Trader/constants/netswap.ts +++ b/packages/mask/src/plugins/Trader/constants/netswap.ts @@ -1,37 +1,14 @@ import { ChainId } from '@masknet/web3-shared-evm' -import { - DAI, - MSKA, - MSKB, - MSKC, - RUNE, - USDC, - USDT, - WBTC, - WNATIVE, - WNATIVE_ONLY, - NFTX, - STETH, - BUSD, - BTCB, - CUSD, - CEUR, -} from './trader' +import { USDC, USDT, WNATIVE, NETT, WNATIVE_ONLY } from './trader' import type { ERC20AgainstToken, ERC20TokenCustomizedBase } from './types' /** * Some tokens can only be swapped via certain pairs, * so we override the list of bases that are considered for these tokens. */ -export const SUSHISWAP_CUSTOM_BASES: ERC20TokenCustomizedBase = {} +export const NETSWAP_CUSTOM_BASES: ERC20TokenCustomizedBase = {} -export const SUSHISWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { +export const NETSWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { ...WNATIVE_ONLY, - [ChainId.Mainnet]: [WNATIVE, DAI, USDC, USDT, WBTC, RUNE, NFTX, STETH].map((x) => x[ChainId.Mainnet]), - [ChainId.Rinkeby]: [WNATIVE, MSKA, MSKB, MSKC].map((x) => x[ChainId.Rinkeby]), - [ChainId.Matic]: [WNATIVE, USDC, WBTC, DAI, USDT].map((x) => x[ChainId.Matic]), - [ChainId.BSC]: [WNATIVE, DAI, BUSD, USDC, USDT, BTCB].map((x) => x[ChainId.BSC]), - [ChainId.xDai]: [WNATIVE, USDC, USDT, WBTC].map((x) => x[ChainId.xDai]), - [ChainId.Celo]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Celo]), - [ChainId.Metis]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Metis]), + [ChainId.Metis]: [WNATIVE, USDC, USDT, NETT].map((x) => x[ChainId.Metis]), } diff --git a/packages/mask/src/plugins/Trader/constants/openocean.ts b/packages/mask/src/plugins/Trader/constants/openocean.ts index e3412435e2bc..c10a337e66f7 100644 --- a/packages/mask/src/plugins/Trader/constants/openocean.ts +++ b/packages/mask/src/plugins/Trader/constants/openocean.ts @@ -10,4 +10,5 @@ export const networkNames: Record = { [NetworkType.xDai]: 'xdai', [NetworkType.Celo]: 'celo', [NetworkType.Fantom]: 'fantom', + [NetworkType.Metis]: 'metis', } diff --git a/packages/mask/src/plugins/Trader/constants/tethys.ts b/packages/mask/src/plugins/Trader/constants/tethys.ts new file mode 100644 index 000000000000..cb1ebaa81c5e --- /dev/null +++ b/packages/mask/src/plugins/Trader/constants/tethys.ts @@ -0,0 +1,14 @@ +import { ChainId } from '@masknet/web3-shared-evm' +import { USDC, USDT, TETHYS, METIS, WNATIVE, WNATIVE_ONLY } from './trader' +import type { ERC20AgainstToken, ERC20TokenCustomizedBase } from './types' + +/** + * Some tokens can only be swapped via certain pairs, + * so we override the list of bases that are considered for these tokens. + */ +export const TETHYS_CUSTOM_BASES: ERC20TokenCustomizedBase = {} + +export const TETHYS_BASE_AGAINST_TOKENS: ERC20AgainstToken = { + ...WNATIVE_ONLY, + [ChainId.Metis]: [WNATIVE, METIS, USDC, USDT, TETHYS].map((x) => x[ChainId.Metis]), +} diff --git a/packages/mask/src/plugins/Trader/constants/trader.ts b/packages/mask/src/plugins/Trader/constants/trader.ts index af5c9be1944d..8855e5c33692 100644 --- a/packages/mask/src/plugins/Trader/constants/trader.ts +++ b/packages/mask/src/plugins/Trader/constants/trader.ts @@ -43,6 +43,9 @@ export const NFTX = createERC20Tokens('NFTX_ADDRESS', 'NFTX', 'NFTX', 18) export const STETH = createERC20Tokens('stETH_ADDRESS', 'stakedETH', 'stETH', 18) export const CUSD = createERC20Tokens('cUSD_ADDRESS', 'Celo Dollar', 'cUSD', 18) export const CEUR = createERC20Tokens('cEUR_ADDRESS', 'Celo Euro', 'cEUR', 18) +export const NETT = createERC20Tokens('NETT_ADDRESS', 'Netswap Token', 'NETT', 18) +export const METIS = createERC20Tokens('METIS_ADDRESS', 'Metis Token', 'METIS', 18) +export const TETHYS = createERC20Tokens('TETHYS_ADDRESS', 'Tethys', 'TETHYS', 18) export const WNATIVE = createERC20Tokens( 'WNATIVE_ADDRESS', diff --git a/packages/mask/src/plugins/Trader/pipes.ts b/packages/mask/src/plugins/Trader/pipes.ts index 53dc618af54e..2a1602db325e 100644 --- a/packages/mask/src/plugins/Trader/pipes.ts +++ b/packages/mask/src/plugins/Trader/pipes.ts @@ -58,6 +58,7 @@ export const resolveTradeProviderName = createLookupTableResolver { throw new Error(`Unknown provider type: ${tradeProvider}`) @@ -110,6 +111,8 @@ export function resolveTradeProviderLink(tradeProvider: TradeProvider, networkTy return 'https://netswap.io/#/swap' case TradeProvider.OPENOCEAN: return 'https://openocean.finance/classic' + case TradeProvider.TETHYS: + return 'http://tethys.finance' default: unreachable(tradeProvider) } @@ -172,6 +175,9 @@ export function resolveTradePairLink(tradeProvider: TradeProvider, address: stri case TradeProvider.OPENOCEAN: // TODO - OpenOcean return `` + case TradeProvider.TETHYS: + // TODO - OpenOcean + return `` default: unreachable(tradeProvider) } @@ -262,6 +268,7 @@ export const resolveZrxTradePoolName = createLookupTableResolver(`${PLUGIN_ID}+tradeProvi const dodoSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+dodo`, '') const bancorSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+bancor`, '') const netswapSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+netswap`, '') +const tethysSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+tethys`, '') const openoceanSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+openocean`, '') /** @@ -139,6 +140,8 @@ export function getCurrentTradeProviderGeneralSettings(tradeProvider: TradeProvi return bancorSettings case TradeProvider.NETSWAP: return netswapSettings + case TradeProvider.TETHYS: + return tethysSettings case TradeProvider.OPENOCEAN: return openoceanSettings default: diff --git a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts index bbd9f28bdce0..97f3e914202b 100644 --- a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts @@ -15,6 +15,8 @@ import { UNISWAP_CUSTOM_BASES, NETSWAP_BASE_AGAINST_TOKENS, NETSWAP_CUSTOM_BASES, + TETHYS_BASE_AGAINST_TOKENS, + TETHYS_CUSTOM_BASES, } from '../constants' import { unreachable } from '@dimensiondev/kit' import { TargetChainIdContext } from './useTargetChainIdContext' @@ -96,6 +98,30 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: PANCAKESWAP_CUSTOM_BASES, } + case TradeProvider.NETSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, + INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: NETSWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: NETSWAP_CUSTOM_BASES, + } + case TradeProvider.TETHYS: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: getTraderConstants(chainId).TETHYS_THEGRAPH, + INIT_CODE_HASH: getTraderConstants(chainId).TETHYS_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_FACTORY_ADDRESS, + AGAINST_TOKENS: TETHYS_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: TETHYS_CUSTOM_BASES, + } case TradeProvider.ZRX: return { TYPE: tradeProvider, @@ -115,18 +141,6 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { TYPE: tradeProvider, ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, } - case TradeProvider.NETSWAP: - return { - TYPE: tradeProvider, - IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, - AGAINST_TOKENS: NETSWAP_BASE_AGAINST_TOKENS, - ADDITIONAL_TOKENS: {}, - CUSTOM_TOKENS: NETSWAP_CUSTOM_BASES, - } case TradeProvider.OPENOCEAN: return { TYPE: tradeProvider, diff --git a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts index cb079dfdc40e..5d7d2f0c9d4f 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts @@ -106,6 +106,8 @@ export function useTradeCallback( return bancor case TradeProvider.NETSWAP: return uniswapV2Like + case TradeProvider.TETHYS: + return uniswapV2Like case TradeProvider.OPENOCEAN: return openocean default: diff --git a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts index 292034f4bc34..fd2dc2c4c226 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts @@ -15,6 +15,8 @@ import { UNISWAP_CUSTOM_BASES, NETSWAP_BASE_AGAINST_TOKENS, NETSWAP_CUSTOM_BASES, + TETHYS_CUSTOM_BASES, + TETHYS_BASE_AGAINST_TOKENS, } from '../constants' import type { TradeContext as TradeContext_ } from '../types' import { TargetChainIdContext } from './useTargetChainIdContext' @@ -109,6 +111,18 @@ export function useTradeContext(tradeProvider: TradeProvider) { ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: NETSWAP_CUSTOM_BASES, } + case TradeProvider.TETHYS: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: getTraderConstants(chainId).TETHYS_THEGRAPH, + INIT_CODE_HASH: getTraderConstants(chainId).TETHYS_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_FACTORY_ADDRESS, + AGAINST_TOKENS: TETHYS_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: TETHYS_CUSTOM_BASES, + } case TradeProvider.ZRX: return { TYPE: tradeProvider, diff --git a/packages/mask/src/plugins/Trader/types/trader.ts b/packages/mask/src/plugins/Trader/types/trader.ts index 8578d2b1e7a9..85f0e273554c 100644 --- a/packages/mask/src/plugins/Trader/types/trader.ts +++ b/packages/mask/src/plugins/Trader/types/trader.ts @@ -67,6 +67,7 @@ export enum ZrxTradePool { WaultSwap = 'WaultSwap', xSigma = 'xSigma', NetSwap = 'NetSwap', + Tethys = 'Tethys', } export interface TradeComputed { diff --git a/packages/mask/src/resources/TethysIcon.tsx b/packages/mask/src/resources/TethysIcon.tsx new file mode 100644 index 000000000000..ba3a88eafe3f --- /dev/null +++ b/packages/mask/src/resources/TethysIcon.tsx @@ -0,0 +1,36 @@ +import { SvgIconProps, SvgIcon } from '@mui/material' + +const svg = ( + + + + + + + + + + + + + + + + +) + +export function TethysIcon(props: SvgIconProps) { + return {svg} +} diff --git a/packages/mask/src/resources/tethys.png b/packages/mask/src/resources/tethys.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b0fb8097f92c188e310a84247216265c0f7d9d GIT binary patch literal 16909 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 literal 0 HcmV?d00001 diff --git a/packages/public-api/src/web.ts b/packages/public-api/src/web.ts index 710ff052dce0..20a8a519e5df 100644 --- a/packages/public-api/src/web.ts +++ b/packages/public-api/src/web.ts @@ -215,6 +215,7 @@ export enum TradeProvider { BANCOR = 9, NETSWAP = 11, OPENOCEAN = 10, + TETHYS = 12, } /** Supported language settings */ export enum LanguageOptions { diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index e033adbe3b45..42a7b2557f65 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -787,7 +787,25 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", - "Metis": "00xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "Metis": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "Metis_Stardust": "", + "Fantom": "" + }, + "TETHYS_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x69fdb77064ec5c84FA2F21072973eB28441F43F3", "Metis_Stardust": "", "Fantom": "" }, diff --git a/packages/web3-constants/evm/trader.json b/packages/web3-constants/evm/trader.json index fd1fd9d48d8c..60313d7fa142 100644 --- a/packages/web3-constants/evm/trader.json +++ b/packages/web3-constants/evm/trader.json @@ -576,7 +576,20 @@ }, "NETSWAP_ROUTER_ADDRESS": { "Mainnet": "", - "Fantom": "" + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "4", + "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" }, "OPENOCEAN_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -662,5 +675,74 @@ "xDai": "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", "Celo": "", "Fantom": "" + }, + "TETHYS_FACTORY_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "4", + "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" + }, + "TETHYS_THEGRAPH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x2CdFB20205701FF01689461610C9F321D1d00F80", + "Metis_Stardust": "" + }, + "TETHYS_INIT_CODE_HASH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Metis": "0xef3f1aabf6b944a53c06890783ddef260a21995d1eaea6d52f980cfe082a877d", + "Metis_Stardust": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Fantom": "" + }, + "TETHYS_ROUTER_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x81b9FA50D5f5155Ee17817C21702C3AE4780AD09", + "Metis_Stardust": "" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad19d3e016fa..39acf519f43e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,18 +76,18 @@ importers: '@types/react': 17.0.38 '@types/react-dom': 17.0.11 '@types/web': 0.0.48 - i18next: 21.6.3 + i18next: 21.6.4 lodash: 4.17.21 lodash-es: 4.17.21 lodash-unified: 1.0.1_bd4845f8c1bf1d81a616b60758034d0a react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 - react-i18next: 11.15.1_i18next@21.6.3+react@18.0.0-rc.0 + react-i18next: 11.15.2_d6ae89feea3814512efc355e33046d24 ts-results: 3.3.0 web3-core: 1.5.2 web3-core-method: 1.5.2 devDependencies: - '@commitlint/cli': 16.0.0 + '@commitlint/cli': 16.0.1 '@commitlint/config-conventional': 16.0.0 '@dimensiondev/patch-package': 6.5.0 '@jest/globals': 27.4.4 @@ -96,7 +96,7 @@ importers: '@masknet/serializer': link:packages/test-serializer '@nice-labs/git-rev': 3.5.0 '@types/lodash-es': 4.17.5 - cspell: 5.13.4 + cspell: 5.14.0 eslint: 8.5.0 eslint-config-prettier: 8.3.0_eslint@8.5.0 eslint-plugin-import: 2.25.3_eslint@8.5.0 @@ -3009,8 +3009,8 @@ packages: minimist: 1.2.5 dev: true - /@commitlint/cli/16.0.0: - resolution: {integrity: sha512-MaYQbwsBZ3+OHJQm9cbSMj4P1Eptqqk/p8WY5MTzVZDRei8JcweNaMtwU7P+h9VeBTlFYSn4vkZYiZXzVK2Cww==} + /@commitlint/cli/16.0.1: + resolution: {integrity: sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==} engines: {node: '>=v12'} hasBin: true dependencies: @@ -3169,8 +3169,8 @@ packages: chalk: 4.1.2 dev: true - /@cspell/cspell-bundled-dicts/5.13.4: - resolution: {integrity: sha512-D88zFAcEbUJiM03cY1U4Fb1c9BcECi6RvSwwJG/Ayc4lLO9uZgFyKlzQwjSEgTzuCME9A0Nn2hXrD+aWol85Mg==} + /@cspell/cspell-bundled-dicts/5.14.0: + resolution: {integrity: sha512-H9vrn+DUuZ8yrpL6Ljv5Q4WQG9FbEFmS2RpsQ+jPu1gZ/JLnHYRLL1S62Gzgwsky2QeXvHbNJVct7s9A0FXj8A==} engines: {node: '>=12.13.0'} dependencies: '@cspell/dict-ada': 1.1.2 @@ -3191,7 +3191,7 @@ packages: '@cspell/dict-fullstack': 2.0.4 '@cspell/dict-golang': 1.1.24 '@cspell/dict-haskell': 1.0.13 - '@cspell/dict-html': 1.1.9 + '@cspell/dict-html': 2.0.2 '@cspell/dict-html-symbol-entities': 1.0.23 '@cspell/dict-java': 1.0.23 '@cspell/dict-latex': 1.0.25 @@ -3212,8 +3212,8 @@ packages: '@cspell/dict-vue': 2.0.1 dev: true - /@cspell/cspell-types/5.13.4: - resolution: {integrity: sha512-OH3aqFfmRNOSO0K0h5JNm84I5RLDgngp1Qa9YeEm9oj1U/qjrm2bOwOGGh9XU/ZjLl56JMbtbnfSpHpT7tLc+A==} + /@cspell/cspell-types/5.14.0: + resolution: {integrity: sha512-yTKxE+h+4LjzASHWrIuFpLK9L4oX3Em8Ea8aU4ccV1YCHcIqsuriTXnVtaqqaFEw9zz0PeU9ugwDROFwzfAejg==} engines: {node: '>=12.13.0'} dev: true @@ -3293,8 +3293,8 @@ packages: resolution: {integrity: sha512-PV0UBgcBFbBLf/m1wfkVMM8w96kvfHoiCGLWO6BR3Q9v70IXoE4ae0+T+f0CkxcEkacMqEQk/I7vuE9MzrjaNw==} dev: true - /@cspell/dict-html/1.1.9: - resolution: {integrity: sha512-vvnYia0tyIS5Fdoz+gEQm77MGZZE66kOJjuNpIYyRHCXFAhWdYz3SmkRm6YKJSWSvuO+WBJYTKDvkOxSh3Fx/w==} + /@cspell/dict-html/2.0.2: + resolution: {integrity: sha512-5zIZGBGyHfxnRPt8JyL3I8co2Rs+64phiap9sMA0D7lNnoT4MZXu1NYz7Z8F6/XCDFuu8Bw5X5CoPrL6pJ3F7Q==} dev: true /@cspell/dict-java/1.0.23: @@ -3571,7 +3571,7 @@ packages: dependencies: '@babel/helper-module-imports': 7.16.0 '@babel/plugin-syntax-jsx': 7.16.0 - '@babel/runtime': 7.16.3 + '@babel/runtime': 7.16.5 '@emotion/hash': 0.8.0 '@emotion/memoize': 0.7.5 '@emotion/serialize': 1.0.2 @@ -11782,40 +11782,40 @@ packages: engines: {node: '>=8'} dev: true - /cspell-gitignore/5.13.4: - resolution: {integrity: sha512-Md2V+EyILAavxO6CJ/Y/l8/p2nBFA0p1sMrjCEBtBuF3BL7A/A2LGaK4Tb+trVONFAKQ5cZo84WbyvSYWUqvpw==} + /cspell-gitignore/5.14.0: + resolution: {integrity: sha512-eK3bjQV4MJtKi1DuNACyKuV3OlMsN8o+IQphBu4D7rF+zCU3rkVtE+nD2x2MMOi3YlIRxdvXxqVr5k8m5X5T4A==} engines: {node: '>=12.13.0'} hasBin: true dependencies: - cspell-glob: 5.13.4 + cspell-glob: 5.14.0 find-up: 5.0.0 dev: true - /cspell-glob/5.13.4: - resolution: {integrity: sha512-uKkibBe41Tr609mNBOairsyuNhPo+kqMVw2JeobfgN71GESQLjU7hr6VpKaUKGZyJpaicP606LB0gZBM38IOvw==} + /cspell-glob/5.14.0: + resolution: {integrity: sha512-qWPrdKwyl400ukYmBxEaPA6029pctkBXb+A8MmY8Ku4+pv/X0XkIGSYsxjt/32odIWws2Hoi7MGyHF9YF0K4TA==} engines: {node: '>=12.13.0'} dependencies: micromatch: 4.0.4 dev: true - /cspell-io/5.13.4: - resolution: {integrity: sha512-THe0R5CAv2h5yvrF3dtvigY73mnfFlfTJFWoSgGsafKq5nmR8jgKpbjQgK93zL0JC//BgdK0extfrSLsW2D4mw==} + /cspell-io/5.14.0: + resolution: {integrity: sha512-MPi6Dgu+bZvxg9I3iZ+e2G1tIODIZ062O+75URZX3xCdv235aGdGtCY0AH2RNOQ+R9/jbkZMKlM0gIuGOIz0Ug==} engines: {node: '>=12.13.0'} dev: true - /cspell-lib/5.13.4: - resolution: {integrity: sha512-kKGqAMXKdj8l3sgjoJuuQKTuwLz/33c3YFM/d3lYzcP3mo7C4v/M04Dm4mlTdWA0l4WYlzuSqxDmj32SsHMbNA==} + /cspell-lib/5.14.0: + resolution: {integrity: sha512-qnkXdQA3R/Z5HtjRJmWsTnqS7RTFeAiWyY7ozA+O7cY1OYTxShIB39uGHPQH0/ZUa3gNNh+kscif4KVE9nBb8Q==} engines: {node: '>=12.13.0'} dependencies: - '@cspell/cspell-bundled-dicts': 5.13.4 - '@cspell/cspell-types': 5.13.4 + '@cspell/cspell-bundled-dicts': 5.14.0 + '@cspell/cspell-types': 5.14.0 clear-module: 4.1.2 comment-json: 4.1.1 configstore: 5.0.1 cosmiconfig: 7.0.1 - cspell-glob: 5.13.4 - cspell-io: 5.13.4 - cspell-trie-lib: 5.13.4 + cspell-glob: 5.14.0 + cspell-io: 5.14.0 + cspell-trie-lib: 5.14.0 find-up: 5.0.0 fs-extra: 10.0.0 gensequence: 3.1.1 @@ -11825,25 +11825,25 @@ packages: vscode-uri: 3.0.3 dev: true - /cspell-trie-lib/5.13.4: - resolution: {integrity: sha512-e5fKOOioJlJJ+DcLVIkuy+7FI/YmUojhfzdUjTvLDn5EJFL3/oiP5AvDXGV3bMqYzlbRQKD6FpC61KVIkNMbEw==} + /cspell-trie-lib/5.14.0: + resolution: {integrity: sha512-PA9G4FZislIZ7YScR1fBToBDnPjU7HsFRNsgSkmhlI3ekxUugRaJTJW/XnDH1DDXoKqSoB/mCCN5kV8vwBBYuw==} engines: {node: '>=12.13.0'} dependencies: fs-extra: 10.0.0 gensequence: 3.1.1 dev: true - /cspell/5.13.4: - resolution: {integrity: sha512-T/AMylb/CY0af8Oc1/Nv79Mqe852ga4AOAY0m8eYG8A5zahDpL2EC6PN5yK8KFn0UPMWMB8B2atZf6/U5RWdaQ==} + /cspell/5.14.0: + resolution: {integrity: sha512-WR3WlXIU/WKN4CMfVbRQoo/IscmInYLJoNUe0vx6mVb/T+FbOGzIB1oG2+YqpoN2wG94DS6qdJ01LjPyz+rkXw==} engines: {node: '>=12.13.0'} hasBin: true dependencies: chalk: 4.1.2 commander: 8.3.0 comment-json: 4.1.1 - cspell-gitignore: 5.13.4 - cspell-glob: 5.13.4 - cspell-lib: 5.13.4 + cspell-gitignore: 5.14.0 + cspell-glob: 5.14.0 + cspell-lib: 5.14.0 fast-json-stable-stringify: 2.1.0 file-entry-cache: 6.0.1 fs-extra: 10.0.0 @@ -15708,8 +15708,8 @@ packages: html-parse-stringify2: github.com/locize/html-parse-stringify2/d463109433b2c49c74a081044f54b2a6a1ccad7c dev: true - /i18next/21.6.3: - resolution: {integrity: sha512-2uuRGslNQ8m7TRllsVs4cZuei5X9OgoPRB/Sj5oadUpxZaW+NYv3srn7zR+h8bCMhkux9z8HtnJdQM5Mz+Govw==} + /i18next/21.6.4: + resolution: {integrity: sha512-pk0Utxtq5g//Q9ONQ0w3+PRSwOFJ7+m4rAekhHHg1Xql0KcUjJU7DzmzweGy6DsrIQ1GM/t57wLeeGuyGKtjTg==} dependencies: '@babel/runtime': 7.16.5 dev: false @@ -20180,17 +20180,25 @@ packages: react: 18.0.0-rc.0 dev: false - /react-i18next/11.15.1_i18next@21.6.3+react@18.0.0-rc.0: - resolution: {integrity: sha512-lnje1uKu5XeM5MLvfbt1oygF+nEIZnpOM4Iu8bkx5ECD4XRYgi3SJDmolrp0EDxDHeK2GgFb+vEEK0hsZ9sjeA==} + /react-i18next/11.15.2_d6ae89feea3814512efc355e33046d24: + resolution: {integrity: sha512-28WlZ6tr57RQoIM1x4/gTzvzh3Vvr+YeZwJHTOqV/sLXMFbR+xzjgSMdLnOCDxmlQ0irGN2uM+HT+mYK+3bg6g==} peerDependencies: i18next: '>= 19.0.0' react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true dependencies: '@babel/runtime': 7.16.5 html-escaper: 2.0.2 html-parse-stringify: 3.0.1 - i18next: 21.6.3 + i18next: 21.6.4 react: 18.0.0-rc.0 + react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 dev: false /react-inspector/5.1.1_react@18.0.0-rc.0: From f2a55fc394e5ab08c4822e9230f15a6d284a9123 Mon Sep 17 00:00:00 2001 From: codingsh Date: Wed, 5 Jan 2022 18:42:39 +0000 Subject: [PATCH 06/14] feat(Metis): update integration matis --- .../mask/src/plugins/EVM/assets/metis.png | Bin 12156 -> 30419 bytes .../Trader/trader/useGetTradeContext.ts | 74 +++++++++--------- .../plugins/Trader/trader/useTradeContext.ts | 73 ++++++++--------- 3 files changed, 74 insertions(+), 73 deletions(-) diff --git a/packages/mask/src/plugins/EVM/assets/metis.png b/packages/mask/src/plugins/EVM/assets/metis.png index 53275676fb393973152f1f65cce236594574bfa6..6b8189e190218615eb9f5174fd0af00c188a9a86 100644 GIT binary patch literal 30419 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®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 YrsiFn+JISFnE^c~7GCFN(() => { switch (tradeProvider) { case TradeProvider.UNISWAP_V2: return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).UNISWAP_V2_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).UNISWAP_V2_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V2_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V2_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.UNISWAP_V2_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.UNISWAP_V2_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V2_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V2_FACTORY_ADDRESS, AGAINST_TOKENS: UNISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: UNISWAP_CUSTOM_BASES, @@ -42,10 +42,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V3_LIKE: true, - GRAPH_API: getTraderConstants(chainId).UNISWAP_V3_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).UNISWAP_V3_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_SWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V3_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.UNISWAP_V3_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.UNISWAP_V3_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_SWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V3_FACTORY_ADDRESS, AGAINST_TOKENS: UNISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: UNISWAP_CUSTOM_BASES, @@ -54,10 +54,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).SUSHISWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).SUSHISWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).SUSHISWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).SUSHISWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.SUSHISWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.SUSHISWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.SUSHISWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.SUSHISWAP_FACTORY_ADDRESS, AGAINST_TOKENS: SUSHISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: SUSHISWAP_CUSTOM_BASES, @@ -66,10 +66,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).SASHIMISWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).SASHIMISWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).SASHIMISWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).SASHIMISWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.SASHIMISWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.SASHIMISWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.SASHIMISWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.SASHIMISWAP_FACTORY_ADDRESS, AGAINST_TOKENS: SASHIMISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: SASHIMISWAP_CUSTOM_BASES, @@ -78,10 +78,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).QUICKSWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).QUICKSWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).QUICKSWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).QUICKSWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.QUICKSWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.QUICKSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.QUICKSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.QUICKSWAP_FACTORY_ADDRESS, AGAINST_TOKENS: QUICKSWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: QUICKSWAP_CUSTOM_BASES, @@ -90,10 +90,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).PANCAKESWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).PANCAKESWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).PANCAKESWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).PANCAKESWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.PANCAKESWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.PANCAKESWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.PANCAKESWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.PANCAKESWAP_FACTORY_ADDRESS, AGAINST_TOKENS: PANCAKESWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: PANCAKESWAP_CUSTOM_BASES, @@ -102,10 +102,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.NETSWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.NETSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.NETSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.NETSWAP_FACTORY_ADDRESS, AGAINST_TOKENS: NETSWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: NETSWAP_CUSTOM_BASES, @@ -114,10 +114,10 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).TETHYS_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).TETHYS_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.TETHYS_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.TETHYS_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.TETHYS_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.TETHYS_FACTORY_ADDRESS, AGAINST_TOKENS: TETHYS_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: TETHYS_CUSTOM_BASES, @@ -129,22 +129,22 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { case TradeProvider.BALANCER: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BALANCER_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.BALANCER_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.DODO: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).DODO_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.DODO_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.BANCOR: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.BANCOR_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.OPENOCEAN: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.BANCOR_EXCHANGE_PROXY_ADDRESS, } default: if (tradeProvider) unreachable(tradeProvider) diff --git a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts index fd2dc2c4c226..f96b850a029f 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts @@ -25,16 +25,17 @@ export const TradeContext = createContext(null) export function useTradeContext(tradeProvider: TradeProvider) { const { targetChainId: chainId } = TargetChainIdContext.useContainer() + const TRADER_DEX = getTraderConstants(chainId) return useMemo(() => { switch (tradeProvider) { case TradeProvider.UNISWAP_V2: return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).UNISWAP_V2_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).UNISWAP_V2_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V2_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V2_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.UNISWAP_V2_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.UNISWAP_V2_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V2_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V2_FACTORY_ADDRESS, AGAINST_TOKENS: UNISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: UNISWAP_CUSTOM_BASES, @@ -43,10 +44,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V3_LIKE: true, - GRAPH_API: getTraderConstants(chainId).UNISWAP_V3_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).UNISWAP_V3_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_SWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).UNISWAP_V3_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.UNISWAP_V3_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.UNISWAP_V3_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_SWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.UNISWAP_V3_FACTORY_ADDRESS, AGAINST_TOKENS: UNISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: UNISWAP_CUSTOM_BASES, @@ -55,10 +56,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).SUSHISWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).SUSHISWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).SUSHISWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).SUSHISWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.SUSHISWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.SUSHISWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.SUSHISWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.SUSHISWAP_FACTORY_ADDRESS, AGAINST_TOKENS: SUSHISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: SUSHISWAP_CUSTOM_BASES, @@ -67,10 +68,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).SASHIMISWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).SASHIMISWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).SASHIMISWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).SASHIMISWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.SASHIMISWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.SASHIMISWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.SASHIMISWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.SASHIMISWAP_FACTORY_ADDRESS, AGAINST_TOKENS: SASHIMISWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: SASHIMISWAP_CUSTOM_BASES, @@ -79,10 +80,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).QUICKSWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).QUICKSWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).QUICKSWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).QUICKSWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.QUICKSWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.QUICKSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.QUICKSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.QUICKSWAP_FACTORY_ADDRESS, AGAINST_TOKENS: QUICKSWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: QUICKSWAP_CUSTOM_BASES, @@ -91,10 +92,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).PANCAKESWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).PANCAKESWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).PANCAKESWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).PANCAKESWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.PANCAKESWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.PANCAKESWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.PANCAKESWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.PANCAKESWAP_FACTORY_ADDRESS, AGAINST_TOKENS: PANCAKESWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: PANCAKESWAP_CUSTOM_BASES, @@ -103,10 +104,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).NETSWAP_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).NETSWAP_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).NETSWAP_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.NETSWAP_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.NETSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.NETSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.NETSWAP_FACTORY_ADDRESS, AGAINST_TOKENS: NETSWAP_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: NETSWAP_CUSTOM_BASES, @@ -115,10 +116,10 @@ export function useTradeContext(tradeProvider: TradeProvider) { return { TYPE: tradeProvider, IS_UNISWAP_V2_LIKE: true, - GRAPH_API: getTraderConstants(chainId).TETHYS_THEGRAPH, - INIT_CODE_HASH: getTraderConstants(chainId).TETHYS_INIT_CODE_HASH, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_ROUTER_ADDRESS, - FACTORY_CONTRACT_ADDRESS: getTraderConstants(chainId).TETHYS_FACTORY_ADDRESS, + GRAPH_API: TRADER_DEX.TETHYS_THEGRAPH, + INIT_CODE_HASH: TRADER_DEX.TETHYS_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.TETHYS_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: TRADER_DEX.TETHYS_FACTORY_ADDRESS, AGAINST_TOKENS: TETHYS_BASE_AGAINST_TOKENS, ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: TETHYS_CUSTOM_BASES, @@ -130,22 +131,22 @@ export function useTradeContext(tradeProvider: TradeProvider) { case TradeProvider.BALANCER: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BALANCER_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.BALANCER_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.DODO: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).DODO_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.DODO_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.BANCOR: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).BANCOR_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.BANCOR_EXCHANGE_PROXY_ADDRESS, } case TradeProvider.OPENOCEAN: return { TYPE: tradeProvider, - ROUTER_CONTRACT_ADDRESS: getTraderConstants(chainId).OPENOCEAN_EXCHANGE_PROXY_ADDRESS, + ROUTER_CONTRACT_ADDRESS: TRADER_DEX.OPENOCEAN_EXCHANGE_PROXY_ADDRESS, } default: unreachable(tradeProvider) From 1749ada9fe46f5ad8e816b3a5da0450700307c8a Mon Sep 17 00:00:00 2001 From: codingsh Date: Wed, 5 Jan 2022 19:01:27 +0000 Subject: [PATCH 07/14] feat(Metis): add balanceChecker on Metis_Stardust (testnet) --- .../mask/src/plugins/EVM/assets/metis.png | Bin 30419 -> 94487 bytes packages/web3-constants/evm/debank.json | 2 +- packages/web3-constants/evm/ethereum.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mask/src/plugins/EVM/assets/metis.png b/packages/mask/src/plugins/EVM/assets/metis.png index 6b8189e190218615eb9f5174fd0af00c188a9a86..6ef397527dd2d1af2f89daa8cf3e1b0226b854fb 100644 GIT binary patch literal 94487 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

D1CZBI|u7=Xy7>aiT#_^*Axi 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 literal 30419 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®MDf-K@&Ix9VvPBI*b^Ay@F{k^kVMf>sYC*MfY-~_|p)^!MSaiPD@Lswt z2hn8FF^Fy*%?moT^upFr)`hwGNDq#kvuJ1oE4l)^57|3UI*3Q(<6%XOy(Gp>XSUn6)j_IYmPkoSB=U^UV_^ z+e%-%N@cX3I)~yzKSJr-Kf=H(XE3x7$?Os?ZsI{XZmbm}uyj5f$6vbUKHjukD_tG< z$mh{uY0B9hJa}&h-JC}^LrG*}4 zt;n7~k6bm8{4Lkwxq>rAM)GR&kkpo+3fHS>MArDR|+3`!q&w z+JmyA6@-%ta|B4VmO``>t2+JaQB)p(5_s)6`WAe2Qhb&~p)l-RRUgZB3dGX#+;zTo zY)MLHsHl^~i(FE3<@x6hKhl)7)UWoD?~w>uN*8*cOdx$$wc0V zCU!=-+9e&RBj3lmgCZ+~$LJGJ=*e)4&x#P9D&cwUfo9g-hGR4vB%7lgESt7XQqbS!<<9q(87ut<^({Y*Qx{*Yei3y#3&q<71nl94wo9Z8jI(x_ab7uCg9f z;C4weZd++GQ6qXS0%O%T&R-^uRQk@Z7 zwE#Y}^n+DG*dQ@3TT?-p=ODHI{AMZ#%a(9LM@CLOxao}h6)H7odYN=uwiab~k!4qs zd8D=$7m8uXKflqLxtAkbCQ4(*eOpN`Ll!BEWknRhr0*^r4S}ty9Dhm5 z@o%w3WXoM5ic9V#82C%rhJoK~!Yyq%EB6q#kZef+W1A~^)5)eHRV&FRS2HXxhAX+9 zJmjX1TG*E63zx|nr0N8=plo>x_29w#KdbW;MU42**4e{3?BFKK zRi_xKTy+YP%C@33MXp-KNad<$G`F>v^Yw_Tl(ON7g+X}LbyqT0Gk^W@KL)%KRylgATDniP_Es5@> zOZ8Eu+Y?>sbt!Bm4r`^rp+*g!xmsjfK`v3Wbpa`g^=>6!x3-1R76POM@nigT+e%!T zY%9n*g`3|&E6lz0^)_0P+%a+(&9^jc8BWkGWo39CMlr7BM8T~f+X~VkSyUWRlwrEm z{Agzd($7%xRq4N9Oqm!-G6+(_U+JMv(D$=?s;fmm$Lu1_Y%4-z Date: Thu, 6 Jan 2022 16:18:22 +0000 Subject: [PATCH 08/14] feat(metis): add Stardust mask contract address --- packages/web3-constants/evm/ito.json | 4 ++-- packages/web3-constants/evm/mask-box.json | 2 +- packages/web3-constants/evm/nft-red-packet.json | 4 ++++ packages/web3-constants/evm/red-packet.json | 6 +++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/web3-constants/evm/ito.json b/packages/web3-constants/evm/ito.json index 790d602bff32..fe4b19608d30 100644 --- a/packages/web3-constants/evm/ito.json +++ b/packages/web3-constants/evm/ito.json @@ -104,7 +104,7 @@ "xDai": "0x71834a3FDeA3E70F14a93ED85c6be70925D0CAd9", "Celo": "", "Metis": "", - "Metis_Stardust": "", + "Metis_Stardust": "0xdcA6F476EebCDE8FE8b072e3fC80dBC28dC209b3", "Fantom": "" }, "SUBGRAPH_URL": { @@ -121,7 +121,7 @@ "Arbitrum_Rinkeby": "", "xDai": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-ito-xdai", "Celo": "", - "Metis": "", + "Metis": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-ito-metis", "Metis_Stardust": "", "Fantom": "" } diff --git a/packages/web3-constants/evm/mask-box.json b/packages/web3-constants/evm/mask-box.json index e183cb4ab26f..d999168d218c 100644 --- a/packages/web3-constants/evm/mask-box.json +++ b/packages/web3-constants/evm/mask-box.json @@ -14,7 +14,7 @@ "xDai": "", "Celo": "", "Metis": "", - "Metis_Stardust": "", + "Metis_Stardust": "0x97369fEE7db34E0BfE47861f2ec44b4378d13eB4", "Fantom": "" }, "MASK_BOX_CONTRACT_FROM_BLOCK": { diff --git a/packages/web3-constants/evm/nft-red-packet.json b/packages/web3-constants/evm/nft-red-packet.json index 0e6ae6de8492..e107f7070f47 100644 --- a/packages/web3-constants/evm/nft-red-packet.json +++ b/packages/web3-constants/evm/nft-red-packet.json @@ -13,6 +13,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": " ", + "Metis_Stardust": "0x97369fEE7db34E0BfE47861f2ec44b4378d13eB4", "Fantom": "" }, "SUBGRAPH_URL": { @@ -29,6 +31,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": "", + "Metis_Stardust": "", "Fantom": "" } } diff --git a/packages/web3-constants/evm/red-packet.json b/packages/web3-constants/evm/red-packet.json index 31c4312d8f0a..f2493bb147e8 100644 --- a/packages/web3-constants/evm/red-packet.json +++ b/packages/web3-constants/evm/red-packet.json @@ -68,7 +68,7 @@ "xDai": "0x54a0A221C25Fc0a347EC929cFC5db0be17fA2a2B", "Celo": "", "Metis": "", - "Metis_Stardust": "", + "Metis_Stardust": "0xdB93cCd481012bB5D1E2c8d0aF7C5f2940c00fdC", "Fantom": "" }, "HAPPY_RED_PACKET_ADDRESS_V4_BLOCK_HEIGHT": { @@ -86,7 +86,7 @@ "xDai": 18101937, "Celo": 0, "Metis": 0, - "Metis_Stardust": 0, + "Metis_Stardust": 111855, "Fantom": 0 }, "SUBGRAPH_URL": { @@ -104,7 +104,7 @@ "xDai": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-xdai", "Celo": "", "Metis": "", - "Metis_Stardust": "", + "Metis_Stardust": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-stardust", "Fantom": "" } } From ebbc574a247b14ac95090ea10a4bb1d381637a86 Mon Sep 17 00:00:00 2001 From: codingsh Date: Wed, 12 Jan 2022 21:57:34 +0100 Subject: [PATCH 09/14] feat(metis): add balanceChekcer contract mainnet --- packages/web3-constants/evm/ethereum.json | 2 +- packages/web3-constants/evm/opensea-api.json | 6 ++++ packages/web3-constants/evm/token.json | 4 +-- packages/web3-constants/evm/trader.json | 34 +++++++++++++------- packages/web3-constants/evm/zerion.json | 2 ++ 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/packages/web3-constants/evm/ethereum.json b/packages/web3-constants/evm/ethereum.json index b9012bcdc417..9b4aff771db0 100644 --- a/packages/web3-constants/evm/ethereum.json +++ b/packages/web3-constants/evm/ethereum.json @@ -13,7 +13,7 @@ "Arbitrum_Rinkeby": "0xF98dC9391273c5ab9fa2c980A8d4F875ece802db", "xDai": "0x96c7D011cdFD467f551605f0f5Fce279F86F4186", "Celo": "0x8e28F1d64ceD52b9A09aB1AA3071Aa3c05802d1F", - "Metis": "", + "Metis": "0xf5056B96ab242C566002852d0b98ce0BcDf1af51", "Metis_Stardust": "0x2690906609A9AF3bF08B8384CD9A0F97A88A7E9c", "Fantom": "0xc119574d5fb333f5ac018658d4d8b5035e16bf39" }, diff --git a/packages/web3-constants/evm/opensea-api.json b/packages/web3-constants/evm/opensea-api.json index 97494446399e..e56283529734 100644 --- a/packages/web3-constants/evm/opensea-api.json +++ b/packages/web3-constants/evm/opensea-api.json @@ -13,6 +13,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": "", + "Metis_Stardust": "", "Fantom": "" }, "GET_SINGLE_ASSET_URL": { @@ -29,6 +31,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": "", + "Metis_Stardust": "", "Fantom": "" }, "GET_ASSETS_URL": { @@ -45,6 +49,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": "", + "Metis_Stardust": "", "Fantom": "" } } diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index 42a7b2557f65..96a30c94237c 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -373,9 +373,9 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", - "Fantom": "0x049d68029688eAbF473097a2fC38ef61633A3C7A", "Metis": "", - "Metis_Stardust": "" + "Metis_Stardust": "", + "Fantom": "0x049d68029688eAbF473097a2fC38ef61633A3C7A" }, "eDAI_ADDRESS": { "Mainnet": "", diff --git a/packages/web3-constants/evm/trader.json b/packages/web3-constants/evm/trader.json index 60313d7fa142..45ed373bfcef 100644 --- a/packages/web3-constants/evm/trader.json +++ b/packages/web3-constants/evm/trader.json @@ -572,7 +572,8 @@ "xDai": "", "Celo": "", "Metis": "", - "Metis_Stardust": "" + "Metis_Stardust": "", + "Fantom": "" }, "NETSWAP_ROUTER_ADDRESS": { "Mainnet": "", @@ -589,7 +590,8 @@ "xDai": "", "Celo": "4", "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", - "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949", + "Fantom": "" }, "OPENOCEAN_ETH_ADDRESS": { "Mainnet": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -606,7 +608,8 @@ "xDai": "", "Celo": "", "Metis": "0x1E876cCe41B7b844FDe09E38Fa1cf00f213bFf56", - "Metis_Stardust": "0x19BCFEe83ee0D77158b0c151150aFb0f389E4721" + "Metis_Stardust": "0x19BCFEe83ee0D77158b0c151150aFb0f389E4721", + "Fantom": "" }, "NETSWAP_FACTORY_ADDRESS": { "Mainnet": "", @@ -623,7 +626,8 @@ "xDai": "", "Celo": "4", "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", - "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949", + "Fantom": "" }, "NETSWAP_THEGRAPH": { "Mainnet": "", @@ -640,7 +644,8 @@ "xDai": "", "Celo": "", "Metis": "", - "Metis_Stardust": "" + "Metis_Stardust": "", + "Fantom": "" }, "NETSWAP_INIT_CODE_HASH": { "Mainnet": "", @@ -651,13 +656,13 @@ "BSC": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "BSCT": "", "Matic": "0x0000000000000000000000000000000000001010", - "Metis": "0x966d65068a6a30f10fd1fa814258637a34e059081d79daa94f3e2b6cec48e810", - "Metis_Stardust": "0x68cc803ebc27f23a62dd9f9251e76a9d6f2c659f76c92ffbd5e62d5b877384d6", "Mumbai": "", "Arbitrum": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "Arbitrum_Rinkeby": "", "xDai": "0x0000000000000000000000000000000000000000", "Celo": "", + "Metis": "0x966d65068a6a30f10fd1fa814258637a34e059081d79daa94f3e2b6cec48e810", + "Metis_Stardust": "0x68cc803ebc27f23a62dd9f9251e76a9d6f2c659f76c92ffbd5e62d5b877384d6", "Fantom": "" }, "OPENOCEAN_EXCHANGE_PROXY_ADDRESS": { @@ -674,6 +679,8 @@ "Arbitrum_Rinkeby": "", "xDai": "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64", "Celo": "", + "Metis": "", + "Metis_Stardust": "", "Fantom": "" }, "TETHYS_FACTORY_ADDRESS": { @@ -691,7 +698,8 @@ "xDai": "", "Celo": "4", "Metis": "0x70f51d68D16e8f9e418441280342BD43AC9Dff9f", - "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949" + "Metis_Stardust": "0xA327674305d490199B76b186Ed360fCad3296949", + "Fantom": "" }, "TETHYS_THEGRAPH": { "Mainnet": "", @@ -708,7 +716,8 @@ "xDai": "", "Celo": "", "Metis": "0x2CdFB20205701FF01689461610C9F321D1d00F80", - "Metis_Stardust": "" + "Metis_Stardust": "", + "Fantom": "" }, "TETHYS_INIT_CODE_HASH": { "Mainnet": "", @@ -719,13 +728,13 @@ "BSC": "", "BSCT": "", "Matic": "", - "Metis": "0xef3f1aabf6b944a53c06890783ddef260a21995d1eaea6d52f980cfe082a877d", - "Metis_Stardust": "", "Mumbai": "", "Arbitrum": "", "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", + "Metis": "0xef3f1aabf6b944a53c06890783ddef260a21995d1eaea6d52f980cfe082a877d", + "Metis_Stardust": "", "Fantom": "" }, "TETHYS_ROUTER_ADDRESS": { @@ -743,6 +752,7 @@ "xDai": "", "Celo": "", "Metis": "0x81b9FA50D5f5155Ee17817C21702C3AE4780AD09", - "Metis_Stardust": "" + "Metis_Stardust": "", + "Fantom": "" } } diff --git a/packages/web3-constants/evm/zerion.json b/packages/web3-constants/evm/zerion.json index efa660ffb87e..8f5469ca73f3 100644 --- a/packages/web3-constants/evm/zerion.json +++ b/packages/web3-constants/evm/zerion.json @@ -14,6 +14,7 @@ "xDai": "xdai-assets", "Celo": "celo-assets", "Metis": "metis-assets", + "Metis_Stardust": "", "Fantom": "fantom-assets" }, "TRANSACTIONS_SCOPE_NAME": { @@ -31,6 +32,7 @@ "xDai": "xdai-transactions", "Celo": "celo-transactions", "Metis": "metis-transactions", + "Metis_Stardust": "", "Fantom": "fantom-transactions" } } From 6ee530fe3f399d05ed9077422d20e719da09a2a0 Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 13 Jan 2022 00:48:05 +0100 Subject: [PATCH 10/14] feat(metis): update code --- .../plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx | 1 + packages/mask/src/plugins/RedPacket/base.ts | 1 + .../Trader/SNSAdaptor/trending/TraderView.tsx | 2 +- .../src/plugins/Trader/apis/trader/index.ts | 2 +- .../src/plugins/Trader/helpers/uniswap.ts | 2 +- packages/mask/src/plugins/Trader/pipes.ts | 2 +- packages/mask/src/plugins/Trader/settings.ts | 2 +- .../src/plugins/Trader/trader/0x/constants.ts | 2 +- .../src/plugins/Wallet/services/assets.ts | 2 +- packages/web3-constants/evm/token.json | 26 +++---------------- packages/web3-providers/src/zerion/format.ts | 2 +- packages/web3-shared/evm/assets/chains.json | 8 +++--- 12 files changed, 19 insertions(+), 33 deletions(-) diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx index 27140adaf83d..c5424dbfbab2 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/ClaimAllDialog.tsx @@ -221,6 +221,7 @@ const SUPPORTED_CHAIN_ID_LIST = [ ChainId.Arbitrum, ChainId.xDai, ChainId.Fantom, + ChainId.Metis, ] export function ClaimAllDialog(props: ClaimAllDialogProps) { diff --git a/packages/mask/src/plugins/RedPacket/base.ts b/packages/mask/src/plugins/RedPacket/base.ts index eaa63eeb0f29..13f3337a0730 100644 --- a/packages/mask/src/plugins/RedPacket/base.ts +++ b/packages/mask/src/plugins/RedPacket/base.ts @@ -24,6 +24,7 @@ export const base: Plugin.Shared.Definition = { ChainId.Arbitrum, ChainId.xDai, ChainId.Fantom, + ChainId.Metis, ], }, }, diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/TraderView.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/TraderView.tsx index f95b935300e5..b750fd367244 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/TraderView.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/TraderView.tsx @@ -205,7 +205,7 @@ export function TraderView(props: TraderViewProps) { const isSwappable = (!!trending?.coin.contract_address || - ['eth', 'matic', 'bnb'].includes(trending?.coin.symbol.toLowerCase() ?? '')) && + ['eth', 'matic', 'bnb', 'metis'].includes(trending?.coin.symbol.toLowerCase() ?? '')) && chainIdValid && tradeProviders.length //#endregion diff --git a/packages/mask/src/plugins/Trader/apis/trader/index.ts b/packages/mask/src/plugins/Trader/apis/trader/index.ts index 92c41ce7daf8..7c92a4e58de5 100644 --- a/packages/mask/src/plugins/Trader/apis/trader/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trader/index.ts @@ -42,7 +42,7 @@ export async function getAvailableTraderProviders(chainId: ChainId) { case NetworkType.Celo: return [TradeProvider.SUSHISWAP] case NetworkType.Metis: - return [TradeProvider.SUSHISWAP, TradeProvider.NETSWAP] + return [TradeProvider.SUSHISWAP, TradeProvider.NETSWAP, TradeProvider.TETHYS] case NetworkType.Fantom: return [TradeProvider.SUSHISWAP] default: diff --git a/packages/mask/src/plugins/Trader/helpers/uniswap.ts b/packages/mask/src/plugins/Trader/helpers/uniswap.ts index 02988cd00dd5..7c68a505a04a 100644 --- a/packages/mask/src/plugins/Trader/helpers/uniswap.ts +++ b/packages/mask/src/plugins/Trader/helpers/uniswap.ts @@ -97,7 +97,7 @@ export function uniswapPriceTo(price: Price) { export function uniswapTokenTo(token: Token) { return { - type: ['eth', 'matic', 'bnb'].includes(token.name?.toLowerCase() ?? '') + type: ['eth', 'matic', 'bnb', 'metis'].includes(token.name?.toLowerCase() ?? '') ? EthereumTokenType.Native : EthereumTokenType.ERC20, name: token.name, diff --git a/packages/mask/src/plugins/Trader/pipes.ts b/packages/mask/src/plugins/Trader/pipes.ts index 9be443508678..0eab4936289b 100644 --- a/packages/mask/src/plugins/Trader/pipes.ts +++ b/packages/mask/src/plugins/Trader/pipes.ts @@ -267,7 +267,7 @@ export const resolveZrxTradePoolName = createLookupTableResolver( `${PLUGIN_ID}+metis+tradeProvider`, - TradeProvider.SUSHISWAP, + TradeProvider.TETHYS, { primary: () => '' }, ) diff --git a/packages/mask/src/plugins/Trader/trader/0x/constants.ts b/packages/mask/src/plugins/Trader/trader/0x/constants.ts index 2a304dd09531..b1daf8e13d8a 100644 --- a/packages/mask/src/plugins/Trader/trader/0x/constants.ts +++ b/packages/mask/src/plugins/Trader/trader/0x/constants.ts @@ -1,3 +1,3 @@ import { ChainId } from '@masknet/web3-shared-evm' -export const SUPPORTED_CHAIN_ID_LIST = [ChainId.Mainnet, ChainId.BSC, ChainId.Matic] +export const SUPPORTED_CHAIN_ID_LIST = [ChainId.Mainnet, ChainId.BSC, ChainId.Matic, ChainId.Metis] diff --git a/packages/mask/src/plugins/Wallet/services/assets.ts b/packages/mask/src/plugins/Wallet/services/assets.ts index ade3687d45b2..c28badf87f2d 100644 --- a/packages/mask/src/plugins/Wallet/services/assets.ts +++ b/packages/mask/src/plugins/Wallet/services/assets.ts @@ -180,7 +180,7 @@ function formatAssetsFromZerion( return data.map(({ asset, quantity }) => { const balance = leftShift(quantity, asset.decimals).toNumber() const value = (asset as ZerionAsset).price?.value ?? (asset as ZerionCovalentAsset).value ?? 0 - const isNativeToken = (symbol: string) => ['ETH', 'BNB', 'MATIC', 'ARETH'].includes(symbol) + const isNativeToken = (symbol: string) => ['ETH', 'BNB', 'MATIC', 'ARETH', 'METIS'].includes(symbol) return { token: { diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index 96a30c94237c..c9452820b29f 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -13,7 +13,7 @@ "Arbitrum_Rinkeby": "0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681", "xDai": "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d", "Celo": "0x471EcE3750Da237f93B8E339c536989b8978a438", - "Metis": "", + "Metis": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", "Metis_Stardust": "", "Fantom": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83" }, @@ -31,7 +31,7 @@ "Arbitrum_Rinkeby": "", "xDai": "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", "Celo": "0x2A3684e9Dc20B857375EA04235F2F7edBe818FA7", - "Metis": "", + "Metis": "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21", "Metis_Stardust": "", "Fantom": "0x04068da6c83afcfa0e13ba15a6696662335d5b75" }, @@ -265,7 +265,7 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", - "Metis": "", + "Metis": "0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0", "Metis_Stardust": "", "Fantom": "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E" }, @@ -773,24 +773,6 @@ "Metis_Stardust": "", "Fantom": "" }, - "METIS_ADDRESS": { - "Mainnet": "0x9e32b13ce7f2e80a01932b42553652e053d6ed8e", - "Ropsten": "", - "Rinkeby": "", - "Kovan": "", - "Gorli": "", - "BSC": "", - "BSCT": "", - "Matic": "0x1b9d40715e757bdb9bdec3215b898e46d8a3b71a", - "Mumbai": "", - "Arbitrum": "", - "Arbitrum_Rinkeby": "", - "xDai": "", - "Celo": "", - "Metis": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", - "Metis_Stardust": "", - "Fantom": "" - }, "TETHYS_ADDRESS": { "Mainnet": "", "Ropsten": "", @@ -823,7 +805,7 @@ "Arbitrum_Rinkeby": "0x0000000000000000000000000000000000000000", "xDai": "0x0000000000000000000000000000000000000000", "Celo": "0x471ece3750da237f93b8e339c536989b8978a438", - "Metis": "", + "Metis": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", "Metis_Stardust": "", "Fantom": "0x0000000000000000000000000000000000000000" } diff --git a/packages/web3-providers/src/zerion/format.ts b/packages/web3-providers/src/zerion/format.ts index 3253b0ff1291..bdf91b0c4cb4 100644 --- a/packages/web3-providers/src/zerion/format.ts +++ b/packages/web3-providers/src/zerion/format.ts @@ -57,7 +57,7 @@ export function formatAssets( return data.map(({ asset, quantity }) => { const balance = leftShift(quantity, asset.decimals).toNumber() const value = (asset as ZerionAsset).price?.value ?? (asset as ZerionCovalentAsset).value ?? 0 - const isNativeToken = (symbol: string) => ['ETH', 'BNB', 'MATIC', 'ARETH'].includes(symbol) + const isNativeToken = (symbol: string) => ['ETH', 'BNB', 'MATIC', 'ARETH', 'METIS'].includes(symbol) const address = isNativeToken(asset.symbol) ? getTokenConstants().NATIVE_TOKEN_ADDRESS : asset.asset_code const chainId = resolveChainByScope(scope).chainId diff --git a/packages/web3-shared/evm/assets/chains.json b/packages/web3-shared/evm/assets/chains.json index 509c2c7e9bbb..8caccdd9f776 100644 --- a/packages/web3-shared/evm/assets/chains.json +++ b/packages/web3-shared/evm/assets/chains.json @@ -196,7 +196,7 @@ }, { "name": "Metis Andromeda Mainnet", - "chainId": 80001, + "chainId": 1088, "fullName": "Metis", "shortName": "metis", "chain": "Metis", @@ -205,7 +205,8 @@ "nativeCurrency": { "name": "Metis", "symbol": "METIS", - "decimals": 18 + "decimals": 18, + "logoURI": "https://static.debank.com/image/metis_token/logo_url/0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000/baa52ace2e72eb1c3157d0466aa49fae.png" }, "faucets": [], "features": [], @@ -229,7 +230,8 @@ "nativeCurrency": { "name": "Metis", "symbol": "Metis", - "decimals": 18 + "decimals": 18, + "logoURI": "https://static.debank.com/image/metis_token/logo_url/0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000/baa52ace2e72eb1c3157d0466aa49fae.png" }, "faucets": ["https://faucets.chain.link/rinkeby"], "features": [], From 0159635403aae698b8729034236ea020076e6245 Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 13 Jan 2022 01:10:05 +0100 Subject: [PATCH 11/14] chore(metis): fixed tokens trader plugin --- docs/evm-integration.md | 23 ++++++----- .../Labs/components/SwapSettingDialog.tsx | 2 +- .../src/plugins/Trader/constants/sushiswap.ts | 2 +- .../src/plugins/Trader/constants/tethys.ts | 4 +- .../src/plugins/Trader/constants/trader.ts | 1 - packages/mask/src/plugins/Trader/services.ts | 2 +- packages/web3-constants/evm/coingecko.json | 4 +- packages/web3-constants/evm/explorer.json | 4 +- packages/web3-constants/evm/token.json | 40 ++++++++++++++++++- 9 files changed, 59 insertions(+), 23 deletions(-) diff --git a/docs/evm-integration.md b/docs/evm-integration.md index 4bb9084f6125..58865f44afc6 100644 --- a/docs/evm-integration.md +++ b/docs/evm-integration.md @@ -28,7 +28,7 @@ Mask Network fetches on-chain data from various data sources. Therefore, you can #### Learn more -- https://api.coingecko.com/api/v3/asset_platforms +- ### Token List @@ -44,10 +44,10 @@ Mask Network has integrated Uniswap V2 and Uniswap V3 into the trader plugin. If For API-based DEX, please ref to how other DEXes integrated: -| DEX | Pull Request Link | -| --------- | -------------------------------------------------- | -| DODO | https://github.com/DimensionDev/Maskbook/pull/3882 | -| OpenOcean | https://github.com/DimensionDev/Maskbook/pull/5198 | +| DEX | Pull Request Link | +| --------- | ---------------------------------------------------- | +| DODO | | +| OpenOcean | | ### Deploy Contracts @@ -87,9 +87,10 @@ Goto `chrome-extension://jkoeaghipilijlahjplgbfiocjhldnap/dashboard.html#/wallet ## Learn More -| Chain | Pull Request Link | -| -------- | -------------------------------------------------- | -| CELO | https://github.com/DimensionDev/Maskbook/pull/5052 | -| Fantom | https://github.com/DimensionDev/Maskbook/pull/5036 | -| xDai | https://github.com/DimensionDev/Maskbook/pull/4140 | -| Arbitrum | https://github.com/DimensionDev/Maskbook/pull/3558 | +| Chain | Pull Request Link | +| -------- | ---------------------------------------------------- | +| CELO | | +| Fantom | | +| xDai | | +| Arbitrum | | +| Metis | | diff --git a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx index cf4e73cad297..c27d5c8efee0 100644 --- a/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx +++ b/packages/dashboard/src/pages/Labs/components/SwapSettingDialog.tsx @@ -63,9 +63,9 @@ export default function SwapSettingDialog({ open, onClose }: SettingDialogProps) const celoOptions = [{ label: 'SushiSwap', value: TradeProvider.SUSHISWAP }] const metisOptions = [ + { label: 'Tethys', value: TradeProvider.TETHYS }, { label: 'SushiSwap', value: TradeProvider.SUSHISWAP }, { label: 'NetSwap', value: TradeProvider.NETSWAP }, - { label: 'Tethys', value: TradeProvider.TETHYS }, ] const t = useDashboardI18N() diff --git a/packages/mask/src/plugins/Trader/constants/sushiswap.ts b/packages/mask/src/plugins/Trader/constants/sushiswap.ts index 95acabcfa174..62dab6a2b086 100644 --- a/packages/mask/src/plugins/Trader/constants/sushiswap.ts +++ b/packages/mask/src/plugins/Trader/constants/sushiswap.ts @@ -34,6 +34,6 @@ export const SUSHISWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { [ChainId.BSC]: [WNATIVE, DAI, BUSD, USDC, USDT, BTCB].map((x) => x[ChainId.BSC]), [ChainId.xDai]: [WNATIVE, USDC, USDT, WBTC].map((x) => x[ChainId.xDai]), [ChainId.Celo]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Celo]), - [ChainId.Metis]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Metis]), + [ChainId.Metis]: [WNATIVE, USDC, USDT].map((x) => x[ChainId.Metis]), [ChainId.Fantom]: [WNATIVE, DAI, USDC, fUSDT, WBTC].map((x) => x[ChainId.Fantom]), } diff --git a/packages/mask/src/plugins/Trader/constants/tethys.ts b/packages/mask/src/plugins/Trader/constants/tethys.ts index cb1ebaa81c5e..0786d30b226e 100644 --- a/packages/mask/src/plugins/Trader/constants/tethys.ts +++ b/packages/mask/src/plugins/Trader/constants/tethys.ts @@ -1,5 +1,5 @@ import { ChainId } from '@masknet/web3-shared-evm' -import { USDC, USDT, TETHYS, METIS, WNATIVE, WNATIVE_ONLY } from './trader' +import { USDC, USDT, TETHYS, WNATIVE, WNATIVE_ONLY } from './trader' import type { ERC20AgainstToken, ERC20TokenCustomizedBase } from './types' /** @@ -10,5 +10,5 @@ export const TETHYS_CUSTOM_BASES: ERC20TokenCustomizedBase = {} export const TETHYS_BASE_AGAINST_TOKENS: ERC20AgainstToken = { ...WNATIVE_ONLY, - [ChainId.Metis]: [WNATIVE, METIS, USDC, USDT, TETHYS].map((x) => x[ChainId.Metis]), + [ChainId.Metis]: [WNATIVE, USDC, USDT, TETHYS].map((x) => x[ChainId.Metis]), } diff --git a/packages/mask/src/plugins/Trader/constants/trader.ts b/packages/mask/src/plugins/Trader/constants/trader.ts index 8855e5c33692..bc59fe63056f 100644 --- a/packages/mask/src/plugins/Trader/constants/trader.ts +++ b/packages/mask/src/plugins/Trader/constants/trader.ts @@ -44,7 +44,6 @@ export const STETH = createERC20Tokens('stETH_ADDRESS', 'stakedETH', 'stETH', 18 export const CUSD = createERC20Tokens('cUSD_ADDRESS', 'Celo Dollar', 'cUSD', 18) export const CEUR = createERC20Tokens('cEUR_ADDRESS', 'Celo Euro', 'cEUR', 18) export const NETT = createERC20Tokens('NETT_ADDRESS', 'Netswap Token', 'NETT', 18) -export const METIS = createERC20Tokens('METIS_ADDRESS', 'Metis Token', 'METIS', 18) export const TETHYS = createERC20Tokens('TETHYS_ADDRESS', 'Tethys', 'TETHYS', 18) export const WNATIVE = createERC20Tokens( diff --git a/packages/mask/src/plugins/Trader/services.ts b/packages/mask/src/plugins/Trader/services.ts index 1a43ec380ccb..016aa7c204b7 100644 --- a/packages/mask/src/plugins/Trader/services.ts +++ b/packages/mask/src/plugins/Trader/services.ts @@ -50,7 +50,7 @@ currentChainIdSettings.addListener((chainId: ChainId) => { currentDataProviderSettings.value = DataProvider.COIN_GECKO break case NetworkType.Metis: - currentTradeProviderSettings.value = TradeProvider.SUSHISWAP + currentTradeProviderSettings.value = TradeProvider.TETHYS if (currentDataProviderSettings.value === DataProvider.UNISWAP_INFO) currentDataProviderSettings.value = DataProvider.COIN_GECKO break diff --git a/packages/web3-constants/evm/coingecko.json b/packages/web3-constants/evm/coingecko.json index f3fd13b507c4..31b995bf38c7 100644 --- a/packages/web3-constants/evm/coingecko.json +++ b/packages/web3-constants/evm/coingecko.json @@ -13,7 +13,7 @@ "Arbitrum_Rinkeby": "", "xDai": "xdai", "Celo": "celo", - "Metis": "metis", + "Metis": "metis-andromeda", "Metis_Stardust": "", "Fantom": "fantom" }, @@ -31,7 +31,7 @@ "Arbitrum_Rinkeby": "", "xDai": "xdai", "Celo": "celo", - "Metis": "metis", + "Metis": "metis-token", "Metis_Stardust": "", "Fantom": "fantom" } diff --git a/packages/web3-constants/evm/explorer.json b/packages/web3-constants/evm/explorer.json index c06ed06f38d7..fd2d7a0ff635 100644 --- a/packages/web3-constants/evm/explorer.json +++ b/packages/web3-constants/evm/explorer.json @@ -13,8 +13,8 @@ "Arbitrum_Rinkeby": "", "xDai": "", "Celo": "", - "Metis": "", - "Metis_Stardust": "", + "Metis": "https://andromeda-explorer.metis.io/api", + "Metis_Stardust": "https://stardust-explorer.metis.io/api", "Fantom": "https://api.ftmscan.com/api" }, "EXPLORER_API_KEY": { diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index c9452820b29f..a61e6e619006 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -791,6 +791,42 @@ "Metis_Stardust": "", "Fantom": "" }, + "WOW_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0x5ce34d9abe4bf239cbc08b89287c87f4cd6d80b7", + "Metis_Stardust": "", + "Fantom": "" + }, + "LINK_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Celo": "", + "Metis": "0xf5f66d5daa89c090a7afa10e6c1553b2887a9a33", + "Metis_Stardust": "", + "Fantom": "" + }, "NATIVE_TOKEN_ADDRESS": { "Mainnet": "0x0000000000000000000000000000000000000000", "Ropsten": "0x0000000000000000000000000000000000000000", @@ -805,8 +841,8 @@ "Arbitrum_Rinkeby": "0x0000000000000000000000000000000000000000", "xDai": "0x0000000000000000000000000000000000000000", "Celo": "0x471ece3750da237f93b8e339c536989b8978a438", - "Metis": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", - "Metis_Stardust": "", + "Metis": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + "Metis_Stardust": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", "Fantom": "0x0000000000000000000000000000000000000000" } } From f37d680f847ab4fa776ccaf42776c0b937b2bf12 Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 13 Jan 2022 02:32:17 +0100 Subject: [PATCH 12/14] chore(metis): disable sushiswap on metis --- packages/mask/src/plugins/Trader/apis/trader/index.ts | 2 +- packages/mask/src/plugins/Trader/constants/sushiswap.ts | 1 - packages/web3-constants/evm/trader.json | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/mask/src/plugins/Trader/apis/trader/index.ts b/packages/mask/src/plugins/Trader/apis/trader/index.ts index 7c92a4e58de5..4080e543422f 100644 --- a/packages/mask/src/plugins/Trader/apis/trader/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trader/index.ts @@ -42,7 +42,7 @@ export async function getAvailableTraderProviders(chainId: ChainId) { case NetworkType.Celo: return [TradeProvider.SUSHISWAP] case NetworkType.Metis: - return [TradeProvider.SUSHISWAP, TradeProvider.NETSWAP, TradeProvider.TETHYS] + return [TradeProvider.TETHYS, TradeProvider.NETSWAP] case NetworkType.Fantom: return [TradeProvider.SUSHISWAP] default: diff --git a/packages/mask/src/plugins/Trader/constants/sushiswap.ts b/packages/mask/src/plugins/Trader/constants/sushiswap.ts index 62dab6a2b086..ae6db9169262 100644 --- a/packages/mask/src/plugins/Trader/constants/sushiswap.ts +++ b/packages/mask/src/plugins/Trader/constants/sushiswap.ts @@ -34,6 +34,5 @@ export const SUSHISWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { [ChainId.BSC]: [WNATIVE, DAI, BUSD, USDC, USDT, BTCB].map((x) => x[ChainId.BSC]), [ChainId.xDai]: [WNATIVE, USDC, USDT, WBTC].map((x) => x[ChainId.xDai]), [ChainId.Celo]: [WNATIVE, CUSD, CEUR].map((x) => x[ChainId.Celo]), - [ChainId.Metis]: [WNATIVE, USDC, USDT].map((x) => x[ChainId.Metis]), [ChainId.Fantom]: [WNATIVE, DAI, USDC, fUSDT, WBTC].map((x) => x[ChainId.Fantom]), } diff --git a/packages/web3-constants/evm/trader.json b/packages/web3-constants/evm/trader.json index 45ed373bfcef..cc07c0370cb1 100644 --- a/packages/web3-constants/evm/trader.json +++ b/packages/web3-constants/evm/trader.json @@ -653,13 +653,13 @@ "Rinkeby": "", "Kovan": "", "Gorli": "", - "BSC": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "BSC": "", "BSCT": "", - "Matic": "0x0000000000000000000000000000000000001010", + "Matic": "", "Mumbai": "", - "Arbitrum": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "Arbitrum": "", "Arbitrum_Rinkeby": "", - "xDai": "0x0000000000000000000000000000000000000000", + "xDai": "", "Celo": "", "Metis": "0x966d65068a6a30f10fd1fa814258637a34e059081d79daa94f3e2b6cec48e810", "Metis_Stardust": "0x68cc803ebc27f23a62dd9f9251e76a9d6f2c659f76c92ffbd5e62d5b877384d6", From 18fcc27077ffa359d059de54a3b3ee4696f1ab32 Mon Sep 17 00:00:00 2001 From: codingsh Date: Sat, 29 Jan 2022 02:56:35 +0100 Subject: [PATCH 13/14] feat(Metis): enable Metis on ITO base --- packages/mask/src/plugins/ITO/base.ts | 1 + packages/web3-shared/evm/assets/chains.json | 2 +- pnpm-lock.yaml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/mask/src/plugins/ITO/base.ts b/packages/mask/src/plugins/ITO/base.ts index eceee4b13b46..104d857dd8f7 100644 --- a/packages/mask/src/plugins/ITO/base.ts +++ b/packages/mask/src/plugins/ITO/base.ts @@ -25,6 +25,7 @@ export const base: Plugin.Shared.Definition = { ChainId.Aurora, ChainId.Avalanche, ChainId.Fantom, + ChainId.Metis, ], }, }, diff --git a/packages/web3-shared/evm/assets/chains.json b/packages/web3-shared/evm/assets/chains.json index 53a992af2548..7482b4c8b490 100644 --- a/packages/web3-shared/evm/assets/chains.json +++ b/packages/web3-shared/evm/assets/chains.json @@ -195,7 +195,7 @@ ], "infoURL": "https://matic.network/" }, - { + { "name": "Matic Testnet Mumbai", "chainId": 80001, "fullName": "Polygon", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30af5b5b3ad8..3fd365b57c98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18752,7 +18752,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.20.0 + resolve: 1.22.0 semver: 5.7.1 validate-npm-package-license: 3.0.4 From 9fc2086d2f9d02e03e58c7f0754bcd32cf7042d1 Mon Sep 17 00:00:00 2001 From: codingsh Date: Tue, 8 Feb 2022 14:43:23 +0100 Subject: [PATCH 14/14] chore(metis): change multicall address --- packages/web3-constants/evm/ethereum.json | 4 ++-- packages/web3-constants/evm/red-packet.json | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/web3-constants/evm/ethereum.json b/packages/web3-constants/evm/ethereum.json index 2eb80fd09d32..0e0423646a84 100644 --- a/packages/web3-constants/evm/ethereum.json +++ b/packages/web3-constants/evm/ethereum.json @@ -37,8 +37,8 @@ "Avalanche": "0x6cc1b1058F9153358278C35E0b2D382f1585854B", "Avalanche_Fuji": "", "Celo": "0x072453AdEC16cFC7FB6Af1517c3f25407180cccC", - "Metis": "0x0071DDb5a2e80B6b22317594a0307599836621CD", - "Metis_Stardust": "0xb96EC7593A05cA620585fCfb2EAd7da01EE64619", + "Metis": "0x6cc1b1058F9153358278C35E0b2D382f1585854B", + "Metis_Stardust": "0x6cc1b1058F9153358278C35E0b2D382f1585854B", "Fantom": "0x913975af2Bb8a6Be4100D7dc5e9765B77F6A5d6c", "Aurora": "0x6cc1b1058F9153358278C35E0b2D382f1585854B", "Aurora_Testnet": "" diff --git a/packages/web3-constants/evm/red-packet.json b/packages/web3-constants/evm/red-packet.json index b7911b2906d0..f412f993c8c0 100644 --- a/packages/web3-constants/evm/red-packet.json +++ b/packages/web3-constants/evm/red-packet.json @@ -81,11 +81,11 @@ "Avalanche": "0xF9F7C1496c21bC0180f4B64daBE0754ebFc8A8c0", "Avalanche_Fuji": "0x3f64DFB6009d138DfD7b62916f3322A438d8b00D", "Celo": "0xAb7B1bE4233A04e5C43a810E75657ECED8E5463B", + "Metis": "", + "Metis_Stardust": "0xdB93cCd481012bB5D1E2c8d0aF7C5f2940c00fdC", "Fantom": "0x578a7Fee5f0D8CEc7d00578Bf37374C5b95C4b98", "Aurora": "0x19f179D7e0D7d9F9d5386afFF64271D98A91615B", - "Aurora_Testnet": "0xdB93cCd481012bB5D1E2c8d0aF7C5f2940c00fdC", - "Metis": "", - "Metis_Stardust": "0xdB93cCd481012bB5D1E2c8d0aF7C5f2940c00fdC" + "Aurora_Testnet": "0xdB93cCd481012bB5D1E2c8d0aF7C5f2940c00fdC" }, "HAPPY_RED_PACKET_ADDRESS_V4_BLOCK_HEIGHT": { "Mainnet": 12939427, @@ -103,11 +103,11 @@ "Avalanche": 8306507, "Avalanche_Fuji": 4751550, "Celo": 10413552, + "Metis": 0, + "Metis_Stardust": 111855, "Fantom": 25112473, "Aurora": 57552338, - "Aurora_Testnet": 77918765, - "Metis": 0, - "Metis_Stardust": 111855 + "Aurora_Testnet": 77918765 }, "SUBGRAPH_URL": { "Mainnet": "https://api.thegraph.com/subgraphs/name/dimensiondev/mask-red-packet-mainnet",