From 5c0bda9ac3a9c22932444f50fe037dff0958eb5a Mon Sep 17 00:00:00 2001 From: codingsh Date: Thu, 3 Feb 2022 15:28:48 +0100 Subject: [PATCH] feat(fantom): add spiritswap and spookyswap dexs --- cspell.json | 2 + .../SNSAdaptor/trader/TradeProviderIcon.tsx | 22 ++- .../src/plugins/Trader/apis/trader/index.ts | 2 +- .../src/plugins/Trader/constants/index.ts | 2 + .../plugins/Trader/constants/spiritswap.ts | 14 ++ .../plugins/Trader/constants/spookyswap.ts | 14 ++ .../src/plugins/Trader/constants/trader.ts | 2 + packages/mask/src/plugins/Trader/pipes.ts | 12 ++ packages/mask/src/plugins/Trader/settings.ts | 6 + .../Trader/trader/useAllTradeComputed.ts | 26 +++ .../Trader/trader/useGetTradeContext.ts | 28 +++ .../plugins/Trader/trader/useTradeCallback.ts | 4 + .../plugins/Trader/trader/useTradeContext.ts | 28 +++ .../mask/src/plugins/Trader/types/trader.ts | 2 + packages/public-api/src/web.ts | 2 + packages/web3-constants/evm/token.json | 40 +++++ packages/web3-constants/evm/trader.json | 160 ++++++++++++++++++ 17 files changed, 363 insertions(+), 3 deletions(-) create mode 100644 packages/mask/src/plugins/Trader/constants/spiritswap.ts create mode 100644 packages/mask/src/plugins/Trader/constants/spookyswap.ts diff --git a/cspell.json b/cspell.json index 97dd15ebfc13..85be0b06bc5b 100644 --- a/cspell.json +++ b/cspell.json @@ -214,6 +214,8 @@ "Sint", "solana", "sollet", + "spiritswap", + "spookyswap", "steelblue", "steganographic", "steganography", diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx index 517038b2ea52..2e937995c40f 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeProviderIcon.tsx @@ -17,6 +17,8 @@ const quickswapIcon = new URL('../../../../resources/quickswap.png', import.meta const pancakeswapIcon = new URL('../../../../resources/pancakeswap.png', import.meta.url).toString() const traderjoeIcon = new URL('../../../../resources/traderjoe.png', import.meta.url).toString() const wannaswapIcon = new URL('../../../../resources/wannaswap.png', import.meta.url).toString() +const spookyswapIcon = new URL('../../../../resources/spookyswap.svg', import.meta.url).toString() +const spiritswapIcon = new URL('../../../../resources/spiritswap.png', import.meta.url).toString() const useStyles = makeStyles()((theme) => ({ icon: { @@ -63,8 +65,8 @@ export function TradeProviderIcon(props: TradeProviderIconProps) { case TradeProvider.WANNASWAP: return ( {resolveTradeProviderName(TradeProvider.PANCAKESWAP)} ) @@ -80,6 +82,22 @@ export function TradeProviderIcon(props: TradeProviderIconProps) { className={classes.icon} /> ) + case TradeProvider.SPIRITSWAP: + return ( + {resolveTradeProviderName(TradeProvider.SPIRITSWAP)} + ) + case TradeProvider.SPOOKYSWAP: + return ( + {resolveTradeProviderName(TradeProvider.SPOOKYSWAP)} + ) case TradeProvider.OPENOCEAN: return case TradeProvider.PANGOLIN: diff --git a/packages/mask/src/plugins/Trader/apis/trader/index.ts b/packages/mask/src/plugins/Trader/apis/trader/index.ts index 3e562ea63401..147fb14d350f 100644 --- a/packages/mask/src/plugins/Trader/apis/trader/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trader/index.ts @@ -47,7 +47,7 @@ export async function getAvailableTraderProviders(chainId: ChainId) { case NetworkType.Celo: return [TradeProvider.SUSHISWAP] case NetworkType.Fantom: - return [TradeProvider.SUSHISWAP] + return [TradeProvider.SUSHISWAP, TradeProvider.SPOOKYSWAP, TradeProvider.SPIRITSWAP] case NetworkType.Aurora: return [TradeProvider.DODO, TradeProvider.WANNASWAP, TradeProvider.TRISOLARIS] case NetworkType.Boba: diff --git a/packages/mask/src/plugins/Trader/constants/index.ts b/packages/mask/src/plugins/Trader/constants/index.ts index 7cde5749d988..7962795af3f4 100644 --- a/packages/mask/src/plugins/Trader/constants/index.ts +++ b/packages/mask/src/plugins/Trader/constants/index.ts @@ -13,4 +13,6 @@ export * from './traderjoe' export * from './pangolindex' export * from './wannaswap' export * from './trisolaris' +export * from './spiritswap' +export * from './spookyswap' export type { ERC20TokenCustomizedBase, ERC20AgainstToken } from './types' diff --git a/packages/mask/src/plugins/Trader/constants/spiritswap.ts b/packages/mask/src/plugins/Trader/constants/spiritswap.ts new file mode 100644 index 000000000000..cee651267cd2 --- /dev/null +++ b/packages/mask/src/plugins/Trader/constants/spiritswap.ts @@ -0,0 +1,14 @@ +import { ChainId } from '@masknet/web3-shared-evm' +import { DAI, USDC, fUSDT, WBTC, WNATIVE, WNATIVE_ONLY, SPIRIT } 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 SPIRITSWAP_CUSTOM_BASES: ERC20TokenCustomizedBase = {} + +export const SPIRITSWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { + ...WNATIVE_ONLY, + [ChainId.Fantom]: [WNATIVE, DAI, USDC, fUSDT, WBTC, SPIRIT].map((x) => x[ChainId.Fantom]), +} diff --git a/packages/mask/src/plugins/Trader/constants/spookyswap.ts b/packages/mask/src/plugins/Trader/constants/spookyswap.ts new file mode 100644 index 000000000000..7285a6ba6a5b --- /dev/null +++ b/packages/mask/src/plugins/Trader/constants/spookyswap.ts @@ -0,0 +1,14 @@ +import { ChainId } from '@masknet/web3-shared-evm' +import { DAI, USDC, fUSDT, WBTC, WNATIVE, WNATIVE_ONLY, BOO } 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 SPOOKYSWAP_CUSTOM_BASES: ERC20TokenCustomizedBase = {} + +export const SPOOKYSWAP_BASE_AGAINST_TOKENS: ERC20AgainstToken = { + ...WNATIVE_ONLY, + [ChainId.Fantom]: [WNATIVE, DAI, USDC, fUSDT, WBTC, BOO].map((x) => x[ChainId.Fantom]), +} diff --git a/packages/mask/src/plugins/Trader/constants/trader.ts b/packages/mask/src/plugins/Trader/constants/trader.ts index 6f8cdc2d5594..86192220652a 100644 --- a/packages/mask/src/plugins/Trader/constants/trader.ts +++ b/packages/mask/src/plugins/Trader/constants/trader.ts @@ -50,6 +50,8 @@ export const CUSD = createERC20Tokens('cUSD_ADDRESS', 'Celo Dollar', 'cUSD', 18) export const CEUR = createERC20Tokens('cEUR_ADDRESS', 'Celo Euro', 'cEUR', 18) export const JOE = createERC20Tokens('JOE_ADDRESS', 'JoeToken', 'JOE', 18) export const PNG = createERC20Tokens('PNG_ADDRESS', 'Pangolin', 'PNG', 18) +export const SPIRIT = createERC20Tokens('SPIRIT_ADDRESS', 'SpiritSwap Token', 'SPIRIT', 18) +export const BOO = createERC20Tokens('BOO_ADDRESS', 'SpookyToken', 'BOO', 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 ea9434a4858a..511d2f652b8c 100644 --- a/packages/mask/src/plugins/Trader/pipes.ts +++ b/packages/mask/src/plugins/Trader/pipes.ts @@ -61,6 +61,8 @@ export const resolveTradeProviderName = createLookupTableResolver { throw new Error(`Unknown provider type: ${tradeProvider}`) @@ -128,6 +130,10 @@ export function resolveTradeProviderLink(tradeProvider: TradeProvider, networkTy return 'https://www.trisolaris.io/#/swap' case TradeProvider.WANNASWAP: return 'https://wannaswap.finance/exchange/swap' + case TradeProvider.SPOOKYSWAP: + return 'https://spookyswap.finance/' + case TradeProvider.SPIRITSWAP: + return 'https://app.spiritswap.finance/#/' default: unreachable(tradeProvider) } @@ -206,6 +212,10 @@ export function resolveTradePairLink(tradeProvider: TradeProvider, address: stri case TradeProvider.WANNASWAP: // TODO - add WannaSwap analytics return '' + case TradeProvider.SPOOKYSWAP: + return `https://info.spookyswap.finance/pair/${address}` + case TradeProvider.SPIRITSWAP: + return `https://info.spiritswap.finance/pair/${address}` default: unreachable(tradeProvider) } @@ -299,6 +309,8 @@ export const resolveZrxTradePoolName = createLookupTableResolver(`${PLUGIN_ID}+tradeProvi const openoceanSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+openocean`, '') const trisolarisSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+trisolaris`, '') const wannaswapSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+wannaswap`, '') +const spiritswapSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+spiritswap`, '') +const spookyswapSettings = createInternalSettings(`${PLUGIN_ID}+tradeProvider+spookyswap`, '') /** * The general settings of specific tarde provider @@ -91,6 +93,10 @@ export function getCurrentTradeProviderGeneralSettings(tradeProvider: TradeProvi return trisolarisSettings case TradeProvider.WANNASWAP: return wannaswapSettings + case TradeProvider.SPIRITSWAP: + return spiritswapSettings + case TradeProvider.SPOOKYSWAP: + return spookyswapSettings default: unreachable(tradeProvider) } diff --git a/packages/mask/src/plugins/Trader/trader/useAllTradeComputed.ts b/packages/mask/src/plugins/Trader/trader/useAllTradeComputed.ts index 085da9903ab5..ade4fdfba743 100644 --- a/packages/mask/src/plugins/Trader/trader/useAllTradeComputed.ts +++ b/packages/mask/src/plugins/Trader/trader/useAllTradeComputed.ts @@ -247,6 +247,30 @@ export function useAllTradeComputed( const wannaswap = useUniswapTradeComputed(wannaswap_.value, inputToken, outputToken) const wannaSwapEstimateGas = useUniswapTradeGasLimit(wannaswap, TradeProvider.WANNASWAP) + // SpiritSwap + const spiritswap_ = useUniswapV2Trade( + TradeProvider.SPIRITSWAP, + TradeStrategy.ExactIn, + inputAmount_, + '0', + tradeProviders.some((x) => x === TradeProvider.SPIRITSWAP) ? inputToken : undefined, + tradeProviders.some((x) => x === TradeProvider.SPIRITSWAP) ? outputToken : undefined, + ) + const spiritswap = useUniswapTradeComputed(spiritswap_.value, inputToken, outputToken) + const spiritSwapEstimateGas = useUniswapTradeGasLimit(spiritswap, TradeProvider.SPIRITSWAP) + + // spookyswap + const spookyswap_ = useUniswapV2Trade( + TradeProvider.SPOOKYSWAP, + TradeStrategy.ExactIn, + inputAmount_, + '0', + tradeProviders.some((x) => x === TradeProvider.SPOOKYSWAP) ? inputToken : undefined, + tradeProviders.some((x) => x === TradeProvider.SPOOKYSWAP) ? outputToken : undefined, + ) + const spookyswap = useUniswapTradeComputed(spookyswap_.value, inputToken, outputToken) + const spookySwapEstimateGas = useUniswapTradeGasLimit(spookyswap, TradeProvider.SPOOKYSWAP) + const allTradeResult = [ { provider: TradeProvider.UNISWAP_V2, ...uniswapV2_, value: uniswapV2, gas: uniswapV2EstimateGas }, { provider: TradeProvider.SUSHISWAP, ...sushiSwap_, value: sushiSwap, gas: sushiSwapEstimateGas }, @@ -263,6 +287,8 @@ export function useAllTradeComputed( { provider: TradeProvider.OPENOCEAN, ...openocean_, value: openocean, gas: openoceanSwapEstimateGas }, { provider: TradeProvider.WANNASWAP, ...wannaswap_, value: wannaswap, gas: wannaSwapEstimateGas }, { provider: TradeProvider.TRISOLARIS, ...trisolaris_, value: trisolaris, gas: trisolarisEstimateGas }, + { provider: TradeProvider.SPIRITSWAP, ...spiritswap_, value: spiritswap, gas: spiritSwapEstimateGas }, + { provider: TradeProvider.SPOOKYSWAP, ...spookyswap_, value: spookyswap, gas: spookySwapEstimateGas }, ] return nativeToken_.value diff --git a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts index 77533cc926e2..354320431d30 100644 --- a/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useGetTradeContext.ts @@ -21,6 +21,10 @@ import { WANNASWAP_CUSTOM_BASES, TRISOLARIS_BASE_AGAINST_TOKENS, TRISOLARIS_CUSTOM_BASES, + SPIRITSWAP_BASE_AGAINST_TOKENS, + SPIRITSWAP_CUSTOM_BASES, + SPOOKYSWAP_BASE_AGAINST_TOKENS, + SPOOKYSWAP_CUSTOM_BASES, } from '../constants' import { unreachable } from '@dimensiondev/kit' import { TargetChainIdContext } from './useTargetChainIdContext' @@ -150,6 +154,30 @@ export function useGetTradeContext(tradeProvider?: TradeProvider) { ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: TRISOLARIS_CUSTOM_BASES, } + case TradeProvider.SPOOKYSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: DEX_TRADE.SPOOKYSWAP_THEGRAPH, + INIT_CODE_HASH: DEX_TRADE.SPOOKYSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: DEX_TRADE.SPOOKYSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: DEX_TRADE.SPOOKYSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SPOOKYSWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SPOOKYSWAP_CUSTOM_BASES, + } + case TradeProvider.SPIRITSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: DEX_TRADE.SPIRITSWAP_THEGRAPH, + INIT_CODE_HASH: DEX_TRADE.SPIRITSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: DEX_TRADE.SPIRITSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: DEX_TRADE.SPIRITSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SPIRITSWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SPIRITSWAP_CUSTOM_BASES, + } case TradeProvider.ZRX: return { TYPE: tradeProvider, diff --git a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts index c678a4013af9..cf77f9328c95 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeCallback.ts @@ -114,6 +114,10 @@ export function useTradeCallback( return uniswapV2Like case TradeProvider.OPENOCEAN: return openocean + case TradeProvider.SPIRITSWAP: + return uniswapV2Like + case TradeProvider.SPOOKYSWAP: + 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 3db649333430..f93e310ed953 100644 --- a/packages/mask/src/plugins/Trader/trader/useTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useTradeContext.ts @@ -21,6 +21,10 @@ import { WANNASWAP_CUSTOM_BASES, TRISOLARIS_CUSTOM_BASES, TRISOLARIS_BASE_AGAINST_TOKENS, + SPOOKYSWAP_CUSTOM_BASES, + SPOOKYSWAP_BASE_AGAINST_TOKENS, + SPIRITSWAP_CUSTOM_BASES, + SPIRITSWAP_BASE_AGAINST_TOKENS, } from '../constants' import type { TradeContext as TradeContext_ } from '../types' import { TargetChainIdContext } from './useTargetChainIdContext' @@ -171,6 +175,30 @@ export function useTradeContext(tradeProvider: TradeProvider) { ADDITIONAL_TOKENS: {}, CUSTOM_TOKENS: PANGOLIN_CUSTOM_BASES, } + case TradeProvider.SPIRITSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: DEX_TRADE.SPIRITSWAP_THEGRAPH, + INIT_CODE_HASH: DEX_TRADE.SPIRITSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: DEX_TRADE.SPIRITSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: DEX_TRADE.SPIRITSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SPIRITSWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SPIRITSWAP_CUSTOM_BASES, + } + case TradeProvider.SPOOKYSWAP: + return { + TYPE: tradeProvider, + IS_UNISWAP_V2_LIKE: true, + GRAPH_API: DEX_TRADE.SPOOKYSWAP_THEGRAPH, + INIT_CODE_HASH: DEX_TRADE.SPOOKYSWAP_INIT_CODE_HASH, + ROUTER_CONTRACT_ADDRESS: DEX_TRADE.SPOOKYSWAP_ROUTER_ADDRESS, + FACTORY_CONTRACT_ADDRESS: DEX_TRADE.SPOOKYSWAP_FACTORY_ADDRESS, + AGAINST_TOKENS: SPOOKYSWAP_BASE_AGAINST_TOKENS, + ADDITIONAL_TOKENS: {}, + CUSTOM_TOKENS: SPOOKYSWAP_CUSTOM_BASES, + } case TradeProvider.OPENOCEAN: return { TYPE: tradeProvider, diff --git a/packages/mask/src/plugins/Trader/types/trader.ts b/packages/mask/src/plugins/Trader/types/trader.ts index fb0d655737ee..2cdf434a8a27 100644 --- a/packages/mask/src/plugins/Trader/types/trader.ts +++ b/packages/mask/src/plugins/Trader/types/trader.ts @@ -75,6 +75,8 @@ export enum ZrxTradePool { PangolinDex = 'PangolinDex', Trisolaris = 'Trisolaris', WannaSwap = 'WannaSwap', + SpiritSwap = 'SpiritSwap', + SpookySwap = 'SpookySwap', } export interface TradeComputed { diff --git a/packages/public-api/src/web.ts b/packages/public-api/src/web.ts index d507b9b8c2b6..3fda5fa51ce2 100644 --- a/packages/public-api/src/web.ts +++ b/packages/public-api/src/web.ts @@ -217,6 +217,8 @@ export enum TradeProvider { TRISOLARIS = 12, TRADERJOE = 13, PANGOLIN = 14, + SPIRITSWAP = 15, + SPOOKYSWAP = 16, } /** Supported language settings */ export enum LanguageOptions { diff --git a/packages/web3-constants/evm/token.json b/packages/web3-constants/evm/token.json index f6fe2360d0d4..5c302b73b8cb 100644 --- a/packages/web3-constants/evm/token.json +++ b/packages/web3-constants/evm/token.json @@ -899,6 +899,46 @@ "Aurora": "", "Aurora_Testnet": "" }, + "SPIRIT_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0x5cc61a78f164885776aa610fb0fe1257df78e59b", + "Aurora": "", + "Aurora_Testnet": "" + }, + "BOO_ADDRESS": { + "Mainnet": "0x55af5865807b196bd0197e0902746f31fbccfa58", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "0xbd83010eb60f12112908774998f65761cf9f6f9a", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0x841fad6eae12c286d1fd18d1d525dffa75c7effe", + "Aurora": "", + "Aurora_Testnet": "" + }, "ETHER_ADDRESS": { "Mainnet": "", "Ropsten": "", diff --git a/packages/web3-constants/evm/trader.json b/packages/web3-constants/evm/trader.json index b656354c3839..ee610efcc764 100644 --- a/packages/web3-constants/evm/trader.json +++ b/packages/web3-constants/evm/trader.json @@ -1018,5 +1018,165 @@ "Fantom": "", "Aurora": "0x754e1d90e536e4c1df81b7f030f47b4ca80c87120e145c294f098c83a6cb5ace", "Aurora_Testnet": "" + }, + "SPIRITSWAP_ROUTER_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0x16327e3fbdaca3bcf7e38f5af2599d2ddc33ae52", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPIRITSWAP_FACTORY_ADDRESS": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0xEF45d134b73241eDa7703fa787148D9C9F4950b0", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPIRITSWAP_THEGRAPH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPIRITSWAP_INIT_CODE_HASH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "0x4a697f690d1f46e0f1a897a8662acae31ced3039b00c052392ed0bc179f9f28c", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0xe242e798f6cee26a9cb0bbf24653bf066e5356ffeac160907fe2cc108e238617", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPOOKYSWAP_ROUTER_ADDRESS": { + "Mainnet": "0xf491e7b69e4244ad4002bc14e878a34207e38c29", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "0xf491e7b69e4244ad4002bc14e878a34207e38c29", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0xf491e7b69e4244ad4002bc14e878a34207e38c29", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPOOKYSWAP_FACTORY_ADDRESS": { + "Mainnet": "0x152ee697f2e276fa89e96742e9bb9ab1f2e61be3", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "0x152ee697f2e276fa89e96742e9bb9ab1f2e61be3", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0x152ee697f2e276fa89e96742e9bb9ab1f2e61be3", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPOOKYSWAP_THEGRAPH": { + "Mainnet": "", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "", + "Aurora": "", + "Aurora_Testnet": "" + }, + "SPOOKYSWAP_INIT_CODE_HASH": { + "Mainnet": "0xcdf2deca40a0bd56de8e3ce5c7df6727e5b1bf2ac96f283fa9c4b3e6b42ea9d2", + "Ropsten": "", + "Rinkeby": "", + "Kovan": "", + "Gorli": "", + "BSC": "", + "BSCT": "", + "Matic": "", + "Mumbai": "", + "Arbitrum": "", + "Arbitrum_Rinkeby": "", + "xDai": "", + "Avalanche": "0xcdf2deca40a0bd56de8e3ce5c7df6727e5b1bf2ac96f283fa9c4b3e6b42ea9d2", + "Avalanche_Fuji": "", + "Celo": "", + "Fantom": "0xcdf2deca40a0bd56de8e3ce5c7df6727e5b1bf2ac96f283fa9c4b3e6b42ea9d2", + "Aurora": "", + "Aurora_Testnet": "" } }