{"version":3,"sources":["utils/getRpcUrl.ts","config/constants/vaults.ts","hooks/useRefresh.ts","config/constants/types.ts","state/farms/fetchFarms.ts","state/farms/fetchFarmUser.ts","state/farms/index.ts","config/constants/contracts.ts","utils/addressHelpers.ts","config/constants/priceHelperLps.ts","state/vaults/fetchPublicVaultData.ts","state/vaults/fetchVault.ts","state/vaults/fetchVaults.ts","utils/vaultsPriceHelpers.ts","state/vaults/fetchVaultsPrices.ts","state/vaults/fetchVaultUser.ts","state/vaults/index.ts","state/teams/helpers.ts","config/constants/teams.ts","utils/wallet.ts","hooks/useAuth.ts","config/constants/index.ts","config/constants/ifo.ts","state/block/index.ts","utils/web3React.ts","state/prices/index.ts","utils/collectibles.ts","utils/makeBatchRequest.ts","state/collectibles/index.ts","contexts/RefreshContext.tsx","config/constants/campaigns.ts","utils/achievements.ts","state/achievements/helpers.ts","state/achievements/index.ts","utils/formatBalance.ts","contexts/Localisation/translationsContext.ts","config/constants/meta.ts","components/layout/Page.tsx","components/layout/Container.tsx","utils/bigNumber.ts","utils/farmHelpers.ts","utils/multicall.ts","config/constants/tokens.ts","state/index.ts","config/constants/pools.ts","state/actions.ts","utils/contractHelpers.ts","state/hooks.ts","utils/web3.ts","state/teams/index.tsx","state/profile/helpers.ts","state/profile/getProfile.ts","state/profile/index.tsx","config/constants/farms.ts","config/constants/nfts.ts","hooks/useEagerConnect.ts","style/Global.tsx","config/localisation/languageCodes.ts","contexts/Localisation/languageContext.tsx","contexts/ThemeContext.tsx","hooks/useTheme.ts","components/Menu/config.ts","components/Menu/index.tsx","components/SuspenseWithChunkError/index.tsx","components/ToastListener/index.tsx","components/PageLoader.tsx","routerHistory.ts","App.tsx","Providers.tsx","index.tsx","state/pools/fetchPools.ts","state/pools/fetchPoolsUser.ts","state/pools/index.ts","state/toasts/index.ts"],"names":["nodes","process","getNodeUrl","randomIndex","random","length","vaults","pid","symbol","strategyAddresses","masterChefAddresses","lpAddresses","category","VaultCategory","SINGLE","platform","VaultPlatform","DOUBLEMOON","routerUrl","token","tokens","dmc","quoteToken","wbnb","earnToken","withdrawFee","performanceFee","compoundFrequency","icon","sortOrder","legacy","PAIR","DOPPLE","dopx","dop","dolly","TWINDEX","twx","kusd","twin","WARDEN","wad","busd","usdt","DEFINIX","finix","useRefresh","useContext","RefreshContext","fastRefresh","fast","slowRefresh","slow","middleRefresh","middle","PoolIds","PoolCategory","NftType","MoonLuckyCategory","fetchFarms","farmsToFetch","a","Promise","all","map","farmConfig","lpAddress","getAddress","calls","address","name","params","getMoonMasterAddress","multicall","erc20","tokenBalanceLP","quoteTokenBalanceLP","lpTokenBalanceMC","lpTotalSupply","tokenDecimals","quoteTokenDecimals","lpTokenRatio","BigNumber","div","lpTotalInQuoteToken","pow","decimals","times","tokenAmount","quoteTokenAmount","masterchefABI","info","totalAllocPoint","allocPoint","_hex","poolWeight","toJSON","tokenPriceVsQuote","multiplier","toString","data","fetchFarmUserAllowances","account","masterChefAddress","farm","erc20ABI","rawLpAllowances","parsedLpAllowances","lpBalance","fetchFarmUserTokenBalances","rawTokenBalances","parsedTokenBalances","tokenBalance","fetchFarmUserStakedBalances","rawStakedBalances","parsedStakedBalances","stakedBalance","fetchFarmUserEarnings","rawEarnings","parsedEarnings","earnings","nonArchivedFarms","farmsConfig","filter","isArchivedPid","initialState","loadArchivedFarmsData","farmsSlice","createSlice","reducers","setFarmsPublicData","state","action","liveFarmsData","payload","liveFarmData","find","f","setFarmUserData","arrayOfUserDataObjects","forEach","userDataEl","index","findIndex","userData","setLoadArchivedFarmsData","actions","fetchFarmsPublicDataAsync","dispatch","getState","fetchArchived","farms","fetchFarmUserDataAsync","userFarmAllowances","userFarmTokenBalances","userStakedBalances","userFarmEarnings","farmAllowance","allowance","getCakeAddress","cake","addresses","getMoonReferralAddress","getMulticallAddress","getWbnbAddress","getLotteryAddress","getLotteryTicketAddress","getPancakeProfileAddress","getPancakeRabbitsAddress","getBunnyFactoryAddress","getClaimRefundAddress","getPointCenterIfoAddress","getBunnySpecialAddress","getTradingCompetitionAddress","getEasterNftAddress","getDoubleMoonAddress","dbm","getDoubleMoonCatAddress","getVaultChefAddress","priceHelperLps","fetchVault","vault","strategyAddress","lpTokenBalanceMc","callStrategyMasterChefs","strategyMasterChefABI","vaultSharesTotal","masterChefPid","lpTokenSourceMCRatio","tokenAmountTotal","BIG_TEN","quoteTokenAmountTotal","tokenAmountMc","quoteTokenAmountMc","quoteTokenAmountSourceMc","lpMcTotalInQuoteToken","masterChefABI","BIG_ZERO","fetchPublicVaultData","vaultPublicData","fetchVaults","vaultsToFetch","vaultConfig","filterVaultsByQuoteToken","preferredQuoteTokens","preferredVault","some","getVaultFromTokenSymbol","tokenSymbol","vaultsWithTokenSymbol","getVaultBaseTokenPrice","quoteTokenVault","bnbPriceBusd","hasTokenPriceVsQuote","Boolean","quoteTokenInBusd","quoteTokenInDolly","getVaultQuoteTokenPrice","BIG_ONE","fetchVaultsPrices","bnbBusdVault","vaultsWithPrices","baseTokenPrice","quoteTokenPrice","busdPrice","fetchVaultUserAllowances","vaultChefAddress","fetchVaultUserTokenBalances","fetchVaultUserStakedBalances","vaultChefABI","vaultsConfig","userDataLoaded","fetchVaultsPublicDataAsync","createAsyncThunk","pids","includes","vaultsWithPriceHelpers","concat","priceHelperLpsConfig","vaultsWithoutHelperLps","fetchVaultUserDataAsync","userVaultAllowances","userVaultTokenBalances","vaultAllowance","vaultsSlice","extraReducers","builder","addCase","fulfilled","liveVaultData","vaultData","profileContract","getProfileContract","getTeam","teamId","methods","getTeamProfile","call","teamName","numberUsers","numberPoints","isJoinable","staticTeamInfo","teamsList","staticTeam","id","merge","users","points","getTeams","teamsById","reduce","accum","team","numberTeams","nbTeams","i","push","makeBatchRequest","teamData","onChainTeamData","Number","teams","description","images","lg","md","sm","alt","ipfs","background","textColor","setupNetwork","provider","window","ethereum","chainId","parseInt","request","method","chainName","nativeCurrency","rpcUrls","blockExplorerUrls","console","error","useAuth","useAppDispatch","useWeb3React","activate","deactivate","toastError","useToast","login","useCallback","connectorID","connector","connectorsByName","UnsupportedChainIdError","localStorage","removeItem","connectorLocalStorageKey","NoEthereumProviderError","NoBscProviderError","UserRejectedRequestErrorInjected","UserRejectedRequestErrorWalletConnect","WalletConnectConnector","walletConnectProvider","message","logout","profileClear","cakeBnbLpToken","lpSymbol","ifos","isActive","poolBasic","saleAmount","raiseAmount","cakeToBurn","distributionRatio","poolUnlimited","currency","hzn","releaseBlockNumber","campaignId","articleUrl","tokenOfferingPrice","isV1","belt","watch","bry","wsote","helmet","ten","ditto","blink","blockSlice","currentBlock","initialBlock","setBlock","rpcUrl","injected","InjectedConnector","supportedChainIds","walletconnect","rpc","bridge","qrcode","pollingInterval","bscConnector","BscConnector","ConnectorNames","Injected","WalletConnect","BSC","getLibrary","fetchPrices","fetch","response","json","updated_at","Object","keys","toLowerCase","parseFloat","price","pricesSlice","isLoading","lastUpdated","pending","getIdentifierKeyFromAddress","nftAddress","nftSource","values","nftSources","nftSourceEntry","identifierKey","getTokenUrl","tokenUri","startsWith","IPFS_GATEWAY","slice","getTokenUriData","tokenId","contract","getErc721Contract","tokenURI","uriDataResponse","ok","uriData","getNftByTokenId","Nfts","nft","identifier","batch","getWeb3NoAccount","BatchRequest","promises","resolve","reject","add","err","result","execute","fetchWalletNfts","nftSourcePromises","nftSourceType","addressObj","getTokenIdAndData","tokenOfOwnerByIndex","walletNft","balanceOf","balanceOfResponse","nftDataFetchPromises","nftData","nftSourceData","flat","collectiblesSlice","isInitialized","association","React","createContext","RefreshContextProvider","children","useState","setSlow","setFast","setMiddle","useEffect","interval","setInterval","prev","clearInterval","Provider","value","campaigns","type","title","badge","campaignMap","Map","campaign","set","getAchievementTitle","fallback","getAchievementDescription","getUserPointIncreaseEvents","gql","user","getAchievements","pointIncreaseEvents","userPoint","campaignMeta","get","achievementSlice","addAchievement","addAchievements","setAchievements","clearAchievements","fetchAchievements","achievements","kebabCase","toastTypes","DANGER","getBalanceNumber","balance","displayBalance","dividedBy","toNumber","getBalanceBigNumber","getFullDisplayBalance","toFixed","formatNumber","number","minPrecision","maxPrecision","options","minimumFractionDigits","maximumFractionDigits","toLocaleString","undefined","defaultTranslationState","translations","setTranslations","TranslationsContext","DEFAULT_META","image","customMeta","StyledPage","styled","Container","theme","mediaQueries","PageMeta","pathname","useLocation","pageMeta","property","content","Page","props","abi","web3","multi","eth","Contract","MultiCallAbi","itf","Interface","calldata","encodeFunctionData","aggregate","returnData","res","decodeFunctionResult","bnb","projectLink","dinop","scz","leaf","txl","cos","bunny","alice","for","bux","nuls","ramp","bfi","dexe","bel","tpt","xmark","bmxx","iotx","bor","bopen","dodo","swingby","zee","swgb","sfp","lina","lit","hget","bdo","egld","ust","front","btcst","bscx","balbt","asr","atm","og","reef","juv","psg","vai","unfi","twt","hard","broobee","stax","nar","nya","ctk","inj","sxp","alpha","xvs","sushi","comp","syrup","bifi","dusk","beth","mamzn","mgoogl","mnflx","mtsla","ltc","usdc","dai","ada","band","dot","eos","link","btcb","xrp","atom","yfii","xtz","bch","yfi","uni","fil","bake","burger","bdigg","bbadger","trade","pnt","mir","pbtc","lto","pcws","zil","lien","swth","dft","gum","dego","nrv","easy","oddz","hoo","apys","bondly","tko","itam","arpa","eps","jgn","tlm","perl","alpa","suter","cgg","mix","hakka","xed","τbtc","store","configureStore","devTools","reducer","farmsReducer","vaultsReducer","toasts","toastsReducer","pools","poolsReducer","prices","pricesReducer","profile","profileReducer","teamsReducer","achievementsReducer","block","blockReducer","collectibles","collectiblesReducer","useDispatch","sousId","multiply","stakingToken","earningToken","contractAddress","poolCategory","CORE","harvest","tokenPerBlock","isFinished","getContract","web3NoAccount","getBep20Contract","bep20Abi","erc721Abi","getIfoV1Contract","ifoV1Abi","getIfoV2Contract","ifoV2Abi","getSouschefContract","config","poolsConfig","pool","BINANCE","sousChefBnb","sousChef","getPointCenterIfoContract","pointCenterIfo","getCakeContract","cakeAbi","profileABI","getPancakeRabbitContract","pancakeRabbitsAbi","getBunnyFactoryContract","bunnyFactoryAbi","getBunnySpecialContract","bunnySpecialAbi","getLotteryContract","lotteryAbi","getLotteryTicketContract","lotteryTicketAbi","getMoonMasterContract","moonMaster","getMoonReferralContract","moonReferral","getClaimRefundContract","claimRefundAbi","getTradingCompetitionContract","tradingCompetitionAbi","getEasterNftContract","easterNftAbi","getDoubleMoonContract","doubleMoonAbi","getDoubleMoonCatContract","doublemoonCatAbi","getDoubleMoonLotteryContractByAddress","targetAddress","doubleMoonLotteryAbi","getMoonSpaceshipByAddress","moonSpaceshipAbi","getVaultChefContract","vaultChefAbi","getStrategyMasterChefContract","strategyMasterChefAbi","useFetchVaultsData","vaultToFetch","useVaults","useSelector","useVaultFromPid","useVaultUser","useFetchPublicData","useBlock","fetchPoolsPublicDataAsync","getBlockNumber","blockNumber","useFarms","useFarmFromPid","usePools","fetchPoolsUserDataAsync","useMemo","toast","pushToast","toastInfo","INFO","toastSuccess","SUCCESS","toastWarning","WARNING","remove","removeToast","clear","clearToast","useProfile","hasRegistered","hasProfile","useFetchPriceList","usePriceDOPDolly","dopDollyVault","usePriceTWINBusd","twinBnbVault","usePriceTWXBusd","twxBnbVault","usePriceDOPXBusd","usePriceFINIXBusd","usePriceDMCBusd","dmcBnbFarm","bnbBusdFarm","bnbBusdPrice","usePriceDBMBusd","dbmBnbFarm","usePriceBNBBusd","RPC_URL","getRpcUrl","httpProvider","Web3","providers","HttpProvider","timeout","teamsSlice","fetchStart","fetchFailed","teamFetchSucceeded","teamsFetchSucceeded","fetchTeam","fetchTeams","transformProfileResponse","profileResponse","userId","getUsername","username","getProfile","getUserProfile","Cookies","avatar","domain","secure","expires","profileSlice","profileFetchStart","profileFetchSucceeded","_state","profileFetchFailed","addPoints","fetchProfile","isFarm","PANCAKE","MIXIE","variationId","video","webm","mp4","blur","_binanceChainListener","defineProperty","this","bsc","useEagerConnect","connectorId","getItem","isConnectorBinanceChain","isBinanceChainDefined","Reflect","has","then","GlobalStyle","createGlobalStyle","EN","code","language","allLanguages","CACHE_KEY","LanguageContext","selectedLanguage","setSelectedLanguage","translatedLanguage","setTranslatedLanguage","projectId","REACT_APP_CROWDIN_PROJECTID","stringTranslationsApi","StringTranslations","REACT_APP_CROWDIN_APIKEY","LanguageContextProvider","storedLangCode","storedLang","getStoredLang","listLanguageTranslations","fetchTranslationsForSelectedLanguage","translationApiResponse","catch","e","langObject","setItem","ThemeContext","isDark","toggleTheme","ThemeContextProvider","isDarkUserSetting","JSON","parse","setIsDark","prevState","stringify","dark","light","useTheme","StyledThemeContext","label","href","status","menuStatus","NEW","items","Menu","cakePriceUsd","currentLang","langs","setLang","links","profileLink","noProfileLink","showPip","SuspenseWithChunkError","hasError","isJsChunkLoadError","isCssChunkLoadError","isChunkLoadError","isRecoveringFromChunkError","history","nextState","replaceState","location","reload","Component","ToastListener","onRemove","Wrapper","PageLoader","createBrowserHistory","Home","lazy","Farms","Lottery","MoonLucky","Pools","Vaults","Referral","NotFound","EXPONENTIAL_AT","DECIMAL_PLACES","App","warn","Global","path","exact","component","memo","Providers","ReactDOM","render","StrictMode","document","getElementById","fetchPoolsBlockLimits","poolsWithEnd","p","callsStartBlock","poolConfig","callsEndBlock","sousChefABI","starts","ends","cakePoolConfig","startBlock","endBlock","fetchPoolsTotalStaking","nonBnbPools","bnbPool","callsNonBnbPools","callsBnbPools","cakeABI","nonBnbPoolsTotalStaked","wbnbABI","bnbPoolsTotalStaked","totalStaked","bnbPools","nonMasterPools","masterPools","fetchPoolsAllowance","allowances","acc","fetchUserBalances","tokenBalancesRaw","tokenBalances","getBalance","bnbBalance","bnbBalances","fetchUserStakeBalances","userInfo","stakedBalances","amount","masterCalls","masterUserInfo","masterStakedBalances","fetchUserPendingRewards","pendingRewards","masterPendingRewards","PoolsSlice","setPoolsPublicData","livePoolsData","livePoolData","entry","setPoolsUserData","userPoolData","updatePoolsUserData","field","blockLimits","totalStakings","liveData","blockLimit","totalStaking","isPoolEndBlockExceeded","isPoolFinished","stakingTokenBalances","stakingTokenBalance","pendingReward","updateUserAllowance","updateUserBalance","updateUserStakedBalance","updateUserPendingReward","toastsSlice","toastIndex","splice","unshift"],"mappings":"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","file":"static/js/main.4a066e9a.chunk.js","sourcesContent":["import random from 'lodash/random'\n\n// Array of available nodes to connect to\nexport const nodes = [process.env.REACT_APP_NODE_1, process.env.REACT_APP_NODE_2, process.env.REACT_APP_NODE_3]\n\nconst getNodeUrl = () => {\n const randomIndex = random(0, nodes.length - 1)\n return nodes[randomIndex]\n}\n\nexport default getNodeUrl\n","import tokens from './tokens'\nimport { VaultConfig, VaultCategory, VaultPlatform } from './types'\n\nconst vaults: VaultConfig[] = [\n {\n pid: 9,\n symbol: 'DMC',\n strategyAddresses: {\n 97: '0x6b3DaAd13DB8a19Bc30556c6794d7aFC478f2D77',\n 56: '0x3C28D849F87FB5e55FCa6c6852b4835BB8783f52',\n },\n masterChefAddresses: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n lpAddresses: {\n 97: '0x9b5cAb9ca8b8451b94a2545A00c3e9559B228058',\n 56: '0xA7bD090bC58e663388Be63d5E8a7b683f5A3d4FC',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.DOUBLEMOON,\n routerUrl: 'https://exchange.doublemoon.finance',\n token: tokens.dmc,\n quoteToken: tokens.wbnb,\n earnToken: tokens.dmc,\n withdrawFee: 0.1,\n performanceFee: 0,\n compoundFrequency: 8,\n icon: 'dmc.svg',\n sortOrder: 1,\n legacy: true,\n },\n {\n pid: 0,\n symbol: 'DMC (Legacy)',\n strategyAddresses: {\n 97: '0xaB27D08766154759e3DF7F671a265B16A845A047',\n 56: '0xaA966146EAa9919e1A35fB654BC2278Ebd4E9C64',\n },\n masterChefAddresses: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n lpAddresses: {\n 97: '0x9b5cAb9ca8b8451b94a2545A00c3e9559B228058',\n 56: '0xA7bD090bC58e663388Be63d5E8a7b683f5A3d4FC',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.DOUBLEMOON,\n routerUrl: 'https://exchange.doublemoon.finance',\n token: tokens.dmc,\n quoteToken: tokens.wbnb,\n earnToken: tokens.dmc,\n withdrawFee: 0,\n performanceFee: 0,\n compoundFrequency: 8,\n icon: 'dmc.svg',\n sortOrder: 1,\n legacy: true,\n },\n {\n pid: 1,\n symbol: 'DMC-BNB',\n strategyAddresses: {\n 97: '0xa3fB7C1d19217d884A11BE54749D353fEcB7225D',\n 56: '0x6F97d166c79ACbF11e6678B29e0023CD942c92a0',\n },\n masterChefAddresses: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n lpAddresses: {\n 97: '0x3ce4e2124dcb08f7da60e80094895cb03f85a763',\n 56: '0x9657B13b78C82017e372D78cA063ADD1Ce52cdB8',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DOUBLEMOON,\n routerUrl: 'https://exchange.doublemoon.finance',\n token: tokens.dmc,\n quoteToken: tokens.wbnb,\n earnToken: tokens.dmc,\n withdrawFee: 0.1,\n performanceFee: 0,\n compoundFrequency: 8,\n icon: 'dmc-bnb.svg',\n sortOrder: 2,\n legacy: true,\n },\n {\n pid: 12,\n symbol: 'DOPX',\n strategyAddresses: {\n 97: '',\n 56: '0x98cd694e6A6bb894ab51E1694CE19B7001b1ce7D',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0x45069E9632d1b29d16C5E06dc9Ed8F33B6aBe6DB',\n },\n lpAddresses: {\n 97: '',\n 56: '0x802A183ac9F6b082716DFeE55432ed0C04ACB49a',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.DOPPLE,\n routerUrl: 'https://twindex.com',\n token: tokens.dopx,\n quoteToken: tokens.wbnb,\n earnToken: tokens.dopx,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 1,\n icon: 'dopx.svg',\n sortOrder: 3,\n },\n {\n pid: 13,\n symbol: 'DOPX-BNB',\n strategyAddresses: {\n 97: '',\n 56: '0x5cb2d41fBf0614A7ef7C7C2173E72369dcC10fBf',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0x45069E9632d1b29d16C5E06dc9Ed8F33B6aBe6DB',\n },\n lpAddresses: {\n 97: '',\n 56: '0x9661A41eeA814A9b13f2C1d844106cEf6c3a4A43',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DOPPLE,\n routerUrl: 'https://twindex.com',\n token: tokens.dopx,\n quoteToken: tokens.wbnb,\n earnToken: tokens.dopx,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 1,\n icon: 'dopx-bnb.svg',\n sortOrder: 4,\n },\n // {\n // pid: 14,\n // symbol: 'DOPX-USDC',\n // strategyAddresses: {\n // 97: '',\n // 56: '0xfBD3848fbb219b209ecf0Bc5a05cb27cD090Af1b',\n // },\n // masterChefAddresses: {\n // 97: '',\n // 56: '0x45069E9632d1b29d16C5E06dc9Ed8F33B6aBe6DB',\n // },\n // lpAddresses: {\n // 97: '',\n // 56: '0x7b559c6724de298a7915169ebdb9b31f4e057bfc',\n // },\n // category: VaultCategory.PAIR,\n // platform: VaultPlatform.DOPPLE,\n // routerUrl: 'https://twindex.com',\n // token: tokens.dopx,\n // quoteToken: tokens.usdc,\n // earnToken: tokens.dopx,\n // withdrawFee: 0.1,\n // performanceFee: 4,\n // compoundFrequency: 2,\n // icon: 'dopx-usdc.svg',\n // sortOrder: 4,\n // },\n {\n pid: 3,\n symbol: 'DOP-DOLLY (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0x5Ad2f28A055087439e6341B3CA57b0be6443e24D',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xDa0a175960007b0919DBF11a38e6EC52896bddbE',\n },\n lpAddresses: {\n 97: '',\n 56: '0xaF8f9922Ea7b00A8F7F9Cb50729B65f0D99446D6',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DOPPLE,\n routerUrl: 'https://twindex.com',\n token: tokens.dop,\n quoteToken: tokens.dolly,\n earnToken: tokens.dop,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 8,\n icon: 'dop-dolly.svg',\n sortOrder: 6,\n legacy: true,\n },\n {\n pid: 10,\n symbol: 'DOP (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0xaeE08a0f4a89A4dC841CE46784DB18a51A8b2A2E',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xDa0a175960007b0919DBF11a38e6EC52896bddbE',\n },\n lpAddresses: {\n 97: '',\n 56: '0x844FA82f1E54824655470970F7004Dd90546bB28',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.DOPPLE,\n routerUrl: 'https://twindex.com',\n token: tokens.dop,\n quoteToken: tokens.dolly,\n earnToken: tokens.dop,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'dop.svg',\n sortOrder: 5,\n legacy: true,\n },\n {\n pid: 20,\n symbol: 'TWX',\n strategyAddresses: {\n 97: '',\n 56: '0xD9a6279C2A28987AAe2CD048fB89A49ea7f183D7',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xDF44098408B4Cf5F123e78e0dce802f72ba2E557',\n },\n lpAddresses: {\n 97: '',\n 56: '0x41171D5770C4c68686d1aF042Ada88a45B02f82b',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twx,\n quoteToken: tokens.wbnb,\n earnToken: tokens.twx,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 1,\n icon: 'twx.svg',\n sortOrder: 6,\n },\n {\n pid: 21,\n symbol: 'TWX-KUSD',\n strategyAddresses: {\n 97: '',\n 56: '0xfF29D3cb29FE0e85D67Cf674488C5a7d2d664CF4',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xDF44098408B4Cf5F123e78e0dce802f72ba2E557',\n },\n lpAddresses: {\n 97: '',\n 56: '0x08422f6Cc26cCDa692a36a73A520Da6b0E6d3DE3',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twx,\n quoteToken: tokens.kusd,\n earnToken: tokens.twx,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 2,\n icon: 'twx-kusd.svg',\n sortOrder: 6,\n },\n {\n pid: 22,\n symbol: 'TWX-BNB',\n strategyAddresses: {\n 97: '',\n 56: '0x0EAA08DA5FD46A8d632B2EC687302399BAcD32c8',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xDF44098408B4Cf5F123e78e0dce802f72ba2E557',\n },\n lpAddresses: {\n 97: '',\n 56: '0xFD555bD87b98160649DFaA42eaE46B022d71c71A',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twx,\n quoteToken: tokens.wbnb,\n earnToken: tokens.twx,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 2,\n icon: 'twx-bnb.svg',\n sortOrder: 6,\n },\n {\n pid: 11,\n symbol: 'TWIN (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0x996d0F62B226a190A4f0B083Dd04fcF3d950bBFb',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xe6bE78800f25fFaE4D1db7CA6d3485629bD200Ed',\n },\n lpAddresses: {\n 97: '',\n 56: '0x3806aae953a3a873D02595f76C7698a57d4C7A57',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twin,\n quoteToken: tokens.wbnb,\n earnToken: tokens.twin,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'twin.svg',\n sortOrder: 6,\n legacy: true,\n },\n {\n pid: 5,\n symbol: 'DOP-TWIN (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0xE0F1951c4c5d7234621347db97D829D834b38f6B',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xe6bE78800f25fFaE4D1db7CA6d3485629bD200Ed',\n },\n lpAddresses: {\n 97: '',\n 56: '0x65A95C2BC5c12E8e30e24D322ff386249c29a072',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twin,\n quoteToken: tokens.dop,\n earnToken: tokens.twin,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 2,\n icon: 'dop-twin.svg',\n sortOrder: 6,\n legacy: true,\n },\n {\n pid: 6,\n symbol: 'TWIN-DOLLY (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0x605423e8Aa73A2C28e2c5d7de2d07f981150A9d9',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xe6bE78800f25fFaE4D1db7CA6d3485629bD200Ed',\n },\n lpAddresses: {\n 97: '',\n 56: '0x593747Cd0023669c7A67511406266559B166Ca5d',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twin,\n quoteToken: tokens.dolly,\n earnToken: tokens.twin,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 8,\n icon: 'twin-dolly.svg',\n sortOrder: 6,\n legacy: true,\n },\n {\n pid: 8,\n symbol: 'TWIN-BNB (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0x7Faa50cc9D632589426Ecf698ED4034a9aBaF28f',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xe6bE78800f25fFaE4D1db7CA6d3485629bD200Ed',\n },\n lpAddresses: {\n 97: '',\n 56: '0xC3BFdd2cd502e719132Bf7aA5954C74e9C7209F5',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.TWINDEX,\n routerUrl: 'https://twindex.com',\n token: tokens.twin,\n quoteToken: tokens.wbnb,\n earnToken: tokens.twin,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 8,\n icon: 'twin-bnb.svg',\n sortOrder: 6,\n legacy: true,\n },\n {\n pid: 15,\n symbol: 'WAD-BUSD (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0xdC7C6971DdEC6e70c64479695a1ec0ead9C98299',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xde866dd77b6df6772e320dc92bff0eddc626c674',\n },\n lpAddresses: {\n 97: '',\n 56: '0xc95B1750043FCE5dfCc8539835Ea3830Ec002A89',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.WARDEN,\n routerUrl: 'https://liquidity.wardenswap.finance/#/',\n token: tokens.wad,\n quoteToken: tokens.busd,\n earnToken: tokens.wad,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'wad-busd.svg',\n sortOrder: 7,\n legacy: true,\n },\n {\n pid: 16,\n symbol: 'WAD-USDT (Legacy)',\n strategyAddresses: {\n 97: '',\n 56: '0x344b2C74240947e8c5609A3E77865ee5B60675c2',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0xde866dd77b6df6772e320dc92bff0eddc626c674',\n },\n lpAddresses: {\n 97: '',\n 56: '0x7D6195b212deE1BA7DE8404cfd319446cf17D71B',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.WARDEN,\n routerUrl: 'https://pancakeswap.finance/liquidity',\n token: tokens.wad,\n quoteToken: tokens.usdt,\n earnToken: tokens.wad,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'wad-usdt.svg',\n sortOrder: 7,\n legacy: true,\n },\n {\n pid: 17,\n symbol: 'FINIX',\n strategyAddresses: {\n 97: '',\n 56: '0xF999278217bC2Cc32330303982e435cDA4B43Bdc',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0x6b51E8FDc32Ead0B837deb334fcB79E24F3b105A',\n },\n lpAddresses: {\n 97: '',\n 56: '0x0F02b1F5AF54E04Fb6dd6550f009aC2429C4e30D',\n },\n category: VaultCategory.SINGLE,\n platform: VaultPlatform.DEFINIX,\n routerUrl: 'https://exchange.definix.com',\n token: tokens.finix,\n quoteToken: tokens.wbnb,\n earnToken: tokens.finix,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 1,\n icon: 'finix.svg',\n sortOrder: 8,\n },\n {\n pid: 18,\n symbol: 'FINIX-BNB',\n strategyAddresses: {\n 97: '',\n 56: '0xf7D40D5716f8F887b2D0200330F4D2BcE4cc45de',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0x6b51E8FDc32Ead0B837deb334fcB79E24F3b105A',\n },\n lpAddresses: {\n 97: '',\n 56: '0xB2A2048de5afb312Fcf076aBf505952c12916f0d',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DEFINIX,\n routerUrl: 'https://exchange.definix.com',\n token: tokens.finix,\n quoteToken: tokens.wbnb,\n earnToken: tokens.finix,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'finix-bnb.svg',\n sortOrder: 8,\n },\n {\n pid: 19,\n symbol: 'FINIX-BUSD',\n strategyAddresses: {\n 97: '',\n 56: '0xA0cFD4946b269a4b4161424874Dd4fAad3E69349',\n },\n masterChefAddresses: {\n 97: '',\n 56: '0x6b51E8FDc32Ead0B837deb334fcB79E24F3b105A',\n },\n lpAddresses: {\n 97: '',\n 56: '0x9d19afdc03A710cf54f6B3d3764C7d3B26AC892F',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DEFINIX,\n routerUrl: 'https://exchange.definix.com',\n token: tokens.finix,\n quoteToken: tokens.busd,\n earnToken: tokens.finix,\n withdrawFee: 0.1,\n performanceFee: 4,\n compoundFrequency: 4,\n icon: 'finix-busd.svg',\n sortOrder: 8,\n },\n]\n\nexport default vaults\n","import { useContext } from 'react'\nimport { RefreshContext } from 'contexts/RefreshContext'\n\nconst useRefresh = () => {\n const { fast, slow, middle } = useContext(RefreshContext)\n return { fastRefresh: fast, slowRefresh: slow, middleRefresh: middle }\n}\n\nexport default useRefresh\n","import { TranslatableText } from 'state/types'\n\nexport interface Address {\n 97?: string\n 56: string\n}\n\nexport interface Token {\n symbol: string\n address?: Address\n decimals?: number\n projectLink?: string\n busdPrice?: string\n}\n\nexport enum PoolIds {\n poolBasic = 'poolBasic',\n poolUnlimited = 'poolUnlimited',\n}\n\nexport type IfoStatus = 'idle' | 'coming_soon' | 'live' | 'finished'\n\ninterface IfoPoolInfo {\n saleAmount: string\n raiseAmount: string\n cakeToBurn: string\n distributionRatio: number // Range [0-1]\n}\n\nexport interface Ifo {\n id: string\n isActive: boolean\n address: string\n name: string\n currency: Token\n token: Token\n releaseBlockNumber: number\n articleUrl: string\n campaignId: string\n tokenOfferingPrice: number\n isV1: boolean\n [PoolIds.poolBasic]?: IfoPoolInfo\n [PoolIds.poolUnlimited]: IfoPoolInfo\n}\n\nexport enum PoolCategory {\n 'COMMUNITY' = 'Community',\n 'CORE' = 'Core',\n 'BINANCE' = 'Binance', // Pools using native BNB behave differently than pools using a token\n}\n\nexport interface FarmConfig {\n pid: number\n isFarm: boolean\n lpSymbol: string\n lpAddresses: Address\n token: Token\n quoteToken: Token\n multiplier?: string\n isCommunity?: boolean\n dual?: {\n rewardPerBlock: number\n earnLabel: string\n endBlock: number\n }\n}\n\nexport enum VaultCategory {\n 'PAIR' = 'pair',\n 'SINGLE' = 'single',\n 'STABLE' = 'stable',\n}\n\nexport enum VaultPlatform {\n 'DOUBLEMOON' = 'DOUBLEMOON',\n 'DOPPLE' = 'DOPPLE',\n 'TWINDEX' = 'TWINDEX',\n 'WARDEN' = 'WARDEN',\n 'DEFINIX' = 'DEFINIX',\n}\n\nexport interface VaultConfig {\n pid: number\n symbol: string\n strategyAddresses: Address\n masterChefAddresses: Address\n lpAddresses: Address\n category: VaultCategory\n platform: VaultPlatform\n routerUrl?: string\n token: Token\n quoteToken: Token\n earnToken: Token\n withdrawFee: number\n performanceFee: number\n compoundFrequency: number\n icon: string\n sortOrder: number\n single?: {\n stakingToken: Token\n earningToken: Token\n tokenPerBlock: string\n }\n legacy?: boolean\n}\n\nexport interface PoolConfig {\n sousId: number\n title: string,\n multiply: number,\n icon: string,\n earningToken: Token\n stakingToken: Token\n stakingLimit?: number\n contractAddress: Address\n poolCategory: PoolCategory\n tokenPerBlock: string\n sortOrder?: number\n harvest?: boolean\n isFinished?: boolean\n}\n\nexport type Images = {\n lg: string\n md: string\n sm: string\n ipfs?: string\n}\n\nexport type NftImages = {\n blur?: string\n} & Images\n\nexport type NftVideo = {\n webm: string\n mp4: string\n}\n\nexport type NftSource = {\n [key in NftType]: {\n address: Address\n identifierKey: string\n }\n}\n\nexport enum NftType {\n PANCAKE = 'pancake',\n MIXIE = 'mixie',\n}\n\nexport type Nft = {\n description: string\n name: string\n images: NftImages\n sortOrder: number\n type: NftType\n video?: NftVideo\n\n // Uniquely identifies the nft.\n // Used for matching an NFT from the config with the data from the NFT's tokenURI\n identifier: string\n\n // Used to be \"bunnyId\". Used when minting NFT\n variationId?: number | string\n}\n\nexport type TeamImages = {\n alt: string\n} & Images\n\nexport type Team = {\n id: number\n name: string\n description: string\n isJoinable?: boolean\n users: number\n points: number\n images: TeamImages\n background: string\n textColor: string\n}\n\nexport type CampaignType = 'ifo' | 'teambattle'\n\nexport type Campaign = {\n id: string\n type: CampaignType\n title?: TranslatableText\n description?: TranslatableText\n badge?: string\n}\n\nexport type PageMeta = {\n title: string\n description: string\n image: string\n}\n\nexport enum MoonLuckyCategory {\n 'NEVER_LOST' = 'Never Lost',\n 'MOON_FUN' = 'Moon Fun',\n 'MOON_SHOT' = 'Moon Shot', // Pools using native BNB behave differently than pools using a token\n}\n\nexport interface LotteryConfig {\n pid: number,\n category: MoonLuckyCategory,\n lottoAddresses: Address\n token: any,\n ticketPrice: number,\n title: string,\n symbol: string\n icon: string,\n minHoldDoubleMoon?: number,\n fee?: number,\n rule?: string\n}","import BigNumber from 'bignumber.js'\nimport erc20 from 'config/abi/erc20.json'\nimport masterchefABI from 'config/abi/moonMaster.json'\nimport multicall from 'utils/multicall'\nimport { getAddress, getMoonMasterAddress } from 'utils/addressHelpers'\nimport { FarmConfig } from 'config/constants/types'\n\nconst fetchFarms = async (farmsToFetch: FarmConfig[]) => {\n const data = await Promise.all(\n farmsToFetch.map(async (farmConfig) => {\n const lpAddress = getAddress(farmConfig.lpAddresses)\n const calls = [\n // Balance of token in the LP contract\n {\n address: getAddress(farmConfig.token.address),\n name: 'balanceOf',\n params: [lpAddress],\n },\n // Balance of quote token on LP contract\n {\n address: getAddress(farmConfig.quoteToken.address),\n name: 'balanceOf',\n params: [lpAddress],\n },\n // Balance of LP tokens in the master chef contract\n {\n address: lpAddress,\n name: 'balanceOf',\n params: [getMoonMasterAddress()],\n },\n // Total supply of LP tokens\n {\n address: lpAddress,\n name: 'totalSupply',\n },\n // Token decimals\n {\n address: getAddress(farmConfig.token.address),\n name: 'decimals',\n },\n // Quote token decimals\n {\n address: getAddress(farmConfig.quoteToken.address),\n name: 'decimals',\n },\n ]\n \n const [\n tokenBalanceLP,\n quoteTokenBalanceLP,\n lpTokenBalanceMC,\n lpTotalSupply,\n tokenDecimals,\n quoteTokenDecimals,\n ] = await multicall(erc20, calls)\n // console.log(tokenBalanceLP.toString(),\n // quoteTokenBalanceLP.toString(),\n // lpTokenBalanceMC.toString(),\n // lpTotalSupply.toString(),\n // tokenDecimals.toString(),\n // quoteTokenDecimals.toString())\n\n // Ratio in % a LP tokens that are in staking, vs the total number in circulation\n // const lpTokenBalanceMCTest = new BigNumber(10000000000)\n // console.log(`pid: ${farmConfig.pid} lpTokenBalanceMC: ${lpTokenBalanceMC.toString()}`)\n // console.log(`pid: ${farmConfig.pid} lpTotalSupply: ${lpTotalSupply.toString()}`)\n const lpTokenRatio = new BigNumber(lpTokenBalanceMC).div(new BigNumber(lpTotalSupply))\n // console.log(`pid: ${farmConfig.pid} lpTokenRatio: ${lpTokenRatio.toString()}`)\n // Total value in staking in quote token value\n const lpTotalInQuoteToken = new BigNumber(quoteTokenBalanceLP)\n .div(new BigNumber(10).pow(farmConfig.quoteToken.decimals))\n .times(new BigNumber(2))\n .times(lpTokenRatio)\n\n // Amount of token in the LP that are considered staking (i.e amount of token * lp ratio)\n const tokenAmount = new BigNumber(tokenBalanceLP).div(new BigNumber(10).pow(tokenDecimals)).times(lpTokenRatio)\n const quoteTokenAmount = new BigNumber(quoteTokenBalanceLP)\n .div(new BigNumber(10).pow(quoteTokenDecimals))\n .times(lpTokenRatio)\n // console.log(`pid: ${farmConfig.pid} tokenAmount: ${tokenAmount.toString()}`)\n // console.log(`pid: ${farmConfig.pid} quoteTokenAmount: ${quoteTokenAmount.toString()}`)\n\n const [info, totalAllocPoint] = await multicall(masterchefABI, [\n {\n address: getMoonMasterAddress(),\n name: 'poolInfo',\n params: [farmConfig.pid],\n },\n {\n address: getMoonMasterAddress(),\n name: 'totalAllocPoint',\n },\n ])\n \n const allocPoint = new BigNumber(info.allocPoint._hex)\n const poolWeight = allocPoint.div(new BigNumber(totalAllocPoint))\n\n return {\n ...farmConfig,\n tokenAmount: tokenAmount.toJSON(),\n quoteTokenAmount: quoteTokenAmount.toJSON(),\n lpTotalSupply: new BigNumber(lpTotalSupply).toJSON(),\n lpTotalInQuoteToken: lpTotalInQuoteToken.toJSON(),\n tokenPriceVsQuote: quoteTokenAmount.div(tokenAmount).toJSON(),\n poolWeight: poolWeight.toJSON(),\n multiplier: `${allocPoint.div(100).toString()}X`,\n }\n }),\n )\n return data\n}\n\nexport default fetchFarms\n","import BigNumber from 'bignumber.js'\nimport erc20ABI from 'config/abi/erc20.json'\nimport masterchefABI from 'config/abi/moonMaster.json'\nimport multicall from 'utils/multicall'\nimport { getAddress, getMoonMasterAddress } from 'utils/addressHelpers'\nimport { FarmConfig } from 'config/constants/types'\n\nexport const fetchFarmUserAllowances = async (account: string, farmsToFetch: FarmConfig[]) => {\n const masterChefAddress = getMoonMasterAddress()\n\n const calls = farmsToFetch.map((farm) => {\n const lpContractAddress = getAddress(farm.lpAddresses)\n return { address: lpContractAddress, name: 'allowance', params: [account, masterChefAddress] }\n })\n\n const rawLpAllowances = await multicall(erc20ABI, calls)\n const parsedLpAllowances = rawLpAllowances.map((lpBalance) => {\n return new BigNumber(lpBalance).toJSON()\n })\n return parsedLpAllowances\n}\n\nexport const fetchFarmUserTokenBalances = async (account: string, farmsToFetch: FarmConfig[]) => {\n const calls = farmsToFetch.map((farm) => {\n const lpContractAddress = getAddress(farm.lpAddresses)\n return {\n address: lpContractAddress,\n name: 'balanceOf',\n params: [account],\n }\n })\n\n const rawTokenBalances = await multicall(erc20ABI, calls)\n const parsedTokenBalances = rawTokenBalances.map((tokenBalance) => {\n return new BigNumber(tokenBalance).toJSON()\n })\n return parsedTokenBalances\n}\n\nexport const fetchFarmUserStakedBalances = async (account: string, farmsToFetch: FarmConfig[]) => {\n const masterChefAddress = getMoonMasterAddress()\n\n const calls = farmsToFetch.map((farm) => {\n return {\n address: masterChefAddress,\n name: 'userInfo',\n params: [farm.pid, account],\n }\n })\n\n const rawStakedBalances = await multicall(masterchefABI, calls)\n const parsedStakedBalances = rawStakedBalances.map((stakedBalance) => {\n return new BigNumber(stakedBalance[0]._hex).toJSON()\n })\n return parsedStakedBalances\n}\n\nexport const fetchFarmUserEarnings = async (account: string, farmsToFetch: FarmConfig[]) => {\n const masterChefAddress = getMoonMasterAddress()\n\n const calls = farmsToFetch.map((farm) => {\n return {\n address: masterChefAddress,\n name: 'pendingReward',\n params: [farm.pid, account],\n }\n })\n\n const rawEarnings = await multicall(masterchefABI, calls)\n const parsedEarnings = rawEarnings.map((earnings) => {\n return new BigNumber(earnings).toJSON()\n })\n return parsedEarnings\n}\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit'\nimport farmsConfig from 'config/constants/farms'\nimport isArchivedPid from 'utils/farmHelpers'\nimport fetchFarms from './fetchFarms'\nimport {\n fetchFarmUserEarnings,\n fetchFarmUserAllowances,\n fetchFarmUserTokenBalances,\n fetchFarmUserStakedBalances,\n} from './fetchFarmUser'\nimport { FarmsState, Farm } from '../types'\n\nconst nonArchivedFarms = farmsConfig.filter(({ pid }) => !isArchivedPid(pid))\nconst initialState: FarmsState = { data: [...farmsConfig], loadArchivedFarmsData: false }\n\nexport const farmsSlice = createSlice({\n name: 'Farms',\n initialState,\n reducers: {\n setFarmsPublicData: (state, action) => {\n const liveFarmsData: Farm[] = action.payload\n state.data = state.data.map((farm) => {\n const liveFarmData = liveFarmsData.find((f) => f.pid === farm.pid)\n return { ...farm, ...liveFarmData }\n })\n },\n setFarmUserData: (state, action) => {\n const { arrayOfUserDataObjects } = action.payload\n arrayOfUserDataObjects.forEach((userDataEl) => {\n const { pid } = userDataEl\n const index = state.data.findIndex((farm) => farm.pid === pid)\n state.data[index] = { ...state.data[index], userData: userDataEl }\n })\n },\n setLoadArchivedFarmsData: (state, action) => {\n const loadArchivedFarmsData = action.payload\n state.loadArchivedFarmsData = loadArchivedFarmsData\n },\n },\n})\n\n// Actions\nexport const { setFarmsPublicData, setFarmUserData, setLoadArchivedFarmsData } = farmsSlice.actions\n\n// Thunks\nexport const fetchFarmsPublicDataAsync = () => async (dispatch, getState) => {\n const fetchArchived = getState().farms.loadArchivedFarmsData\n const farmsToFetch = fetchArchived ? farmsConfig : nonArchivedFarms\n const farms = await fetchFarms(farmsToFetch)\n dispatch(setFarmsPublicData(farms))\n}\nexport const fetchFarmUserDataAsync = (account: string) => async (dispatch, getState) => {\n const fetchArchived = getState().farms.loadArchivedFarmsData\n const farmsToFetch = fetchArchived ? farmsConfig : nonArchivedFarms\n const userFarmAllowances = await fetchFarmUserAllowances(account, farmsToFetch)\n const userFarmTokenBalances = await fetchFarmUserTokenBalances(account, farmsToFetch)\n const userStakedBalances = await fetchFarmUserStakedBalances(account, farmsToFetch)\n const userFarmEarnings = await fetchFarmUserEarnings(account, farmsToFetch)\n\n const arrayOfUserDataObjects = userFarmAllowances.map((farmAllowance, index) => {\n return {\n pid: farmsToFetch[index].pid,\n allowance: userFarmAllowances[index],\n tokenBalance: userFarmTokenBalances[index],\n stakedBalance: userStakedBalances[index],\n earnings: userFarmEarnings[index],\n }\n })\n\n dispatch(setFarmUserData({ arrayOfUserDataObjects }))\n}\n\nexport default farmsSlice.reducer\n","export default {\n masterChef: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n vaultChef: {\n 97: '0x82aBCd5CC4B769eA1824658f06473f0D27184D0e',\n 56: '0xfC6B576C545F852A1bBEaC5612f6870fCa854A30',\n },\n moonReferral: {\n 97: '0xF7ac31022f730DE86410AE15A7aC221499Ce123c',\n 56: '0x342a64ff1ED39B3f022F3F612E1a2ABa654f3e5e',\n },\n sousChef: {\n 97: '0xd3af5fe61dbaf8f73149bfcfa9fb653ff096029a',\n 56: '0x6ab8463a4185b80905e05a9ff80a2d6b714b9e95',\n },\n lottery: {\n 97: '0x99c2EcD51d52c036B00130d882Bc65f20Fdecf9f',\n 56: '0x3C3f2049cc17C136a604bE23cF7E42745edf3b91',\n },\n lotteryNFT: {\n 97: '0x8175c10383511b3a1C68f9dB222dc14A19CC950e',\n 56: '0x5e74094Cd416f55179DBd0E45b1a8ED030e396A1',\n },\n mulltiCall: {\n 56: '0x1ee38d535d541c55c9dae27b12edf090c608e6fb',\n 97: '0xBD4D6A632Bee066D787f9c3ac7a297A6f338D88f',\n },\n pancakeProfile: {\n 56: '0xDf4dBf6536201370F95e06A0F8a7a70fE40E388a',\n 97: '0x4B683C7E13B6d5D7fd1FeA9530F451954c1A7c8A',\n },\n pancakeRabbits: {\n 56: '0xDf7952B35f24aCF7fC0487D01c8d5690a60DBa07',\n 97: '0x60935F36e4631F73f0f407e68642144e07aC7f5E',\n },\n bunnyFactory: {\n 56: '0xfa249Caa1D16f75fa159F7DFBAc0cC5EaB48CeFf',\n 97: '0x707CBF373175fdB601D34eeBF2Cf665d08f01148',\n },\n claimRefund: {\n 56: '0xE7e53A7e9E3Cf6b840f167eF69519175c497e149',\n 97: '',\n },\n pointCenterIfo: {\n 56: '0x3C6919b132462C1FEc572c6300E83191f4F0012a',\n 97: '0xd2Ac1B1728Bb1C11ae02AB6e75B76Ae41A2997e3',\n },\n bunnySpecial: {\n 56: '0xFee8A195570a18461146F401d6033f5ab3380849',\n 97: '0x7b7b1583De1DeB32Ce6605F6deEbF24A0671c17C',\n },\n tradingCompetition: {\n 56: '0xd718baa0B1F4f70dcC8458154042120FFE0DEFFA',\n 97: '0xC787F45B833721ED3aC46E99b703B3E1E01abb97',\n },\n easterNft: {\n 56: '0x23c41D28A239dDCAABd1bb1deF8d057189510066',\n 97: '0x24ec6962dbe874F6B67B5C50857565667fA0854F',\n },\n}\n","import addresses from 'config/constants/contracts'\nimport tokens from 'config/constants/tokens'\nimport { Address } from 'config/constants/types'\n\nexport const getAddress = (address: Address): string => {\n const mainNetChainId = 56\n const chainId = process.env.REACT_APP_CHAIN_ID\n return address[chainId] ? address[chainId] : address[mainNetChainId]\n}\n\nexport const getCakeAddress = () => {\n return getAddress(tokens.cake.address)\n}\nexport const getMoonMasterAddress = () => {\n return getAddress(addresses.masterChef)\n}\nexport const getMoonReferralAddress = () => {\n return getAddress(addresses.moonReferral)\n}\nexport const getMulticallAddress = () => {\n return getAddress(addresses.mulltiCall)\n}\nexport const getWbnbAddress = () => {\n return getAddress(tokens.wbnb.address)\n}\nexport const getLotteryAddress = () => {\n return getAddress(addresses.lottery)\n}\nexport const getLotteryTicketAddress = () => {\n return getAddress(addresses.lotteryNFT)\n}\nexport const getPancakeProfileAddress = () => {\n return getAddress(addresses.pancakeProfile)\n}\nexport const getPancakeRabbitsAddress = () => {\n return getAddress(addresses.pancakeRabbits)\n}\nexport const getBunnyFactoryAddress = () => {\n return getAddress(addresses.bunnyFactory)\n}\nexport const getClaimRefundAddress = () => {\n return getAddress(addresses.claimRefund)\n}\nexport const getPointCenterIfoAddress = () => {\n return getAddress(addresses.pointCenterIfo)\n}\nexport const getBunnySpecialAddress = () => {\n return getAddress(addresses.bunnySpecial)\n}\nexport const getTradingCompetitionAddress = () => {\n return getAddress(addresses.tradingCompetition)\n}\nexport const getEasterNftAddress = () => {\n return getAddress(addresses.easterNft)\n}\nexport const getDoubleMoonAddress = () => {\n return getAddress(tokens.dbm.address)\n}\nexport const getDoubleMoonCatAddress = () => {\n return getAddress(tokens.dmc.address)\n}\nexport const getVaultChefAddress = () => {\n return getAddress(addresses.vaultChef)\n}\n","import tokens from './tokens'\nimport { VaultConfig, VaultCategory, VaultPlatform } from './types'\n\nconst priceHelperLps: VaultConfig[] = [\n /**\n * These LPs are just used to help with price calculation for MasterChef LPs (farms.ts).\n * This list is added to the MasterChefLps and passed to fetchFarm. The calls to get contract information about the token/quoteToken in the LP are still made.\n * The absense of a PID means the masterchef contract calls are skipped for this farm.\n * Prices are then fetched for all farms (masterchef + priceHelperLps).\n * Before storing to redux, farms without a PID are filtered out.\n */\n {\n pid: null,\n symbol: 'BUSD-BNB',\n strategyAddresses: {\n 97: '',\n 56: '',\n },\n masterChefAddresses: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n lpAddresses: {\n 97: '',\n 56: '0x58F876857a02D6762E0101bb5C46A8c1ED44Dc16',\n },\n category: VaultCategory.PAIR,\n platform: VaultPlatform.DOUBLEMOON,\n token: tokens.busd,\n quoteToken: tokens.wbnb,\n earnToken: tokens.busd,\n withdrawFee: 0,\n performanceFee: 0,\n compoundFrequency: 0,\n icon: '',\n sortOrder: 0,\n }\n]\n\nexport default priceHelperLps\n","import BigNumber from 'bignumber.js'\nimport masterchefABI from 'config/abi/moonMaster.json'\nimport masterChefABI from 'config/abi/masterChef.json'\nimport erc20 from 'config/abi/erc20.json'\nimport strategyMasterChefABI from 'config/abi/strategyMasterChef.json'\nimport { VaultCategory } from 'config/constants/types'\nimport { getAddress, getMoonMasterAddress } from 'utils/addressHelpers'\nimport { BIG_TEN, BIG_ZERO } from 'utils/bigNumber'\nimport multicall from 'utils/multicall'\nimport { Vault, SerializedBigNumber } from '../types'\n\ntype PublicVaultData = {\n tokenAmountMc: SerializedBigNumber\n quoteTokenAmountMc: SerializedBigNumber\n lpTokenBalanceMc: SerializedBigNumber\n tokenAmountTotal: SerializedBigNumber\n quoteTokenAmountTotal: SerializedBigNumber\n vaultSharesTotal: SerializedBigNumber\n lpTotalInQuoteToken: SerializedBigNumber\n lpMcTotalInQuoteToken: SerializedBigNumber\n lpTotalSupply: SerializedBigNumber\n tokenPriceVsQuote: SerializedBigNumber\n masterChefPid: SerializedBigNumber\n poolWeight: SerializedBigNumber\n multiplier: string\n}\n\nconst fetchVault = async (vault: Vault): Promise => {\n const { pid, strategyAddresses, lpAddresses, masterChefAddresses, token, quoteToken } = vault\n const strategyAddress = getAddress(strategyAddresses)\n const lpAddress = getAddress(lpAddresses)\n const masterChefAddress = getAddress(masterChefAddresses)\n const calls = [\n // Balance of token in the LP contract\n {\n address: getAddress(token.address),\n name: 'balanceOf',\n params: [lpAddress],\n },\n // Balance of quote token on LP contract\n {\n address: getAddress(quoteToken.address),\n name: 'balanceOf',\n params: [lpAddress],\n },\n // Balance of LP tokens in the master chef contract\n {\n address: lpAddress,\n name: 'balanceOf',\n params: [masterChefAddress],\n },\n // Total supply of LP tokens\n {\n address: lpAddress,\n name: 'totalSupply',\n },\n // Token decimals\n {\n address: getAddress(token.address),\n name: 'decimals',\n },\n // Quote token decimals\n {\n address: getAddress(quoteToken.address),\n name: 'decimals',\n },\n ]\n\n const [tokenBalanceLP, quoteTokenBalanceLP, lpTokenBalanceMc, lpTotalSupply, tokenDecimals, quoteTokenDecimals] =\n await multicall(erc20, calls)\n // console.log('lpTokenBalanceMc: ', lpTokenBalanceMc.toString())\n\n const callStrategyMasterChefs = [\n // Balance of LP tokens in strategy master chef contract\n {\n address: strategyAddress,\n name: 'vaultSharesTotal',\n },\n // PID of master chef\n {\n address: strategyAddress,\n name: 'pid',\n },\n ]\n const [vaultSharesTotal, masterChefPid] = (pid || pid === 0) ? await multicall(strategyMasterChefABI, callStrategyMasterChefs) : [0, 0]\n // console.log(pid, 'vaultSharesTotal=====', vaultSharesTotal.toString(), masterChefPid.toString())\n\n // Ratio in % of LP tokens that are staked in the MC, vs the total number in circulation\n const lpTokenSourceMCRatio = new BigNumber(lpTokenBalanceMc).div(new BigNumber(lpTotalSupply))\n const lpTokenRatio = new BigNumber(vaultSharesTotal).div(new BigNumber(lpTotalSupply))\n\n // Raw amount of token in the LP, including those not staked\n const tokenAmountTotal = new BigNumber(tokenBalanceLP).div(BIG_TEN.pow(tokenDecimals))\n const quoteTokenAmountTotal = new BigNumber(quoteTokenBalanceLP).div(BIG_TEN.pow(quoteTokenDecimals))\n\n // Amount of token in the LP that are staked in the MC (i.e amount of token * lp ratio)\n const tokenAmountMc = tokenAmountTotal.times(lpTokenRatio)\n const quoteTokenAmountMc = quoteTokenAmountTotal.times(lpTokenRatio)\n const quoteTokenAmountSourceMc = quoteTokenAmountTotal.times(lpTokenSourceMCRatio)\n\n // Total staked in LP, in quote token value\n const lpTotalInQuoteToken = quoteTokenAmountMc.times(new BigNumber(2))\n const lpMcTotalInQuoteToken = quoteTokenAmountSourceMc.times(new BigNumber(2))\n\n // Only make masterchef calls if vault has pid\n const [info, totalAllocPoint] = pid || pid === 0 ? await multicall(masterChefABI, [\n {\n address: masterChefAddress,\n name: 'poolInfo',\n params: [masterChefPid.toString()],\n },\n {\n address: masterChefAddress,\n name: 'totalAllocPoint',\n },\n ]) : [null, null]\n const allocPoint = info ? new BigNumber(info.allocPoint?._hex) : BIG_ZERO\n const poolWeight = totalAllocPoint ? allocPoint.div(new BigNumber(totalAllocPoint)) : BIG_ZERO\n\n return {\n tokenAmountMc: tokenAmountMc.toJSON(),\n quoteTokenAmountMc: quoteTokenAmountMc.toJSON(),\n lpTokenBalanceMc: lpTokenBalanceMc.toString(),\n tokenAmountTotal: tokenAmountTotal.toJSON(),\n quoteTokenAmountTotal: quoteTokenAmountTotal.toJSON(),\n vaultSharesTotal: new BigNumber(vaultSharesTotal).toJSON(),\n lpTotalSupply: new BigNumber(lpTotalSupply).toJSON(),\n lpTotalInQuoteToken: lpTotalInQuoteToken.toJSON(),\n lpMcTotalInQuoteToken: lpMcTotalInQuoteToken.toJSON(),\n tokenPriceVsQuote: quoteTokenAmountTotal.div(tokenAmountTotal).toJSON(),\n masterChefPid: masterChefPid.toString(),\n poolWeight: poolWeight.toJSON(),\n multiplier: `${allocPoint.div(100).toString()}X`,\n }\n}\n\nexport default fetchVault\n","import { Vault } from 'state/types'\nimport fetchPublicVaultData from './fetchPublicVaultData'\n\nconst fetchVault = async (vault: Vault): Promise => {\n const vaultPublicData = await fetchPublicVaultData(vault)\n\n return { ...vault, ...vaultPublicData }\n}\n\nexport default fetchVault\n","import { VaultConfig } from 'config/constants/types'\nimport fetchVault from './fetchVault'\n\nconst fetchVaults = async (vaultsToFetch: VaultConfig[]) => {\n const data = await Promise.all(\n vaultsToFetch.map(async (vaultConfig) => {\n const farm = await fetchVault(vaultConfig)\n return farm\n }),\n )\n return data\n}\n\nexport default fetchVaults\n","import { Vault } from 'state/types'\n\n/**\n * Returns the first vault with a quote token that matches from an array of preferred quote tokens\n * @param vaults Array of vaults\n * @param preferredQuoteTokens Array of preferred quote tokens\n * @returns A preferred vault, if found - or the first element of the vaults array\n */\nexport const filterVaultsByQuoteToken = (vaults: Vault[], preferredQuoteTokens: string[] = ['BUSD', 'wBNB']): Vault => {\n const preferredVault = vaults.find((vault) => {\n return preferredQuoteTokens.some((quoteToken) => {\n return vault.quoteToken.symbol === quoteToken\n })\n })\n return preferredVault || vaults[0]\n}\n\nexport default filterVaultsByQuoteToken\n","import BigNumber from 'bignumber.js'\nimport { BIG_ONE, BIG_ZERO } from 'utils/bigNumber'\nimport { filterVaultsByQuoteToken } from 'utils/vaultsPriceHelpers'\nimport { Vault } from 'state/types'\n\nconst getVaultFromTokenSymbol = (vaults: Vault[], tokenSymbol: string, preferredQuoteTokens?: string[]): Vault => {\n const vaultsWithTokenSymbol = vaults.filter((vault) => vault.token.symbol === tokenSymbol)\n const filteredVault = filterVaultsByQuoteToken(vaultsWithTokenSymbol, preferredQuoteTokens)\n return filteredVault\n}\n\nconst getVaultBaseTokenPrice = (vault: Vault, quoteTokenVault: Vault, bnbPriceBusd: BigNumber): BigNumber => {\n const hasTokenPriceVsQuote = Boolean(vault.tokenPriceVsQuote)\n\n if (vault.quoteToken.symbol === 'BUSD' || vault.quoteToken.symbol === 'USDC' || vault.quoteToken.symbol === 'USDT') {\n return hasTokenPriceVsQuote ? new BigNumber(vault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n if (vault.quoteToken.symbol === 'DOLLY' || vault.quoteToken.symbol === 'KUSD') {\n return hasTokenPriceVsQuote ? new BigNumber(vault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n if (vault.quoteToken.symbol === 'wBNB') {\n return hasTokenPriceVsQuote ? bnbPriceBusd.times(vault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n // We can only calculate profits without a quoteTokenVault for BUSD/BNB vaults\n if (!quoteTokenVault) {\n return BIG_ZERO\n }\n\n // Possible alternative vault quoteTokens:\n // UST (i.e. MIR-UST), pBTC (i.e. PNT-pBTC), BTCB (i.e. bBADGER-BTCB), ETH (i.e. SUSHI-ETH)\n // If the vault's quote token isn't BUSD or wBNB, we then use the quote token, of the original vault's quote token\n // i.e. for vault PNT - pBTC we use the pBTC vault's quote token - BNB, (pBTC - BNB)\n // from the BNB - pBTC price, we can calculate the PNT - BUSD price\n if (quoteTokenVault.quoteToken.symbol === 'wBNB') {\n const quoteTokenInBusd = bnbPriceBusd.times(quoteTokenVault.tokenPriceVsQuote)\n return hasTokenPriceVsQuote && quoteTokenInBusd\n ? new BigNumber(vault.tokenPriceVsQuote).times(quoteTokenInBusd)\n : BIG_ZERO\n }\n\n if (quoteTokenVault.quoteToken.symbol === 'BUSD' || quoteTokenVault.quoteToken.symbol === 'USDC' || quoteTokenVault.quoteToken.symbol === 'USDT') {\n const quoteTokenInBusd = quoteTokenVault.tokenPriceVsQuote\n return hasTokenPriceVsQuote && quoteTokenInBusd\n ? new BigNumber(vault.tokenPriceVsQuote).times(quoteTokenInBusd)\n : BIG_ZERO\n }\n\n if (quoteTokenVault.quoteToken.symbol === 'DOLLY' || quoteTokenVault.quoteToken.symbol === 'KUSD') {\n const quoteTokenInDolly = quoteTokenVault.tokenPriceVsQuote\n return hasTokenPriceVsQuote && quoteTokenInDolly\n ? new BigNumber(vault.tokenPriceVsQuote).times(quoteTokenInDolly)\n : BIG_ZERO\n }\n\n // Catch in case token does not have immediate or once-removed BUSD/wBNB quoteToken\n return BIG_ZERO\n}\n\nconst getVaultQuoteTokenPrice = (vault: Vault, quoteTokenVault: Vault, bnbPriceBusd: BigNumber): BigNumber => {\n if (vault.quoteToken.symbol === 'BUSD' || vault.quoteToken.symbol === 'USDC' || vault.quoteToken.symbol === 'USDT') {\n return BIG_ONE\n }\n\n if (vault.quoteToken.symbol === 'DOLLY' || vault.quoteToken.symbol === 'KUSD') {\n return BIG_ONE\n }\n\n if (vault.quoteToken.symbol === 'wBNB') {\n return bnbPriceBusd\n }\n\n if (!quoteTokenVault) {\n return BIG_ZERO\n }\n\n if (quoteTokenVault.quoteToken.symbol === 'wBNB') {\n return quoteTokenVault.tokenPriceVsQuote ? bnbPriceBusd.times(quoteTokenVault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n if (quoteTokenVault.quoteToken.symbol === 'BUSD' || quoteTokenVault.quoteToken.symbol === 'USDC' || quoteTokenVault.quoteToken.symbol === 'USDT') {\n return quoteTokenVault.tokenPriceVsQuote ? new BigNumber(quoteTokenVault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n if (quoteTokenVault.quoteToken.symbol === 'DOLLY' || quoteTokenVault.quoteToken.symbol === 'KUSD') {\n return quoteTokenVault.tokenPriceVsQuote ? new BigNumber(quoteTokenVault.tokenPriceVsQuote) : BIG_ZERO\n }\n\n return BIG_ZERO\n}\n\nconst fetchVaultsPrices = async (vaults) => {\n const bnbBusdVault = vaults.find((vault: Vault) => vault.symbol === 'BUSD-BNB')\n const bnbPriceBusd = bnbBusdVault.tokenPriceVsQuote ? BIG_ONE.div(bnbBusdVault.tokenPriceVsQuote) : BIG_ZERO\n\n const vaultsWithPrices = vaults.map((vault) => {\n const quoteTokenVault = getVaultFromTokenSymbol(vaults, vault.quoteToken.symbol)\n const baseTokenPrice = getVaultBaseTokenPrice(vault, quoteTokenVault, bnbPriceBusd)\n const quoteTokenPrice = getVaultQuoteTokenPrice(vault, quoteTokenVault, bnbPriceBusd)\n const token = { ...vault.token, busdPrice: baseTokenPrice.toJSON() }\n const quoteToken = { ...vault.quoteToken, busdPrice: quoteTokenPrice.toJSON() }\n return { ...vault, token, quoteToken }\n })\n\n return vaultsWithPrices\n}\n\nexport default fetchVaultsPrices\n","import BigNumber from 'bignumber.js'\nimport erc20ABI from 'config/abi/erc20.json'\nimport vaultChefABI from 'config/abi/vaultChef.json'\nimport multicall from 'utils/multicall'\nimport { getAddress, getVaultChefAddress } from 'utils/addressHelpers'\nimport { VaultConfig } from 'config/constants/types'\n\nexport const fetchVaultUserAllowances = async (account: string, vaultsToFetch: VaultConfig[]) => {\n const vaultChefAddress = getVaultChefAddress()\n\n const calls = vaultsToFetch.map((vault) => {\n const lpContractAddress = getAddress(vault.lpAddresses)\n return { address: lpContractAddress, name: 'allowance', params: [account, vaultChefAddress] }\n })\n\n const rawLpAllowances = await multicall(erc20ABI, calls)\n const parsedLpAllowances = rawLpAllowances.map((lpBalance) => {\n return new BigNumber(lpBalance).toJSON()\n })\n return parsedLpAllowances\n}\n\nexport const fetchVaultUserTokenBalances = async (account: string, vaultsToFetch: VaultConfig[]) => {\n const calls = vaultsToFetch.map((vault) => {\n const lpContractAddress = getAddress(vault.lpAddresses)\n return {\n address: lpContractAddress,\n name: 'balanceOf',\n params: [account],\n }\n })\n\n const rawTokenBalances = await multicall(erc20ABI, calls)\n const parsedTokenBalances = rawTokenBalances.map((tokenBalance) => {\n return new BigNumber(tokenBalance).toJSON()\n })\n return parsedTokenBalances\n}\n\nexport const fetchVaultUserStakedBalances = async (account: string, vaultsToFetch: VaultConfig[]) => {\n const vaultChefAddress = getVaultChefAddress()\n\n const calls = vaultsToFetch.map((vault) => {\n return {\n address: vaultChefAddress,\n name: 'stakedWantTokens',\n params: [vault.pid, account],\n }\n })\n\n const rawStakedBalances = await multicall(vaultChefABI, calls)\n const parsedStakedBalances = rawStakedBalances.map((stakedBalance) => {\n return new BigNumber(stakedBalance[0]._hex).toJSON()\n })\n return parsedStakedBalances\n}\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk, createSlice } from '@reduxjs/toolkit'\nimport BigNumber from 'bignumber.js'\nimport vaultsConfig from 'config/constants/vaults'\nimport priceHelperLpsConfig from 'config/constants/priceHelperLps'\nimport fetchVaults from './fetchVaults'\nimport fetchVaultsPrices from './fetchVaultsPrices'\nimport {\n fetchVaultUserAllowances,\n fetchVaultUserTokenBalances,\n fetchVaultUserStakedBalances,\n} from './fetchVaultUser'\nimport { VaultsState, Vault } from '../types'\n\nconst noAccountVaultConfig = vaultsConfig.map((vault) => ({\n ...vault,\n userData: {\n allowance: '0',\n tokenBalance: '0',\n stakedBalance: '0',\n earnings: '0',\n },\n}))\n\nconst initialState: VaultsState = { data: noAccountVaultConfig, userDataLoaded: false }\n\n// export const nonArchivedVaults = vaultsConfig.filter(({ pid }) => !isArchivedPid(pid))\n\n// Async thunks\nexport const fetchVaultsPublicDataAsync = createAsyncThunk(\n 'vaults/fetchVaultsPublicDataAsync',\n async (pids) => {\n const vaultsToFetch = vaultsConfig.filter((vaultConfig) => pids.includes(vaultConfig.pid))\n\n // Add price helper vaults\n const vaultsWithPriceHelpers = vaultsToFetch.concat(priceHelperLpsConfig)\n\n const vaults = await fetchVaults(vaultsWithPriceHelpers)\n const vaultsWithPrices = await fetchVaultsPrices(vaults)\n\n // Filter out price helper LP config vaults\n const vaultsWithoutHelperLps = vaultsWithPrices.filter((vault: Vault) => {\n return vault.pid || vault.pid === 0\n })\n // console.log(vaultsWithoutHelperLps)\n\n return vaultsWithoutHelperLps\n },\n)\n\ninterface VaultUserDataResponse {\n pid: number\n allowance: string\n tokenBalance: string\n stakedBalance: string\n}\n\nexport const fetchVaultUserDataAsync = createAsyncThunk(\n 'vaults/fetchVaultUserDataAsync',\n async ({ account, pids }) => {\n const vaultsToFetch = vaultsConfig.filter((vaultConfig) => pids.includes(vaultConfig.pid))\n const userVaultAllowances = await fetchVaultUserAllowances(account, vaultsToFetch)\n const userVaultTokenBalances = await fetchVaultUserTokenBalances(account, vaultsToFetch)\n const userStakedBalances = await fetchVaultUserStakedBalances(account, vaultsToFetch)\n\n return userVaultAllowances.map((vaultAllowance, index) => {\n return {\n pid: vaultsToFetch[index].pid,\n allowance: userVaultAllowances[index],\n tokenBalance: userVaultTokenBalances[index],\n stakedBalance: userStakedBalances[index],\n }\n })\n },\n)\n\nexport const vaultsSlice = createSlice({\n name: 'Vaults',\n initialState,\n reducers: {\n },\n extraReducers: (builder) => {\n // Update vaults with live data\n builder.addCase(fetchVaultsPublicDataAsync.fulfilled, (state, action) => {\n state.data = state.data.map((vault) => {\n const liveVaultData = action.payload.find((vaultData) => vaultData.pid === vault.pid)\n return { ...vault, ...liveVaultData }\n })\n })\n\n // Update vaults with user data\n builder.addCase(fetchVaultUserDataAsync.fulfilled, (state, action) => {\n action.payload.forEach((userDataEl) => {\n const { pid } = userDataEl\n const index = state.data.findIndex((vault) => vault.pid === pid)\n state.data[index] = { ...state.data[index], userData: userDataEl }\n })\n state.userDataLoaded = true\n })\n },\n})\n\n// Actions\n// export const { setLoadArchivedVaultsData } = vaultsSlice.actions\n\nexport default vaultsSlice.reducer\n","import merge from 'lodash/merge'\nimport teamsList from 'config/constants/teams'\nimport { getProfileContract } from 'utils/contractHelpers'\nimport { Team } from 'config/constants/types'\nimport makeBatchRequest from 'utils/makeBatchRequest'\nimport { TeamsById, TeamResponse } from 'state/types'\n\nconst profileContract = getProfileContract()\n\nexport const getTeam = async (teamId: number): Promise => {\n try {\n const {\n 0: teamName,\n 2: numberUsers,\n 3: numberPoints,\n 4: isJoinable,\n } = await profileContract.methods.getTeamProfile(teamId).call()\n const staticTeamInfo = teamsList.find((staticTeam) => staticTeam.id === teamId)\n\n return merge({}, staticTeamInfo, {\n isJoinable,\n name: teamName,\n users: numberUsers,\n points: numberPoints,\n })\n } catch (error) {\n return null\n }\n}\n\n/**\n * Gets on-chain data and merges it with the existing static list of teams\n */\nexport const getTeams = async (): Promise => {\n try {\n const teamsById = teamsList.reduce((accum, team) => {\n return {\n ...accum,\n [team.id]: team,\n }\n }, {})\n const nbTeams = await profileContract.methods.numberTeams().call()\n const calls = []\n\n for (let i = 1; i <= nbTeams; i++) {\n calls.push(profileContract.methods.getTeamProfile(i).call)\n }\n\n const teamData = (await makeBatchRequest(calls)) as TeamResponse[]\n const onChainTeamData = teamData.reduce((accum, team, index) => {\n const { 0: teamName, 2: numberUsers, 3: numberPoints, 4: isJoinable } = team\n\n return {\n ...accum,\n [index + 1]: {\n name: teamName,\n users: Number(numberUsers),\n points: Number(numberPoints),\n isJoinable,\n },\n }\n }, {})\n\n return merge({}, teamsById, onChainTeamData)\n } catch (error) {\n return null\n }\n}\n","import { Team } from './types'\n\nconst teams: Team[] = [\n {\n id: 1,\n name: 'Syrup Storm',\n description: \"The storm's a-comin! Watch out! These bulls are stampeding in a syrupy surge!\",\n images: {\n lg: 'syrup-storm-lg.png',\n md: 'syrup-storm-md.png',\n sm: 'syrup-storm-sm.png',\n alt: 'syrup-storm-alt.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXKzSojwzYjtDCVgR6mVx7w7DbyYpS7zip4ovJB9fQdMG/syrup-storm.png',\n },\n background: 'syrup-storm-bg.svg',\n textColor: '#191326',\n users: 0,\n points: 0,\n },\n {\n id: 2,\n name: 'Fearsome Flippers',\n description: \"The flippening is coming. Don't get in these bunnies' way, or you'll get flipped too!\",\n images: {\n lg: 'fearsome-flippers-lg.png',\n md: 'fearsome-flippers-md.png',\n sm: 'fearsome-flippers-sm.png',\n alt: 'fearsome-flippers-alt.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXKzSojwzYjtDCVgR6mVx7w7DbyYpS7zip4ovJB9fQdMG/fearsome-flippers.png',\n },\n background: 'fearsome-flippers-bg.svg',\n textColor: '#FFFFFF',\n users: 0,\n points: 0,\n },\n {\n id: 3,\n name: 'Chaotic Cakers',\n description: 'Can you stand the heat? Stay out of the kitchen or you might get burned to a crisp!',\n images: {\n lg: 'chaotic-cakers-lg.png',\n md: 'chaotic-cakers-md.png',\n sm: 'chaotic-cakers-sm.png',\n alt: 'chaotic-cakers-alt.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXKzSojwzYjtDCVgR6mVx7w7DbyYpS7zip4ovJB9fQdMG/chaotic-cakers.png',\n },\n background: 'chaotic-cakers-bg.svg',\n textColor: '#191326',\n users: 0,\n points: 0,\n },\n]\n\nexport default teams\n","// Set of helper functions to facilitate wallet setup\n\nimport { nodes } from './getRpcUrl'\n\n/**\n * Prompt the user to add BSC as a network on Metamask, or switch to BSC if the wallet is on a different network\n * @returns {boolean} true if the setup succeeded, false otherwise\n */\nexport const setupNetwork = async () => {\n const provider = (window as WindowChain).ethereum\n if (provider) {\n const chainId = parseInt(process.env.REACT_APP_CHAIN_ID, 10)\n try {\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: `0x${chainId.toString(16)}`,\n chainName: 'Binance Smart Chain Mainnet',\n nativeCurrency: {\n name: 'BNB',\n symbol: 'bnb',\n decimals: 18,\n },\n rpcUrls: nodes,\n blockExplorerUrls: ['https://bscscan.com/'],\n },\n ],\n })\n return true\n } catch (error) {\n console.error(error)\n return false\n }\n } else {\n console.error(\"Can't setup the BSC network on metamask because window.ethereum is undefined\")\n return false\n }\n}\n\n/**\n * Prompt the user to add a custom token to metamask\n * @param tokenAddress\n * @param tokenSymbol\n * @param tokenDecimals\n * @param tokenImage\n * @returns {boolean} true if the token has been added, false otherwise\n */\nexport const registerToken = async (\n tokenAddress: string,\n tokenSymbol: string,\n tokenDecimals: number,\n tokenImage: string,\n) => {\n const tokenAdded = await (window as WindowChain).ethereum.request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: tokenAddress,\n symbol: tokenSymbol,\n decimals: tokenDecimals,\n image: tokenImage,\n },\n },\n })\n\n return tokenAdded\n}\n","import { useCallback } from 'react'\nimport { useWeb3React, UnsupportedChainIdError } from '@web3-react/core'\nimport { NoBscProviderError } from '@binance-chain/bsc-connector'\nimport {\n NoEthereumProviderError,\n UserRejectedRequestError as UserRejectedRequestErrorInjected,\n} from '@web3-react/injected-connector'\nimport {\n UserRejectedRequestError as UserRejectedRequestErrorWalletConnect,\n WalletConnectConnector,\n} from '@web3-react/walletconnect-connector'\nimport { ConnectorNames, connectorLocalStorageKey } from '@doublemoondev/doublemoon-uikit'\nimport { connectorsByName } from 'utils/web3React'\nimport { setupNetwork } from 'utils/wallet'\nimport { useToast } from 'state/hooks'\nimport { profileClear } from 'state/profile'\nimport { useAppDispatch } from 'state'\n\nconst useAuth = () => {\n const dispatch = useAppDispatch()\n const { activate, deactivate } = useWeb3React()\n const { toastError } = useToast()\n\n const login = useCallback((connectorID: ConnectorNames) => {\n const connector = connectorsByName[connectorID]\n if (connector) {\n activate(connector, async (error: Error) => {\n if (error instanceof UnsupportedChainIdError) {\n const hasSetup = await setupNetwork()\n if (hasSetup) {\n activate(connector)\n }\n } else {\n window.localStorage.removeItem(connectorLocalStorageKey)\n if (error instanceof NoEthereumProviderError || error instanceof NoBscProviderError) {\n toastError('Provider Error', 'No provider was found')\n } else if (\n error instanceof UserRejectedRequestErrorInjected ||\n error instanceof UserRejectedRequestErrorWalletConnect\n ) {\n if (connector instanceof WalletConnectConnector) {\n const walletConnector = connector as WalletConnectConnector\n walletConnector.walletConnectProvider = null\n }\n toastError('Authorization Error', 'Please authorize to access your account')\n } else {\n toastError(error.name, error.message)\n }\n }\n })\n } else {\n toastError(\"Can't find connector\", 'The connector config is wrong')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const logout = useCallback(() => {\n dispatch(profileClear())\n deactivate()\n }, [deactivate, dispatch])\n\n return { login, logout }\n}\n\nexport default useAuth\n","export { default as farmsConfig } from './farms'\nexport { default as poolsConfig } from './pools'\nexport { default as ifosConfig } from './ifo'\nexport { default as vaultsConfig } from './vaults'\n","import tokens from './tokens'\nimport farms from './farms'\nimport { Ifo, Token } from './types'\n\nconst cakeBnbLpToken: Token = {\n symbol: farms[1].lpSymbol,\n address: farms[1].lpAddresses,\n decimals: 18,\n}\n\nconst ifos: Ifo[] = [\n {\n id: 'horizon',\n address: '0x6137B571f7F1E44839ae10310a08be86D1A4D03B',\n isActive: true,\n name: 'Horizon Protocol (HZN)',\n poolBasic: {\n saleAmount: '3,000,000 HZN',\n raiseAmount: '$750,000',\n cakeToBurn: '$375,000',\n distributionRatio: 0.3,\n },\n poolUnlimited: {\n saleAmount: '7,000,000 HZN',\n raiseAmount: '$1,750,000',\n cakeToBurn: '$875,000',\n distributionRatio: 0.7,\n },\n currency: cakeBnbLpToken,\n token: tokens.hzn,\n releaseBlockNumber: 6581111,\n campaignId: '511090000',\n articleUrl: 'https://pancakeswap.medium.com/horizon-protocol-hzn-ifo-to-be-hosted-on-pancakeswap-51f79601c9d8',\n tokenOfferingPrice: 0.25,\n isV1: false,\n },\n {\n id: 'belt',\n address: '0xc9FBedC033a1c479a6AD451ffE463025E92a1d38',\n isActive: false,\n name: 'Belt (BELT)',\n poolUnlimited: {\n saleAmount: '150,000 BELT',\n raiseAmount: '$3,000,000',\n cakeToBurn: '$1,500,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.belt,\n releaseBlockNumber: 5493919,\n campaignId: '511080000',\n articleUrl: 'https://pancakeswap.medium.com/belt-fi-belt-ifo-to-be-hosted-on-pancakeswap-353585117e32',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'watch',\n address: '0x55344b55C71Ad8834C397E6e08dF5195cF84fe6d',\n isActive: false,\n name: 'Yieldwatch (WATCH)',\n poolUnlimited: {\n saleAmount: '8,000,000 WATCH',\n raiseAmount: '$800,000',\n cakeToBurn: '$400,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.watch,\n releaseBlockNumber: 5294924,\n campaignId: '511070000',\n articleUrl: 'https://pancakeswap.medium.com/yieldwatch-watch-ifo-to-be-hosted-on-pancakeswap-d24301f17241',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'berry',\n address: '0x5d028cE3435B2bB9AceBfaC599EEbA1ccD63d7dd',\n isActive: false,\n name: 'Berry (BRY)',\n poolUnlimited: {\n saleAmount: '2,000,000 BRY',\n raiseAmount: '$1,000,000',\n cakeToBurn: '$500,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.bry,\n releaseBlockNumber: 4750968,\n campaignId: '511060000',\n articleUrl: 'https://pancakeswap.medium.com/berry-bry-ifo-to-be-hosted-on-pancakeswap-b4f9095e9cdb',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'soteria',\n address: '0x9C21123D94b93361a29B2C2EFB3d5CD8B17e0A9e',\n isActive: false,\n name: 'Soteria (wSOTE)',\n poolUnlimited: {\n saleAmount: '1,500,000 wSOTE',\n raiseAmount: '$525,000',\n cakeToBurn: '$262,500',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.wsote,\n releaseBlockNumber: 4086064,\n campaignId: '511050000',\n articleUrl: 'https://pancakeswap.medium.com/soteria-sota-ifo-to-be-hosted-on-pancakeswap-64b727c272ae',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'helmet',\n address: '0xa32509d760ee47Eb2Be96D338b5d69B5FBa4eFEB',\n isActive: false,\n name: 'Helmet.insure (Helmet)',\n poolUnlimited: {\n saleAmount: '10,000,000 Helmet',\n raiseAmount: '$1,000,000',\n cakeToBurn: '$500,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.helmet,\n releaseBlockNumber: 3771926,\n campaignId: '511040000',\n articleUrl: 'https://pancakeswap.medium.com/1-000-000-helmet-helmet-ifo-to-be-hosted-on-pancakeswap-3379a2a89a67',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'tenet',\n address: '0xB922aA19A2603A07C6C9ED6c236618C9bac51f06',\n isActive: false,\n name: 'Tenet (TEN)',\n poolUnlimited: {\n saleAmount: '1,000,000 TEN',\n raiseAmount: '$1,000,000',\n cakeToBurn: '$500,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.ten,\n releaseBlockNumber: 3483883,\n campaignId: '511030000',\n articleUrl: 'https://pancakeswap.medium.com/tenet-ten-ifo-to-be-hosted-on-pancakeswap-b7e1eb4cb272',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'ditto',\n address: '0x570c9eB19553526Fb35895a531928E19C7D20788',\n isActive: false,\n name: 'Ditto (DITTO)',\n poolUnlimited: {\n saleAmount: '700,000 DITTO',\n raiseAmount: '$630,000',\n cakeToBurn: '$315,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.ditto,\n releaseBlockNumber: 3279767,\n campaignId: '511020000',\n articleUrl: 'https://pancakeswap.medium.com/ditto-money-ditto-ifo-to-be-hosted-on-pancakeswap-342da3059a66',\n tokenOfferingPrice: null,\n isV1: true,\n },\n {\n id: 'blink',\n address: '0x44a9Cc8463EC00937242b660BF65B10365d99baD',\n isActive: false,\n name: 'BLINk (BLK)',\n poolUnlimited: {\n saleAmount: '100,000,000 BLINK',\n raiseAmount: '$1,000,000',\n cakeToBurn: '$500,000',\n distributionRatio: 1,\n },\n currency: cakeBnbLpToken,\n token: tokens.blink,\n releaseBlockNumber: 3279767,\n campaignId: '511010000',\n articleUrl: 'https://medium.com/pancakeswap/1-000-000-ifo-blink-joins-pancakeswap-15841800bdd8',\n tokenOfferingPrice: null,\n isV1: true,\n },\n]\n\nexport default ifos\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { BlockState } from '../types'\n\nconst initialState: BlockState = { currentBlock: 0, initialBlock: 0 }\n\nexport const blockSlice = createSlice({\n name: 'Block',\n initialState,\n reducers: {\n setBlock: (state, action: PayloadAction) => {\n if (state.initialBlock === 0) {\n state.initialBlock = action.payload\n }\n\n state.currentBlock = action.payload\n },\n },\n})\n\n// Actions\nexport const { setBlock } = blockSlice.actions\n\nexport default blockSlice.reducer\n","import { InjectedConnector } from '@web3-react/injected-connector'\nimport { WalletConnectConnector } from '@web3-react/walletconnect-connector'\nimport { BscConnector } from '@binance-chain/bsc-connector'\nimport { ConnectorNames } from '@doublemoondev/doublemoon-uikit'\nimport Web3 from 'web3'\nimport getNodeUrl from './getRpcUrl'\n\nconst POLLING_INTERVAL = 12000\nconst rpcUrl = getNodeUrl()\nconst chainId = parseInt(process.env.REACT_APP_CHAIN_ID, 10)\n\nconst injected = new InjectedConnector({ supportedChainIds: [chainId] })\n\nconst walletconnect = new WalletConnectConnector({\n rpc: { [chainId]: rpcUrl },\n bridge: 'https://bridge.walletconnect.org',\n qrcode: true,\n pollingInterval: POLLING_INTERVAL,\n})\n\nconst bscConnector = new BscConnector({ supportedChainIds: [chainId] })\n\nexport const connectorsByName: { [connectorName in ConnectorNames]: any } = {\n [ConnectorNames.Injected]: injected,\n [ConnectorNames.WalletConnect]: walletconnect,\n [ConnectorNames.BSC]: bscConnector,\n}\n\nexport const getLibrary = (provider): Web3 => {\n return provider\n}\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { PriceApiResponse, PriceApiThunk, PriceState } from 'state/types'\n\nconst initialState: PriceState = {\n isLoading: false,\n lastUpdated: null,\n data: null,\n}\n\n// Thunks\nexport const fetchPrices = createAsyncThunk('prices/fetch', async () => {\n const response = await fetch('https://api.pancakeswap.info/api/v2/tokens')\n const data = (await response.json()) as PriceApiResponse\n // Return normalized token names\n return {\n updated_at: data.updated_at,\n data: Object.keys(data.data).reduce((accum, token) => {\n return {\n ...accum,\n [token.toLowerCase()]: parseFloat(data.data[token].price),\n }\n }, {}),\n }\n})\n\nexport const pricesSlice = createSlice({\n name: 'prices',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(fetchPrices.pending, (state) => {\n state.isLoading = true\n })\n builder.addCase(fetchPrices.fulfilled, (state, action: PayloadAction) => {\n state.isLoading = false\n state.lastUpdated = action.payload.updated_at\n state.data = action.payload.data\n })\n },\n})\n\nexport default pricesSlice.reducer\n","import Nfts, { IPFS_GATEWAY, nftSources } from 'config/constants/nfts'\nimport { Nft, NftType } from 'config/constants/types'\nimport { getAddress } from './addressHelpers'\nimport { getErc721Contract } from './contractHelpers'\n\n/**\n * Gets the identifier key based on the nft address\n * Helpful for looking up the key when all you have is the address\n */\nexport const getIdentifierKeyFromAddress = (nftAddress: string) => {\n const nftSource = Object.values(nftSources).find((nftSourceEntry) => {\n const address = getAddress(nftSourceEntry.address)\n return address === nftAddress\n })\n\n return nftSource ? nftSource.identifierKey : null\n}\n\n/**\n * Some sources like Pancake do not return HTTP tokenURI's\n */\nexport const getTokenUrl = (tokenUri: string) => {\n if (tokenUri.startsWith('ipfs://')) {\n return `${IPFS_GATEWAY}/ipfs/${tokenUri.slice(6)}`\n }\n\n return tokenUri\n}\n\nexport const getAddressByType = (type: NftType) => {\n return getAddress(nftSources[type].address)\n}\n\nexport const getTokenUriData = async (nftAddress: string, tokenId: number) => {\n try {\n const contract = getErc721Contract(nftAddress)\n const tokenUri = await contract.methods.tokenURI(tokenId).call()\n const uriDataResponse = await fetch(getTokenUrl(tokenUri))\n\n if (!uriDataResponse.ok) {\n return null\n }\n\n const uriData = await uriDataResponse.json()\n return uriData\n } catch (error) {\n console.error('getTokenUriData', error)\n return null\n }\n}\n\nexport const getNftByTokenId = async (nftAddress: string, tokenId: number): Promise => {\n const uriData = await getTokenUriData(nftAddress, tokenId)\n const identifierKey = getIdentifierKeyFromAddress(nftAddress)\n\n // Bail out early if we have no uriData, identifierKey, or the value does not\n // exist in the object\n if (!uriData) {\n return null\n }\n\n if (!identifierKey) {\n return null\n }\n\n if (!uriData[identifierKey]) {\n return null\n }\n\n return Nfts.find((nft) => {\n return uriData[identifierKey].includes(nft.identifier)\n })\n}\n","import { getWeb3NoAccount } from './web3'\n\n/**\n * Accepts an array of contract method calls and batches them\n *\n * Example:\n *\n * [\n * contract.method.balanceOf().call,\n * contract.method.startBlockNumber().call\n * ]\n */\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount()\n const batch = new web3.BatchRequest()\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err)\n } else {\n resolve(result)\n }\n }),\n )\n })\n })\n\n batch.execute()\n\n return Promise.all(promises)\n } catch {\n return null\n }\n}\n\nexport default makeBatchRequest\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk, createSlice } from '@reduxjs/toolkit'\nimport { CollectiblesState } from 'state/types'\nimport { nftSources } from 'config/constants/nfts'\nimport { NftType } from 'config/constants/types'\nimport { getAddress } from 'utils/addressHelpers'\nimport { getErc721Contract } from 'utils/contractHelpers'\nimport { getNftByTokenId } from 'utils/collectibles'\n\nconst initialState: CollectiblesState = {\n isInitialized: false,\n isLoading: true,\n data: {},\n}\n\ntype NftSourceItem = [number, string]\n\n// Thunks\nexport const fetchWalletNfts = createAsyncThunk(\n 'collectibles/fetchWalletNfts',\n async (account) => {\n // For each nft source get nft data\n const nftSourcePromises = Object.keys(nftSources).map(async (nftSourceType) => {\n const { address: addressObj } = nftSources[nftSourceType as NftType]\n const address = getAddress(addressObj)\n const contract = getErc721Contract(address)\n\n const getTokenIdAndData = async (index: number) => {\n try {\n const tokenId = await contract.methods.tokenOfOwnerByIndex(account, index).call()\n const walletNft = await getNftByTokenId(address, tokenId)\n return [Number(tokenId), walletNft.identifier]\n } catch (error) {\n console.error('getTokenIdAndData', error)\n return null\n }\n }\n\n const balanceOfResponse = await contract.methods.balanceOf(account).call()\n const balanceOf = Number(balanceOfResponse)\n\n if (balanceOf === 0) {\n return []\n }\n\n const nftDataFetchPromises = []\n\n // For each index get the tokenId and data associated with it\n for (let i = 0; i < balanceOf; i++) {\n nftDataFetchPromises.push(getTokenIdAndData(i))\n }\n\n const nftData = await Promise.all(nftDataFetchPromises)\n return nftData\n })\n\n const nftSourceData = await Promise.all(nftSourcePromises)\n\n return nftSourceData.flat()\n },\n)\n\nexport const collectiblesSlice = createSlice({\n name: 'collectibles',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder.addCase(fetchWalletNfts.pending, (state) => {\n state.isLoading = true\n })\n builder.addCase(fetchWalletNfts.fulfilled, (state, action) => {\n state.isLoading = false\n state.isInitialized = true\n state.data = action.payload.reduce((accum, association) => {\n if (!association) {\n return accum\n }\n\n const [tokenId, identifier] = association as NftSourceItem\n\n return {\n ...accum,\n [identifier]: accum[identifier] ? [...accum[identifier], tokenId] : [tokenId],\n }\n }, {})\n })\n },\n})\n\nexport default collectiblesSlice.reducer\n","import React, { useState, useEffect } from 'react'\n\nconst FAST_INTERVAL = 2000\nconst MIDDLE_INTERVAL = 10000\nconst SLOW_INTERVAL = 60000\n\nconst RefreshContext = React.createContext({ slow: 0, fast: 0, middle: 0 })\n\n// This context maintain 2 counters that can be used as a dependencies on other hooks to force a periodic refresh\nconst RefreshContextProvider = ({ children }) => {\n const [slow, setSlow] = useState(0)\n const [fast, setFast] = useState(0)\n const [middle, setMiddle] = useState(0)\n\n useEffect(() => {\n const interval = setInterval(async () => {\n setFast((prev) => prev + 1)\n }, FAST_INTERVAL)\n return () => clearInterval(interval)\n }, [])\n\n useEffect(() => {\n const interval = setInterval(async () => {\n setSlow((prev) => prev + 1)\n }, SLOW_INTERVAL)\n return () => clearInterval(interval)\n }, [])\n\n useEffect(() => {\n const interval = setInterval(async () => {\n setMiddle((prev) => prev + 1)\n }, MIDDLE_INTERVAL)\n return () => clearInterval(interval)\n }, [])\n\n return {children}\n}\n\nexport { RefreshContext, RefreshContextProvider }\n","import { Campaign } from './types'\n\n/**\n * id: The campaign id (required)\n * type: The type of the achievement\n * title: A string or an object to be translated.\n * Note: If the value is a string it is likely used as data in a translation object\n *\n * badge: Achievement avatar\n */\n\nconst campaigns: Campaign[] = [\n {\n id: '511090000',\n type: 'ifo',\n title: 'Horizon Protocol',\n badge: 'ifo-hzn.svg',\n },\n {\n id: '511080000',\n type: 'ifo',\n title: 'Belt',\n badge: 'ifo-belt.svg',\n },\n {\n id: '511070000',\n type: 'ifo',\n title: 'Yieldwatch',\n badge: 'ifo-watch.svg',\n },\n {\n id: '511060000',\n type: 'ifo',\n title: 'Berry',\n badge: 'ifo-bry.svg',\n },\n {\n id: '511050000',\n type: 'ifo',\n title: 'Soteria',\n badge: 'ifo-wsote.svg',\n },\n {\n id: '511040000',\n type: 'ifo',\n title: 'Helmet',\n badge: 'ifo-helmet.svg',\n },\n {\n id: '511030000',\n type: 'ifo',\n title: 'Tenet',\n badge: 'ifo-ten.svg',\n },\n {\n id: '511020000',\n type: 'ifo',\n title: 'Ditto',\n badge: 'ifo-ditto.svg',\n },\n {\n id: '511010000',\n type: 'ifo',\n title: 'Blink',\n badge: 'ifo-blk.svg',\n },\n {\n id: '512010001',\n type: 'teambattle',\n title: 'Easter Champion: Gold',\n badge: 'easter-champion-gold.svg',\n },\n {\n id: '512010002',\n type: 'teambattle',\n title: 'Easter Top 500: Gold',\n badge: 'easter-top-500-gold.svg',\n },\n {\n id: '512010003',\n type: 'teambattle',\n title: 'Easter Top 500: Gold',\n badge: 'easter-top-500-gold.svg',\n },\n {\n id: '512010004',\n type: 'teambattle',\n title: 'Easter Top 500: Gold',\n badge: 'easter-top-500-gold.svg',\n },\n {\n id: '512010005',\n type: 'teambattle',\n title: 'Easter Participant: Gold',\n badge: 'easter-participant-gold.svg',\n },\n {\n id: '512010006',\n type: 'teambattle',\n title: 'Easter Champion: Silver',\n badge: 'easter-champion-silver.svg',\n },\n {\n id: '512010007',\n type: 'teambattle',\n title: 'Easter Top 500: Silver',\n badge: 'easter-top-500-silver.svg',\n },\n {\n id: '512010008',\n type: 'teambattle',\n title: 'Easter Top 500: Silver',\n badge: 'easter-top-500-silver.svg',\n },\n {\n id: '512010009',\n type: 'teambattle',\n title: 'Easter Top 500: Silver',\n badge: 'easter-top-500-silver.svg',\n },\n {\n id: '512010010',\n type: 'teambattle',\n title: 'Easter Participant: Silver',\n badge: 'easter-participant-silver.svg',\n },\n {\n id: '512010011',\n type: 'teambattle',\n title: 'Easter Champion: Bronze',\n badge: 'easter-champion-bronze.svg',\n },\n {\n id: '512010012',\n type: 'teambattle',\n title: 'Easter Top 500: Bronze',\n badge: 'easter-top-500-bronze.svg',\n },\n {\n id: '512010013',\n type: 'teambattle',\n title: 'Easter Top 500: Bronze',\n badge: 'easter-top-500-bronze.svg',\n },\n {\n id: '512010014',\n type: 'teambattle',\n title: 'Easter Top 500: Bronze',\n badge: 'easter-top-500-bronze.svg',\n },\n {\n id: '512010015',\n type: 'teambattle',\n title: 'Easter Participant: Bronze',\n badge: 'easter-participant-bronze.svg',\n },\n]\n\n/**\n * Transform the campaign config into a map. Keeps the config the same\n * as the others and allows easy access to a campaign by id\n */\nexport const campaignMap = new Map()\n\ncampaigns.forEach((campaign) => {\n campaignMap.set(campaign.id, campaign)\n})\n\nexport default campaigns\n","import { Campaign } from 'config/constants/types'\nimport { getPointCenterIfoContract } from 'utils/contractHelpers'\nimport ifosList from 'config/constants/ifo'\nimport { campaignMap } from 'config/constants/campaigns'\nimport { Achievement, TranslatableText } from 'state/types'\nimport makeBatchRequest from './makeBatchRequest'\n\ninterface IfoMapResponse {\n thresholdToClaim: string\n campaignId: string\n numberPoints: string\n}\n\nexport const getAchievementTitle = (campaign: Campaign): TranslatableText => {\n switch (campaign.type) {\n case 'ifo':\n return {\n id: 999,\n fallback: `IFO Shopper: ${campaign.title}`,\n data: {\n name: campaign.title as string,\n },\n }\n default:\n return campaign.title\n }\n}\n\nexport const getAchievementDescription = (campaign: Campaign): TranslatableText => {\n switch (campaign.type) {\n case 'ifo':\n return {\n id: 999,\n fallback: `Committed more than $5 worth of LP in the ${campaign.title} IFO`,\n data: {\n name: campaign.title as string,\n },\n }\n default:\n return campaign.description\n }\n}\n\n/**\n * Checks if a wallet is eligble to claim points from valid IFO's\n */\nexport const getClaimableIfoData = async (account: string): Promise => {\n const ifoCampaigns = ifosList.filter((ifoItem) => ifoItem.campaignId !== undefined)\n const ifoCampaignAddresses = ifoCampaigns.map((ifoItem) => ifoItem.address)\n const pointCenterContract = getPointCenterIfoContract()\n\n // Returns the claim status of every IFO with a campaign ID\n const claimStatuses = (await pointCenterContract.methods\n .checkClaimStatuses(account, ifoCampaignAddresses)\n .call()) as boolean[]\n\n // Get IFO data for all IFO's that are eligible to claim\n const claimableIfoData = (await makeBatchRequest(\n claimStatuses.reduce((accum, claimStatus, index) => {\n if (claimStatus === true) {\n return [...accum, pointCenterContract.methods.ifos(ifoCampaignAddresses[index]).call]\n }\n\n return accum\n }, []),\n )) as IfoMapResponse[]\n\n // Transform response to an Achievement\n return claimableIfoData.reduce((accum, claimableIfoDataItem) => {\n if (!campaignMap.has(claimableIfoDataItem.campaignId)) {\n return accum\n }\n\n const campaignMeta = campaignMap.get(claimableIfoDataItem.campaignId)\n const { address } = ifoCampaigns.find((ifoCampaign) => ifoCampaign.campaignId === claimableIfoDataItem.campaignId)\n\n return [\n ...accum,\n {\n address,\n id: claimableIfoDataItem.campaignId,\n type: 'ifo',\n title: getAchievementTitle(campaignMeta),\n description: getAchievementDescription(campaignMeta),\n badge: campaignMeta.badge,\n points: Number(claimableIfoDataItem.numberPoints),\n },\n ]\n }, [])\n}\n","import { request, gql } from 'graphql-request'\nimport { campaignMap } from 'config/constants/campaigns'\nimport { Achievement } from 'state/types'\nimport { getAchievementTitle, getAchievementDescription } from 'utils/achievements'\n\ninterface UserPointIncreaseEvent {\n campaignId: string\n id: string // wallet address\n points: string\n}\n\nconst profileSubgraphApi = process.env.REACT_APP_SUBGRAPH_PROFILE\n\n/**\n * Gets all user point increase events on the profile filtered by wallet address\n */\nexport const getUserPointIncreaseEvents = async (account: string): Promise => {\n try {\n const { user } = await request(\n profileSubgraphApi,\n gql`\n query getUserPointIncreaseEvents($account: ID!) {\n user(id: $account) {\n points {\n id\n campaignId\n points\n }\n }\n }\n `,\n {\n account: account.toLowerCase(),\n },\n )\n\n return user.points\n } catch (error) {\n return null\n }\n}\n\n/**\n * Gets all user point increase events and adds achievement meta\n */\nexport const getAchievements = async (account: string): Promise => {\n const pointIncreaseEvents = await getUserPointIncreaseEvents(account)\n\n if (!pointIncreaseEvents) {\n return []\n }\n\n return pointIncreaseEvents.reduce((accum, userPoint) => {\n const campaignMeta = campaignMap.get(userPoint.campaignId)\n\n return [\n ...accum,\n {\n id: userPoint.campaignId,\n type: campaignMeta.type,\n address: userPoint.id,\n title: getAchievementTitle(campaignMeta),\n description: getAchievementDescription(campaignMeta),\n badge: campaignMeta.badge,\n points: Number(userPoint.points),\n },\n ]\n }, [])\n}\n","/* eslint-disable no-param-reassign */\nimport { toastTypes } from '@doublemoondev/doublemoon-uikit'\nimport { createSlice, Dispatch, PayloadAction } from '@reduxjs/toolkit'\nimport { kebabCase } from 'lodash'\nimport { push } from 'state/toasts'\nimport { AchievementState, Achievement } from '../types'\nimport { getAchievements } from './helpers'\n\nconst initialState: AchievementState = {\n data: [],\n}\n\nexport const achievementSlice = createSlice({\n name: 'achievements',\n initialState,\n reducers: {\n addAchievement: (state, action: PayloadAction) => {\n state.data.push(action.payload)\n },\n addAchievements: (state, action: PayloadAction) => {\n state.data = [...state.data, ...action.payload]\n },\n setAchievements: (state, action: PayloadAction) => {\n state.data = action.payload\n },\n clearAchievements: (state) => {\n state.data = []\n },\n },\n})\n\n// Actions\nexport const { addAchievement, addAchievements, setAchievements, clearAchievements } = achievementSlice.actions\n\n// Thunks\nexport const fetchAchievements = (account: string) => async (dispatch: Dispatch) => {\n try {\n const achievements = await getAchievements(account)\n dispatch(setAchievements(achievements))\n } catch (error) {\n console.error(error)\n const title = 'Error fetching achievements'\n dispatch(push({ id: kebabCase(title), type: toastTypes.DANGER, title }))\n }\n}\n\nexport default achievementSlice.reducer\n","import BigNumber from 'bignumber.js'\n\nexport const getBalanceNumber = (balance: BigNumber, decimals = 18) => {\n const displayBalance = new BigNumber(balance).dividedBy(new BigNumber(10).pow(decimals))\n return displayBalance.toNumber()\n}\n\nexport const getBalanceBigNumber = (balance: BigNumber, decimals = 18) => {\n const displayBalance = new BigNumber(balance).dividedBy(new BigNumber(10).pow(decimals))\n return displayBalance\n}\n\nexport const getFullDisplayBalance = (balance: BigNumber, decimals = 18) => {\n return balance.dividedBy(new BigNumber(10).pow(decimals)).toFixed()\n}\n\nexport const formatNumber = (number: number, minPrecision = 2, maxPrecision = 2) => {\n const options = {\n minimumFractionDigits: minPrecision,\n maximumFractionDigits: maxPrecision,\n }\n return number.toLocaleString(undefined, options)\n}\n","import React, { createContext } from 'react'\n\nexport interface TranslationState {\n translations: Array\n setTranslations: React.Dispatch>>\n}\n\nconst defaultTranslationState: TranslationState = {\n translations: [],\n setTranslations: (): void => undefined,\n}\n\nexport const TranslationsContext = createContext(defaultTranslationState as TranslationState)\n","import { PageMeta } from './types'\n\nexport const DEFAULT_META: PageMeta = {\n title: 'DoubleMoon',\n description:\n 'Doublemoon Finance the next generation decentralized lucky platform. We provided lucky draw and betting system for Defi firm.',\n image: 'https://app.doublemoon.finance/images/512x512_App_Icon.png',\n}\n\nexport const customMeta: { [key: string]: PageMeta } = {\n '/competition': {\n title: 'DoubleMoon Easter Battle',\n description: 'Register now for the DoubleMoon Easter battle!',\n image: 'https://pancakeswap.finance/images/easter-battle.png',\n },\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Helmet } from 'react-helmet-async'\nimport { useLocation } from 'react-router'\nimport { customMeta, DEFAULT_META } from 'config/constants/meta'\nimport Container from './Container'\n\nconst StyledPage = styled(Container)`\n padding-top: 16px;\n padding-bottom: 16px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-top: 24px;\n padding-bottom: 24px;\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n padding-top: 32px;\n padding-bottom: 32px;\n }\n`\n\nconst PageMeta = () => {\n const { pathname } = useLocation()\n // const cakePriceUsd = usePriceDMCBusd()\n // const cakePriceUsdDisplay = cakePriceUsd.eq(0)\n // ? ''\n // : `$${cakePriceUsd.toNumber().toLocaleString(undefined, {\n // minimumFractionDigits: 3,\n // maximumFractionDigits: 3,\n // })}`\n const pageMeta = customMeta[pathname] || {}\n const { title, description, image } = { ...DEFAULT_META, ...pageMeta }\n // const pageTitle = cakePriceUsdDisplay ? [title, cakePriceUsdDisplay].join(' - ') : title\n\n return (\n \n {title}\n \n \n \n \n )\n}\n\nconst Page: React.FC> = ({ children, ...props }) => {\n return (\n <>\n \n {children}\n \n )\n}\n\nexport default Page\n","import styled from 'styled-components'\n\nconst Container = styled.div`\n margin-left: auto;\n margin-right: auto;\n max-width: 1200px;\n padding-left: 16px;\n padding-right: 16px;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n padding-left: 24px;\n padding-right: 24px;\n }\n`\n\nexport default Container\n","import BigNumber from 'bignumber.js'\n\nexport const BIG_ZERO = new BigNumber(0)\nexport const BIG_ONE = new BigNumber(1)\nexport const BIG_NINE = new BigNumber(9)\nexport const BIG_TEN = new BigNumber(10)\n","const ARCHIVED_FARMS_START_PID = 139\nconst ARCHIVED_FARMS_END_PID = 250\n\nconst isArchivedPid = (pid: number) => pid >= ARCHIVED_FARMS_START_PID && pid <= ARCHIVED_FARMS_END_PID\n\nexport default isArchivedPid\n","import { AbiItem } from 'web3-utils'\nimport { Interface } from '@ethersproject/abi'\nimport { getWeb3NoAccount } from 'utils/web3'\nimport MultiCallAbi from 'config/abi/Multicall.json'\nimport { getMulticallAddress } from 'utils/addressHelpers'\n\ninterface Call {\n address: string // Address of the contract\n name: string // Function name on the contract (example: balanceOf)\n params?: any[] // Function params\n}\n\nconst multicall = async (abi: any[], calls: Call[]) => {\n const web3 = getWeb3NoAccount()\n const multi = new web3.eth.Contract((MultiCallAbi as unknown) as AbiItem, getMulticallAddress())\n const itf = new Interface(abi)\n\n const calldata = calls.map((call) => [call.address.toLowerCase(), itf.encodeFunctionData(call.name, call.params)])\n const { returnData } = await multi.methods.aggregate(calldata).call()\n const res = returnData.map((call, i) => itf.decodeFunctionResult(calls[i].name, call))\n\n return res\n}\n\nexport default multicall\n","const tokens = {\n bnb: {\n symbol: 'BNB',\n projectLink: 'https://www.binance.com/',\n },\n cake: {\n symbol: 'CAKE',\n address: {\n 56: '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82',\n 97: '0xa35062141Fa33BCA92Ce69FeD37D0E8908868AAe',\n },\n decimals: 18,\n projectLink: 'https://pancakeswap.finance/',\n },\n dbm: {\n symbol: 'DBM',\n address: {\n 56: '0x0314e5a39806C30D67B869EE1bCDABee7e08dE74',\n 97: '0xAfF3543F3811c7B667Bcb6bf321f05c3F6Bef96A',\n },\n decimals: 9,\n projectLink: 'https://doublemoon.finance/',\n },\n dmc: {\n symbol: 'DMC',\n address: {\n 56: '0xA7bD090bC58e663388Be63d5E8a7b683f5A3d4FC',\n 97: '0x9b5cAb9ca8b8451b94a2545A00c3e9559B228058',\n },\n decimals: 18,\n projectLink: 'https://doublemoon.finance/',\n },\n dinop: {\n symbol: 'DINOP',\n address: {\n 56: '0xea90DC6F64d18771Ca1dac8098526a9082265B42',\n 97: '0xc7876BF447fCfc2404E3bea5Ac5D0eeF32338218',\n },\n decimals: 9,\n projectLink: 'https://dinopark.jdiyield.com/',\n },\n scz: {\n symbol: 'SCZ',\n address: {\n 56: '0x39f1014a88c8ec087cedf1bfc7064d24f507b894',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://safebsc.finance/',\n },\n leaf: {\n symbol: 'LEAF',\n address: {\n 56: '0x1CbDdf83De068464Eba3a4E319bd3197a7EEa12c',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://seeder.finance/',\n },\n dop: {\n symbol: 'DOP',\n address: {\n 56: '0x844FA82f1E54824655470970F7004Dd90546bB28',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dopple.finance/',\n },\n dopx: {\n symbol: 'DOPX',\n address: {\n 56: '0x802A183ac9F6b082716DFeE55432ed0C04ACB49a',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dopple.finance/',\n },\n dolly: {\n symbol: 'DOLLY',\n address: {\n 56: '0xfF54da7CAF3BC3D34664891fC8f3c9B6DeA6c7A5',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dopple.finance/',\n },\n kusd: {\n symbol: 'KUSD',\n address: {\n 56: '0x940Ff63e82d15fb47371BFE5a4ed7D7D183dE1A5',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dopple.finance/',\n },\n twin: {\n symbol: 'TWIN',\n address: {\n 56: '0x3806aae953a3a873D02595f76C7698a57d4C7A57',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://twindex.com/',\n },\n twx: {\n symbol: 'TWX',\n address: {\n 56: '0x41171D5770C4c68686d1aF042Ada88a45B02f82b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://twindex.com/',\n },\n wad: {\n symbol: 'WAD',\n address: {\n 56: '0x0fEAdcC3824E7F3c12f40E324a60c23cA51627fc',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.wardenswap.finance/',\n },\n finix: {\n symbol: 'FINIX',\n address: {\n 56: '0x0F02b1F5AF54E04Fb6dd6550f009aC2429C4e30D',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bsc.definix.com/',\n },\n txl: {\n symbol: 'TXL',\n address: {\n 56: '0x1ffd0b47127fdd4097e54521c9e2c7f0d66aafc5',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://tixl.org/',\n },\n cos: {\n symbol: 'COS',\n address: {\n 56: '0x96Dd399F9c3AFda1F194182F71600F1B65946501',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.contentos.io/',\n },\n bunny: {\n symbol: 'BUNNY',\n address: {\n 56: '0xc9849e6fdb743d08faee3e34dd2d1bc69ea11a51',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://pancakebunny.finance/',\n },\n alice: {\n symbol: 'ALICE',\n address: {\n 56: '0xac51066d7bec65dc4589368da368b212745d63e8',\n 97: '',\n },\n decimals: 6,\n projectLink: 'https://www.myneighboralice.com/',\n },\n for: {\n symbol: 'FOR',\n address: {\n 56: '0x658A109C5900BC6d2357c87549B651670E5b0539',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.for.tube/home',\n },\n bux: {\n symbol: 'BUX',\n address: {\n 56: '0x211ffbe424b90e25a15531ca322adf1559779e45',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://getbux.com/bux-crypto/',\n },\n nuls: {\n symbol: 'NULS',\n address: {\n 56: '0x8cd6e29d3686d24d3c2018cee54621ea0f89313b',\n 97: '',\n },\n decimals: 8,\n projectLink: 'https://www.nuls.io/',\n },\n belt: {\n symbol: 'BELT',\n address: {\n 56: '0xE0e514c71282b6f4e823703a39374Cf58dc3eA4f',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://beta.belt.fi/',\n },\n ramp: {\n symbol: 'RAMP',\n address: {\n 56: '0x8519ea49c997f50ceffa444d240fb655e89248aa',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://rampdefi.com/',\n },\n bfi: {\n symbol: 'BFI',\n address: {\n 56: '0x81859801b01764d4f0fa5e64729f5a6c3b91435b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bearn.fi/',\n },\n dexe: {\n symbol: 'DEXE',\n address: {\n 56: '0x039cb485212f996a9dbb85a9a75d898f94d38da6',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dexe.network/',\n },\n bel: {\n symbol: 'BEL',\n address: {\n 56: '0x8443f091997f06a61670b735ed92734f5628692f',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bella.fi/',\n },\n tpt: {\n symbol: 'TPT',\n address: {\n 56: '0xeca41281c24451168a37211f0bc2b8645af45092',\n 97: '',\n },\n decimals: 4,\n projectLink: 'https://www.tokenpocket.pro/',\n },\n watch: {\n symbol: 'WATCH',\n address: {\n 56: '0x7a9f28eb62c791422aa23ceae1da9c847cbec9b0',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://yieldwatch.net/',\n },\n xmark: {\n symbol: 'xMARK',\n address: {\n 56: '0x26a5dfab467d4f58fb266648cae769503cec9580',\n 97: '',\n },\n decimals: 9,\n projectLink: 'https://benchmarkprotocol.finance/',\n },\n bmxx: {\n symbol: 'bMXX',\n address: {\n 56: '0x4131b87f74415190425ccd873048c708f8005823',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://multiplier.finance/',\n },\n iotx: {\n symbol: 'IOTX',\n address: {\n 56: '0x9678e42cebeb63f23197d726b29b1cb20d0064e5',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://iotex.io/',\n },\n bor: {\n symbol: 'BOR',\n address: {\n 56: '0x92d7756c60dcfd4c689290e8a9f4d263b3b32241',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.boringdao.com/',\n },\n bopen: {\n symbol: 'bOPEN',\n address: {\n 56: '0xf35262a9d427f96d2437379ef090db986eae5d42',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://opendao.io/',\n },\n dodo: {\n symbol: 'DODO',\n address: {\n 56: '0x67ee3cb086f8a16f34bee3ca72fad36f7db929e2',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dodoex.io/',\n },\n swingby: {\n symbol: 'SWINGBY',\n address: {\n 56: '0x71de20e0c4616e7fcbfdd3f875d568492cbe4739',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://swingby.network/',\n },\n bry: {\n symbol: 'BRY',\n address: {\n 56: '0xf859bf77cbe8699013d6dbc7c2b926aaf307f830',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://berrydata.co/',\n },\n zee: {\n symbol: 'ZEE',\n address: {\n 56: '0x44754455564474a89358b2c2265883df993b12f0',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://zeroswap.io/',\n },\n swgb: {\n symbol: 'SWGb',\n address: {\n 56: '0xe40255c5d7fa7ceec5120408c78c787cecb4cfdb',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://swirgepay.com/',\n },\n sfp: {\n symbol: 'SFP',\n address: {\n 56: '0xd41fdb03ba84762dd66a0af1a6c8540ff1ba5dfb',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.safepal.io/',\n },\n lina: {\n symbol: 'LINA',\n address: {\n 56: '0x762539b45a1dcce3d36d080f74d1aed37844b878',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://linear.finance/',\n },\n lit: {\n symbol: 'LIT',\n address: {\n 56: '0xb59490ab09a0f526cc7305822ac65f2ab12f9723',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.litentry.com/',\n },\n hget: {\n symbol: 'HGET',\n address: {\n 56: '0xc7d8d35eba58a0935ff2d5a33df105dd9f071731',\n 97: '',\n },\n decimals: 6,\n projectLink: 'https://www.hedget.com/',\n },\n bdo: {\n symbol: 'BDO',\n address: {\n 56: '0x190b589cf9fb8ddeabbfeae36a813ffb2a702454',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bdollar.fi/',\n },\n egld: {\n symbol: 'EGLD',\n address: {\n 56: '0xbf7c81fff98bbe61b40ed186e4afd6ddd01337fe',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://elrond.com/',\n },\n ust: {\n symbol: 'UST',\n address: {\n 56: '0x23396cf899ca06c4472205fc903bdb4de249d6fc',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n wsote: {\n symbol: 'wSOTE',\n address: {\n 56: '0x541e619858737031a1244a5d0cd47e5ef480342c',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://soteria.finance/#/',\n },\n front: {\n symbol: 'FRONT',\n address: {\n 56: '0x928e55dab735aa8260af3cedada18b5f70c72f1b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://frontier.xyz/',\n },\n helmet: {\n symbol: 'Helmet',\n address: {\n 56: '0x948d2a81086a075b3130bac19e4c6dee1d2e3fe8',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.helmet.insure/',\n },\n btcst: {\n symbol: 'BTCST',\n address: {\n 56: '0x78650b139471520656b9e7aa7a5e9276814a38e9',\n 97: '',\n },\n decimals: 17,\n projectLink: 'https://www.1-b.tc/',\n },\n bscx: {\n symbol: 'BSCX',\n address: {\n 56: '0x5ac52ee5b2a633895292ff6d8a89bb9190451587',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bscex.org/',\n },\n ten: {\n symbol: 'TEN',\n address: {\n 56: '0xdff8cb622790b7f92686c722b02cab55592f152c',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.tenet.farm/',\n },\n balbt: {\n symbol: 'bALBT',\n address: {\n 56: '0x72faa679e1008ad8382959ff48e392042a8b06f7',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://allianceblock.io/',\n },\n asr: {\n symbol: 'ASR',\n address: {\n 56: '0x80d5f92c2c8c682070c95495313ddb680b267320',\n 97: '',\n },\n decimals: 2,\n projectLink: 'https://www.chiliz.com',\n },\n atm: {\n symbol: 'ATM',\n address: {\n 56: '0x25e9d05365c867e59c1904e7463af9f312296f9e',\n 97: '',\n },\n decimals: 2,\n projectLink: 'https://www.chiliz.com',\n },\n og: {\n symbol: 'OG',\n address: {\n 56: '0xf05e45ad22150677a017fbd94b84fbb63dc9b44c',\n 97: '',\n },\n decimals: 2,\n projectLink: 'https://www.chiliz.com',\n },\n reef: {\n symbol: 'REEF',\n address: {\n 56: '0xf21768ccbc73ea5b6fd3c687208a7c2def2d966e',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://reef.finance/',\n },\n ditto: {\n symbol: 'DITTO',\n address: {\n 56: '0x233d91a0713155003fc4dce0afa871b508b3b715',\n 97: '',\n },\n decimals: 9,\n projectLink: 'https://ditto.money/',\n },\n juv: {\n symbol: 'JUV',\n address: {\n 56: '0xc40c9a843e1c6d01b7578284a9028854f6683b1b',\n 97: '',\n },\n decimals: 2,\n projectLink: 'https://www.chiliz.com',\n },\n psg: {\n symbol: 'PSG',\n address: {\n 56: '0xbc5609612b7c44bef426de600b5fd1379db2ecf1',\n 97: '',\n },\n decimals: 2,\n projectLink: 'https://www.chiliz.com',\n },\n vai: {\n symbol: 'VAI',\n address: {\n 56: '0x4bd17003473389a42daf6a0a729f6fdb328bbbd7',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://venus.io/',\n },\n wbnb: {\n symbol: 'wBNB',\n address: {\n 56: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c',\n 97: '0xae13d989dac2f0debff460ac112a837c89baa7cd',\n },\n decimals: 18,\n projectLink: 'https://pancakeswap.finance/',\n },\n blink: {\n symbol: 'BLINK',\n address: {\n 56: '0x63870a18b6e42b01ef1ad8a2302ef50b7132054f',\n 97: '',\n },\n decimals: 6,\n projectLink: 'https://blink.wink.org',\n },\n unfi: {\n symbol: 'UNFI',\n address: {\n 56: '0x728c5bac3c3e370e372fc4671f9ef6916b814d8b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://unifiprotocol.com',\n },\n twt: {\n symbol: 'TWT',\n address: {\n 56: '0x4b0f1812e5df2a09796481ff14017e6005508003',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://trustwallet.com/',\n },\n hard: {\n symbol: 'HARD',\n address: {\n 56: '0xf79037f6f6be66832de4e7516be52826bc3cbcc4',\n 97: '',\n },\n decimals: 6,\n projectLink: 'https://hard.kava.io',\n },\n broobee: {\n symbol: 'bROOBEE',\n address: {\n 56: '0xe64f5cb844946c1f102bd25bbd87a5ab4ae89fbe',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://roobee.io/',\n },\n stax: {\n symbol: 'STAX',\n address: {\n 56: '0x0da6ed8b13214ff28e9ca979dd37439e8a88f6c4',\n 97: '',\n },\n decimals: 18,\n projectLink: 'http://stablexswap.com/',\n },\n nar: {\n symbol: 'NAR',\n address: {\n 56: '0xa1303e6199b319a891b79685f0537d289af1fc83',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://narwhalswap.org/',\n },\n nya: {\n symbol: 'NYA',\n address: {\n 56: '0xbfa0841f7a90c4ce6643f651756ee340991f99d5',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://nyanswop.org/',\n },\n ctk: {\n symbol: 'CTK',\n address: {\n 56: '0xa8c2b8eec3d368c0253ad3dae65a5f2bbb89c929',\n 97: '',\n },\n decimals: 6,\n projectLink: 'https://www.certik.foundation/',\n },\n inj: {\n symbol: 'INJ',\n address: {\n 56: '0xa2b726b1145a4773f68593cf171187d8ebe4d495',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://injectiveprotocol.com/',\n },\n sxp: {\n symbol: 'SXP',\n address: {\n 56: '0x47bead2563dcbf3bf2c9407fea4dc236faba485a',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://swipe.io/',\n },\n alpha: {\n symbol: 'ALPHA',\n address: {\n 56: '0xa1faa113cbe53436df28ff0aee54275c13b40975',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://alphafinance.io/',\n },\n xvs: {\n symbol: 'XVS',\n address: {\n 56: '0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://venus.io/',\n },\n sushi: {\n symbol: 'SUSHI',\n address: {\n 56: '0x947950bcc74888a40ffa2593c5798f11fc9124c4',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://sushi.com/',\n },\n comp: {\n symbol: 'COMP',\n address: {\n 56: '0x52ce071bd9b1c4b00a0b92d298c512478cad67e8',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://compound.finance/',\n },\n syrup: {\n symbol: 'SYRUP',\n address: {\n 56: '0xE167b95306119744fA8E418Ef8d5588b0980E99e',\n 97: '0x79561e668AF4ccfa9A256BeCAaf560B07277112c',\n },\n decimals: 18,\n projectLink: 'https://pancakeswap.finance/',\n },\n bifi: {\n symbol: 'BIFI',\n address: {\n 56: '0xca3f508b8e4dd382ee878a314789373d80a5190a',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://beefy.finance/',\n },\n dusk: {\n symbol: 'DUSK',\n address: {\n 56: '0xb2bd0749dbe21f623d9baba856d3b0f0e1bfec9c',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://dusk.network/',\n },\n busd: {\n symbol: 'BUSD',\n address: {\n 56: '0xe9e7cea3dedca5984780bafc599bd69add087d56',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.paxos.com/busd/',\n },\n eth: {\n symbol: 'ETH',\n address: {\n 56: '0x2170ed0880ac9a755fd29b2688956bd959f933f8',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ethereum.org/en/',\n },\n beth: {\n symbol: 'BETH',\n address: {\n 56: '0x250632378e573c6be1ac2f97fcdf00515d0aa91b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ethereum.org/en/eth2/beacon-chain/',\n },\n mamzn: {\n symbol: 'mAMZN',\n address: {\n 56: '0x3947B992DC0147D2D89dF0392213781b04B25075',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n mgoogl: {\n symbol: 'mGOOGL',\n address: {\n 56: '0x62D71B23bF15218C7d2D7E48DBbD9e9c650B173f',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n mnflx: {\n symbol: 'mNFLX',\n address: {\n 56: '0xa04F060077D90Fe2647B61e4dA4aD1F97d6649dc',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n mtsla: {\n symbol: 'mTSLA',\n address: {\n 56: '0xF215A127A196e3988C09d052e16BcFD365Cd7AA3',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n ltc: {\n symbol: 'LTC',\n address: {\n 56: '0x4338665cbb7b2485a8855a139b75d5e34ab0db94',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://litecoin.org/',\n },\n usdc: {\n symbol: 'USDC',\n address: {\n 56: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.centre.io/usdc',\n },\n dai: {\n symbol: 'DAI',\n address: {\n 56: '0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3',\n 97: '',\n },\n decimals: 18,\n projectLink: 'http://www.makerdao.com/',\n },\n ada: {\n symbol: 'ADA',\n address: {\n 56: '0x3ee2200efb3400fabb9aacf31297cbdd1d435d47',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://www.cardano.org/',\n },\n band: {\n symbol: 'BAND',\n address: {\n 56: '0xad6caeb32cd2c308980a548bd0bc5aa4306c6c18',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://bandprotocol.com/',\n },\n dot: {\n symbol: 'DOT',\n address: {\n 56: '0x7083609fce4d1d8dc0c979aab8c869ea2c873402',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://polkadot.network/',\n },\n eos: {\n symbol: 'EOS',\n address: {\n 56: '0x56b6fb708fc5732dec1afc8d8556423a2edccbd6',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://eos.io/',\n },\n link: {\n symbol: 'LINK',\n address: {\n 56: '0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://chain.link/',\n },\n usdt: {\n symbol: 'USDT',\n address: {\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n 56: '0x55d398326f99059ff775485246999027b3197955',\n },\n decimals: 18,\n projectLink: 'https://tether.to/',\n },\n btcb: {\n symbol: 'BTCB',\n address: {\n 56: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://bitcoin.org/',\n },\n xrp: {\n symbol: 'XRP',\n address: {\n 56: '0x1d2f0da169ceb9fc7b3144628db156f3f6c60dbe',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://ripple.com/xrp/',\n },\n atom: {\n symbol: 'ATOM',\n address: {\n 56: '0x0eb3a705fc54725037cc9e008bdede697f62f335',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://cosmos.network/',\n },\n yfii: {\n symbol: 'YFII',\n address: {\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n 56: '0x7f70642d88cf1c4a3a7abb072b53b929b653eda5',\n },\n decimals: 18,\n projectLink: 'https://dfi.money/#/',\n },\n xtz: {\n symbol: 'XTZ',\n address: {\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n 56: '0x16939ef78684453bfdfb47825f8a5f714f12623a',\n },\n decimals: 18,\n projectLink: 'https://www.tezos.com/',\n },\n bch: {\n symbol: 'BCH',\n address: {\n 56: '0x8ff795a6f4d97e7887c79bea79aba5cc76444adf',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'http://bch.info/',\n },\n yfi: {\n symbol: 'YFI',\n address: {\n 56: '0x88f1a5ae2a3bf98aeaf342d26b30a79438c9142e',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://yearn.finance/',\n },\n uni: {\n symbol: 'UNI',\n address: {\n 56: '0xbf5140a22578168fd562dccf235e5d43a02ce9b1',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://uniswap.org/',\n },\n fil: {\n symbol: 'FIL',\n address: {\n 56: '0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://filecoin.io/',\n },\n bake: {\n symbol: 'BAKE',\n address: {\n 56: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://www.bakeryswap.org/',\n },\n burger: {\n symbol: 'BURGER',\n address: {\n 56: '0xae9269f27437f0fcbc232d39ec814844a51d6b8f',\n 97: '0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5',\n },\n decimals: 18,\n projectLink: 'https://burgerswap.org/',\n },\n bdigg: {\n symbol: 'bDIGG',\n address: {\n 56: '0x5986d5c77c65e5801a5caa4fae80089f870a71da',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://badger.finance/',\n },\n bbadger: {\n symbol: 'bBadger',\n address: {\n 56: '0x1f7216fdb338247512ec99715587bb97bbf96eae',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://badger.finance/',\n },\n trade: {\n symbol: 'TRADE',\n address: {\n 56: '0x7af173f350d916358af3e218bdf2178494beb748',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://unitrade.app/',\n },\n pnt: {\n symbol: 'PNT',\n address: {\n 56: '0x7a1da9f49224ef98389b071b8a3294d1cc5e3e6a',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ptokens.io/',\n },\n mir: {\n symbol: 'MIR',\n address: {\n 56: '0x5b6dcf557e2abe2323c48445e8cc948910d8c2c9',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mirror.finance/',\n },\n pbtc: {\n symbol: 'pBTC',\n address: {\n 56: '0xed28a457a5a76596ac48d87c0f577020f6ea1c4c',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ptokens.io/',\n },\n lto: {\n symbol: 'LTO',\n address: {\n 56: '0x857b222fc79e1cbbf8ca5f78cb133d1b7cf34bbd',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ltonetwork.com/',\n },\n pcws: {\n symbol: 'pCWS',\n address: {\n 56: '0xbcf39f0edda668c58371e519af37ca705f2bfcbd',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://game.seascape.network/',\n },\n zil: {\n symbol: 'ZIL',\n address: {\n 56: '0xb86abcb37c3a4b64f74f59301aff131a1becc787',\n 97: '',\n },\n decimals: 12,\n projectLink: 'https://www.zilliqa.com/',\n },\n lien: {\n symbol: 'LIEN',\n address: {\n 56: '0x5d684adaf3fcfe9cfb5cede3abf02f0cdd1012e3',\n 97: '',\n },\n decimals: 8,\n projectLink: 'https://lien.finance/',\n },\n swth: {\n symbol: 'SWTH',\n address: {\n 56: '0x250b211EE44459dAd5Cd3bCa803dD6a7EcB5d46C',\n 97: '',\n },\n decimals: 8,\n projectLink: 'https://switcheo.network/',\n },\n dft: {\n symbol: 'DFT',\n address: {\n 56: '0x42712dF5009c20fee340B245b510c0395896cF6e',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.dfuture.com/home',\n },\n gum: {\n symbol: 'GUM',\n address: {\n 56: '0xc53708664b99DF348dd27C3Ac0759d2DA9c40462',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://gourmetgalaxy.io/',\n },\n dego: {\n symbol: 'DEGO',\n address: {\n 56: '0x3fda9383a84c05ec8f7630fe10adf1fac13241cc',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bsc.dego.finance/home',\n },\n nrv: {\n symbol: 'NRV',\n address: {\n 56: '0x42f6f551ae042cbe50c739158b4f0cac0edb9096',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://nerve.fi/',\n },\n easy: {\n symbol: 'EASY',\n address: {\n 56: '0x7c17c8bed8d14bacce824d020f994f4880d6ab3b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://easyfi.network/',\n },\n oddz: {\n symbol: 'ODDZ',\n address: {\n 56: '0xcd40f2670cf58720b694968698a5514e924f742d',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://oddz.fi/',\n },\n hoo: {\n symbol: 'HOO',\n address: {\n 56: '0xe1d1f66215998786110ba0102ef558b22224c016',\n 97: '',\n },\n decimals: 8,\n projectLink: 'https://hoo.com/',\n },\n apys: {\n symbol: 'APYS',\n address: {\n 56: '0x37dfACfaeDA801437Ff648A1559d73f4C40aAcb7',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://apyswap.com/',\n },\n bondly: {\n symbol: 'BONDLY',\n address: {\n 56: '0x96058f8c3e16576d9bd68766f3836d9a33158f89',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.bondly.finance/',\n },\n tko: {\n symbol: 'TKO',\n address: {\n 56: '0x9f589e3eabe42ebc94a44727b3f3531c0c877809',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.tokocrypto.com/',\n },\n itam: {\n symbol: 'ITAM',\n address: {\n 56: '0x04c747b40be4d535fc83d09939fb0f626f32800b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://itam.network/',\n },\n arpa: {\n symbol: 'ARPA',\n address: {\n 56: '0x6f769e65c14ebd1f68817f5f1dcdb61cfa2d6f7e',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://arpachain.io/',\n },\n eps: {\n symbol: 'EPS',\n address: {\n 56: '0xa7f552078dcc247c2684336020c03648500c6d9f',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://ellipsis.finance/',\n },\n jgn: {\n symbol: 'JGN',\n address: {\n 56: '0xc13b7a43223bb9bf4b69bd68ab20ca1b79d81c75',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://jgndefi.com/',\n },\n tlm: {\n symbol: 'TLM',\n address: {\n 56: '0x2222227e22102fe3322098e4cbfe18cfebd57c95',\n 97: '',\n },\n decimals: 4,\n projectLink: 'https://alienworlds.io/',\n },\n perl: {\n symbol: 'PERL',\n address: {\n 56: '0x0f9e4d49f25de22c2202af916b681fbb3790497b',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://perlinx.finance/',\n },\n alpa: {\n symbol: 'ALPA',\n address: {\n 56: '0xc5e6689c9c8b02be7c49912ef19e79cf24977f03',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://bsc.alpaca.city/',\n },\n hzn: {\n symbol: 'HZN',\n address: {\n 56: '0xc0eff7749b125444953ef89682201fb8c6a917cd',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://horizonprotocol.com/',\n },\n suter: {\n symbol: 'SUTER',\n address: {\n 56: '0x4cfbbdfbd5bf0814472ff35c72717bd095ada055',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://shield.suterusu.io/',\n },\n cgg: {\n symbol: 'CGG',\n address: {\n 56: '0x1613957159e9b0ac6c80e824f7eea748a32a0ae2',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://chainguardians.io/',\n },\n mix: {\n symbol: 'MIX',\n address: {\n 56: '0xB67754f5b4C704A24d2db68e661b2875a4dDD197',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://mixie.chainguardians.io/',\n },\n hakka: {\n symbol: 'HAKKA',\n address: {\n 56: '0x1d1eb8e8293222e1a29d2c0e4ce6c0acfd89aaac',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://hakka.finance/',\n },\n xed: {\n symbol: 'XED',\n address: {\n 56: '0x5621b5a3f4a8008c4ccdd1b942b121c8b1944f1f',\n 97: '',\n },\n decimals: 18,\n projectLink: 'https://www.exeedme.com/',\n },\n τbtc: {\n symbol: 'τBTC',\n address: {\n 56: '0x2cd1075682b0fccaadd0ca629e138e64015ba11c',\n 97: '',\n },\n decimals: 9,\n projectLink: 'https://www.btcst.finance/',\n },\n}\n\nexport default tokens\n","import { configureStore } from '@reduxjs/toolkit'\nimport { useDispatch } from 'react-redux'\nimport farmsReducer from './farms'\nimport vaultsReducer from './vaults'\nimport toastsReducer from './toasts'\nimport poolsReducer from './pools'\nimport pricesReducer from './prices'\nimport profileReducer from './profile'\nimport teamsReducer from './teams'\nimport achievementsReducer from './achievements'\nimport blockReducer from './block'\nimport collectiblesReducer from './collectibles'\n\nconst store = configureStore({\n devTools: process.env.NODE_ENV !== 'production',\n reducer: {\n farms: farmsReducer,\n vaults: vaultsReducer,\n toasts: toastsReducer,\n pools: poolsReducer,\n prices: pricesReducer,\n profile: profileReducer,\n teams: teamsReducer,\n achievements: achievementsReducer,\n block: blockReducer,\n collectibles: collectiblesReducer,\n },\n})\n\n/**\n * @see https://redux-toolkit.js.org/usage/usage-with-typescript#getting-the-dispatch-type\n */\nexport type AppDispatch = typeof store.dispatch\nexport const useAppDispatch = () => useDispatch()\n\nexport default store\n","import tokens from './tokens'\nimport { PoolConfig, PoolCategory } from './types'\n\nconst pools: PoolConfig[] = [\n {\n sousId: 0,\n title: 'DMC Solo',\n multiply: 28,\n icon: 'dmc.svg',\n stakingToken: tokens.dmc,\n earningToken: tokens.dmc,\n contractAddress: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n poolCategory: PoolCategory.CORE,\n harvest: true,\n tokenPerBlock: '4.999558811',\n sortOrder: 1,\n isFinished: false,\n },\n {\n sousId: 6,\n title: 'DBM Solo',\n multiply: 10,\n icon: 'dbm.svg',\n stakingToken: tokens.dbm,\n earningToken: tokens.dmc,\n contractAddress: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n poolCategory: PoolCategory.CORE,\n harvest: true,\n tokenPerBlock: '1.764757787',\n sortOrder: 2,\n isFinished: false,\n },\n {\n sousId: 8,\n title: 'WBNB Solo',\n multiply: 2,\n icon: 'bnb.svg',\n stakingToken: tokens.wbnb,\n earningToken: tokens.dmc,\n contractAddress: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n poolCategory: PoolCategory.CORE,\n harvest: true,\n tokenPerBlock: '0.3529515574',\n sortOrder: 3,\n isFinished: false,\n },\n {\n sousId: 7,\n title: 'BUSD Solo',\n multiply: 2,\n icon: 'busd.svg',\n stakingToken: tokens.busd,\n earningToken: tokens.dmc,\n contractAddress: {\n 97: '0x8f9C2fD28aBD139f1368B8aE789B0b9CeE7454a1',\n 56: '0xbe739A112eF6278cEb374Bcad977252Bc3918cA9',\n },\n poolCategory: PoolCategory.CORE,\n harvest: true,\n tokenPerBlock: '0.3529515574',\n sortOrder: 4,\n isFinished: false,\n },\n {\n sousId: 1,\n title: 'DMC (earn DBM)',\n multiply: 0,\n icon: 'dmc.svg',\n stakingToken: tokens.dmc,\n earningToken: tokens.dbm,\n contractAddress: {\n 97: '0xEE631394E997a9407B094Ad5a265b467435edb3B',\n 56: '0xe935d95a39F429B621164225A8F3Bbf2c0E5a8F9',\n },\n poolCategory: PoolCategory.CORE,\n harvest: true,\n sortOrder: 5,\n tokenPerBlock: '3000000',\n },\n]\n\nexport default pools\n","export { fetchFarmsPublicDataAsync, fetchFarmUserDataAsync } from './farms'\nexport { fetchVaultsPublicDataAsync, fetchVaultUserDataAsync } from './vaults'\nexport { clear, remove, push } from './toasts'\nexport {\n fetchPoolsPublicDataAsync,\n fetchPoolsUserDataAsync,\n updateUserAllowance,\n updateUserBalance,\n updateUserPendingReward,\n updateUserStakedBalance,\n} from './pools'\nexport { profileFetchStart, profileFetchSucceeded, profileFetchFailed } from './profile'\nexport { fetchStart, teamFetchSucceeded, fetchFailed, teamsFetchSucceeded } from './teams'\nexport { setBlock } from './block'\n","import Web3 from 'web3'\nimport { AbiItem } from 'web3-utils'\nimport web3NoAccount from 'utils/web3'\nimport { poolsConfig } from 'config/constants'\nimport { PoolCategory } from 'config/constants/types'\n\n// Addresses\nimport {\n getAddress,\n getPancakeProfileAddress,\n getPancakeRabbitsAddress,\n getBunnyFactoryAddress,\n getBunnySpecialAddress,\n getCakeAddress,\n getLotteryAddress,\n getLotteryTicketAddress,\n getMoonMasterAddress,\n getPointCenterIfoAddress,\n getClaimRefundAddress,\n getTradingCompetitionAddress,\n getEasterNftAddress,\n getDoubleMoonAddress,\n getDoubleMoonCatAddress,\n getMoonReferralAddress,\n getVaultChefAddress,\n} from 'utils/addressHelpers'\n\n// ABI\nimport profileABI from 'config/abi/pancakeProfile.json'\nimport pancakeRabbitsAbi from 'config/abi/pancakeRabbits.json'\nimport bunnyFactoryAbi from 'config/abi/bunnyFactory.json'\nimport bunnySpecialAbi from 'config/abi/bunnySpecial.json'\nimport bep20Abi from 'config/abi/erc20.json'\nimport erc721Abi from 'config/abi/erc721.json'\nimport lpTokenAbi from 'config/abi/lpToken.json'\nimport cakeAbi from 'config/abi/cake.json'\nimport ifoV1Abi from 'config/abi/ifoV1.json'\nimport ifoV2Abi from 'config/abi/ifoV2.json'\nimport pointCenterIfo from 'config/abi/pointCenterIfo.json'\nimport lotteryAbi from 'config/abi/lottery.json'\nimport lotteryTicketAbi from 'config/abi/lotteryNft.json'\nimport moonMaster from 'config/abi/moonMaster.json'\nimport moonReferral from 'config/abi/moonReferral.json'\nimport sousChef from 'config/abi/sousChef.json'\nimport sousChefBnb from 'config/abi/sousChefBnb.json'\nimport claimRefundAbi from 'config/abi/claimRefund.json'\nimport tradingCompetitionAbi from 'config/abi/tradingCompetition.json'\nimport easterNftAbi from 'config/abi/easterNft.json'\nimport doubleMoonAbi from 'config/abi/doublemoon.json'\nimport doublemoonCatAbi from 'config/abi/doublemoonCat.json'\nimport doubleMoonLotteryAbi from 'config/abi/doubleMoonLottery.json'\nimport moonSpaceshipAbi from 'config/abi/moonSpaceship.json'\nimport vaultChefAbi from 'config/abi/vaultChef.json'\nimport strategyMasterChefAbi from 'config/abi/strategyMasterChef.json'\n\nconst getContract = (abi: any, address: string, web3?: Web3) => {\n const _web3 = web3 ?? web3NoAccount\n return new _web3.eth.Contract((abi as unknown) as AbiItem, address)\n}\n\nexport const getBep20Contract = (address: string, web3?: Web3) => {\n return getContract(bep20Abi, address, web3)\n}\nexport const getErc721Contract = (address: string, web3?: Web3) => {\n return getContract(erc721Abi, address, web3)\n}\nexport const getLpContract = (address: string, web3?: Web3) => {\n return getContract(lpTokenAbi, address, web3)\n}\nexport const getIfoV1Contract = (address: string, web3?: Web3) => {\n return getContract(ifoV1Abi, address, web3)\n}\nexport const getIfoV2Contract = (address: string, web3?: Web3) => {\n return getContract(ifoV2Abi, address, web3)\n}\nexport const getSouschefContract = (id: number, web3?: Web3) => {\n const config = poolsConfig.find((pool) => pool.sousId === id)\n const abi = config.poolCategory === PoolCategory.BINANCE ? sousChefBnb : sousChef\n return getContract(abi, getAddress(config.contractAddress), web3)\n}\nexport const getPointCenterIfoContract = (web3?: Web3) => {\n return getContract(pointCenterIfo, getPointCenterIfoAddress(), web3)\n}\nexport const getCakeContract = (web3?: Web3) => {\n return getContract(cakeAbi, getCakeAddress(), web3)\n}\nexport const getProfileContract = (web3?: Web3) => {\n return getContract(profileABI, getPancakeProfileAddress(), web3)\n}\nexport const getPancakeRabbitContract = (web3?: Web3) => {\n return getContract(pancakeRabbitsAbi, getPancakeRabbitsAddress(), web3)\n}\nexport const getBunnyFactoryContract = (web3?: Web3) => {\n return getContract(bunnyFactoryAbi, getBunnyFactoryAddress(), web3)\n}\nexport const getBunnySpecialContract = (web3?: Web3) => {\n return getContract(bunnySpecialAbi, getBunnySpecialAddress(), web3)\n}\nexport const getLotteryContract = (web3?: Web3) => {\n return getContract(lotteryAbi, getLotteryAddress(), web3)\n}\nexport const getLotteryTicketContract = (web3?: Web3) => {\n return getContract(lotteryTicketAbi, getLotteryTicketAddress(), web3)\n}\nexport const getMoonMasterContract = (web3?: Web3) => {\n return getContract(moonMaster, getMoonMasterAddress(), web3)\n}\nexport const getMoonReferralContract = (web3?: Web3) => {\n return getContract(moonReferral, getMoonReferralAddress(), web3)\n}\nexport const getClaimRefundContract = (web3?: Web3) => {\n return getContract(claimRefundAbi, getClaimRefundAddress(), web3)\n}\nexport const getTradingCompetitionContract = (web3?: Web3) => {\n return getContract(tradingCompetitionAbi, getTradingCompetitionAddress(), web3)\n}\nexport const getEasterNftContract = (web3?: Web3) => {\n return getContract(easterNftAbi, getEasterNftAddress(), web3)\n}\nexport const getDoubleMoonContract = (web3?: Web3) => {\n return getContract(doubleMoonAbi, getDoubleMoonAddress(), web3)\n}\nexport const getDoubleMoonCatContract = (web3?: Web3) => {\n return getContract(doublemoonCatAbi, getDoubleMoonCatAddress(), web3)\n}\nexport const getDoubleMoonLotteryContractByAddress = (web3?: Web3, targetAddress?: any) => {\n return getContract(doubleMoonLotteryAbi, targetAddress, web3)\n}\nexport const getMoonSpaceshipByAddress = (web3?: Web3, targetAddress?: any) => {\n return getContract(moonSpaceshipAbi, targetAddress, web3)\n}\nexport const getVaultChefContract = (web3?: Web3) => {\n return getContract(vaultChefAbi, getVaultChefAddress(), web3)\n}\nexport const getStrategyMasterChefContract = (web3?: Web3, targetAddress?: any) => {\n return getContract(strategyMasterChefAbi, targetAddress, web3)\n}","import { useEffect, useMemo } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { kebabCase } from 'lodash'\nimport { useWeb3React } from '@web3-react/core'\nimport { Toast, toastTypes } from '@doublemoondev/doublemoon-uikit'\nimport { useSelector } from 'react-redux'\nimport { useAppDispatch } from 'state'\nimport { vaultsConfig } from 'config/constants'\nimport { Team } from 'config/constants/types'\nimport Nfts from 'config/constants/nfts'\nimport { BIG_ZERO } from 'utils/bigNumber'\nimport { getWeb3NoAccount } from 'utils/web3'\nimport { getAddress } from 'utils/addressHelpers'\nimport { getBalanceNumber } from 'utils/formatBalance'\nimport useRefresh from 'hooks/useRefresh'\nimport {\n fetchFarmsPublicDataAsync,\n fetchPoolsPublicDataAsync,\n fetchPoolsUserDataAsync,\n push as pushToast,\n remove as removeToast,\n clear as clearToast,\n setBlock,\n fetchVaultsPublicDataAsync,\n fetchVaultUserDataAsync\n} from './actions'\nimport { State, Farm, FarmsState, Pool, ProfileState, TeamsState, AchievementState, PriceState, VaultsState, Vault } from './types'\nimport { fetchProfile } from './profile'\nimport { fetchTeam, fetchTeams } from './teams'\nimport { fetchAchievements } from './achievements'\nimport { fetchPrices } from './prices'\nimport { fetchWalletNfts } from './collectibles'\n\n// Vaults\nexport const useFetchVaultsData = () => {\n const dispatch = useAppDispatch()\n const { slowRefresh } = useRefresh()\n const { account } = useWeb3React()\n\n useEffect(() => {\n const pids = vaultsConfig.map((vaultToFetch) => vaultToFetch.pid)\n\n dispatch(fetchVaultsPublicDataAsync(pids))\n\n if (account) {\n dispatch(fetchVaultUserDataAsync({ account, pids }))\n }\n }, [dispatch, slowRefresh, account])\n}\n\nexport const useVaults = (): VaultsState => {\n const vaults = useSelector((state: State) => state.vaults)\n return vaults\n}\n\nexport const useVaultFromPid = (pid): Vault => {\n const vaults = useSelector((state: State) => state.vaults.data.find((f) => f.pid === pid))\n return vaults\n}\n\nexport const useVaultUser = (pid) => {\n const vault = useVaultFromPid(pid)\n\n return {\n allowance: vault.userData ? new BigNumber(vault.userData.allowance) : BIG_ZERO,\n tokenBalance: vault.userData ? new BigNumber(vault.userData.tokenBalance) : BIG_ZERO,\n stakedBalance: vault.userData ? new BigNumber(vault.userData.stakedBalance) : BIG_ZERO,\n }\n}\n\n// Farms\n\nexport const useFetchPublicData = () => {\n const dispatch = useAppDispatch()\n const { slowRefresh } = useRefresh()\n const { currentBlock } = useBlock()\n\n useEffect(() => {\n dispatch(fetchFarmsPublicDataAsync())\n dispatch(fetchPoolsPublicDataAsync(currentBlock))\n }, [dispatch, slowRefresh, currentBlock])\n\n useEffect(() => {\n const web3 = getWeb3NoAccount()\n const interval = setInterval(async () => {\n const blockNumber = await web3.eth.getBlockNumber()\n dispatch(setBlock(blockNumber))\n }, 6000)\n\n return () => clearInterval(interval)\n }, [dispatch])\n}\n\nexport const useFarms = (): FarmsState => {\n const farms = useSelector((state: State) => state.farms)\n return farms\n}\n\nexport const useFarmFromPid = (pid): Farm => {\n const farm = useSelector((state: State) => state.farms.data.find((f) => f.pid === pid))\n return farm\n}\n\nexport const useFarmFromSymbol = (lpSymbol: string): Farm => {\n const farm = useSelector((state: State) => state.farms.data.find((f) => f.lpSymbol === lpSymbol))\n return farm\n}\n\nexport const useFarmUser = (pid) => {\n const farm = useFarmFromPid(pid)\n\n return {\n allowance: farm.userData ? new BigNumber(farm.userData.allowance) : new BigNumber(0),\n tokenBalance: farm.userData ? new BigNumber(farm.userData.tokenBalance) : new BigNumber(0),\n stakedBalance: farm.userData ? new BigNumber(farm.userData.stakedBalance) : new BigNumber(0),\n earnings: farm.userData ? new BigNumber(farm.userData.earnings) : new BigNumber(0),\n }\n}\n\nexport const useLpTokenPrice = (symbol: string) => {\n const farm = useFarmFromSymbol(symbol)\n const tokenPriceInUsd = useGetApiPrice(getAddress(farm.token.address))\n\n return farm.lpTotalSupply && farm.lpTotalInQuoteToken\n ? new BigNumber(getBalanceNumber(farm.lpTotalSupply)).div(farm.lpTotalInQuoteToken).times(tokenPriceInUsd).times(2)\n : new BigNumber(0)\n}\n\n// Pools\n\nexport const usePools = (account): Pool[] => {\n const { fastRefresh } = useRefresh()\n const dispatch = useAppDispatch()\n useEffect(() => {\n if (account) {\n dispatch(fetchPoolsUserDataAsync(account))\n }\n }, [account, dispatch, fastRefresh])\n\n const pools = useSelector((state: State) => state.pools.data)\n return pools\n}\n\nexport const usePoolFromPid = (sousId): Pool => {\n const pool = useSelector((state: State) => state.pools.data.find((p) => p.sousId === sousId))\n return pool\n}\n\n// Toasts\nexport const useToast = () => {\n const dispatch = useAppDispatch()\n const helpers = useMemo(() => {\n const push = (toast: Toast) => dispatch(pushToast(toast))\n\n return {\n toastError: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.DANGER, title, description })\n },\n toastInfo: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.INFO, title, description })\n },\n toastSuccess: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.SUCCESS, title, description })\n },\n toastWarning: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.WARNING, title, description })\n },\n push,\n remove: (id: string) => dispatch(removeToast(id)),\n clear: () => dispatch(clearToast()),\n }\n }, [dispatch])\n\n return helpers\n}\n\n// Profile\n\nexport const useFetchProfile = () => {\n const { account } = useWeb3React()\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n dispatch(fetchProfile(account))\n }, [account, dispatch])\n}\n\nexport const useProfile = () => {\n const { isInitialized, isLoading, data, hasRegistered }: ProfileState = useSelector((state: State) => state.profile)\n return { profile: data, hasProfile: isInitialized && hasRegistered, isInitialized, isLoading }\n}\n\n// Teams\n\nexport const useTeam = (id: number) => {\n const team: Team = useSelector((state: State) => state.teams.data[id])\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n dispatch(fetchTeam(id))\n }, [id, dispatch])\n\n return team\n}\n\nexport const useTeams = () => {\n const { isInitialized, isLoading, data }: TeamsState = useSelector((state: State) => state.teams)\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n dispatch(fetchTeams())\n }, [dispatch])\n\n return { teams: data, isInitialized, isLoading }\n}\n\n// Achievements\n\nexport const useFetchAchievements = () => {\n const { account } = useWeb3React()\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n if (account) {\n dispatch(fetchAchievements(account))\n }\n }, [account, dispatch])\n}\n\nexport const useAchievements = () => {\n const achievements: AchievementState['data'] = useSelector((state: State) => state.achievements.data)\n return achievements\n}\n\n// Prices\nexport const useFetchPriceList = () => {\n const { slowRefresh } = useRefresh()\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n dispatch(fetchPrices())\n }, [dispatch, slowRefresh])\n}\n\nexport const useGetApiPrices = () => {\n const prices: PriceState['data'] = useSelector((state: State) => state.prices.data)\n return prices\n}\n\nexport const useGetApiPrice = (address: string) => {\n const prices = useGetApiPrices()\n\n if (!prices) {\n return null\n }\n\n return prices[address.toLowerCase()]\n}\n\nexport const usePriceDOPDolly = (): BigNumber => {\n const dopDollyVault = useVaultFromPid(3)\n const dopDollyPrice = dopDollyVault.token.busdPrice ? new BigNumber(dopDollyVault.token.busdPrice) : BIG_ZERO\n return dopDollyPrice\n}\n\nexport const usePriceTWINBusd = (): BigNumber => {\n const twinBnbVault = useVaultFromPid(8)\n const twinBusdPrice = twinBnbVault.token.busdPrice ? new BigNumber(twinBnbVault.token.busdPrice) : BIG_ZERO\n return twinBusdPrice\n}\n\nexport const usePriceTWXBusd = (): BigNumber => {\n const twxBnbVault = useVaultFromPid(22)\n const twxBusdPrice = twxBnbVault.token.busdPrice ? new BigNumber(twxBnbVault.token.busdPrice) : BIG_ZERO\n return twxBusdPrice\n}\n\nexport const usePriceDOPXBusd = (): BigNumber => {\n const twinBnbVault = useVaultFromPid(13)\n const twinBusdPrice = twinBnbVault.token.busdPrice ? new BigNumber(twinBnbVault.token.busdPrice) : BIG_ZERO\n return twinBusdPrice\n}\n\nexport const usePriceFINIXBusd = (): BigNumber => {\n const twinBnbVault = useVaultFromPid(19)\n const twinBusdPrice = twinBnbVault.token.busdPrice ? new BigNumber(twinBnbVault.token.busdPrice) : BIG_ZERO\n return twinBusdPrice\n}\n\nexport const usePriceDMCBusd = (): BigNumber => {\n const dmcBnbFarm = useFarmFromPid(2)\n const bnbBusdFarm = useFarmFromPid(3)\n const bnbBusdPrice = bnbBusdFarm.tokenPriceVsQuote ? new BigNumber(1).div(bnbBusdFarm.tokenPriceVsQuote) : BIG_ZERO\n // const bnbBusdPrice = new BigNumber(350)\n // console.log('bnbBusdPrice: ', bnbBusdPrice.toString())\n const dmcBusdPrice = dmcBnbFarm.tokenPriceVsQuote ? bnbBusdPrice.times(dmcBnbFarm.tokenPriceVsQuote) : BIG_ZERO\n // console.log('dmcBusdPrice: ', dmcBusdPrice.toString())\n return dmcBusdPrice\n}\n\nexport const usePriceDBMBusd = (): BigNumber => {\n const dbmBnbFarm = useFarmFromPid(1)\n const bnbBusdFarm = useFarmFromPid(3)\n const bnbBusdPrice = bnbBusdFarm.tokenPriceVsQuote ? new BigNumber(1).div(bnbBusdFarm.tokenPriceVsQuote) : BIG_ZERO\n // const bnbBusdPrice = new BigNumber(350)\n const dbmBusdPrice = dbmBnbFarm.tokenPriceVsQuote ? bnbBusdPrice.times(dbmBnbFarm.tokenPriceVsQuote) : BIG_ZERO\n return dbmBusdPrice\n}\n\nexport const usePriceBNBBusd = (): BigNumber => {\n const ZERO = new BigNumber(0)\n const bnbBusdFarm = useFarmFromPid(3)\n const bnbBusdPrice = bnbBusdFarm.tokenPriceVsQuote ? new BigNumber(1).div(bnbBusdFarm.tokenPriceVsQuote) : BIG_ZERO\n // const bnbBusdPrice = new BigNumber(350)\n return bnbBusdPrice\n}\n\n// Block\nexport const useBlock = () => {\n return useSelector((state: State) => state.block)\n}\n\nexport const useInitialBlock = () => {\n return useSelector((state: State) => state.block.initialBlock)\n}\n\n// Collectibles\nexport const useGetCollectibles = () => {\n const { account } = useWeb3React()\n const dispatch = useAppDispatch()\n const { isInitialized, isLoading, data } = useSelector((state: State) => state.collectibles)\n const identifiers = Object.keys(data)\n\n useEffect(() => {\n // Fetch nfts only if we have not done so already\n if (!isInitialized) {\n dispatch(fetchWalletNfts(account))\n }\n }, [isInitialized, account, dispatch])\n\n return {\n isInitialized,\n isLoading,\n tokenIds: data,\n nftsInWallet: Nfts.filter((nft) => identifiers.includes(nft.identifier)),\n }\n}\n","import Web3 from 'web3'\nimport { HttpProviderOptions } from 'web3-core-helpers'\nimport getRpcUrl from 'utils/getRpcUrl'\n\nconst RPC_URL = getRpcUrl()\nconst httpProvider = new Web3.providers.HttpProvider(RPC_URL, { timeout: 10000 } as HttpProviderOptions)\nconst web3NoAccount = new Web3(httpProvider)\n\nconst getWeb3NoAccount = () => {\n return web3NoAccount\n}\n\nexport { getWeb3NoAccount }\nexport default web3NoAccount\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport teamsList from 'config/constants/teams'\nimport { Team } from 'config/constants/types'\nimport { TeamsById, TeamsState } from '../types'\nimport { getTeam, getTeams } from './helpers'\n\nconst teamsById: TeamsById = teamsList.reduce((accum, team) => {\n return {\n ...accum,\n [team.id]: team,\n }\n}, {})\n\nconst initialState: TeamsState = {\n isInitialized: false,\n isLoading: true,\n data: teamsById,\n}\n\nexport const teamsSlice = createSlice({\n name: 'teams',\n initialState,\n reducers: {\n fetchStart: (state) => {\n state.isLoading = true\n },\n fetchFailed: (state) => {\n state.isLoading = false\n state.isInitialized = true\n },\n teamFetchSucceeded: (state, action: PayloadAction) => {\n state.isInitialized = true\n state.isLoading = false\n state.data[action.payload.id] = action.payload\n },\n teamsFetchSucceeded: (state, action: PayloadAction) => {\n state.isInitialized = true\n state.isLoading = false\n state.data = action.payload\n },\n },\n})\n\n// Actions\nexport const { fetchStart, teamFetchSucceeded, fetchFailed, teamsFetchSucceeded } = teamsSlice.actions\n\n// Thunks\nexport const fetchTeam = (teamId: number) => async (dispatch) => {\n try {\n dispatch(fetchStart())\n const team = await getTeam(teamId)\n dispatch(teamFetchSucceeded(team))\n } catch (error) {\n dispatch(fetchFailed())\n }\n}\n\nexport const fetchTeams = () => async (dispatch) => {\n try {\n dispatch(fetchStart())\n const teams = await getTeams()\n dispatch(teamsFetchSucceeded(teams))\n } catch (error) {\n dispatch(fetchFailed())\n }\n}\n\nexport default teamsSlice.reducer\n","import { Profile } from 'state/types'\n\nexport type ProfileResponse = {\n 0: string\n 1: string\n 2: string\n 3: string\n 4: string\n 5: boolean\n}\n\nexport const transformProfileResponse = (profileResponse: ProfileResponse): Partial => {\n const { 0: userId, 1: numberPoints, 2: teamId, 3: nftAddress, 4: tokenId, 5: isActive } = profileResponse\n\n return {\n userId: Number(userId),\n points: Number(numberPoints),\n teamId: Number(teamId),\n tokenId: Number(tokenId),\n nftAddress,\n isActive,\n }\n}\n","import Cookies from 'js-cookie'\nimport { getProfileContract } from 'utils/contractHelpers'\nimport { Nft } from 'config/constants/types'\nimport { getNftByTokenId } from 'utils/collectibles'\nimport { Profile } from 'state/types'\nimport { getTeam } from 'state/teams/helpers'\nimport { transformProfileResponse } from './helpers'\n\nconst profileContract = getProfileContract()\nconst profileApi = process.env.REACT_APP_API_PROFILE\n\nexport interface GetProfileResponse {\n hasRegistered: boolean\n profile?: Profile\n}\n\nconst getUsername = async (address: string): Promise => {\n try {\n const response = await fetch(`${profileApi}/api/users/${address}`)\n\n if (!response.ok) {\n return ''\n }\n\n const { username = '' } = await response.json()\n\n return username\n } catch (error) {\n return ''\n }\n}\n\nconst getProfile = async (address: string): Promise => {\n try {\n const hasRegistered = (await profileContract.methods.hasRegistered(address).call()) as boolean\n\n if (!hasRegistered) {\n return { hasRegistered, profile: null }\n }\n\n const profileResponse = await profileContract.methods.getUserProfile(address).call()\n const { userId, points, teamId, tokenId, nftAddress, isActive } = transformProfileResponse(profileResponse)\n const team = await getTeam(teamId)\n const username = await getUsername(address)\n\n // If the profile is not active the tokenId returns 0, which is still a valid token id\n // so only fetch the nft data if active\n let nft: Nft\n if (isActive) {\n nft = await getNftByTokenId(nftAddress, tokenId)\n\n // Save the preview image in a cookie so it can be used on the exchange\n Cookies.set(\n `profile_${address}`,\n {\n username,\n avatar: `https://pancakeswap.finance/images/nfts/${nft?.images.sm}`,\n },\n { domain: 'pancakeswap.finance', secure: true, expires: 30 },\n )\n }\n\n const profile = {\n userId,\n points,\n teamId,\n tokenId,\n username,\n nftAddress,\n isActive,\n nft,\n team,\n } as Profile\n\n return { hasRegistered, profile }\n } catch (error) {\n return null\n }\n}\n\nexport default getProfile\n","/* eslint-disable no-param-reassign */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { ProfileState } from 'state/types'\nimport type { AppDispatch } from 'state'\nimport getProfile, { GetProfileResponse } from './getProfile'\n\nconst initialState: ProfileState = {\n isInitialized: false,\n isLoading: true,\n hasRegistered: false,\n data: null,\n}\n\nexport const profileSlice = createSlice({\n name: 'profile',\n initialState,\n reducers: {\n profileFetchStart: (state) => {\n state.isLoading = true\n },\n profileFetchSucceeded: (_state, action: PayloadAction) => {\n const { profile, hasRegistered } = action.payload\n\n return {\n isInitialized: true,\n isLoading: false,\n hasRegistered,\n data: profile,\n }\n },\n profileFetchFailed: (state) => {\n state.isLoading = false\n state.isInitialized = true\n },\n profileClear: () => ({\n ...initialState,\n isLoading: false,\n }),\n addPoints: (state, action: PayloadAction) => {\n state.data.points += action.payload\n },\n },\n})\n\n// Actions\nexport const {\n profileFetchStart,\n profileFetchSucceeded,\n profileFetchFailed,\n profileClear,\n addPoints,\n} = profileSlice.actions\n\n// Thunks\n// TODO: this should be an AsyncThunk\nexport const fetchProfile = (address: string) => async (dispatch: AppDispatch) => {\n try {\n dispatch(profileFetchStart())\n const response = await getProfile(address)\n dispatch(profileFetchSucceeded(response))\n } catch (error) {\n dispatch(profileFetchFailed())\n }\n}\n\nexport default profileSlice.reducer\n","import tokens from './tokens'\nimport { FarmConfig } from './types'\n\nconst farms: FarmConfig[] = [\n {\n pid: 0,\n isFarm: false,\n lpSymbol: 'DMC',\n lpAddresses: {\n 97: '0x9b5cAb9ca8b8451b94a2545A00c3e9559B228058',\n 56: '0xA7bD090bC58e663388Be63d5E8a7b683f5A3d4FC',\n },\n token: tokens.syrup,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 1,\n isFarm: true,\n lpSymbol: 'DBM-BNB LP',\n lpAddresses: {\n 97: '0x084fee16321a9514454d13cFED4fAA027631D031',\n 56: '0x5423f8f560b2e9dd1974247ebfc73d12f795800b',\n },\n token: tokens.dbm,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 2,\n isFarm: true,\n lpSymbol: 'DMC-BNB LP',\n lpAddresses: {\n 97: '0x3ce4e2124dcb08f7da60e80094895cb03f85a763',\n 56: '0x9657B13b78C82017e372D78cA063ADD1Ce52cdB8',\n },\n token: tokens.dmc,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 3,\n isFarm: true,\n lpSymbol: 'BUSD-BNB LP',\n lpAddresses: {\n 97: '',\n 56: '0x58F876857a02D6762E0101bb5C46A8c1ED44Dc16',\n },\n token: tokens.busd,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 4,\n isFarm: true,\n lpSymbol: 'USDT-BUSD LP',\n lpAddresses: {\n 97: '',\n 56: '0x7EFaEf62fDdCCa950418312c6C91Aef321375A00',\n },\n token: tokens.usdt,\n quoteToken: tokens.busd,\n },\n {\n pid: 5,\n isFarm: true,\n lpSymbol: 'DBM-SCZ LP',\n lpAddresses: {\n 97: '',\n 56: '0xF31455AE22DfE3637b87D62371F6fc945F9ea301',\n },\n token: tokens.scz,\n quoteToken: tokens.dbm,\n },\n {\n pid: 6,\n isFarm: false,\n lpSymbol: 'DBM',\n lpAddresses: {\n 56: '0x0314e5a39806C30D67B869EE1bCDABee7e08dE74',\n 97: '0xAfF3543F3811c7B667Bcb6bf321f05c3F6Bef96A',\n },\n token: tokens.dbm,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 7,\n isFarm: false,\n lpSymbol: 'BUSD',\n lpAddresses: {\n 97: '',\n 56: '0xe9e7cea3dedca5984780bafc599bd69add087d56',\n },\n token: tokens.busd,\n quoteToken: tokens.wbnb,\n },\n {\n pid: 8,\n isFarm: false,\n lpSymbol: 'WBNB',\n lpAddresses: {\n 56: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c',\n 97: '0xae13d989dac2f0debff460ac112a837c89baa7cd',\n },\n token: tokens.wbnb,\n quoteToken: tokens.wbnb,\n },\n]\n\nexport default farms\n","import { Nft, NftSource, NftType } from './types'\n\nexport const IPFS_GATEWAY = 'https://gateway.pinata.cloud'\n\nexport const nftSources: NftSource = {\n [NftType.PANCAKE]: {\n address: {\n 56: '0xDf7952B35f24aCF7fC0487D01c8d5690a60DBa07',\n 97: '0x60935F36e4631F73f0f407e68642144e07aC7f5E',\n },\n identifierKey: 'image',\n },\n [NftType.MIXIE]: {\n address: {\n 56: '0xa251b5EAa9E67F2Bc8b33F33e20E91552Bf85566',\n 97: '',\n },\n identifierKey: 'image',\n },\n}\n\nconst Nfts: Nft[] = [\n {\n name: 'Mixie v1',\n description: 'Stories were told, and songs were sung, about Chef Mixie’s pancakes and her big Syrup gun.',\n images: {\n lg: 'mixie-1-lg.png',\n md: 'mixie-1-md.png',\n sm: 'mixie-1-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmQiRpr7ZMkzV7qbqVaUZ1LiuHTTdpWmapUhaY6ZGmVLQ4/001-Chef-Mixie.png',\n },\n sortOrder: 999,\n identifier: '001-Chef-Mixie',\n type: NftType.MIXIE,\n variationId: 1,\n },\n {\n name: 'Mixie v2',\n description: 'Stories were told, and songs were sung, about Chef Mixie’s pancakes and her big Syrup gun.',\n images: {\n lg: 'mixie-2-lg.png',\n md: 'mixie-2-md.png',\n sm: 'mixie-2-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmQiRpr7ZMkzV7qbqVaUZ1LiuHTTdpWmapUhaY6ZGmVLQ4/002-Chef-Mixie.png',\n },\n sortOrder: 999,\n identifier: '002-Chef-Mixie',\n type: NftType.MIXIE,\n variationId: 2,\n },\n {\n name: 'Mixie v3',\n description: 'Stories were told, and songs were sung, about Chef Mixie’s pancakes and her big Syrup gun.',\n images: {\n lg: 'mixie-3-lg.png',\n md: 'mixie-3-md.png',\n sm: 'mixie-3-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmQiRpr7ZMkzV7qbqVaUZ1LiuHTTdpWmapUhaY6ZGmVLQ4/003-Chef-Mixie.png',\n },\n sortOrder: 999,\n identifier: '003-Chef-Mixie',\n type: NftType.MIXIE,\n variationId: 3,\n },\n {\n name: 'Easter ‘21 Champions',\n description: 'Eggscellent! Celebrating Syrup Storm winning the Easter Battle!',\n images: {\n lg: 'easter-champion-storm-lg.png',\n md: 'easter-champion-storm-md.png',\n sm: 'easter-champion-storm-sm.png',\n ipfs:\n 'https://gateway.pinata.cloud/ipfs/QmWFQdggxnAkgFNBWixT6v7nrgEnYfYDxG5A9u42aHhU6U/easter-champion-storm.png',\n },\n video: {\n webm:\n 'https://gateway.pinata.cloud/ipfs/QmWFQdggxnAkgFNBWixT6v7nrgEnYfYDxG5A9u42aHhU6U/easter-champion-storm.webm',\n mp4: 'https://gateway.pinata.cloud/ipfs/QmWFQdggxnAkgFNBWixT6v7nrgEnYfYDxG5A9u42aHhU6U/easter-champion-storm.mp4',\n },\n sortOrder: 999,\n identifier: 'easter-champion-storm',\n type: NftType.PANCAKE,\n variationId: 15,\n },\n {\n name: \"Cakeston Easter '21\",\n description: 'Melting Easter eggs and melting hearts!',\n images: {\n lg: 'cakeston-easter-21-lg.png',\n md: 'cakeston-easter-21-md.png',\n sm: 'cakeston-easter-21-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmZGqWaovULNEMKxBCGnGjh27JQkAyadS6AW4J4Lzf3XBp/easter-caker.png',\n },\n sortOrder: 999,\n identifier: 'easter-caker',\n type: NftType.PANCAKE,\n variationId: 15,\n },\n {\n name: \"Flipsie Easter '21\",\n description: 'Watch out for Flipsie’s spatula smash!',\n images: {\n lg: 'flipsie-easter-21-lg.png',\n md: 'flipsie-easter-21-md.png',\n sm: 'flipsie-easter-21-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmZGqWaovULNEMKxBCGnGjh27JQkAyadS6AW4J4Lzf3XBp/easter-flipper.png',\n },\n sortOrder: 999,\n identifier: 'easter-flipper',\n type: NftType.PANCAKE,\n variationId: 14,\n },\n {\n name: \"Stormy Easter '21\",\n description: 'Do you like chocolate with your syrup? Go long!',\n images: {\n lg: 'stormy-easter-21-lg.png',\n md: 'stormy-easter-21-md.png',\n sm: 'stormy-easter-21-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmZGqWaovULNEMKxBCGnGjh27JQkAyadS6AW4J4Lzf3XBp/easter-storm.png',\n },\n sortOrder: 999,\n identifier: 'easter-storm',\n type: NftType.PANCAKE,\n variationId: 12,\n },\n {\n name: 'Bullish',\n description: 'Happy Niu Year! This bunny’s excited for the year of the bull (market!)',\n images: {\n lg: 'bullish-lg.png',\n md: 'bullish-md.png',\n sm: 'bullish-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmNS1A5HsRW1JvFWtGkm4o9TgZVe2P7kA8TB4yxvS6A7ms/bullish.png',\n },\n video: {\n webm: 'https://gateway.pinata.cloud/ipfs/QmNS1A5HsRW1JvFWtGkm4o9TgZVe2P7kA8TB4yxvS6A7ms/bullish.webm',\n mp4: 'https://gateway.pinata.cloud/ipfs/QmNS1A5HsRW1JvFWtGkm4o9TgZVe2P7kA8TB4yxvS6A7ms/bullish.mp4',\n },\n sortOrder: 999,\n identifier: 'bullish',\n type: NftType.PANCAKE,\n variationId: 11,\n },\n {\n name: 'Hiccup',\n description: \"Oopsie daisy! Hiccup's had a bit of an accident. Poor little fella.\",\n images: {\n lg: 'hiccup-lg.png',\n md: 'hiccup-md.png',\n sm: 'hiccup-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmQ6EE6gkVzAQUdQLLM7CyrnME6LZHCoy92ZERW8HXmyjw/hiccup.png',\n },\n sortOrder: 999,\n identifier: 'hiccup',\n type: NftType.PANCAKE,\n variationId: 10,\n },\n {\n name: 'Sleepy',\n description: 'Aww, looks like eating pancakes all day is tough work. Sweet dreams!',\n images: {\n lg: 'sleepy-lg.png',\n md: 'sleepy-md.png',\n sm: 'sleepy-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmYD9AtzyQPjSa9jfZcZq88gSaRssdhGmKqQifUDjGFfXm/sleepy.png',\n blur: 'sleepy-blur.png',\n },\n sortOrder: 999,\n identifier: 'sleepy',\n type: NftType.PANCAKE,\n variationId: 5,\n },\n {\n name: 'Sunny',\n description: 'Sunny is always cheerful when there are pancakes around. Smile!',\n images: {\n lg: 'sunny-lg.png',\n md: 'sunny-md.png',\n sm: 'sunny-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmYD9AtzyQPjSa9jfZcZq88gSaRssdhGmKqQifUDjGFfXm/sunny.png',\n blur: 'sunny-blur.png',\n },\n sortOrder: 999,\n identifier: 'sunny',\n type: NftType.PANCAKE,\n variationId: 9,\n },\n {\n name: 'Churro',\n description: \"Don't let that dopey smile deceive you... Churro's a master CAKE chef!\",\n images: {\n lg: 'churro-lg.png',\n md: 'churro-md.png',\n sm: 'churro-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmYD9AtzyQPjSa9jfZcZq88gSaRssdhGmKqQifUDjGFfXm/churro.png',\n blur: 'churro-blur.png',\n },\n sortOrder: 999,\n identifier: 'churro',\n type: NftType.PANCAKE,\n variationId: 8,\n },\n {\n name: 'Dollop',\n description: \"Nommm... Oh hi, I'm just meditating on the meaning of CAKE.\",\n images: {\n lg: 'dollop-lg.png',\n md: 'dollop-md.png',\n sm: 'dollop-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmYD9AtzyQPjSa9jfZcZq88gSaRssdhGmKqQifUDjGFfXm/dollop.png',\n blur: 'dollop-blur.png',\n },\n sortOrder: 999,\n identifier: 'dollop',\n type: NftType.PANCAKE,\n variationId: 6,\n },\n {\n name: 'Twinkle',\n description: \"Three guesses what's put that twinkle in those eyes! (Hint: it's CAKE)\",\n images: {\n lg: 'twinkle-lg.png',\n md: 'twinkle-md.png',\n sm: 'twinkle-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmYD9AtzyQPjSa9jfZcZq88gSaRssdhGmKqQifUDjGFfXm/twinkle.png',\n blur: 'twinkle-blur.png',\n },\n sortOrder: 999,\n identifier: 'twinkle',\n type: NftType.PANCAKE,\n variationId: 7,\n },\n {\n name: 'Swapsies',\n description: 'These bunnies love nothing more than swapping pancakes. Especially on BSC.',\n images: {\n lg: 'swapsies-lg.png',\n md: 'swapsies-md.png',\n sm: 'swapsies-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXdHqg3nywpNJWDevJQPtkz93vpfoHcZWQovFz2nmtPf5/swapsies.png',\n blur: 'swapsies-blur.png',\n },\n sortOrder: 999,\n identifier: 'swapsies',\n type: NftType.PANCAKE,\n variationId: 0,\n },\n {\n name: 'Drizzle',\n description: \"It's raining syrup on this bunny, but he doesn't seem to mind. Can you blame him?\",\n images: {\n lg: 'drizzle-lg.png',\n md: 'drizzle-md.png',\n sm: 'drizzle-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXdHqg3nywpNJWDevJQPtkz93vpfoHcZWQovFz2nmtPf5/drizzle.png',\n blur: 'drizzle-blur.png',\n },\n sortOrder: 999,\n identifier: 'drizzle',\n type: NftType.PANCAKE,\n variationId: 1,\n },\n {\n name: 'Blueberries',\n description: \"These bunnies like their pancakes with blueberries. What's your favorite topping?\",\n images: {\n lg: 'blueberries-lg.png',\n md: 'blueberries-md.png',\n sm: 'blueberries-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXdHqg3nywpNJWDevJQPtkz93vpfoHcZWQovFz2nmtPf5/blueberries.png',\n blur: 'blueberries-blur.png',\n },\n sortOrder: 999,\n identifier: 'blueberries',\n type: NftType.PANCAKE,\n variationId: 2,\n },\n {\n name: 'Circular',\n description: \"Love makes the world go 'round... but so do pancakes. And these bunnies know it.\",\n images: {\n lg: 'circular-lg.png',\n md: 'circular-md.png',\n sm: 'circular-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXdHqg3nywpNJWDevJQPtkz93vpfoHcZWQovFz2nmtPf5/circular.png',\n blur: 'circular-blur.png',\n },\n sortOrder: 999,\n identifier: 'circular',\n type: NftType.PANCAKE,\n variationId: 3,\n },\n {\n name: 'Sparkle',\n description: 'It’s sparkling syrup, pancakes, and even lottery tickets! This bunny really loves it.',\n images: {\n lg: 'sparkle-lg.png',\n md: 'sparkle-md.png',\n sm: 'sparkle-sm.png',\n ipfs: 'https://gateway.pinata.cloud/ipfs/QmXdHqg3nywpNJWDevJQPtkz93vpfoHcZWQovFz2nmtPf5/sparkle.png',\n blur: 'sparkle-blur.png',\n },\n sortOrder: 999,\n identifier: 'sparkle',\n type: NftType.PANCAKE,\n variationId: 4,\n },\n]\n\nexport default Nfts\n","import { useEffect } from 'react'\nimport { connectorLocalStorageKey, ConnectorNames } from '@doublemoondev/doublemoon-uikit'\nimport useAuth from 'hooks/useAuth'\n\nconst _binanceChainListener = async () =>\n new Promise((resolve) =>\n Object.defineProperty(window, 'BinanceChain', {\n get() {\n return this.bsc\n },\n set(bsc) {\n this.bsc = bsc\n\n resolve()\n },\n }),\n )\n\nconst useEagerConnect = () => {\n const { login } = useAuth()\n\n useEffect(() => {\n const connectorId = window.localStorage.getItem(connectorLocalStorageKey) as ConnectorNames\n\n if (connectorId) {\n const isConnectorBinanceChain = connectorId === ConnectorNames.BSC\n const isBinanceChainDefined = Reflect.has(window, 'BinanceChain')\n\n // Currently BSC extension doesn't always inject in time.\n // We must check to see if it exists, and if not, wait for it before proceeding.\n if (isConnectorBinanceChain && !isBinanceChainDefined) {\n _binanceChainListener().then(() => login(connectorId))\n\n return\n }\n\n login(connectorId)\n }\n }, [login])\n}\n\nexport default useEagerConnect\n","import { createGlobalStyle } from 'styled-components'\n// eslint-disable-next-line import/no-unresolved\nimport { PancakeTheme } from '@doublemoondev/doublemoon-uikit/dist/theme'\n\ndeclare module 'styled-components' {\n /* eslint-disable @typescript-eslint/no-empty-interface */\n export interface DefaultTheme extends PancakeTheme {}\n}\n\nconst GlobalStyle = createGlobalStyle`\n :root {\n --primary-light: #FD9316;\n --primary: #FD9316;\n --primary-dark: #FF5B2C;\n --accent: #7AEFD5;\n --accent-dark: #33dcb7;\n --secondary-accent: #D91FEA;\n --secondary-light: #1A4089;\n --secondary: #1A4089;\n --secondary-dark: #1A4089;\n --tertiary-light: #1A4089;\n --tertiary: #1A4089;\n --tertiary-dark: #1A4089;\n --background-300: rgba(255, 255, 255, 0.08);\n --background-400: #172746;\n --background: #081832;\n --background-dark: #0B1830;\n --surface: #FFF;\n --error: #FFF;\n --warning: #FFC900;\n --on-primary: #FFF;\n --on-accent: #4C249F;\n --on-secondary: #FFF;\n --on-background: #FFFFFF;\n --on-background-fade: rgba(255, 255, 255, 0.25);\n --on-surface: #FFF;\n --on-error: #FFF;\n \n --navbar: #1A4089;\n --on-navbar: #FFFFFF;\n\n --navbar-height: 60px;\n }\n * {\n font-family: 'Kanit', sans-serif;\n }\n html, body {\n background-color: var(--background);\n }\n`\n\nexport default GlobalStyle\n","export const EN = { code: 'en', language: 'English' }\nexport const AR = { code: 'ar', language: 'العربية' }\nexport const BN = { code: 'bn', language: 'বাংলা' }\nexport const ZHCN = { code: 'zh-CN', language: '简体中文' }\nexport const ZHTW = { code: 'zh-TW', language: '繁體中文' }\nexport const NL = { code: 'nl', language: 'Nederlands' }\nexport const FIL = { code: 'fil', language: 'Filipino' }\nexport const FI = { code: 'fi', language: 'Suomalainen' }\nexport const FR = { code: 'fr', language: 'Français' }\nexport const DE = { code: 'de', language: 'Deutsch' }\nexport const EL = { code: 'el', language: 'Ελληνικά' }\nexport const HI = { code: 'hi', language: 'हिंदी' }\nexport const HU = { code: 'hu', language: 'Magyar' }\nexport const ID = { code: 'id', language: 'Bahasa Indonesia' }\nexport const IT = { code: 'it', language: 'Italiano' }\nexport const JA = { code: 'ja', language: '日本語' }\nexport const KO = { code: 'ko', language: '한국어' }\nexport const PL = { code: 'pl', language: 'Polski' }\nexport const PTPT = { code: 'pt-PT', language: 'Português (Portugal)' }\nexport const PTBR = { code: 'pt-BR', language: 'Português (Brazil)' }\nexport const RO = { code: 'ro', language: 'Română' }\nexport const RU = { code: 'ru', language: 'Русский' }\nexport const ESES = { code: 'es-ES', language: 'Español' }\nexport const SVSE = { code: 'sv-SE', language: 'Svenska' }\nexport const TA = { code: 'ta', language: 'தமிழ்' }\nexport const TR = { code: 'tr', language: 'Türkçe' }\nexport const UK = { code: 'uk', language: 'Українська' }\nexport const VI = { code: 'vi', language: 'Tiếng Việt' }\n\nexport const allLanguages = [\n EN,\n AR,\n BN,\n ZHCN,\n ZHTW,\n NL,\n FIL,\n FI,\n DE,\n FR,\n EL,\n HI,\n HU,\n ID,\n IT,\n JA,\n KO,\n PL,\n PTPT,\n PTBR,\n RO,\n RU,\n ESES,\n SVSE,\n TA,\n TR,\n UK,\n VI,\n]\n","import React, { useState, useEffect } from 'react'\nimport { StringTranslations } from '@crowdin/crowdin-api-client'\nimport { TranslationsContext } from 'contexts/Localisation/translationsContext'\nimport { allLanguages, EN } from 'config/localisation/languageCodes'\n\nconst CACHE_KEY = 'pancakeSwapLanguage'\n\nexport interface LangType {\n code: string\n language: string\n}\n\nexport interface LanguageState {\n selectedLanguage: LangType\n setSelectedLanguage: (langObject: LangType) => void\n translatedLanguage: LangType\n setTranslatedLanguage: React.Dispatch>\n}\n\nconst LanguageContext = React.createContext({\n selectedLanguage: EN,\n setSelectedLanguage: () => undefined,\n translatedLanguage: EN,\n setTranslatedLanguage: () => undefined,\n} as LanguageState)\n\nconst fileId = 8\nconst projectId = parseInt(process.env.REACT_APP_CROWDIN_PROJECTID)\nconst stringTranslationsApi = new StringTranslations({\n token: process.env.REACT_APP_CROWDIN_APIKEY,\n})\n\nconst fetchTranslationsForSelectedLanguage = (selectedLanguage) => {\n return stringTranslationsApi.listLanguageTranslations(projectId, selectedLanguage.code, undefined, fileId, 400)\n}\n\nconst LanguageContextProvider = ({ children }) => {\n const [selectedLanguage, setSelectedLanguage] = useState(null)\n const [translatedLanguage, setTranslatedLanguage] = useState(EN)\n const [translations, setTranslations] = useState>([])\n\n const getStoredLang = (storedLangCode: string) => {\n return allLanguages.filter((language) => {\n return language.code === storedLangCode\n })[0]\n }\n\n useEffect(() => {\n const storedLangCode = localStorage.getItem(CACHE_KEY)\n if (storedLangCode) {\n const storedLang = getStoredLang(storedLangCode)\n setSelectedLanguage(storedLang)\n } else {\n setSelectedLanguage(EN)\n }\n }, [])\n\n useEffect(() => {\n if (selectedLanguage) {\n fetchTranslationsForSelectedLanguage(selectedLanguage)\n .then((translationApiResponse) => {\n if (translationApiResponse.data.length < 1) {\n setTranslations([])\n } else {\n setTranslations(translationApiResponse.data)\n }\n })\n .then(() => setTranslatedLanguage(selectedLanguage))\n .catch((e) => {\n setTranslations([])\n console.error('Error while loading translations', e)\n })\n }\n }, [selectedLanguage])\n\n const handleLanguageSelect = (langObject: LangType) => {\n setSelectedLanguage(langObject)\n localStorage.setItem(CACHE_KEY, langObject.code)\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport { LanguageContext, LanguageContextProvider }\n","import React, { useState } from 'react'\nimport { ThemeProvider as SCThemeProvider } from 'styled-components'\nimport { light, dark } from '@doublemoondev/doublemoon-uikit'\n\nconst CACHE_KEY = 'IS_DARK'\n\nconst ThemeContext = React.createContext({ isDark: null, toggleTheme: () => null })\n\nconst ThemeContextProvider = ({ children }) => {\n const [isDark, setIsDark] = useState(() => {\n const isDarkUserSetting = localStorage.getItem(CACHE_KEY)\n return isDarkUserSetting ? JSON.parse(isDarkUserSetting) : false\n })\n\n const toggleTheme = () => {\n setIsDark((prevState) => {\n localStorage.setItem(CACHE_KEY, JSON.stringify(!prevState))\n return !prevState\n })\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport { ThemeContext, ThemeContextProvider }\n","import { useContext } from 'react'\nimport { ThemeContext as StyledThemeContext } from 'styled-components'\nimport { ThemeContext } from 'contexts/ThemeContext'\n\nconst useTheme = () => {\n const { isDark, toggleTheme } = useContext(ThemeContext)\n const theme = useContext(StyledThemeContext)\n return { isDark, toggleTheme, theme }\n}\n\nexport default useTheme\n","import { MenuEntry, menuStatus } from '@doublemoondev/doublemoon-uikit'\n\nconst config: MenuEntry[] = [\n {\n label: \"Buy DBM\",\n icon: \"TradeIcon\",\n href: \"https://exchange.doublemoon.finance/#/swap\",\n },\n {\n label: \"Moon Lucky\",\n icon: \"TicketIcon\",\n href: \"/moon-lucky\",\n },\n {\n label: \"Moon Farms\",\n icon: \"FarmIcon\",\n href: \"/farms\"\n },\n {\n label: \"Moon Solo\",\n icon: 'SoloIcon',\n href: '/pools',\n },\n {\n label: \"Moon Vaults\",\n icon: 'VaultIcon',\n href: '/vaults',\n status: menuStatus.NEW,\n },\n {\n label: \"Moon Referral\",\n icon: \"ReferralIcon\",\n href: \"/referral\",\n },\n {\n label: \"Charts\",\n icon: \"ChartIcon\",\n items: [\n {\n label: \"DBM\",\n href: \"https://dex.guru/token/0x0314e5a39806c30d67b869ee1bcdabee7e08de74-bsc\",\n },\n {\n label: \"DMC\",\n href: \"https://dex.guru/token/0xa7bd090bc58e663388be63d5e8a7b683f5a3d4fc-bsc\",\n },\n ],\n },\n {\n label: \"Document\",\n icon: \"DocumentIcon\",\n href: \"https://whitepaper.doublemoon.finance/\",\n },\n]\n\nexport default config\n","import React, { useContext } from 'react'\nimport { Menu as UikitMenu } from '@doublemoondev/doublemoon-uikit'\nimport { useWeb3React } from '@web3-react/core'\nimport { allLanguages } from 'config/localisation/languageCodes'\nimport { LanguageContext } from 'contexts/Localisation/languageContext'\nimport useTheme from 'hooks/useTheme'\nimport useAuth from 'hooks/useAuth'\nimport { usePriceDMCBusd, useProfile } from 'state/hooks'\nimport config from './config'\n\nconst Menu = (props) => {\n const { account } = useWeb3React()\n const { login, logout } = useAuth()\n const { selectedLanguage, setSelectedLanguage } = useContext(LanguageContext)\n const { isDark, toggleTheme } = useTheme()\n const cakePriceUsd = usePriceDMCBusd()\n const { profile } = useProfile()\n\n return (\n \n )\n}\n\nexport default Menu\n","import React, { Suspense, SuspenseProps } from 'react'\n\ninterface State {\n hasError: boolean\n}\n\nclass SuspenseWithChunkError extends React.Component {\n constructor(props) {\n super(props)\n this.state = { hasError: false }\n }\n\n static getDerivedStateFromError() {\n // Update state so the next render will show the fallback UI.\n return { hasError: true }\n }\n\n componentDidCatch(error) {\n const isJsChunkLoadError = error.name === 'ChunkLoadError'\n const isCssChunkLoadError = error.code === 'CSS_CHUNK_LOAD_FAILED'\n const isChunkLoadError = isJsChunkLoadError || isCssChunkLoadError\n\n // Save a flag on the window object indicating that we have already had a chunk error.\n // This prevents infinite reloads\n const isRecoveringFromChunkError = !!window.history.state?.isRecoveringFromChunkError\n\n // If was a chunk load error, refresh the page\n if (isChunkLoadError && !isRecoveringFromChunkError) {\n const nextState = { ...window.history.state, isRecoveringFromChunkError: true }\n window.history.replaceState(nextState, '')\n window.location.reload()\n return\n }\n\n throw error\n }\n\n render() {\n const { hasError } = this.state\n const { fallback } = this.props\n\n if (hasError) {\n return fallback\n }\n\n return \n }\n}\n\nexport default SuspenseWithChunkError\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { ToastContainer, Toast } from '@doublemoondev/doublemoon-uikit'\nimport { useToast } from 'state/hooks'\nimport { State } from 'state/types'\n\nconst ToastListener = () => {\n const toasts: Toast[] = useSelector((state: State) => state.toasts.data)\n const { remove } = useToast()\n\n const handleRemove = (id: string) => remove(id)\n\n return \n}\n\nexport default ToastListener\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Spinner } from '@doublemoondev/doublemoon-uikit'\nimport Page from './layout/Page'\n\nconst Wrapper = styled(Page)`\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nconst PageLoader: React.FC = () => {\n return (\n \n {null}\n \n )\n}\n\nexport default PageLoader\n","import { createBrowserHistory } from 'history'\n\n// Manually create the history object so we can access outside the Router e.g. in modals\nconst history = createBrowserHistory()\n\nexport default history\n","import React, { useEffect, lazy } from 'react'\nimport { Router, Redirect, Route, Switch } from 'react-router-dom'\nimport { ResetCSS } from '@doublemoondev/doublemoon-uikit'\nimport BigNumber from 'bignumber.js'\nimport useEagerConnect from 'hooks/useEagerConnect'\nimport { useFetchPriceList, useFetchProfile, useFetchPublicData } from 'state/hooks'\nimport GlobalStyle from './style/Global'\nimport Menu from './components/Menu'\nimport SuspenseWithChunkError from './components/SuspenseWithChunkError'\nimport ToastListener from './components/ToastListener'\nimport PageLoader from './components/PageLoader'\nimport history from './routerHistory'\n\n// Route-based code splitting\n// Only pool is included in the main bundle because of it's the most visited page\nconst Home = lazy(() => import('./views/Home'))\nconst Farms = lazy(() => import('./views/Farms'))\nconst Lottery = lazy(() => import('./views/MoonLuckyOld'))\nconst MoonLucky = lazy(() => import('./views/MoonLucky'))\nconst Pools = lazy(() => import('./views/Pools'))\nconst Vaults = lazy(() => import('./views/MoonVaults'))\nconst Referral = lazy(() => import('./views/Referral'))\nconst NotFound = lazy(() => import('./views/NotFound'))\n\n// This config is required for number formating\nBigNumber.config({\n EXPONENTIAL_AT: 1000,\n DECIMAL_PLACES: 80,\n})\n\nconst App: React.FC = () => {\n // Monkey patch warn() because of web3 flood\n // To be removed when web3 1.3.5 is released\n useEffect(() => {\n console.warn = () => null\n }, [])\n\n useEagerConnect()\n useFetchPublicData()\n // useFetchProfile()\n useFetchPriceList()\n\n return (\n \n \n \n \n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* 404 */}\n \n \n \n \n \n \n )\n}\n\nexport default React.memo(App)\n","import React from 'react'\nimport { ModalProvider } from '@doublemoondev/doublemoon-uikit'\nimport { Web3ReactProvider } from '@web3-react/core'\nimport { HelmetProvider } from 'react-helmet-async'\nimport { Provider } from 'react-redux'\nimport { getLibrary } from 'utils/web3React'\nimport { LanguageContextProvider } from 'contexts/Localisation/languageContext'\nimport { ThemeContextProvider } from 'contexts/ThemeContext'\nimport { RefreshContextProvider } from 'contexts/RefreshContext'\nimport store from 'state'\n\nconst Providers: React.FC = ({ children }) => {\n return (\n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n )\n}\n\nexport default Providers\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport Providers from './Providers'\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n)\n","import poolsConfig from 'config/constants/pools'\nimport sousChefABI from 'config/abi/sousChef.json'\nimport cakeABI from 'config/abi/cake.json'\nimport wbnbABI from 'config/abi/weth.json'\nimport multicall from 'utils/multicall'\nimport { getAddress, getWbnbAddress } from 'utils/addressHelpers'\nimport BigNumber from 'bignumber.js'\n\nexport const fetchPoolsBlockLimits = async () => {\n const poolsWithEnd = poolsConfig.filter((p) => p.sousId === 1) // TODO: Fix pool\n const callsStartBlock = poolsWithEnd.map((poolConfig) => {\n return {\n address: getAddress(poolConfig.contractAddress),\n name: 'startBlock',\n }\n })\n const callsEndBlock = poolsWithEnd.map((poolConfig) => {\n return {\n address: getAddress(poolConfig.contractAddress),\n name: 'bonusEndBlock',\n }\n })\n\n const starts = await multicall(sousChefABI, callsStartBlock)\n const ends = await multicall(sousChefABI, callsEndBlock)\n\n return poolsWithEnd.map((cakePoolConfig, index) => {\n const startBlock = starts[index]\n const endBlock = ends[index]\n return {\n sousId: cakePoolConfig.sousId,\n startBlock: new BigNumber(startBlock).toJSON(),\n endBlock: new BigNumber(endBlock).toJSON(),\n }\n })\n}\n\nexport const fetchPoolsTotalStaking = async () => {\n const nonBnbPools = poolsConfig.filter((p) => p.stakingToken.symbol !== 'BNB')\n const bnbPool = poolsConfig.filter((p) => p.stakingToken.symbol === 'BNB')\n\n const callsNonBnbPools = nonBnbPools.map((poolConfig) => {\n return {\n address: getAddress(poolConfig.stakingToken.address),\n name: 'balanceOf',\n params: [getAddress(poolConfig.contractAddress)],\n }\n })\n\n const callsBnbPools = bnbPool.map((poolConfig) => {\n return {\n address: getWbnbAddress(),\n name: 'balanceOf',\n params: [getAddress(poolConfig.contractAddress)],\n }\n })\n\n const nonBnbPoolsTotalStaked = await multicall(cakeABI, callsNonBnbPools)\n const bnbPoolsTotalStaked = await multicall(wbnbABI, callsBnbPools)\n\n return [\n ...nonBnbPools.map((p, index) => ({\n sousId: p.sousId,\n totalStaked: new BigNumber(nonBnbPoolsTotalStaked[index]).toJSON(),\n })),\n ...bnbPool.map((p, index) => ({\n sousId: p.sousId,\n totalStaked: new BigNumber(bnbPoolsTotalStaked[index]).toJSON(),\n })),\n ]\n}\n","import { AbiItem } from 'web3-utils'\nimport poolsConfig from 'config/constants/pools'\nimport masterChefABI from 'config/abi/moonMaster.json'\nimport sousChefABI from 'config/abi/sousChef.json'\nimport erc20ABI from 'config/abi/erc20.json'\nimport multicall from 'utils/multicall'\nimport { getAddress, getMoonMasterAddress } from 'utils/addressHelpers'\nimport { getWeb3NoAccount } from 'utils/web3'\nimport BigNumber from 'bignumber.js'\n\n// Pool 0, Cake / Cake is a different kind of contract (master chef)\n// BNB pools use the native BNB token (wrapping ? unwrapping is done at the contract level)\nconst nonBnbPools = poolsConfig.filter((p) => p.stakingToken.symbol !== 'BNB')\nconst bnbPools = poolsConfig.filter((p) => p.stakingToken.symbol === 'BNB')\nconst nonMasterPools = poolsConfig.filter((p) => p.sousId === 1) // TODO: Fix pool\nconst masterPools = poolsConfig.filter((p) => p.sousId !== 1) // TODO: Fix pool\nconst web3 = getWeb3NoAccount()\nconst masterChefContract = new web3.eth.Contract((masterChefABI as unknown) as AbiItem, getMoonMasterAddress())\n\nexport const fetchPoolsAllowance = async (account) => {\n const calls = nonBnbPools.map((p) => ({\n address: getAddress(p.stakingToken.address),\n name: 'allowance',\n params: [account, getAddress(p.contractAddress)],\n }))\n\n const allowances = await multicall(erc20ABI, calls)\n return nonBnbPools.reduce(\n (acc, pool, index) => ({ ...acc, [pool.sousId]: new BigNumber(allowances[index]).toJSON() }),\n {},\n )\n}\n\nexport const fetchUserBalances = async (account) => {\n // Non BNB pools\n const calls = nonBnbPools.map((p) => ({\n address: getAddress(p.stakingToken.address),\n name: 'balanceOf',\n params: [account],\n }))\n\n const tokenBalancesRaw = await multicall(erc20ABI, calls)\n const tokenBalances = nonBnbPools.reduce(\n (acc, pool, index) => ({ ...acc, [pool.sousId]: new BigNumber(tokenBalancesRaw[index]).toJSON() }),\n {},\n )\n\n // BNB pools\n const bnbBalance = await web3.eth.getBalance(account)\n const bnbBalances = bnbPools.reduce(\n (acc, pool) => ({ ...acc, [pool.sousId]: new BigNumber(bnbBalance).toJSON() }),\n {},\n )\n\n return { ...tokenBalances, ...bnbBalances }\n}\n\nexport const fetchUserStakeBalances = async (account) => {\n const calls = nonMasterPools.map((p) => ({\n address: getAddress(p.contractAddress),\n name: 'userInfo',\n params: [account],\n }))\n const userInfo = await multicall(sousChefABI, calls)\n const stakedBalances = nonMasterPools.reduce(\n (acc, pool, index) => ({\n ...acc,\n [pool.sousId]: new BigNumber(userInfo[index].amount._hex).toJSON(),\n }),\n {},\n )\n\n const masterCalls = masterPools.map((p) => ({\n address: getAddress(p.contractAddress),\n name: 'userInfo',\n params: [p.sousId, account],\n }))\n const masterUserInfo = await multicall(masterChefABI, masterCalls)\n const masterStakedBalances = masterPools.reduce(\n (acc, pool, index) => ({\n ...acc,\n [pool.sousId]: new BigNumber(masterUserInfo[index].amount._hex).toJSON(),\n }),\n {},\n )\n // Cake / Cake pool\n // const { amount: masterPoolAmount } = await masterChefContract.methods.userInfo('0', account).call()\n\n return { ...stakedBalances, ...masterStakedBalances}\n}\n\nexport const fetchUserPendingRewards = async (account) => {\n const calls = nonMasterPools.map((p) => ({\n address: getAddress(p.contractAddress),\n name: 'pendingReward',\n params: [account],\n }))\n const res = await multicall(sousChefABI, calls)\n const pendingRewards = nonMasterPools.reduce(\n (acc, pool, index) => ({\n ...acc,\n [pool.sousId]: new BigNumber(res[index]).toJSON(),\n }),\n {},\n )\n\n const masterCalls = masterPools.map((p) => ({\n address: getAddress(p.contractAddress),\n name: 'pendingReward',\n params: [p.sousId, account],\n }))\n const masterUserInfo = await multicall(masterChefABI, masterCalls)\n const masterPendingRewards = masterPools.reduce(\n (acc, pool, index) => ({\n ...acc,\n [pool.sousId]: new BigNumber(masterUserInfo[index]).toJSON(),\n }),\n {},\n )\n\n // Cake / Cake pool\n // const pendingReward = await masterChefContract.methods.pendingReward('0', account).call()\n\n return { ...pendingRewards, ...masterPendingRewards }\n}\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit'\nimport poolsConfig from 'config/constants/pools'\nimport { fetchPoolsBlockLimits, fetchPoolsTotalStaking } from './fetchPools'\nimport {\n fetchPoolsAllowance,\n fetchUserBalances,\n fetchUserStakeBalances,\n fetchUserPendingRewards,\n} from './fetchPoolsUser'\nimport { PoolsState, Pool } from '../types'\n\nconst initialState: PoolsState = { data: [...poolsConfig] }\n\nexport const PoolsSlice = createSlice({\n name: 'Pools',\n initialState,\n reducers: {\n setPoolsPublicData: (state, action) => {\n const livePoolsData: Pool[] = action.payload\n state.data = state.data.map((pool) => {\n const livePoolData = livePoolsData.find((entry) => entry.sousId === pool.sousId)\n return { ...pool, ...livePoolData }\n })\n },\n setPoolsUserData: (state, action) => {\n const userData = action.payload\n state.data = state.data.map((pool) => {\n const userPoolData = userData.find((entry) => entry.sousId === pool.sousId)\n return { ...pool, userData: userPoolData }\n })\n },\n updatePoolsUserData: (state, action) => {\n const { field, value, sousId } = action.payload\n const index = state.data.findIndex((p) => p.sousId === sousId)\n state.data[index] = { ...state.data[index], userData: { ...state.data[index].userData, [field]: value } }\n },\n },\n})\n\n// Actions\nexport const { setPoolsPublicData, setPoolsUserData, updatePoolsUserData } = PoolsSlice.actions\n\n// Thunks\nexport const fetchPoolsPublicDataAsync = (currentBlock: number) => async (dispatch) => {\n const blockLimits = await fetchPoolsBlockLimits()\n const totalStakings = await fetchPoolsTotalStaking()\n\n const liveData = poolsConfig.map((pool) => {\n const blockLimit = blockLimits.find((entry) => entry.sousId === pool.sousId)\n const totalStaking = totalStakings.find((entry) => entry.sousId === pool.sousId)\n const isPoolEndBlockExceeded = currentBlock > 0 && blockLimit ? currentBlock > Number(blockLimit.endBlock) : false\n const isPoolFinished = pool.isFinished || isPoolEndBlockExceeded\n return {\n ...blockLimit,\n ...totalStaking,\n isFinished: isPoolFinished,\n }\n })\n\n dispatch(setPoolsPublicData(liveData))\n}\n\nexport const fetchPoolsUserDataAsync = (account) => async (dispatch) => {\n const allowances = await fetchPoolsAllowance(account)\n const stakingTokenBalances = await fetchUserBalances(account)\n const stakedBalances = await fetchUserStakeBalances(account)\n const pendingRewards = await fetchUserPendingRewards(account)\n\n const userData = poolsConfig.map((pool) => ({\n sousId: pool.sousId,\n allowance: allowances[pool.sousId],\n stakingTokenBalance: stakingTokenBalances[pool.sousId],\n stakedBalance: stakedBalances[pool.sousId],\n pendingReward: pendingRewards[pool.sousId],\n }))\n\n dispatch(setPoolsUserData(userData))\n}\n\nexport const updateUserAllowance = (sousId: string, account: string) => async (dispatch) => {\n const allowances = await fetchPoolsAllowance(account)\n dispatch(updatePoolsUserData({ sousId, field: 'allowance', value: allowances[sousId] }))\n}\n\nexport const updateUserBalance = (sousId: string, account: string) => async (dispatch) => {\n const tokenBalances = await fetchUserBalances(account)\n dispatch(updatePoolsUserData({ sousId, field: 'stakingTokenBalance', value: tokenBalances[sousId] }))\n}\n\nexport const updateUserStakedBalance = (sousId: string, account: string) => async (dispatch) => {\n const stakedBalances = await fetchUserStakeBalances(account)\n dispatch(updatePoolsUserData({ sousId, field: 'stakedBalance', value: stakedBalances[sousId] }))\n}\n\nexport const updateUserPendingReward = (sousId: string, account: string) => async (dispatch) => {\n const pendingRewards = await fetchUserPendingRewards(account)\n dispatch(updatePoolsUserData({ sousId, field: 'pendingReward', value: pendingRewards[sousId] }))\n}\n\nexport default PoolsSlice.reducer\n","/* eslint-disable no-param-reassign */\nimport { Toast } from '@doublemoondev/doublemoon-uikit'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { ToastsState } from '../types'\n\nconst initialState: ToastsState = {\n data: [],\n}\n\nexport const toastsSlice = createSlice({\n name: 'toasts',\n initialState,\n reducers: {\n push: (state: ToastsState, action: PayloadAction) => {\n const { payload } = action\n const toastIndex = state.data.findIndex((toast) => toast.id === action.payload.id)\n\n // If id already matches remove it before adding it to the top of the stack\n if (toastIndex >= 0) {\n state.data.splice(toastIndex, 1)\n }\n\n state.data.unshift(payload)\n },\n remove: (state: ToastsState, action: PayloadAction) => {\n const toastIndex = state.data.findIndex((toast) => toast.id === action.payload)\n\n if (toastIndex >= 0) {\n state.data.splice(toastIndex, 1)\n }\n },\n clear: (state: ToastsState) => {\n state.data = []\n },\n },\n})\n\n// Actions\nexport const { clear, remove, push } = toastsSlice.actions\n\nexport default toastsSlice.reducer\n"],"sourceRoot":""}