{"version":3,"sources":["assets/images/coinbaseWalletIcon.svg","assets/images/walletConnectIcon.svg","assets/images sync /^/.//.*$","assets/images/metamask.png","assets/images/blue-loader.svg","assets/images/moon-rabbit.svg","assets/svg/logo.svg","assets/images/arrow-down-blue.svg","assets/images/arrow-down-grey.svg","assets/images/arrow-right-white.png","assets/images/arrow-right.svg","assets/images/circle-grey.svg","assets/images/circle.svg","assets/images/dropdown-blue.svg","assets/images/dropdown.svg","assets/images/dropup-blue.svg","assets/images/ethereum-logo.png","assets/images/fortmaticIcon.png","assets/images/link.svg","assets/images/magnifying-glass.svg","assets/images/menu.svg","assets/images/plus-blue.svg","assets/images/plus-grey.svg","assets/images/portisIcon.png","assets/images/question-mark.svg","assets/images/question.svg","assets/images/spinner.svg","assets/images/token-list-logo.png","assets/images/token-list/lists-dark.png","assets/images/token-list/lists-light.png","assets/images/trustWallet.png","assets/images/x.svg","connectors/NetworkConnector.ts","connectors/index.ts","constants/index.ts","hooks/index.ts","constants/abis/erc20.ts","constants/lists.ts","utils/listSort.ts","state/lists/hooks.ts","state/application/actions.ts","state/application/hooks.ts","state/multicall/actions.ts","state/multicall/hooks.ts","state/user/actions.ts","state/user/hooks.tsx","utils/index.ts","constants/multicall/index.ts","hooks/useContract.ts","components/SearchModal/filtering.ts","hooks/Tokens.ts","state/wallet/hooks.ts","components/Card/index.tsx","components/Row/index.tsx","utils/isZero.ts","hooks/useDebounce.ts","hooks/useENSName.ts","state/transactions/actions.ts","state/transactions/hooks.tsx","components/Button/index.tsx","components/Identicon/index.tsx","components/Loader/index.tsx","webpack:///./src/assets/images/x.svg?844a","hooks/usePrevious.ts","theme/components.tsx","theme/index.tsx","components/AccountDetails/Copy.tsx","hooks/useCopyClipboard.ts","components/AccountDetails/Transaction.tsx","components/AccountDetails/index.tsx","components/Modal/index.tsx","components/WalletModal/Option.tsx","components/WalletModal/PendingView.tsx","components/WalletModal/index.tsx","components/Web3Status/index.tsx","components/Header/index.tsx","components/Header/Polling.tsx","components/Column/index.tsx","state/lists/actions.ts","utils/listVersionLabel.ts","components/Popups/ListUpdatePopup.tsx","components/Popups/TransactionPopup.tsx","components/Popups/PopupItem.tsx","components/Popups/index.tsx","components/swap/styleds.tsx","components/TermsModal/index.tsx","components/Web3ReactManager/index.tsx","theme/DarkModeQueryParamReader.tsx","components/TransactionConfirmationModal/index.tsx","hooks/useLast.ts","hooks/useInterval.ts","components/Popover/index.tsx","components/Tooltip/index.tsx","components/QuestionHelper/index.tsx","components/Logo/index.tsx","components/CurrencyLogo/index.tsx","components/SearchModal/CommonBases.tsx","components/SearchModal/styleds.tsx","utils/contenthashToUri.ts","utils/parseENSAddress.ts","utils/uriToHttp.ts","hooks/useHttpLocations.ts","hooks/useENSContentHash.ts","components/ListLogo/index.tsx","hooks/useTheme.ts","components/SearchModal/ImportRow.tsx","utils/wrappedCurrency.ts","components/SearchModal/CurrencyList.tsx","components/SearchModal/sorting.ts","hooks/useToggle.ts","hooks/useOnClickOutside.tsx","components/SearchModal/CurrencySearch.tsx","components/SearchModal/ImportToken.tsx","utils/getTokenList.ts","utils/resolveENSContentHash.ts","hooks/useFetchListCallback.ts","hooks/useColor.ts","components/Toggle/ListToggle.tsx","components/SearchModal/ManageLists.tsx","components/SearchModal/ManageTokens.tsx","components/SearchModal/Manage.tsx","components/SearchModal/ImportList.tsx","components/SearchModal/CurrencySearchModal.tsx","components/DoubleLogo/index.tsx","webpack:///./src/assets/images/dropdown.svg?d0dc","components/NumericalInput/index.tsx","components/CurrencyInputPanel/index.tsx","components/Toggle/index.tsx","components/TransactionSettings/index.tsx","components/Settings/index.tsx","state/mint/actions.ts","components/NavigationTabs/index.tsx","data/Reserves.ts","state/swap/actions.ts","hooks/useApproveCallback.ts","utils/prices.ts","data/Allowances.ts","hooks/useTransactionDeadline.ts","hooks/useCurrentBlockTimestamp.ts","data/TotalSupply.ts","hooks/useENS.ts","hooks/useENSAddress.ts","utils/trades.ts","hooks/Trades.ts","state/swap/hooks.ts","hooks/useParsedQueryString.ts","state/mint/hooks.ts","utils/maxAmountSpend.ts","pages/AppBody.tsx","pages/Pool/styleds.tsx","pages/AddLiquidity/ConfirmAddModalBottom.tsx","utils/currencyId.ts","pages/AddLiquidity/PoolPriceBar.tsx","pages/AddLiquidity/index.tsx","pages/AddLiquidity/redirects.tsx","components/PositionCard/index.tsx","pages/Pool/index.tsx","pages/PoolFinder/index.tsx","state/burn/actions.ts","components/Slider/index.tsx","hooks/useIsArgentWallet.ts","constants/abis/argent-wallet-detector.ts","state/burn/hooks.ts","pages/RemoveLiquidity/index.tsx","utils/useDebouncedChangeHandler.tsx","pages/RemoveLiquidity/redirects.tsx","components/AddressInputPanel/index.tsx","components/swap/FormattedPriceImpact.tsx","components/swap/SwapModalFooter.tsx","components/swap/SwapModalHeader.tsx","components/swap/ConfirmSwapModal.tsx","components/swap/TradePrice.tsx","components/TokenWarningModal/index.tsx","components/ProgressSteps/index.tsx","components/swap/SwapHeader.tsx","components/swap/SwapRoute.tsx","components/swap/AdvancedSwapDetails.tsx","hooks/useSwapCallback.ts","hooks/useWrapCallback.ts","components/swap/AdvancedSwapDetailsDropdown.tsx","pages/Swap/index.tsx","components/swap/confirmPriceImpactWithoutFee.ts","pages/Swap/redirects.tsx","pages/App.tsx","state/application/reducer.ts","state/global/actions.ts","state/user/reducer.ts","state/transactions/reducer.ts","state/swap/reducer.ts","state/mint/reducer.ts","state/lists/reducer.ts","state/burn/reducer.ts","state/multicall/reducer.ts","state/index.ts","hooks/useIsWindowVisible.ts","state/application/updater.ts","state/lists/updater.ts","utils/retry.ts","state/multicall/updater.tsx","utils/chunkArray.ts","state/transactions/updater.tsx","state/user/updater.tsx","utils/getLibrary.ts","index.tsx"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","RequestError","message","data","MiniRpcProvider","chainId","url","batchWaitTimeMs","isMetaMask","host","path","nextId","batchTimeoutId","batch","clearBatch","fetch","method","headers","accept","body","JSON","stringify","item","request","response","forEach","reject","ok","status","statusText","json","byKey","reduce","memo","current","result","error","sendAsync","callback","params","then","jsonrpc","catch","toString","promise","Promise","push","setTimeout","this","parsed","URL","pathname","NetworkConnector","urls","defaultChainId","invariant","length","supportedChainIds","k","Number","providers","currentChainId","accumulator","provider","account","AbstractConnector","NETWORK_CHAIN_ID","parseInt","process","networkLibrary","network","injected","InjectedConnector","walletconnect","WalletConnectConnector","rpc","1","bridge","qrcode","pollingInterval","walletlink","WalletLinkConnector","appName","ROUTER_ADDRESS","DAI","Token","ChainId","MOON_RABBIT","USDC","USDT","WBTC","WETH_ONLY","MAINNET","WETH","ROPSTEN","RINKEBY","GÖRLI","KOVAN","BASES_TO_CHECK_TRADES_AGAINST","CUSTOM_BASES","SUGGESTED_BASES","BASES_TO_TRACK_LIQUIDITY_FOR","PINNED_PAIRS","SUPPORTED_WALLETS","INJECTED","connector","name","iconName","description","href","color","primary","METAMASK","mobile","BIG_INT_ZERO","JSBI","BigInt","ONE_BIPS","Percent","BIPS_BASE","ALLOWED_PRICE_IMPACT_LOW","ALLOWED_PRICE_IMPACT_MEDIUM","ALLOWED_PRICE_IMPACT_HIGH","PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN","BLOCKED_PRICE_IMPACT_NON_EXPERT","MIN_ETH","exponentiate","BETTER_TRADE_LESS_HOPS_THRESHOLD","ZERO_PERCENT","ONE_HUNDRED_PERCENT","useActiveWeb3React","context","useWeb3ReactCore","contextNetwork","active","ERC20_INTERFACE","Interface","ERC20_ABI","ERC20_BYTES32_ABI","MOON_RABBIT_LIST","DEFAULT_LIST_OF_LISTS","DEFAULT_ACTIVE_LIST_URLS","sortByListPriority","urlA","urlB","first","includes","indexOf","MAX_SAFE_INTEGER","second","WrappedTokenInfo","tokenInfo","tags","toChecksumAddress","address","decimals","symbol","logoURI","EMPTY_LIST","listCache","WeakMap","listToTokenMap","list","get","tokens","tokenMap","tagId","filter","x","Boolean","token","undefined","set","useAllLists","useSelector","state","lists","byUrl","combineMaps","map1","map2","3","4","5","42","1280","useCombinedTokenMapFromUrls","useMemo","slice","sort","allTokens","currentUrl","assign","console","useActiveListUrls","activeListUrls","useCombinedActiveList","DEFAULT_TOKEN_LIST","useCombinedInactiveList","allActiveListUrls","useInactiveListUrls","ApplicationModal","updateBlockNumber","createAction","setOpenModal","addPopup","removePopup","useBlockNumber","application","blockNumber","useModalOpen","modal","openModal","useToggleModal","open","dispatch","useDispatch","useCallback","useWalletModalToggle","WALLET","useToggleSettingsMenu","SETTINGS","useRemovePopup","key","ADDRESS_REGEX","LOWER_HEX_REGEX","toCallKey","call","test","callData","parseCallKey","callKey","pcs","split","addMulticallListeners","removeMulticallListeners","fetchingMulticallResults","errorFetchingMulticallResults","updateMulticallResults","isMethodArg","isValidMethodArgs","Array","isArray","every","xi","INVALID_RESULT","valid","NEVER_RELOAD","blocksPerFetch","Infinity","useCallsData","calls","options","callResults","multicall","serializedCallKeys","c","useEffect","callKeys","parse","INVALID_CALL_STATE","loading","syncing","LOADING_CALL_STATE","toCallState","callResult","contractInterface","fragment","latestBlockNumber","success","decodeFunctionResult","debug","useMultipleContractSingleData","addresses","methodName","callInputs","getFunction","encodeFunctionData","results","useSingleCallResult","contract","inputs","interface","updateMatchesDarkMode","updateUserDarkMode","updateUserExpertMode","updateUserSingleHopOnly","updateUserSlippageTolerance","updateUserDeadline","addSerializedToken","removeSerializedToken","addSerializedPair","removeSerializedPair","toggleURLWarning","serializeToken","deserializeToken","serializedToken","useIsDarkMode","user","matchesDarkMode","userDarkMode","shallowEqual","useIsExpertMode","userExpertMode","useExpertModeManager","expertMode","toggleSetExpertMode","useUserSingleHopOnly","userSingleHopOnly","newSingleHopOnly","useUserSlippageTolerance","userSlippageTolerance","useUserAddedTokens","serializedTokensMap","values","serializePair","pair","token0","token1","toV2LiquidityToken","tokenA","tokenB","Pair","getAddress","isAddress","value","getEtherscanLink","type","prefix","shortenAddress","chars","substring","calculateGasMargin","mul","BigNumber","from","add","div","calculateSlippageAmount","slippage","divide","multiply","raw","getContract","ABI","library","AddressZero","Contract","getSigner","connectUnchecked","getProviderOrSigner","getRouterContract","_","IUniswapV2Router02ABI","MULTICALL_NETWORKS","useContract","withSignerIfPossible","useTokenContract","tokenAddress","useENSRegistrarContract","ENS_ABI","useENSResolverContract","ENS_PUBLIC_RESOLVER_ABI","useMulticallContract","MULTICALL_ABI","filterTokens","search","searchingAddress","lowerSearchParts","toLowerCase","s","matchesSearch","sParts","p","some","sp","startsWith","endsWith","useTokensFromMap","includeUserAdded","userAddedTokens","mapWithoutUrls","newMap","useAllTokens","useAllInactiveTokens","inactiveTokens","activeTokensAddresses","useIsUserAddedToken","currency","find","currencyEquals","BYTES32_REGEX","parseStringOrBytes32","str","bytes32","defaultValue","arrayify","parseBytes32String","useToken","tokenContract","tokenContractBytes32","useBytes32TokenContract","tokenName","tokenNameBytes32","symbolBytes32","useCurrency","currencyId","isETH","toUpperCase","ETHER","useETHBalances","uncheckedAddresses","multicallContract","a","useSingleContractMultipleData","i","CurrencyAmount","ether","useTokenBalancesWithLoadingIndicator","validatedTokens","t","balances","vt","anyLoading","callState","amount","TokenAmount","useTokenBalances","useTokenBalance","tokenBalances","useCurrencyBalances","currencies","ethBalance","useCurrencyBalance","Card","styled","Box","width","padding","border","borderRadius","LightCard","theme","bg3","bg2","GreyCard","BlueCardStyled","primary1","BlueCard","children","rest","fontWeight","Row","align","justify","RowBetween","RowFlat","AutoRow","gap","RowFixed","isZero","hexNumberString","useDebounce","delay","useState","debouncedValue","setDebouncedValue","handler","clearTimeout","useENSName","debouncedAddress","ensNodeArgument","namehash","substr","resolverAddress","resolverAddressResult","changed","ENSName","addTransaction","clearAllTransactions","finalizeTransaction","checkedTransaction","useTransactionAdder","summary","approval","claim","hash","useAllTransactions","transactions","isTransactionRecent","tx","Date","getTime","addedTime","Base","RebassButton","ButtonPrimary","darken","altDisabledStyle","disabled","text3","ButtonSecondary","primary4","primary3","ButtonOutlined","text1","bg4","ButtonEmpty","ButtonConfirmedStyle","lighten","green1","ButtonErrorStyle","red1","ButtonConfirmed","confirmed","ButtonError","ButtonDropdownLight","style","display","alignItems","size","StyledIdenticonContainer","Identicon","ref","useRef","innerHTML","appendChild","Jazzicon","rotate","keyframes","StyledSVG","svg","stroke","Loader","viewBox","fill","xmlns","d","strokeWidth","strokeLinecap","strokeLinejoin","_line","_line2","_extends","bind","target","arguments","source","prototype","hasOwnProperty","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","title","props","createElement","height","className","x1","y1","x2","y2","ForwardRef","forwardRef","usePrevious","ButtonText","button","CloseIcon","attrs","warning","backgroundColor","white","bg1","text4","X","IconWrapper","marginRight","marginLeft","LinkStyledButton","text2","StyledInternalLink","Link","StyledLink","LinkIconWrapper","LinkIcon","LinkIconFeather","TrashIcon","Trash","rotateImg","img","ExternalLink","rel","handleClick","event","ctrlKey","metaKey","preventDefault","onClick","ExternalLinkIcon","Spinner","CustomLightSpinner","span","mediaWidth","upToSmall","upToExtraSmall","MEDIA_WIDTHS","upToMedium","upToLarge","mediaWidthTemplates","b","css","ThemeProvider","darkMode","themeObject","black","text5","bg5","modalBG","advancedBG","primary2","primary5","primaryText1","secondary1","secondary2","secondary3","red2","red3","yellow1","yellow2","blue1","grids","sm","md","lg","shadow1","flexColumnNoWrap","flexRowNoWrap","TextWrapper","Text","TYPE","fontSize","fontStyle","FixedGlobalStyle","createGlobalStyle","ThemedGlobalStyle","CopyIcon","TransactionStatusText","CopyHelper","timeout","isCopied","setIsCopied","staticCopy","text","didCopy","copy","hide","useCopyClipboard","setCopied","toCopy","TransactionWrapper","TransactionState","pending","Transaction","allTransactions","receipt","HeaderRow","UpperSection","InfoCard","AccountGroupingRow","AccountSection","YourAccount","LowerSection","AccountControl","AddressLink","CloseColor","Close","WalletName","TransactionListWrapper","WalletAction","renderTransactions","AccountDetails","toggleWalletModal","pendingTransactions","confirmedTransactions","openOptions","useContext","ThemeContext","getStatusIcon","src","WalletConnectIcon","alt","CoinbaseWalletIcon","clearAllTransactionsCallback","ethereum","window","formatConnectorName","close","hasENS","isENS","mb","justifyContent","AnimatedDialogOverlay","animated","DialogOverlay","StyledDialogOverlay","AnimatedDialogContent","DialogContent","StyledDialogContent","minHeight","maxHeight","isOpen","transparentize","Modal","onDismiss","initialFocusRef","fadeTransition","useTransition","config","duration","opacity","enter","leave","useSpring","y","mass","tension","friction","useGesture","onDrag","down","movement","velocity","direction","isMobile","transform","interpolate","aria-label","tabIndex","OptionCard","OptionCardLeft","OptionCardClickable","clickable","GreenCircle","CircleWrapper","HeaderText","SubHeader","Option","link","header","subheader","icon","content","PendingSection","StyledLoader","LoadingMessage","ErrorGroup","ErrorButton","LoadingWrapper","PendingView","setPendingError","tryActivation","isMetamask","option","require","Wrapper","ContentWrapper","Blurb","OptionGrid","HoverText","WALLET_VIEWS","WalletModal","useWeb3React","activate","walletView","setWalletView","pendingWallet","setPendingWallet","pendingError","walletModalOpen","previousAccount","activePrevious","connectorPrevious","walletConnectProvider","wc","uri","UnsupportedChainIdError","web3","MetamaskIcon","mobileOnly","getOptions","Web3StatusGeneric","Web3StatusError","Web3StatusConnect","faded","Web3StatusConnected","NetworkIcon","Activity","newTransactionsFirst","StatusIcon","Web3StatusInner","hasPendingTransactions","Web3Status","sortedRecentTransactions","HeaderFrame","HeaderControls","HeaderElement","HeaderLinks","AccountElement","HideSmall","NetworkCard","BalanceText","StyledLogo","Title","Icon","StyledNavLink","NavLink","activeClassName","StyledExternalLink","NETWORK_LABELS","Header","userEthBalance","Logo","to","isActive","match","pointerEvents","flexShrink","pl","pr","toSignificant","StyledPolling","StyledPollingDot","rotate360","Polling","isMounted","setIsMounted","timer1","Column","ColumnCenter","AutoColumn","fetchTokenList","fulfilled","rejected","addList","removeList","enableList","disableList","acceptListUpdate","listVersionLabel","version","major","minor","patch","ChangesList","ul","ListUpdatePopup","popKey","listUrl","oldList","newList","auto","removeThisPopup","handleAcceptUpdate","diffTokenLists","tokensAdded","added","tokensChanged","tokensRemoved","removed","numTokensChanged","flex","Fragment","flexGrow","RowNoFlex","TransactionPopup","paddingRight","StyledClose","Popup","Fader","AnimatedFader","PopupItem","removeAfterMs","popupContent","txn","listUpdate","faderStyle","MobilePopupWrapper","MobilePopupInner","FixedPopupColumn","extraPadding","Popups","activePopups","popupList","show","useActivePopups","urlWarningActive","URLWarningVisible","reverse","ArrowWrapper","SectionBreak","BottomGrouping","ErrorText","severity","StyledBalanceMaxMini","TruncatedText","Dots","SwapCallbackErrorInner","SwapCallbackErrorInnerAlertTriangle","SwapCallbackError","SwapShowAcceptChanges","TermsWrapper","TermsTextWrp","Checkbox","input","PaddedColumn","TermsModal","handleDismiss","React","checked","setChecked","termsAccept","localStorage","getItem","setIsOpen","onChange","autoFocus","setItem","MessageWrapper","Message","h2","Web3ReactManager","networkActive","networkError","activateNetwork","triedEager","tried","setTried","isAuthorized","useEagerConnect","suppress","on","handleChainChanged","handleAccountsChanged","accounts","removeListener","useInactiveListener","showLoader","setShowLoader","DarkModeQueryParamReader","location","parseArrays","ignoreQueryPrefix","Section","BottomSection","ConfirmedIcon","ConfirmationPendingContent","pendingText","Circle","textAlign","TransactionSubmittedContent","margin","ConfirmationModalContent","bottomContent","topContent","TransactionErrorContent","marginTop","TransactionConfirmationModal","attemptingTxn","useLast","filterFn","last","setLast","isDefined","useInterval","leading","savedCallback","tick","setInterval","clearInterval","PopoverContainer","ReferenceElement","Arrow","Popover","placement","referenceElement","setReferenceElement","popperElement","setPopperElement","arrowElement","setArrowElement","usePopper","strategy","modifiers","offset","element","styles","update","attributes","popper","arrow","TooltipContainer","Tooltip","MouseoverTooltip","setShow","onMouseEnter","onMouseLeave","QuestionWrapper","QuestionHelper","BAD_SRCS","srcs","refresh","onError","StyledEthereumLogo","CurrencyLogo","MoonRabbitLogo","BaseWrapper","disable","CommonBases","onSelect","selectedCurrency","selected","TextDot","MenuItem","SearchInput","Separator","SeparatorDark","UTF_8_DECODER","TextDecoder","contenthashToUri","contenthash","buff","hex","arr","Uint8Array","hexToUint8Array","codec","getCodec","rmPrefix","cid","CID","toB58String","multihash","decode","digest","trim","ENS_NAME_REGEX","parseENSAddress","ensAddress","ensName","ensPath","uriToHttp","useHttpLocations","ens","resolvedContentHash","useENSContentHash","StyledListLogo","ListLogo","useTheme","TokenSection","dim","CheckIcon","CheckCircle","NameOverflow","ImportRow","showImportView","setImportToken","inactiveTokenList","isAdded","activeTokens","useIsTokenActive","ml","mr","minWidth","wrappedCurrency","wrappedCurrencyAmount","currencyAmount","unwrappedToken","equals","currencyKey","StyledBalanceText","Tag","Balance","balance","toExact","TagContainer","TokenTags","tag","join","CurrencyRow","isSelected","otherSelected","isOnSelectedList","defaultTokens","isTokenOnList","customAdded","justifySelf","CurrencyList","onCurrencySelect","otherCurrency","fixedListRef","showETH","itemData","Currency","index","itemKey","itemCount","itemSize","useTokenComparator","inverted","useAllTokenBalances","comparator","balanceComp","balanceA","balanceB","greaterThan","equalTo","balanceComparator","getTokenComparator","useToggle","initialState","setState","toggle","useOnClickOutside","node","handlerRef","handleClickOutside","contains","document","addEventListener","removeEventListener","Footer","CurrencySearch","otherSelectedCurrency","showCommonBases","showManageView","fixedList","searchQuery","setSearchQuery","invertSearchOrder","searchToken","searchTokenIsAdded","tokenComparator","filteredTokens","filteredSortedTokens","sorted","symbolMatch","handleCurrencySelect","inputRef","handleInput","checksummedInput","scrollTo","handleEnter","showExpanded","setShowExpanded","useFoundOnInactiveList","placeholder","autoComplete","onKeyDown","disableWidth","concat","position","bottom","left","WarningWrapper","highWarning","AddressText","ImportToken","onBack","setConfirmed","addToken","useAddUserToken","fromLists","cursor","marginBottom","tokenListValidator","Ajv","allErrors","compile","schema","getTokenList","resolveENSContentHash","parsedENS","contentHashUri","translatedUri","isLast","validationErrors","errors","dataPath","REGISTRAR_ABI","constant","outputs","payable","stateMutability","RESOLVER_ABI","internalType","resolverContract","ensRegistrarContract","resolver","useFetchListCallback","ensResolver","Web3Provider","getNetworkLibrary","sendDispatch","requestId","nanoid","tokenList","errorMessage","Vibrant","getPalette","palette","detectedHex","AAscore","shade","formattedPath","useColor","setColor","useLayoutEffect","stale","getColorFromToken","tokenColor","useListColor","listImageUri","getColorFromUriPath","ToggleElement","bgColor","StatusText","ListToggle","UnpaddedLinkStyledButton","StyledMenu","StyledTitleText","StyledListUrlText","RowWrapper","listUrlRowHTMLId","replace","ListRow","listsByUrl","pendingUpdate","listColor","useIsListActive","handleAcceptListUpdate","handleRemoveList","prompt","handleEnableList","handleDisableList","mt","ListContainer","ManageLists","setModalView","setImportList","setListUrl","listUrlInput","setListUrlInput","activeCopy","setActiveCopy","fetchList","validUrl","sortedLists","u1","u2","l1","l2","tempList","setTempList","addError","setAddError","fetchTempList","isImported","handleImport","CurrencyModalView","importList","textOverflow","overflow","paddingTop","ManageTokens","isAddressSearch","removeToken","useRemoveUserAddedToken","handleRemoveAll","importToken","ToggleWrapper","ToggleOption","Manage","showLists","setShowLists","paddingBottom","ImportList","listURL","adding","loadingRequestId","handleAddList","manage","CurrencySearchModal","modalView","lastOpen","prevView","sizeraw","HigherLogo","CoveredLogo","DoubleCurrencyLogo","currency0","currency1","_path","StyledInput","inputRegex","RegExp","Input","onUserInput","nextUserInput","inputMode","autoCorrect","pattern","minLength","maxLength","spellCheck","InputRow","CurrencySelect","LabelRow","Aligner","StyledDropDown","DropDown","InputPanel","hideInput","Container","StyledTokenName","StyledBalanceMax","CurrencyInputPanel","onMax","showMaxButton","label","disableCurrencySelect","hideBalance","customBalanceText","modalOpen","setModalOpen","selectedCurrencyBalance","handleDismissSearch","val","SlippageError","DeadlineError","isOnSwitch","StyledToggle","Toggle","FancyButton","OptionCustom","SlippageEmojiContainer","SlippageTabs","slippageError","deadlineError","rawSlippage","setRawSlippage","deadline","setDeadline","slippageInput","setSlippageInput","deadlineInput","setDeadlineInput","slippageInputIsValid","toFixed","parseFloat","deadlineInputIsValid","parseCustomSlippage","valueAsIntFromRoundedFloat","isNaN","parseCustomDeadline","valueAsInt","RiskyLow","RiskyHigh","InvalidInput","role","onBlur","paddingLeft","Field","StyledMenuIcon","Settings","StyledCloseIcon","StyledMenuButton","EmojiWrapper","MenuFlyout","Break","ModalContentWrapper","SettingsTab","setUserslippageTolerance","userDeadline","useUserTransactionTTL","ttl","setTtl","toggleExpertMode","singleHopOnly","setSingleHopOnly","showConfirmation","setShowConfirmation","typeInput","resetMintState","Tabs","ActiveText","StyledArrowLeft","ArrowLeft","SwapPoolTabs","FindPoolTabs","AddRemoveTabs","creating","PairState","PAIR_INTERFACE","IUniswapV2PairABI","usePairs","currencyA","currencyB","groupEnd","reserves","LOADING","INVALID","NOT_EXISTS","reserve0","reserve1","sortsBefore","EXISTS","usePair","ApprovalState","selectCurrency","switchCurrencies","replaceSwapState","setRecipient","BASE_FEE","INPUT_FRACTION_AFTER_FEE","subtract","computeTradePriceBreakdown","trade","realizedLPFee","route","pairs","currentFee","priceImpactWithoutFeeFraction","priceImpact","priceImpactWithoutFee","numerator","denominator","inputAmount","quotient","computeSlippageAdjustedAmounts","allowedSlippage","num","pct","INPUT","maximumAmountIn","OUTPUT","minimumAmountOut","warningSeverity","lessThan","useApproveCallback","amountToApprove","spender","currentAllowance","owner","allowance","useTokenAllowance","pendingApproval","useHasPendingApproval","approvalState","APPROVED","PENDING","NOT_APPROVED","UNKNOWN","approve","useExact","estimateGas","MaxUint256","estimatedGas","gasLimit","useTransactionDeadline","blockTimestamp","useCurrentBlockTimestamp","useTotalSupply","totalSupply","useENS","nameOrAddress","validated","reverseLookup","lookup","debouncedName","addr","useENSAddress","isTradeBetter","tradeA","tradeB","minimumDelta","tradeType","outputAmount","executionPrice","useAllCommonPairs","bases","basePairs","flatMap","base","otherBase","t0","t1","allPairs","customBases","customBasesA","customBasesB","curr","liquidityToken","useSwapState","swap","tryParseAmount","typedValueParsed","parseUnits","BAD_RECIPIENT_ADDRESSES","involvesAddress","checksummedAddress","useDerivedSwapInfo","inputError","independentField","typedValue","inputCurrencyId","outputCurrencyId","recipient","inputCurrency","outputCurrency","recipientLookup","relevantTokenBalances","isExactIn","parsedAmount","bestTradeExactIn","currencyAmountIn","currencyOut","allowedPairs","Trade","maxHops","maxNumResults","bestTradeSoFar","currentTrade","useTradeExactIn","bestTradeExactOut","currencyIn","currencyAmountOut","useTradeExactOut","v2Trade","currencyBalances","formattedTo","slippageAdjustedAmounts","balanceIn","amountIn","parseCurrencyFromURLParameter","urlParam","queryParametersToSwapState","parsedQs","validatedRecipient","exactAmount","parseIndependentFieldURLParameter","exactField","useDefaultsFromURLSearch","useLocation","useParsedQueryString","setResult","field","ZERO","useMintState","mint","maxAmountSpend","BodyWrapper","AppBody","ClickableText","MaxButton","ConfirmAddModalBottom","noLiquidity","price","parsedAmounts","poolTokenPercentage","onAdd","CURRENCY_A","CURRENCY_B","invert","PoolPriceBar","pt","AddLiquidity","currencyIdA","currencyIdB","history","otherTypedValue","dependentField","pairState","equal","independentAmount","dependentAmount","wrappedIndependentAmount","dependentCurrency","dependentTokenAmount","priceOf","quote","currencyAAmount","currencyBAmount","Price","wrappedCurrencyA","liquidityMinted","tokenAmountA","tokenAmountB","getLiquidityMinted","useDerivedMintInfo","onFieldAInput","onFieldBInput","useMintActionHandlers","isValid","showConfirm","setShowConfirm","setAttemptingTxn","txHash","setTxHash","formattedAmounts","maxAmounts","atMaxAmounts","approvalA","approveACallback","approvalB","approveBCallback","router","parsedAmountA","parsedAmountB","amountsMin","tokenBIsETH","estimate","addLiquidityETH","args","toHexString","addLiquidity","estimatedGasLimit","modalHeader","lineHeight","modalBottom","handleCurrencyASelect","newCurrencyIdA","handleCurrencyBSelect","newCurrencyIdB","handleDismissConfirmation","isCreate","RedirectToAddLiquidity","OLD_PATH_STRUCTURE","RedirectOldAddLiquidityPathStructure","RedirectDuplicateTokenIds","FixedHeightRow","StyledPositionCard","MinimalPositionCard","showUnwrapped","showMore","setShowMore","userPoolBalance","totalPoolTokens","greaterThanOrEqual","getLiquidityValue","token0Deposited","token1Deposited","FullPositionCard","stakedBalance","userDefaultPoolBalance","as","Fields","PageWrapper","TitleRow","ButtonRow","ResponsiveButtonPrimary","EmptyProposals","Pool","trackedTokenPairs","pinnedPairs","generatedPairs","savedSerializedPairs","userPairs","forChain","pairId","combinedList","keyed","useTrackedTokenPairs","tokenPairsWithLiquidityTokens","tpwlt","v2PairsBalances","fetchingV2PairBalances","liquidityTokensWithBalances","v2Pairs","v2IsLoading","V2Pair","allV2PairsWithLiquidity","v2Pair","PoolFinder","showSearch","setShowSearch","TOKEN1","activeField","setActiveField","setCurrency0","setCurrency1","addPair","serializedPair","usePairAdder","validPairNoLiquidity","hasPosition","TOKEN0","handleSearchDismiss","prerequisiteMessage","justifyItems","StyledRangeInput","Slider","min","step","max","changeCallback","aria-labelledby","useIsArgentWallet","ARGENT_WALLET_DETECTOR_ABI","useBurnState","burn","RemoveLiquidity","userLiquidity","LIQUIDITY","liquidityValueA","liquidityValueB","liquidityValues","percentToRemove","LIQUIDITY_PERCENT","liquidityValue","useDerivedBurnInfo","_onUserInput","useBurnActionHandlers","showDetailed","setShowDetailed","atMaxAmount","pairContract","signatureData","setSignatureData","approveCallback","isArgentWallet","liquidityAmount","nonces","nonce","EIP712Domain","domain","verifyingContract","Permit","toNumber","types","primaryType","send","splitSignature","signature","v","r","onLiquidityInput","onCurrencyAInput","onCurrencyBInput","onRemove","currencyAmountA","currencyAmountB","currencyBIsETH","oneCurrencyIsETH","methodNames","all","safeGasEstimates","indexOfSuccessfulEstimation","findIndex","safeGasEstimate","isBigNumber","liquidityPercentChangeCallback","oneCurrencyIsWETH","handleSelectCurrencyA","handleSelectCurrencyB","debouncedMs","inner","setInner","timer","onChangeInner","newValue","useDebouncedChangeHandler","innerLiquidityPercentage","setInnerLiquidityPercentage","maxWidth","RedirectOldRemoveLiquidityPathStructure","ContainerRow","InputContainer","AddressInputPanel","withoutSpaces","autoCapitalize","FormattedPriceImpact","SwapModalFooter","onConfirm","swapErrorMessage","disabledConfirm","showInverted","setShowInverted","formatExecutionPrice","TradeType","EXACT_INPUT","SwapModalHeader","showAcceptChanges","onAcceptChanges","priceImpactSeverity","EXACT_OUTPUT","ConfirmSwapModal","originalTrade","confirmationContent","TradePrice","formattedPrice","baseCurrency","quoteCurrency","TokenWarningModal","Grouping","CircleRow","Connector","prevConfirmed","ProgressCircles","steps","StyledSwapHeader","SwapHeader","flexWrap","isLastItem","TradeSummary","AdvancedSwapDetails","showRoute","SwapCallbackState","WrapType","AdvancedDetailsFooter","AdvancedSwapDetailsDropdown","lastTrade","useSwapCallArguments","recipientAddressOrName","recipientAddress","swapMethods","Router","swapCallParameters","feeOnTransfer","parameters","NOT_APPLICABLE","wrapType","useWrapCallback","wethContract","WETH_ABI","useWETHContract","sufficientBalance","WRAP","execute","deposit","txReceipt","UNWRAP","withdraw","Swap","loadedUrlParams","loadedInputCurrency","loadedOutputCurrency","dismissTokenWarning","setDismissTokenWarning","urlLoadedTokens","handleConfirmTokenWarning","importTokensNotInDefault","toggleSettings","isExpertMode","swapInputError","onWrap","wrapInputError","showWrap","onCurrencySelection","onSwitchTokens","onChangeRecipient","useSwapActionHandlers","handleTypeInput","handleTypeOutput","tradeToConfirm","setSwapState","userHasSpecifiedInputOutput","noRoute","useApproveCallbackFromTrade","approvalSubmitted","setApprovalSubmitted","maxAmountInput","atMaxAmountInput","swapCalls","VALID","gasEstimate","gasError","callStatic","callError","reason","estimatedCalls","successfulEstimation","el","ix","errorCalls","inputSymbol","outputSymbol","withRecipient","useSwapCallback","swapCallback","swapCallbackError","handleSwap","confirm","confirmPriceImpactWithoutFee","showApproveFlow","handleConfirmDismiss","handleAcceptChanges","handleInputSelect","handleMaxInput","handleOutputSelect","RedirectPathToSwapOnly","OpenClaimAddressModalAndRedirectToSwap","ADDRESS_CLAIM","AppWrapper","HeaderWrapper","App","fallback","component","exact","strict","createReducer","builder","addCase","action","payload","Math","popup","updateVersion","currentTimestamp","pairKey","token0Address","token1Address","timestamp","lastUpdateVersionTimestamp","tokenAAddress","tokenBAddress","now","txs","lastCheckedBlockNumber","confirmedTime","otherField","NEW_LIST_STATE","lastInitializedDefaultListOfLists","getVersionUpgrade","VersionUpgrade","NONE","u","lastInitializedSet","l","Set","newListOfListsSet","has","listeners","callListeners","fetchingBlockNumber","PERSISTED_KEYS","store","configureStore","reducer","middleware","getDefaultMiddleware","immutableCheck","thunk","serializableCheck","save","states","preloadedState","load","VISIBILITY_STATE_SUPPORTED","isWindowVisible","visibilityState","useIsWindowVisible","focused","setFocused","listener","Updater","windowVisible","blockNumberCallback","getBlockNumber","debouncedState","bump","PATCH","MINOR","minVersionBump","MAJOR","waitRandom","ms","round","random","CancelledError","RetryableError","chunk","minBlockNumber","aggregate","obj","resultsBlockNumber","returnData","debouncedListeners","cancellations","listeningKeys","allListeners","keyListeners","previousMin","activeListeningKeys","unserializedOutdatedCallKeys","minDataBlockNumber","outdatedListeningKeys","serializedOutdatedCallKeys","outdatedCallKeys","chunkedCalls","items","maxChunkSize","numChunks","ceil","chunkSize","chunkArray","fn","rejectCancelled","n","minWait","maxWait","completed","cancel","retry","fetchChunk","fetchBlockNumber","firstCallKeyIndex","lastCallKeyIndex","lastBlockNumber","useAddPopup","blocksSinceCheck","minutesPending","shouldCheck","getTransactionReceipt","blockHash","contractAddress","transactionHash","transactionIndex","darkHandler","matches","matchMedia","addListener","getLibrary","Web3ProviderNetwork","createWeb3ReactRoot","Updaters","autoRefreshOnNetworkChange","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.08c1a8e7.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/coinbaseWalletIcon.62578f59.svg\";","module.exports = __webpack_public_path__ + \"static/media/walletConnectIcon.8215855c.svg\";","var map = {\n\t\"./arrow-down-blue.svg\": 474,\n\t\"./arrow-down-grey.svg\": 475,\n\t\"./arrow-right-white.png\": 476,\n\t\"./arrow-right.svg\": 477,\n\t\"./blue-loader.svg\": 225,\n\t\"./circle-grey.svg\": 478,\n\t\"./circle.svg\": 479,\n\t\"./coinbaseWalletIcon.svg\": 136,\n\t\"./dropdown-blue.svg\": 480,\n\t\"./dropdown.svg\": 481,\n\t\"./dropup-blue.svg\": 482,\n\t\"./ethereum-logo.png\": 483,\n\t\"./fortmaticIcon.png\": 484,\n\t\"./link.svg\": 485,\n\t\"./magnifying-glass.svg\": 486,\n\t\"./menu.svg\": 487,\n\t\"./metamask.png\": 224,\n\t\"./moon-rabbit.svg\": 226,\n\t\"./plus-blue.svg\": 488,\n\t\"./plus-grey.svg\": 489,\n\t\"./portisIcon.png\": 490,\n\t\"./question-mark.svg\": 491,\n\t\"./question.svg\": 492,\n\t\"./spinner.svg\": 493,\n\t\"./token-list-logo.png\": 494,\n\t\"./token-list/lists-dark.png\": 495,\n\t\"./token-list/lists-light.png\": 496,\n\t\"./trustWallet.png\": 497,\n\t\"./walletConnectIcon.svg\": 137,\n\t\"./x.svg\": 498\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 193;","module.exports = __webpack_public_path__ + \"static/media/metamask.023762b6.png\";","module.exports = __webpack_public_path__ + \"static/media/blue-loader.bedfdbbf.svg\";","module.exports = __webpack_public_path__ + \"static/media/moon-rabbit.1343d687.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.fa97c3f8.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow-down-blue.cd061363.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow-down-grey.c0dedd2f.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow-right-white.337ad716.png\";","module.exports = __webpack_public_path__ + \"static/media/arrow-right.d285b6cf.svg\";","module.exports = __webpack_public_path__ + \"static/media/circle-grey.ed2a1dad.svg\";","module.exports = __webpack_public_path__ + \"static/media/circle.2d975615.svg\";","module.exports = __webpack_public_path__ + \"static/media/dropdown-blue.b20914ec.svg\";","module.exports = __webpack_public_path__ + \"static/media/dropdown.7d32d2fa.svg\";","module.exports = __webpack_public_path__ + \"static/media/dropup-blue.b96d70e1.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/link.50c67f3c.svg\";","module.exports = __webpack_public_path__ + \"static/media/magnifying-glass.67440097.svg\";","module.exports = __webpack_public_path__ + \"static/media/menu.4f2c4440.svg\";","module.exports = __webpack_public_path__ + \"static/media/plus-blue.e8021e51.svg\";","module.exports = __webpack_public_path__ + \"static/media/plus-grey.d8e0be7d.svg\";","module.exports = __webpack_public_path__ + \"static/media/portisIcon.b234b2bf.png\";","module.exports = __webpack_public_path__ + \"static/media/question-mark.1ae4d9f4.svg\";","module.exports = __webpack_public_path__ + \"static/media/question.a46e8bc1.svg\";","module.exports = __webpack_public_path__ + \"static/media/spinner.be00fc4a.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/trustWallet.edcc1ab5.png\";","module.exports = __webpack_public_path__ + \"static/media/x.5b8e2186.svg\";","import { ConnectorUpdate } from '@web3-react/types';\nimport { AbstractConnector } from '@web3-react/abstract-connector';\nimport invariant from 'tiny-invariant';\n\ninterface NetworkConnectorArguments {\n urls: { [chainId: number]: string };\n defaultChainId?: number;\n}\n\n// taken from ethers.js, compatible interface with web3 provider\ntype AsyncSendable = {\n isMetaMask?: boolean;\n host?: string;\n path?: string;\n sendAsync?: (request: any, callback: (error: any, response: any) => void) => void;\n send?: (request: any, callback: (error: any, response: any) => void) => void;\n};\n\nclass RequestError extends Error {\n constructor(message: string, public code: number, public data?: unknown) {\n super(message);\n }\n}\n\ninterface BatchItem {\n request: { jsonrpc: '2.0'; id: number; method: string; params: unknown };\n resolve: (result: any) => void;\n reject: (error: Error) => void;\n}\n\nclass MiniRpcProvider implements AsyncSendable {\n public readonly isMetaMask: false = false;\n public readonly chainId: number;\n public readonly url: string;\n public readonly host: string;\n public readonly path: string;\n public readonly batchWaitTimeMs: number;\n\n private nextId = 1;\n private batchTimeoutId: ReturnType | null = null;\n private batch: BatchItem[] = [];\n\n constructor(chainId: number, url: string, batchWaitTimeMs?: number) {\n this.chainId = chainId;\n this.url = url;\n const parsed = new URL(url);\n this.host = parsed.host;\n this.path = parsed.pathname;\n // how long to wait to batch calls\n this.batchWaitTimeMs = batchWaitTimeMs ?? 50;\n }\n\n public readonly clearBatch = async () => {\n const batch = this.batch;\n this.batch = [];\n this.batchTimeoutId = null;\n let response: Response;\n try {\n response = await fetch(this.url, {\n method: 'POST',\n headers: { 'content-type': 'application/json', accept: 'application/json' },\n body: JSON.stringify(batch.map((item) => item.request)),\n });\n } catch (error) {\n batch.forEach(({ reject }) => reject(new Error('Failed to send batch call')));\n return;\n }\n\n if (!response.ok) {\n batch.forEach(({ reject }) => reject(new RequestError(`${response.status}: ${response.statusText}`, -32000)));\n return;\n }\n\n let json;\n try {\n json = await response.json();\n } catch (error) {\n batch.forEach(({ reject }) => reject(new Error('Failed to parse JSON response')));\n return;\n }\n const byKey = batch.reduce<{ [id: number]: BatchItem }>((memo, current) => {\n memo[current.request.id] = current;\n return memo;\n }, {});\n for (const result of json) {\n const {\n resolve,\n reject,\n request: { method },\n } = byKey[result.id];\n if (resolve && reject) {\n if ('error' in result) {\n reject(new RequestError(result?.error?.message, result?.error?.code, result?.error?.data));\n } else if ('result' in result) {\n resolve(result.result);\n } else {\n reject(new RequestError(`Received unexpected JSON-RPC response to ${method} request.`, -32000, result));\n }\n }\n }\n };\n\n public readonly sendAsync = (\n request: { jsonrpc: '2.0'; id: number | string | null; method: string; params?: unknown[] | object },\n callback: (error: any, response: any) => void\n ): void => {\n this.request(request.method, request.params)\n .then((result) => callback(null, { jsonrpc: '2.0', id: request.id, result }))\n .catch((error) => callback(error, null));\n };\n\n public readonly request = async (\n method: string | { method: string; params: unknown[] },\n params?: unknown[] | object\n ): Promise => {\n if (typeof method !== 'string') {\n return this.request(method.method, method.params);\n }\n if (method === 'eth_chainId') {\n return `0x${this.chainId.toString(16)}`;\n }\n const promise = new Promise((resolve, reject) => {\n this.batch.push({\n request: {\n jsonrpc: '2.0',\n id: this.nextId++,\n method,\n params,\n },\n resolve,\n reject,\n });\n });\n this.batchTimeoutId = this.batchTimeoutId ?? setTimeout(this.clearBatch, this.batchWaitTimeMs);\n return promise;\n };\n}\n\nexport class NetworkConnector extends AbstractConnector {\n private readonly providers: { [chainId: number]: MiniRpcProvider };\n private currentChainId: number;\n\n constructor({ urls, defaultChainId }: NetworkConnectorArguments) {\n invariant(defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url');\n super({ supportedChainIds: Object.keys(urls).map((k): number => Number(k)) });\n\n this.currentChainId = defaultChainId || Number(Object.keys(urls)[0]);\n this.providers = Object.keys(urls).reduce<{ [chainId: number]: MiniRpcProvider }>((accumulator, chainId) => {\n accumulator[Number(chainId)] = new MiniRpcProvider(Number(chainId), urls[Number(chainId)]);\n return accumulator;\n }, {});\n }\n\n public get provider(): MiniRpcProvider {\n return this.providers[this.currentChainId];\n }\n\n public async activate(): Promise {\n return { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null };\n }\n\n public async getProvider(): Promise {\n return this.providers[this.currentChainId];\n }\n\n public async getChainId(): Promise {\n return this.currentChainId;\n }\n\n public async getAccount(): Promise {\n return null;\n }\n\n public deactivate() {\n return;\n }\n}\n","import { Web3Provider } from '@ethersproject/providers';\nimport { InjectedConnector } from '@web3-react/injected-connector';\nimport { WalletConnectConnector } from '@web3-react/walletconnect-connector';\nimport { WalletLinkConnector } from '@web3-react/walletlink-connector';\n// import { PortisConnector } from '@web3-react/portis-connector';\n// import { FortmaticConnector } from './Fortmatic';\nimport { NetworkConnector } from './NetworkConnector';\n\nconst REACT_APP_NETWORK_URL = process.env.REACT_APP_NETWORK_URL;\n// const FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY\n// const PORTIS_ID = process.env.REACT_APP_PORTIS_ID\n\nexport const NETWORK_CHAIN_ID: number = parseInt(process.env.REACT_APP_CHAIN_ID ?? '1');\n\nif (typeof REACT_APP_NETWORK_URL === 'undefined') {\n throw new Error(`REACT_APP_NETWORK_URL must be a defined environment variable`);\n}\n\nexport const network = new NetworkConnector({\n urls: { [NETWORK_CHAIN_ID]: REACT_APP_NETWORK_URL },\n});\n\nlet networkLibrary: Web3Provider | undefined;\nexport function getNetworkLibrary(): Web3Provider {\n return (networkLibrary = networkLibrary ?? new Web3Provider(network.provider as any));\n}\n\nexport const injected = new InjectedConnector({\n supportedChainIds: [NETWORK_CHAIN_ID],\n});\n\n// mainnet only\nexport const walletconnect = new WalletConnectConnector({\n rpc: { 1: REACT_APP_NETWORK_URL },\n bridge: 'https://bridge.walletconnect.org',\n qrcode: true,\n pollingInterval: 15000,\n});\n\n// mainnet only\n// export const fortmatic = new FortmaticConnector({\n// apiKey: FORMATIC_KEY ?? '',\n// chainId: 1\n// })\n\n// mainnet only\n// export const portis = new PortisConnector({\n// dAppId: PORTIS_ID ?? '',\n// networks: [1]\n// })\n\n// mainnet only\nexport const walletlink = new WalletLinkConnector({\n url: REACT_APP_NETWORK_URL,\n appName: 'MoonRabbit',\n // appLogoUrl: '',\n});\n","import { ChainId, JSBI, Percent, Token, WETH } from '@moonrabbit/swap-sdk';\nimport { AbstractConnector } from '@web3-react/abstract-connector';\nimport {\n // fortmatic,\n injected,\n // portis,\n // walletconnect,\n // walletlink,\n} from '../connectors';\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\nexport const FACTORY_ADDRESS = '0x214304Af80240e2ae299a210Cf7b022eef2C4eAf';\nexport const ROUTER_ADDRESS = '0x4ac1f089cA3548Cd98009078E633eC44e7bAfA57';\n\nexport const LP_TOKEN_NAME = 'Moon Rabbit DEX';\nexport const LP_TOKEN_SYMBOL = 'MRDEX';\n\n// a list of tokens by chain\ntype ChainTokenList = {\n readonly [chainId in ChainId]: Token[];\n};\n\nexport const DAI = new Token(ChainId.MOON_RABBIT, '0xE0C69e2Ef645a0dF21a23D430044C0A0D4e8347b', 18, 'wDAI', 'wDAI');\nexport const USDC = new Token(ChainId.MOON_RABBIT, '0x6403496190e647d37EB386E48A9fDCd7293024B0', 18, 'wUSDC', 'wUSDC');\nexport const USDT = new Token(ChainId.MOON_RABBIT, '0xF454708b585A600f20D693cC1992C481317CDe9D', 18, 'wUSDT', 'wUSDT');\nexport const WBTC = new Token(ChainId.MOON_RABBIT, '0x15EcCb0812A5afF443b6833B09f9952ED52e6540', 18, 'wBTC', 'wBTC');\n\n// Block time here is slightly higher (~1s) than average in order to avoid ongoing proposals past the displayed time\nexport const AVERAGE_BLOCK_TIME_IN_SECS = 13;\nexport const PROPOSAL_LENGTH_IN_BLOCKS = 40_320;\nexport const PROPOSAL_LENGTH_IN_SECS = AVERAGE_BLOCK_TIME_IN_SECS * PROPOSAL_LENGTH_IN_BLOCKS;\nexport const TIMELOCK_ADDRESS = '0x1a9C8182C09F50C8318d769245beA52c32BE35BC';\n\nexport const COMMON_CONTRACT_NAMES: { [address: string]: string } = {\n [TIMELOCK_ADDRESS]: 'Timelock',\n};\n\nconst WETH_ONLY: ChainTokenList = {\n [ChainId.MAINNET]: [WETH[ChainId.MAINNET]],\n [ChainId.ROPSTEN]: [WETH[ChainId.ROPSTEN]],\n [ChainId.RINKEBY]: [WETH[ChainId.RINKEBY]],\n [ChainId.GÖRLI]: [WETH[ChainId.GÖRLI]],\n [ChainId.KOVAN]: [WETH[ChainId.KOVAN]],\n [ChainId.MOON_RABBIT]: [WETH[ChainId.MOON_RABBIT]],\n};\n\n// used to construct intermediary pairs for trading\nexport const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MOON_RABBIT]: [...WETH_ONLY[ChainId.MOON_RABBIT], DAI, USDC, USDT, WBTC],\n};\n\n/**\n * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these\n * tokens.\n */\nexport const CUSTOM_BASES: { [chainId in ChainId]?: { [tokenAddress: string]: Token[] } } = {};\n\n// used for display in the default list when adding liquidity\nexport const SUGGESTED_BASES: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MOON_RABBIT]: [...WETH_ONLY[ChainId.MOON_RABBIT], DAI, USDC, USDT, WBTC],\n};\n\n// used to construct the list of all pairs we consider by default in the frontend\nexport const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MOON_RABBIT]: [...WETH_ONLY[ChainId.MOON_RABBIT], DAI, USDC, USDT, WBTC],\n};\n\nexport const PINNED_PAIRS: { readonly [chainId in ChainId]?: [Token, Token][] } = {};\n\nexport interface WalletInfo {\n connector?: AbstractConnector;\n name: string;\n iconName: string;\n description: string;\n href: string | null;\n color: string;\n primary?: true;\n mobile?: true;\n mobileOnly?: true;\n}\n\nexport const SUPPORTED_WALLETS: { [key: string]: WalletInfo } = {\n INJECTED: {\n connector: injected,\n name: 'Injected',\n iconName: 'arrow-right.svg',\n description: 'Injected web3 provider.',\n href: null,\n color: '#010101',\n primary: true,\n },\n METAMASK: {\n connector: injected,\n name: 'MetaMask',\n iconName: 'metamask.png',\n description: 'Easy-to-use browser extension.',\n href: null,\n color: '#E8831D',\n mobile: true,\n },\n // WALLET_CONNECT: {\n // connector: walletconnect,\n // name: 'WalletConnect',\n // iconName: 'walletConnectIcon.svg',\n // description: 'Connect to Trust Wallet, Rainbow Wallet and more...',\n // href: null,\n // color: '#4196FC',\n // mobile: true,\n // },\n // WALLET_LINK: {\n // connector: walletlink,\n // name: 'Coinbase Wallet',\n // iconName: 'coinbaseWalletIcon.svg',\n // description: 'Use Coinbase Wallet app on mobile device',\n // href: null,\n // color: '#315CF5',\n // },\n // COINBASE_LINK: {\n // name: 'Open in Coinbase Wallet',\n // iconName: 'coinbaseWalletIcon.svg',\n // description: 'Open in Coinbase Wallet app.',\n // href: 'https://go.cb-w.com/mtUDhEZPy1',\n // color: '#315CF5',\n // mobile: true,\n // mobileOnly: true\n // },\n // FORTMATIC: {\n // connector: fortmatic,\n // name: 'Fortmatic',\n // iconName: 'fortmaticIcon.png',\n // description: 'Login using Fortmatic hosted wallet',\n // href: null,\n // color: '#6748FF',\n // mobile: true,\n // },\n // Portis: {\n // connector: portis,\n // name: 'Portis',\n // iconName: 'portisIcon.png',\n // description: 'Login using Portis hosted wallet',\n // href: null,\n // color: '#4A6C9B',\n // mobile: true,\n // },\n};\n\nexport const NetworkContextName = 'NETWORK';\n// default allowed slippage, in bips\nexport const INITIAL_ALLOWED_SLIPPAGE = 50;\n// 20 minutes, denominated in seconds\nexport const DEFAULT_DEADLINE_FROM_NOW = 60 * 20;\n// used for rewards deadlines\nexport const BIG_INT_SECONDS_IN_WEEK = JSBI.BigInt(60 * 60 * 24 * 7);\nexport const BIG_INT_ZERO = JSBI.BigInt(0);\n// one basis point\nexport const ONE_BIPS = new Percent(JSBI.BigInt(1), JSBI.BigInt(10000));\nexport const BIPS_BASE = JSBI.BigInt(10000);\n// used for warning states\nexport const ALLOWED_PRICE_IMPACT_LOW: Percent = new Percent(JSBI.BigInt(100), BIPS_BASE); // 1%\nexport const ALLOWED_PRICE_IMPACT_MEDIUM: Percent = new Percent(JSBI.BigInt(300), BIPS_BASE); // 3%\nexport const ALLOWED_PRICE_IMPACT_HIGH: Percent = new Percent(JSBI.BigInt(500), BIPS_BASE); // 5%\n// if the price slippage exceeds this number, force the user to type 'confirm' to execute\nexport const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent = new Percent(JSBI.BigInt(1000), BIPS_BASE); // 10%\n// for non expert mode disable swaps above this\nexport const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent = new Percent(JSBI.BigInt(1500), BIPS_BASE); // 15%\n// used to ensure the user doesn't send so much ETH so they end up with <.01\nexport const MIN_ETH: JSBI = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(16)); // .01 ETH\nexport const BETTER_TRADE_LESS_HOPS_THRESHOLD = new Percent(JSBI.BigInt(50), JSBI.BigInt(10000));\nexport const ZERO_PERCENT = new Percent('0');\nexport const ONE_HUNDRED_PERCENT = new Percent('1');\n","import { Web3Provider } from '@ethersproject/providers';\nimport { ChainId } from '@moonrabbit/swap-sdk';\nimport { useWeb3React as useWeb3ReactCore } from '@web3-react/core';\nimport { Web3ReactContextInterface } from '@web3-react/core/dist/types';\nimport { useEffect, useState } from 'react';\nimport { isMobile } from 'react-device-detect';\nimport { injected } from '../connectors';\nimport { NetworkContextName } from '../constants';\n\nexport function useActiveWeb3React(): Web3ReactContextInterface & { chainId?: ChainId } {\n const context = useWeb3ReactCore();\n const contextNetwork = useWeb3ReactCore(NetworkContextName);\n return context.active ? context : contextNetwork;\n}\n\nexport function useEagerConnect() {\n const { activate, active } = useWeb3ReactCore(); // specifically using useWeb3ReactCore because of what this hook does\n const [tried, setTried] = useState(false);\n\n useEffect(() => {\n injected.isAuthorized().then((isAuthorized) => {\n if (isAuthorized) {\n activate(injected, undefined, true).catch(() => {\n setTried(true);\n });\n } else {\n if (isMobile && window.ethereum) {\n activate(injected, undefined, true).catch(() => {\n setTried(true);\n });\n } else {\n setTried(true);\n }\n }\n });\n }, [activate]); // intentionally only running on mount (make sure it's only mounted once :))\n\n // if the connection worked, wait until we get confirmation of that to flip the flag\n useEffect(() => {\n if (active) {\n setTried(true);\n }\n }, [active]);\n\n return tried;\n}\n\n/**\n * Use for network and injected - logs user in\n * and out after checking what network theyre on\n */\nexport function useInactiveListener(suppress = false) {\n const { active, error, activate } = useWeb3ReactCore(); // specifically using useWeb3React because of what this hook does\n\n useEffect(() => {\n const { ethereum } = window;\n\n if (ethereum && ethereum.on && !active && !error && !suppress) {\n const handleChainChanged = () => {\n // eat errors\n activate(injected, undefined, true).catch((error) => {\n console.error('Failed to activate after chain changed', error);\n });\n };\n\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length > 0) {\n // eat errors\n activate(injected, undefined, true).catch((error) => {\n console.error('Failed to activate after accounts changed', error);\n });\n }\n };\n\n ethereum.on('chainChanged', handleChainChanged);\n ethereum.on('accountsChanged', handleAccountsChanged);\n\n return () => {\n if (ethereum.removeListener) {\n ethereum.removeListener('chainChanged', handleChainChanged);\n ethereum.removeListener('accountsChanged', handleAccountsChanged);\n }\n };\n }\n return undefined;\n }, [active, error, suppress, activate]);\n}\n","import { Interface } from '@ethersproject/abi';\nimport ERC20_ABI from './erc20.json';\nimport ERC20_BYTES32_ABI from './erc20_bytes32.json';\n\nconst ERC20_INTERFACE = new Interface(ERC20_ABI);\n\nconst ERC20_BYTES32_INTERFACE = new Interface(ERC20_BYTES32_ABI);\n\nexport default ERC20_INTERFACE;\nexport { ERC20_ABI, ERC20_BYTES32_INTERFACE, ERC20_BYTES32_ABI };\n","const MOON_RABBIT_LIST = 'https://raw.githubusercontent.com/MoonRabbitAZ/swap-client/main/src/constants/tokenlist.json';\n\n// lower index == higher priority for token import\nexport const DEFAULT_LIST_OF_LISTS: string[] = [MOON_RABBIT_LIST];\n\n// default lists to be 'active' aka searched across\nexport const DEFAULT_ACTIVE_LIST_URLS: string[] = [MOON_RABBIT_LIST];\n","import { DEFAULT_LIST_OF_LISTS } from './../constants/lists';\n\n// use ordering of default list of lists to assign priority\nexport default function sortByListPriority(urlA: string, urlB: string) {\n const first = DEFAULT_LIST_OF_LISTS.includes(urlA) ? DEFAULT_LIST_OF_LISTS.indexOf(urlA) : Number.MAX_SAFE_INTEGER;\n const second = DEFAULT_LIST_OF_LISTS.includes(urlB) ? DEFAULT_LIST_OF_LISTS.indexOf(urlB) : Number.MAX_SAFE_INTEGER;\n\n // need reverse order to make sure mapping includes top priority last\n if (first < second) return 1;\n else if (first > second) return -1;\n return 0;\n}\n","import { toChecksumAddress } from 'web3-utils';\nimport DEFAULT_TOKEN_LIST from '@uniswap/default-token-list';\nimport { ChainId, Token } from '@moonrabbit/swap-sdk';\nimport { Tags, TokenInfo, TokenList } from '@uniswap/token-lists';\nimport { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../index';\nimport sortByListPriority from 'utils/listSort';\n\ntype TagDetails = Tags[keyof Tags];\nexport interface TagInfo extends TagDetails {\n id: string;\n}\n\n/**\n * Token instances created from token info.\n */\nexport class WrappedTokenInfo extends Token {\n public readonly tokenInfo: TokenInfo;\n public readonly tags: TagInfo[];\n constructor(tokenInfo: TokenInfo, tags: TagInfo[]) {\n super(\n tokenInfo.chainId,\n toChecksumAddress(tokenInfo.address),\n tokenInfo.decimals,\n tokenInfo.symbol,\n tokenInfo.name\n );\n this.tokenInfo = tokenInfo;\n this.tags = tags;\n }\n public get logoURI(): string | undefined {\n return this.tokenInfo.logoURI;\n }\n}\n\nexport type TokenAddressMap = Readonly<\n { [chainId in ChainId]: Readonly<{ [tokenAddress: string]: { token: WrappedTokenInfo; list: TokenList } }> }\n>;\n\n/**\n * An empty result, useful as a default.\n */\nconst EMPTY_LIST: TokenAddressMap = {\n [ChainId.KOVAN]: {},\n [ChainId.RINKEBY]: {},\n [ChainId.ROPSTEN]: {},\n [ChainId.GÖRLI]: {},\n [ChainId.MAINNET]: {},\n [ChainId.MOON_RABBIT]: {},\n};\n\nconst listCache: WeakMap | null =\n typeof WeakMap !== 'undefined' ? new WeakMap() : null;\n\nexport function listToTokenMap(list: TokenList): TokenAddressMap {\n const result = listCache?.get(list);\n if (result) return result;\n\n const map = list.tokens.reduce(\n (tokenMap, tokenInfo) => {\n const tags: TagInfo[] =\n tokenInfo.tags\n ?.map((tagId) => {\n if (!list.tags?.[tagId]) return undefined;\n return { ...list.tags[tagId], id: tagId };\n })\n ?.filter((x): x is TagInfo => Boolean(x)) ?? [];\n const token = new WrappedTokenInfo(tokenInfo, tags);\n if (tokenMap[token.chainId][token.address] !== undefined) throw Error('Duplicate tokens.');\n return {\n ...tokenMap,\n [token.chainId]: {\n ...tokenMap[token.chainId],\n [token.address]: {\n token,\n list: list,\n },\n },\n };\n },\n { ...EMPTY_LIST }\n );\n listCache?.set(list, map);\n return map;\n}\n\nexport function useAllLists(): {\n readonly [url: string]: {\n readonly current: TokenList | null;\n readonly pendingUpdate: TokenList | null;\n readonly loadingRequestId: string | null;\n readonly error: string | null;\n };\n} {\n return useSelector((state) => state.lists.byUrl);\n}\n\nfunction combineMaps(map1: TokenAddressMap, map2: TokenAddressMap): TokenAddressMap {\n return {\n 1: { ...map1[1], ...map2[1] },\n 3: { ...map1[3], ...map2[3] },\n 4: { ...map1[4], ...map2[4] },\n 5: { ...map1[5], ...map2[5] },\n 42: { ...map1[42], ...map2[42] },\n 1280: { ...map1[1280], ...map2[1280] },\n };\n}\n\n// merge tokens contained within lists from urls\nfunction useCombinedTokenMapFromUrls(urls: string[] | undefined): TokenAddressMap {\n const lists = useAllLists();\n\n return useMemo(() => {\n if (!urls) return EMPTY_LIST;\n\n return (\n urls\n .slice()\n // sort by priority so top priority goes last\n .sort(sortByListPriority)\n .reduce((allTokens, currentUrl) => {\n const current = lists[currentUrl]?.current;\n if (!current) return allTokens;\n try {\n const newTokens = Object.assign(listToTokenMap(current));\n return combineMaps(allTokens, newTokens);\n } catch (error) {\n console.error('Could not show token list due to error', error);\n return allTokens;\n }\n }, EMPTY_LIST)\n );\n }, [lists, urls]);\n}\n\n// filter out unsupported lists\nexport function useActiveListUrls(): string[] | undefined {\n return useSelector((state) => state.lists.activeListUrls);\n}\n\nexport function useInactiveListUrls(): string[] {\n const lists = useAllLists();\n const allActiveListUrls = useActiveListUrls();\n return Object.keys(lists).filter((url) => !allActiveListUrls?.includes(url));\n}\n\n// get all the tokens from active lists, combine with local default tokens\nexport function useCombinedActiveList(): TokenAddressMap {\n const activeListUrls = useActiveListUrls();\n const activeTokens = useCombinedTokenMapFromUrls(activeListUrls);\n const defaultTokenMap = listToTokenMap(DEFAULT_TOKEN_LIST);\n return combineMaps(activeTokens, defaultTokenMap);\n}\n\n// all tokens from inactive lists\nexport function useCombinedInactiveList(): TokenAddressMap {\n const allInactiveListUrls: string[] = useInactiveListUrls();\n return useCombinedTokenMapFromUrls(allInactiveListUrls);\n}\n\n// used to hide warnings on import for default tokens\nexport function useDefaultTokenList(): TokenAddressMap {\n return listToTokenMap(DEFAULT_TOKEN_LIST);\n}\n\nexport function useIsListActive(url: string): boolean {\n const activeListUrls = useActiveListUrls();\n return Boolean(activeListUrls?.includes(url));\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { TokenList } from '@uniswap/token-lists';\n\nexport type PopupContent =\n | {\n txn: {\n hash: string;\n success: boolean;\n summary?: string;\n };\n }\n | {\n listUpdate: {\n listUrl: string;\n oldList: TokenList;\n newList: TokenList;\n auto: boolean;\n };\n };\n\nexport enum ApplicationModal {\n WALLET,\n SETTINGS,\n SELF_CLAIM,\n ADDRESS_CLAIM,\n CLAIM_POPUP,\n MENU,\n DELEGATE,\n VOTE,\n}\n\nexport const updateBlockNumber = createAction<{ chainId: number; blockNumber: number }>(\n 'application/updateBlockNumber'\n);\nexport const setOpenModal = createAction('application/setOpenModal');\nexport const addPopup =\n createAction<{ key?: string; removeAfterMs?: number | null; content: PopupContent }>('application/addPopup');\nexport const removePopup = createAction<{ key: string }>('application/removePopup');\n","import { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { AppDispatch, AppState } from '../index';\nimport { addPopup, ApplicationModal, PopupContent, removePopup, setOpenModal } from './actions';\n\nexport function useBlockNumber(): number | undefined {\n const { chainId } = useActiveWeb3React();\n\n return useSelector((state: AppState) => state.application.blockNumber[chainId ?? -1]);\n}\n\nexport function useModalOpen(modal: ApplicationModal): boolean {\n const openModal = useSelector((state: AppState) => state.application.openModal);\n return openModal === modal;\n}\n\nexport function useToggleModal(modal: ApplicationModal): () => void {\n const open = useModalOpen(modal);\n const dispatch = useDispatch();\n return useCallback(() => dispatch(setOpenModal(open ? null : modal)), [dispatch, modal, open]);\n}\n\nexport function useOpenModal(modal: ApplicationModal): () => void {\n const dispatch = useDispatch();\n return useCallback(() => dispatch(setOpenModal(modal)), [dispatch, modal]);\n}\n\nexport function useCloseModals(): () => void {\n const dispatch = useDispatch();\n return useCallback(() => dispatch(setOpenModal(null)), [dispatch]);\n}\n\nexport function useWalletModalToggle(): () => void {\n return useToggleModal(ApplicationModal.WALLET);\n}\n\nexport function useToggleSettingsMenu(): () => void {\n return useToggleModal(ApplicationModal.SETTINGS);\n}\n\nexport function useShowClaimPopup(): boolean {\n return useModalOpen(ApplicationModal.CLAIM_POPUP);\n}\n\nexport function useToggleShowClaimPopup(): () => void {\n return useToggleModal(ApplicationModal.CLAIM_POPUP);\n}\n\nexport function useToggleSelfClaimModal(): () => void {\n return useToggleModal(ApplicationModal.SELF_CLAIM);\n}\n\nexport function useToggleDelegateModal(): () => void {\n return useToggleModal(ApplicationModal.DELEGATE);\n}\n\nexport function useToggleVoteModal(): () => void {\n return useToggleModal(ApplicationModal.VOTE);\n}\n\n// returns a function that allows adding a popup\nexport function useAddPopup(): (content: PopupContent, key?: string) => void {\n const dispatch = useDispatch();\n\n return useCallback(\n (content: PopupContent, key?: string) => {\n dispatch(addPopup({ content, key }));\n },\n [dispatch]\n );\n}\n\n// returns a function that allows removing a popup via its key\nexport function useRemovePopup(): (key: string) => void {\n const dispatch = useDispatch();\n return useCallback(\n (key: string) => {\n dispatch(removePopup({ key }));\n },\n [dispatch]\n );\n}\n\n// get the list of active popups\nexport function useActivePopups(): AppState['application']['popupList'] {\n const list = useSelector((state: AppState) => state.application.popupList);\n return useMemo(() => list.filter((item) => item.show), [list]);\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport interface Call {\n address: string;\n callData: string;\n}\n\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;\nconst LOWER_HEX_REGEX = /^0x[a-f0-9]*$/;\nexport function toCallKey(call: Call): string {\n if (!ADDRESS_REGEX.test(call.address)) {\n throw new Error(`Invalid address: ${call.address}`);\n }\n if (!LOWER_HEX_REGEX.test(call.callData)) {\n throw new Error(`Invalid hex: ${call.callData}`);\n }\n return `${call.address}-${call.callData}`;\n}\n\nexport function parseCallKey(callKey: string): Call {\n const pcs = callKey.split('-');\n if (pcs.length !== 2) {\n throw new Error(`Invalid call key: ${callKey}`);\n }\n return {\n address: pcs[0],\n callData: pcs[1],\n };\n}\n\nexport interface ListenerOptions {\n // how often this data should be fetched, by default 1\n readonly blocksPerFetch?: number;\n}\n\nexport const addMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/addMulticallListeners'\n);\nexport const removeMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/removeMulticallListeners'\n);\nexport const fetchingMulticallResults = createAction<{ chainId: number; calls: Call[]; fetchingBlockNumber: number }>(\n 'multicall/fetchingMulticallResults'\n);\nexport const errorFetchingMulticallResults = createAction<{\n chainId: number;\n calls: Call[];\n fetchingBlockNumber: number;\n}>('multicall/errorFetchingMulticallResults');\nexport const updateMulticallResults = createAction<{\n chainId: number;\n blockNumber: number;\n results: {\n [callKey: string]: string | null;\n };\n}>('multicall/updateMulticallResults');\n","import { Interface, FunctionFragment } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useBlockNumber } from '../application/hooks';\nimport { AppDispatch, AppState } from '../index';\nimport {\n addMulticallListeners,\n Call,\n removeMulticallListeners,\n parseCallKey,\n toCallKey,\n ListenerOptions,\n} from './actions';\n\nexport interface Result extends ReadonlyArray {\n readonly [key: string]: any;\n}\n\ntype MethodArg = string | number | BigNumber;\ntype MethodArgs = Array;\n\ntype OptionalMethodInputs = Array | undefined;\n\nfunction isMethodArg(x: unknown): x is MethodArg {\n return ['string', 'number'].indexOf(typeof x) !== -1;\n}\n\nfunction isValidMethodArgs(x: unknown): x is MethodArgs | undefined {\n return (\n x === undefined ||\n (Array.isArray(x) && x.every((xi) => isMethodArg(xi) || (Array.isArray(xi) && xi.every(isMethodArg))))\n );\n}\n\ninterface CallResult {\n readonly valid: boolean;\n readonly data: string | undefined;\n readonly blockNumber: number | undefined;\n}\n\nconst INVALID_RESULT: CallResult = { valid: false, blockNumber: undefined, data: undefined };\n\n// use this options object\nexport const NEVER_RELOAD: ListenerOptions = {\n blocksPerFetch: Infinity,\n};\n\n// the lowest level call for subscribing to contract data\nfunction useCallsData(calls: (Call | undefined)[], options?: ListenerOptions): CallResult[] {\n const { chainId } = useActiveWeb3React();\n const callResults = useSelector(\n (state) => state.multicall.callResults\n );\n const dispatch = useDispatch();\n\n const serializedCallKeys: string = useMemo(\n () =>\n JSON.stringify(\n calls\n ?.filter((c): c is Call => Boolean(c))\n ?.map(toCallKey)\n ?.sort() ?? []\n ),\n [calls]\n );\n\n // update listeners when there is an actual change that persists for at least 100ms\n useEffect(() => {\n const callKeys: string[] = JSON.parse(serializedCallKeys);\n if (!chainId || callKeys.length === 0) return undefined;\n const calls = callKeys.map((key) => parseCallKey(key));\n dispatch(\n addMulticallListeners({\n chainId,\n calls,\n options,\n })\n );\n\n return () => {\n dispatch(\n removeMulticallListeners({\n chainId,\n calls,\n options,\n })\n );\n };\n }, [chainId, dispatch, options, serializedCallKeys]);\n\n return useMemo(\n () =>\n calls.map((call) => {\n if (!chainId || !call) return INVALID_RESULT;\n\n const result = callResults[chainId]?.[toCallKey(call)];\n let data;\n if (result?.data && result?.data !== '0x') {\n data = result.data;\n }\n\n return { valid: true, data, blockNumber: result?.blockNumber };\n }),\n [callResults, calls, chainId]\n );\n}\n\ninterface CallState {\n readonly valid: boolean;\n // the result, or undefined if loading or errored/no data\n readonly result: Result | undefined;\n // true if the result has never been fetched\n readonly loading: boolean;\n // true if the result is not for the latest block\n readonly syncing: boolean;\n // true if the call was made and is synced, but the return data is invalid\n readonly error: boolean;\n}\n\nconst INVALID_CALL_STATE: CallState = { valid: false, result: undefined, loading: false, syncing: false, error: false };\nconst LOADING_CALL_STATE: CallState = { valid: true, result: undefined, loading: true, syncing: true, error: false };\n\nfunction toCallState(\n callResult: CallResult | undefined,\n contractInterface: Interface | undefined,\n fragment: FunctionFragment | undefined,\n latestBlockNumber: number | undefined\n): CallState {\n if (!callResult) return INVALID_CALL_STATE;\n const { valid, data, blockNumber } = callResult;\n if (!valid) return INVALID_CALL_STATE;\n if (valid && !blockNumber) return LOADING_CALL_STATE;\n if (!contractInterface || !fragment || !latestBlockNumber) return LOADING_CALL_STATE;\n const success = data && data.length > 2;\n const syncing = (blockNumber ?? 0) < latestBlockNumber;\n let result: Result | undefined = undefined;\n if (success && data) {\n try {\n result = contractInterface.decodeFunctionResult(fragment, data);\n } catch (error) {\n console.debug('Result data parsing failed', fragment, data);\n return {\n valid: true,\n loading: false,\n error: true,\n syncing,\n result,\n };\n }\n }\n return {\n valid: true,\n loading: false,\n syncing,\n result: result,\n error: !success,\n };\n}\n\nexport function useSingleContractMultipleData(\n contract: Contract | null | undefined,\n methodName: string,\n callInputs: OptionalMethodInputs[],\n options?: ListenerOptions\n): CallState[] {\n const fragment = useMemo(() => contract?.interface?.getFunction(methodName), [contract, methodName]);\n\n const calls = useMemo(\n () =>\n contract && fragment && callInputs && callInputs.length > 0\n ? callInputs.map((inputs) => {\n return {\n address: contract.address,\n callData: contract.interface.encodeFunctionData(fragment, inputs),\n };\n })\n : [],\n [callInputs, contract, fragment]\n );\n\n const results = useCallsData(calls, options);\n\n const latestBlockNumber = useBlockNumber();\n\n return useMemo(() => {\n return results.map((result) => toCallState(result, contract?.interface, fragment, latestBlockNumber));\n }, [fragment, contract, results, latestBlockNumber]);\n}\n\nexport function useMultipleContractSingleData(\n addresses: (string | undefined)[],\n contractInterface: Interface,\n methodName: string,\n callInputs?: OptionalMethodInputs,\n options?: ListenerOptions\n): CallState[] {\n const fragment = useMemo(() => contractInterface.getFunction(methodName), [contractInterface, methodName]);\n const callData: string | undefined = useMemo(\n () =>\n fragment && isValidMethodArgs(callInputs)\n ? contractInterface.encodeFunctionData(fragment, callInputs)\n : undefined,\n [callInputs, contractInterface, fragment]\n );\n\n const calls = useMemo(\n () =>\n fragment && addresses && addresses.length > 0 && callData\n ? addresses.map((address) => {\n return address && callData\n ? {\n address,\n callData,\n }\n : undefined;\n })\n : [],\n [addresses, callData, fragment]\n );\n\n const results = useCallsData(calls, options);\n\n const latestBlockNumber = useBlockNumber();\n\n return useMemo(() => {\n return results.map((result) => toCallState(result, contractInterface, fragment, latestBlockNumber));\n }, [fragment, results, contractInterface, latestBlockNumber]);\n}\n\nexport function useSingleCallResult(\n contract: Contract | null | undefined,\n methodName: string,\n inputs?: OptionalMethodInputs,\n options?: ListenerOptions\n): CallState {\n const fragment = useMemo(() => contract?.interface?.getFunction(methodName), [contract, methodName]);\n\n const calls = useMemo(() => {\n return contract && fragment && isValidMethodArgs(inputs)\n ? [\n {\n address: contract.address,\n callData: contract.interface.encodeFunctionData(fragment, inputs),\n },\n ]\n : [];\n }, [contract, fragment, inputs]);\n\n const result = useCallsData(calls, options)[0];\n const latestBlockNumber = useBlockNumber();\n\n return useMemo(() => {\n return toCallState(result, contract?.interface, fragment, latestBlockNumber);\n }, [result, contract, fragment, latestBlockNumber]);\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport interface SerializedToken {\n chainId: number;\n address: string;\n decimals: number;\n symbol?: string;\n name?: string;\n}\n\nexport interface SerializedPair {\n token0: SerializedToken;\n token1: SerializedToken;\n}\n\nexport const updateMatchesDarkMode = createAction<{ matchesDarkMode: boolean }>('user/updateMatchesDarkMode');\nexport const updateUserDarkMode = createAction<{ userDarkMode: boolean }>('user/updateUserDarkMode');\nexport const updateUserExpertMode = createAction<{ userExpertMode: boolean }>('user/updateUserExpertMode');\nexport const updateUserSingleHopOnly = createAction<{ userSingleHopOnly: boolean }>('user/updateUserSingleHopOnly');\nexport const updateUserSlippageTolerance = createAction<{ userSlippageTolerance: number }>(\n 'user/updateUserSlippageTolerance'\n);\nexport const updateUserDeadline = createAction<{ userDeadline: number }>('user/updateUserDeadline');\nexport const addSerializedToken = createAction<{ serializedToken: SerializedToken }>('user/addSerializedToken');\nexport const removeSerializedToken = createAction<{ chainId: number; address: string }>('user/removeSerializedToken');\nexport const addSerializedPair = createAction<{ serializedPair: SerializedPair }>('user/addSerializedPair');\nexport const removeSerializedPair =\n createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>('user/removeSerializedPair');\nexport const toggleURLWarning = createAction('app/toggleURLWarning');\n","import { ChainId, Pair, Token } from '@moonrabbit/swap-sdk';\nimport flatMap from 'lodash.flatmap';\nimport { useCallback, useMemo } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { BASES_TO_TRACK_LIQUIDITY_FOR, PINNED_PAIRS, LP_TOKEN_NAME, LP_TOKEN_SYMBOL } from '../../constants';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { useAllTokens } from '../../hooks/Tokens';\nimport { AppDispatch, AppState } from '../index';\nimport {\n addSerializedPair,\n addSerializedToken,\n removeSerializedToken,\n SerializedPair,\n SerializedToken,\n updateUserDarkMode,\n updateUserDeadline,\n updateUserExpertMode,\n updateUserSlippageTolerance,\n toggleURLWarning,\n updateUserSingleHopOnly,\n} from './actions';\n\nfunction serializeToken(token: Token): SerializedToken {\n return {\n chainId: token.chainId,\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n name: token.name,\n };\n}\n\nfunction deserializeToken(serializedToken: SerializedToken): Token {\n return new Token(\n serializedToken.chainId,\n serializedToken.address,\n serializedToken.decimals,\n serializedToken.symbol,\n serializedToken.name\n );\n}\n\nexport function useIsDarkMode(): boolean {\n const { userDarkMode, matchesDarkMode } = useSelector<\n AppState,\n { userDarkMode: boolean | null; matchesDarkMode: boolean }\n >(\n ({ user: { matchesDarkMode, userDarkMode } }) => ({\n userDarkMode,\n matchesDarkMode,\n }),\n shallowEqual\n );\n\n return userDarkMode === null ? matchesDarkMode : userDarkMode;\n}\n\nexport function useDarkModeManager(): [boolean, () => void] {\n const dispatch = useDispatch();\n const darkMode = useIsDarkMode();\n\n const toggleSetDarkMode = useCallback(() => {\n dispatch(updateUserDarkMode({ userDarkMode: !darkMode }));\n }, [darkMode, dispatch]);\n\n return [darkMode, toggleSetDarkMode];\n}\n\nexport function useIsExpertMode(): boolean {\n return useSelector((state) => state.user.userExpertMode);\n}\n\nexport function useExpertModeManager(): [boolean, () => void] {\n const dispatch = useDispatch();\n const expertMode = useIsExpertMode();\n\n const toggleSetExpertMode = useCallback(() => {\n dispatch(updateUserExpertMode({ userExpertMode: !expertMode }));\n }, [expertMode, dispatch]);\n\n return [expertMode, toggleSetExpertMode];\n}\n\nexport function useUserSingleHopOnly(): [boolean, (newSingleHopOnly: boolean) => void] {\n const dispatch = useDispatch();\n\n const singleHopOnly = useSelector(\n (state) => state.user.userSingleHopOnly\n );\n\n const setSingleHopOnly = useCallback(\n (newSingleHopOnly: boolean) => {\n dispatch(updateUserSingleHopOnly({ userSingleHopOnly: newSingleHopOnly }));\n },\n [dispatch]\n );\n\n return [singleHopOnly, setSingleHopOnly];\n}\n\nexport function useUserSlippageTolerance(): [number, (slippage: number) => void] {\n const dispatch = useDispatch();\n const userSlippageTolerance = useSelector((state) => {\n return state.user.userSlippageTolerance;\n });\n\n const setUserSlippageTolerance = useCallback(\n (userSlippageTolerance: number) => {\n dispatch(updateUserSlippageTolerance({ userSlippageTolerance }));\n },\n [dispatch]\n );\n\n return [userSlippageTolerance, setUserSlippageTolerance];\n}\n\nexport function useUserTransactionTTL(): [number, (slippage: number) => void] {\n const dispatch = useDispatch();\n const userDeadline = useSelector((state) => {\n return state.user.userDeadline;\n });\n\n const setUserDeadline = useCallback(\n (userDeadline: number) => {\n dispatch(updateUserDeadline({ userDeadline }));\n },\n [dispatch]\n );\n\n return [userDeadline, setUserDeadline];\n}\n\nexport function useAddUserToken(): (token: Token) => void {\n const dispatch = useDispatch();\n return useCallback(\n (token: Token) => {\n dispatch(addSerializedToken({ serializedToken: serializeToken(token) }));\n },\n [dispatch]\n );\n}\n\nexport function useRemoveUserAddedToken(): (chainId: number, address: string) => void {\n const dispatch = useDispatch();\n return useCallback(\n (chainId: number, address: string) => {\n dispatch(removeSerializedToken({ chainId, address }));\n },\n [dispatch]\n );\n}\n\nexport function useUserAddedTokens(): Token[] {\n const { chainId } = useActiveWeb3React();\n const serializedTokensMap = useSelector(({ user: { tokens } }) => tokens);\n\n return useMemo(() => {\n if (!chainId) return [];\n return Object.values(serializedTokensMap[chainId as ChainId] ?? {}).map(deserializeToken);\n }, [serializedTokensMap, chainId]);\n}\n\nfunction serializePair(pair: Pair): SerializedPair {\n return {\n token0: serializeToken(pair.token0),\n token1: serializeToken(pair.token1),\n };\n}\n\nexport function usePairAdder(): (pair: Pair) => void {\n const dispatch = useDispatch();\n\n return useCallback(\n (pair: Pair) => {\n dispatch(addSerializedPair({ serializedPair: serializePair(pair) }));\n },\n [dispatch]\n );\n}\n\nexport function useURLWarningVisible(): boolean {\n return useSelector((state: AppState) => state.user.URLWarningVisible);\n}\n\nexport function useURLWarningToggle(): () => void {\n const dispatch = useDispatch();\n return useCallback(() => dispatch(toggleURLWarning()), [dispatch]);\n}\n\n/**\n * Given two tokens return the liquidity token that represents its liquidity shares\n * @param tokenA one of the two tokens\n * @param tokenB the other token\n */\nexport function toV2LiquidityToken([tokenA, tokenB]: [Token, Token]): Token {\n return new Token(tokenA.chainId, Pair.getAddress(tokenA, tokenB), 18, LP_TOKEN_SYMBOL, LP_TOKEN_NAME);\n}\n\n/**\n * Returns all the pairs of tokens that are tracked by the user for the current chain ID.\n */\nexport function useTrackedTokenPairs(): [Token, Token][] {\n const { chainId } = useActiveWeb3React();\n const tokens = useAllTokens();\n\n // pinned pairs\n const pinnedPairs = useMemo(() => (chainId ? PINNED_PAIRS[chainId] ?? [] : []), [chainId]);\n\n // pairs for every token against every base\n const generatedPairs: [Token, Token][] = useMemo(\n () =>\n chainId\n ? flatMap(Object.keys(tokens), (tokenAddress) => {\n const token = tokens[tokenAddress];\n // for each token on the current chain,\n return (\n // loop though all bases on the current chain\n (BASES_TO_TRACK_LIQUIDITY_FOR[chainId] ?? [])\n // to construct pairs of the given token with each base\n .map((base) => {\n if (base.address === token.address) {\n return null;\n } else {\n return [base, token];\n }\n })\n .filter((p): p is [Token, Token] => p !== null)\n );\n })\n : [],\n [tokens, chainId]\n );\n\n // pairs saved by users\n const savedSerializedPairs = useSelector(({ user: { pairs } }) => pairs);\n\n const userPairs: [Token, Token][] = useMemo(() => {\n if (!chainId || !savedSerializedPairs) return [];\n const forChain = savedSerializedPairs[chainId];\n if (!forChain) return [];\n\n return Object.keys(forChain).map((pairId) => {\n return [deserializeToken(forChain[pairId].token0), deserializeToken(forChain[pairId].token1)];\n });\n }, [savedSerializedPairs, chainId]);\n\n const combinedList = useMemo(\n () => userPairs.concat(generatedPairs).concat(pinnedPairs),\n [generatedPairs, pinnedPairs, userPairs]\n );\n\n return useMemo(() => {\n // dedupes pairs of tokens in the combined list\n const keyed = combinedList.reduce<{ [key: string]: [Token, Token] }>((memo, [tokenA, tokenB]) => {\n const sorted = tokenA.sortsBefore(tokenB);\n const key = sorted ? `${tokenA.address}:${tokenB.address}` : `${tokenB.address}:${tokenA.address}`;\n if (memo[key]) return memo;\n memo[key] = sorted ? [tokenA, tokenB] : [tokenB, tokenA];\n return memo;\n }, {});\n\n return Object.keys(keyed).map((key) => keyed[key]);\n }, [combinedList]);\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport { JsonRpcSigner, Web3Provider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { abi as IUniswapV2Router02ABI } from '@uniswap/v2-periphery/build/IUniswapV2Router02.json';\nimport { ROUTER_ADDRESS } from '../constants';\nimport { ChainId, JSBI, Percent, Token, CurrencyAmount, Currency, ETHER } from '@moonrabbit/swap-sdk';\nimport { TokenAddressMap } from '../state/lists/hooks';\n\n// returns the checksummed address if the address is valid, otherwise returns false\nexport function isAddress(value: any): string | false {\n try {\n return getAddress(value);\n } catch {\n return false;\n }\n}\n\nexport function getEtherscanLink(\n chainId: ChainId,\n data: string,\n type: 'transaction' | 'token' | 'address' | 'block'\n): string {\n const prefix = `https://scan.moonrabbit.com`;\n\n switch (type) {\n case 'transaction': {\n return `${prefix}/tx/${data}`;\n }\n case 'token': {\n return `${prefix}/token/${data}`;\n }\n case 'block': {\n return `${prefix}/block/${data}`;\n }\n case 'address':\n default: {\n return `${prefix}/address/${data}`;\n }\n }\n}\n\n// shorten the checksummed version of the input address to have 0x + 4 characters at start and end\nexport function shortenAddress(address: string, chars = 4): string {\n const parsed = isAddress(address);\n if (!parsed) {\n throw Error(`Invalid 'address' parameter '${address}'.`);\n }\n return `${parsed.substring(0, chars + 2)}...${parsed.substring(42 - chars)}`;\n}\n\n// add 10%\nexport function calculateGasMargin(value: BigNumber): BigNumber {\n return value.mul(BigNumber.from(10000).add(BigNumber.from(1000))).div(BigNumber.from(10000));\n}\n\n// converts a basis points value to a sdk percent\nexport function basisPointsToPercent(num: number): Percent {\n return new Percent(JSBI.BigInt(num), JSBI.BigInt(10000));\n}\n\nexport function calculateSlippageAmount(value: CurrencyAmount, slippage: number): [JSBI, JSBI] {\n if (slippage < 0 || slippage > 10000) {\n throw Error(`Unexpected slippage value: ${slippage}`);\n }\n return [\n JSBI.divide(JSBI.multiply(value.raw, JSBI.BigInt(10000 - slippage)), JSBI.BigInt(10000)),\n JSBI.divide(JSBI.multiply(value.raw, JSBI.BigInt(10000 + slippage)), JSBI.BigInt(10000)),\n ];\n}\n\n// account is not optional\nexport function getSigner(library: Web3Provider, account: string): JsonRpcSigner {\n return library.getSigner(account).connectUnchecked();\n}\n\n// account is optional\nexport function getProviderOrSigner(library: Web3Provider, account?: string): Web3Provider | JsonRpcSigner {\n return account ? getSigner(library, account) : library;\n}\n\n// account is optional\nexport function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract {\n if (!isAddress(address) || address === AddressZero) {\n throw Error(`Invalid 'address' parameter '${address}'.`);\n }\n\n return new Contract(address, ABI, getProviderOrSigner(library, account) as any);\n}\n\n// account is optional\nexport function getRouterContract(_: number, library: Web3Provider, account?: string): Contract {\n return getContract(ROUTER_ADDRESS, IUniswapV2Router02ABI, library, account);\n}\n\nexport function escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function isTokenOnList(defaultTokens: TokenAddressMap, currency?: Currency): boolean {\n if (currency === ETHER) return true;\n return Boolean(currency instanceof Token && defaultTokens[currency.chainId]?.[currency.address]);\n}\n","import { ChainId } from '@moonrabbit/swap-sdk';\nimport MULTICALL_ABI from './abi.json';\n\nconst MULTICALL_NETWORKS: { [chainId in ChainId]: string } = {\n [ChainId.MAINNET]: '0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441',\n [ChainId.ROPSTEN]: '0x53C43764255c17BD724F74c4eF150724AC50a3ed',\n [ChainId.KOVAN]: '0x2cc8688C5f75E365aaEEb4ea8D6a480405A48D2A',\n [ChainId.RINKEBY]: '0x42Ad527de7d4e9d9d011aC45B31D8551f8Fe9821',\n [ChainId.GÖRLI]: '0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e',\n [ChainId.MOON_RABBIT]: '0x689ddd0c1ECfd73eC03661F77AAeAB814A13b97a',\n};\n\nexport { MULTICALL_ABI, MULTICALL_NETWORKS };\n","import { Contract } from '@ethersproject/contracts';\nimport { abi as STAKING_REWARDS_ABI } from '@uniswap/liquidity-staker/build/StakingRewards.json';\nimport { ChainId, WETH } from '@moonrabbit/swap-sdk';\nimport { abi as IUniswapV2PairABI } from '@uniswap/v2-core/build/IUniswapV2Pair.json';\nimport { useMemo } from 'react';\nimport {\n ARGENT_WALLET_DETECTOR_ABI,\n ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS,\n} from '../constants/abis/argent-wallet-detector';\nimport ENS_PUBLIC_RESOLVER_ABI from '../constants/abis/ens-public-resolver.json';\nimport ENS_ABI from '../constants/abis/ens-registrar.json';\nimport { ERC20_BYTES32_ABI } from '../constants/abis/erc20';\nimport ERC20_ABI from '../constants/abis/erc20.json';\nimport WETH_ABI from '../constants/abis/weth.json';\nimport { MULTICALL_ABI, MULTICALL_NETWORKS } from '../constants/multicall';\nimport { getContract } from '../utils';\nimport { useActiveWeb3React } from './index';\n\n// returns null on errors\nfunction useContract(address: string | undefined, ABI: any, withSignerIfPossible = true): Contract | null {\n const { library, account } = useActiveWeb3React();\n\n return useMemo(() => {\n if (!address || !ABI || !library) return null;\n try {\n return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined);\n } catch (error) {\n console.error('Failed to get contract', error);\n return null;\n }\n }, [address, ABI, library, withSignerIfPossible, account]);\n}\n\nexport function useTokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(tokenAddress, ERC20_ABI, withSignerIfPossible);\n}\n\nexport function useWETHContract(withSignerIfPossible?: boolean): Contract | null {\n const { chainId } = useActiveWeb3React();\n return useContract(chainId ? WETH[chainId].address : undefined, WETH_ABI, withSignerIfPossible);\n}\n\nexport function useArgentWalletDetectorContract(): Contract | null {\n const { chainId } = useActiveWeb3React();\n return useContract(\n chainId === ChainId.MAINNET ? ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS : undefined,\n ARGENT_WALLET_DETECTOR_ABI,\n false\n );\n}\n\nexport function useENSRegistrarContract(withSignerIfPossible?: boolean): Contract | null {\n const { chainId } = useActiveWeb3React();\n let address: string | undefined;\n if (chainId) {\n switch (chainId) {\n case ChainId.MAINNET:\n case ChainId.GÖRLI:\n case ChainId.ROPSTEN:\n case ChainId.RINKEBY:\n address = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e';\n break;\n }\n }\n return useContract(address, ENS_ABI, withSignerIfPossible);\n}\n\nexport function useENSResolverContract(address: string | undefined, withSignerIfPossible?: boolean): Contract | null {\n return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible);\n}\n\nexport function useBytes32TokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible);\n}\n\nexport function usePairContract(pairAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(pairAddress, IUniswapV2PairABI, withSignerIfPossible);\n}\n\nexport function useMulticallContract(): Contract | null {\n const { chainId } = useActiveWeb3React();\n return useContract(chainId && MULTICALL_NETWORKS[chainId], MULTICALL_ABI, false);\n}\n\nexport function useStakingContract(stakingAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(stakingAddress, STAKING_REWARDS_ABI, withSignerIfPossible);\n}\n","import { isAddress } from '../../utils';\nimport { Token } from '@moonrabbit/swap-sdk';\n\nexport function filterTokens(tokens: Token[], search: string): Token[] {\n if (search.length === 0) return tokens;\n\n const searchingAddress = isAddress(search);\n\n if (searchingAddress) {\n return tokens.filter((token) => token.address === searchingAddress);\n }\n\n const lowerSearchParts = search\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0);\n\n if (lowerSearchParts.length === 0) {\n return tokens;\n }\n\n const matchesSearch = (s: string): boolean => {\n const sParts = s\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0);\n\n return lowerSearchParts.every((p) => p.length === 0 || sParts.some((sp) => sp.startsWith(p) || sp.endsWith(p)));\n };\n\n return tokens.filter((token) => {\n const { symbol, name } = token;\n return (symbol && matchesSearch(symbol)) || (name && matchesSearch(name));\n });\n // .sort((t0: Token, t1: Token) => {\n // if (t0.symbol && matchesSearch(t0.symbol) && t1.symbol && !matchesSearch(t1.symbol)) {\n // return -1\n // }\n // if (t0.symbol && !matchesSearch(t0.symbol) && t1.symbol && matchesSearch(t1.symbol)) {\n // return 1\n // }\n // return 0\n // })\n}\n","import { TokenAddressMap, useDefaultTokenList } from './../state/lists/hooks';\nimport { parseBytes32String } from '@ethersproject/strings';\nimport { Currency, ETHER, Token, currencyEquals } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport { useCombinedActiveList, useCombinedInactiveList } from '../state/lists/hooks';\nimport { NEVER_RELOAD, useSingleCallResult } from '../state/multicall/hooks';\nimport { useUserAddedTokens } from '../state/user/hooks';\nimport { isAddress } from '../utils';\n\nimport { useActiveWeb3React } from './index';\nimport { useBytes32TokenContract, useTokenContract } from './useContract';\nimport { filterTokens } from '../components/SearchModal/filtering';\nimport { arrayify } from 'ethers/lib/utils';\n\n// reduce token map into standard address <-> Token mapping, optionally include user added tokens\nfunction useTokensFromMap(tokenMap: TokenAddressMap, includeUserAdded: boolean): { [address: string]: Token } {\n const { chainId } = useActiveWeb3React();\n const userAddedTokens = useUserAddedTokens();\n\n return useMemo(() => {\n if (!chainId) return {};\n\n // reduce to just tokens\n const mapWithoutUrls = Object.keys(tokenMap[chainId] ?? {}).reduce<{ [address: string]: Token }>(\n (newMap, address) => {\n newMap[address] = tokenMap[chainId][address].token;\n return newMap;\n },\n {}\n );\n\n if (includeUserAdded) {\n return (\n userAddedTokens\n // reduce into all ALL_TOKENS filtered by the current chain\n .reduce<{ [address: string]: Token }>(\n (tokenMap, token) => {\n tokenMap[token.address] = token;\n return tokenMap;\n },\n // must make a copy because reduce modifies the map, and we do not\n // want to make a copy in every iteration\n { ...mapWithoutUrls }\n )\n );\n }\n\n return mapWithoutUrls;\n }, [chainId, userAddedTokens, tokenMap, includeUserAdded]);\n}\n\nexport function useDefaultTokens(): { [address: string]: Token } {\n const defaultList = useDefaultTokenList();\n return useTokensFromMap(defaultList, false);\n}\n\nexport function useAllTokens(): { [address: string]: Token } {\n const allTokens = useCombinedActiveList();\n return useTokensFromMap(allTokens, true);\n}\n\nexport function useAllInactiveTokens(): { [address: string]: Token } {\n // get inactive tokens\n const inactiveTokensMap = useCombinedInactiveList();\n const inactiveTokens = useTokensFromMap(inactiveTokensMap, false);\n\n // filter out any token that are on active list\n const activeTokensAddresses = Object.keys(useAllTokens());\n const filteredInactive = activeTokensAddresses\n ? Object.keys(inactiveTokens).reduce<{ [address: string]: Token }>((newMap, address) => {\n if (!activeTokensAddresses.includes(address)) {\n newMap[address] = inactiveTokens[address];\n }\n return newMap;\n }, {})\n : inactiveTokens;\n\n return filteredInactive;\n}\n\nexport function useIsTokenActive(token: Token | undefined | null): boolean {\n const activeTokens = useAllTokens();\n\n if (!activeTokens || !token) {\n return false;\n }\n\n return !!activeTokens[token.address];\n}\n\n// used to detect extra search results\nexport function useFoundOnInactiveList(searchQuery: string): Token[] | undefined {\n const { chainId } = useActiveWeb3React();\n const inactiveTokens = useAllInactiveTokens();\n\n return useMemo(() => {\n if (!chainId || searchQuery === '') {\n return undefined;\n } else {\n const tokens = filterTokens(Object.values(inactiveTokens), searchQuery);\n return tokens;\n }\n }, [chainId, inactiveTokens, searchQuery]);\n}\n\n// Check if currency is included in custom list from user storage\nexport function useIsUserAddedToken(currency: Currency | undefined | null): boolean {\n const userAddedTokens = useUserAddedTokens();\n\n if (!currency) {\n return false;\n }\n\n return !!userAddedTokens.find((token) => currencyEquals(currency, token));\n}\n\n// parse a name or symbol from a token response\nconst BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/;\n\nfunction parseStringOrBytes32(str: string | undefined, bytes32: string | undefined, defaultValue: string): string {\n return str && str.length > 0\n ? str\n : // need to check for proper bytes string and valid terminator\n bytes32 && BYTES32_REGEX.test(bytes32) && arrayify(bytes32)[31] === 0\n ? parseBytes32String(bytes32)\n : defaultValue;\n}\n\n// undefined if invalid or does not exist\n// null if loading\n// otherwise returns the token\nexport function useToken(tokenAddress?: string): Token | undefined | null {\n const { chainId } = useActiveWeb3React();\n const tokens = useAllTokens();\n\n const address = isAddress(tokenAddress);\n\n const tokenContract = useTokenContract(address ? address : undefined, false);\n const tokenContractBytes32 = useBytes32TokenContract(address ? address : undefined, false);\n const token: Token | undefined = address ? tokens[address] : undefined;\n\n const tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD);\n const tokenNameBytes32 = useSingleCallResult(\n token ? undefined : tokenContractBytes32,\n 'name',\n undefined,\n NEVER_RELOAD\n );\n const symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD);\n const symbolBytes32 = useSingleCallResult(\n token ? undefined : tokenContractBytes32,\n 'symbol',\n undefined,\n NEVER_RELOAD\n );\n const decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD);\n\n return useMemo(() => {\n if (token) return token;\n if (!chainId || !address) return undefined;\n if (decimals.loading || symbol.loading || tokenName.loading) return null;\n if (decimals.result) {\n return new Token(\n chainId,\n address,\n decimals.result[0],\n parseStringOrBytes32(symbol.result?.[0], symbolBytes32.result?.[0], 'UNKNOWN'),\n parseStringOrBytes32(tokenName.result?.[0], tokenNameBytes32.result?.[0], 'Unknown Token')\n );\n }\n return undefined;\n }, [\n address,\n chainId,\n decimals.loading,\n decimals.result,\n symbol.loading,\n symbol.result,\n symbolBytes32.result,\n token,\n tokenName.loading,\n tokenName.result,\n tokenNameBytes32.result,\n ]);\n}\n\nexport function useCurrency(currencyId: string | undefined): Currency | null | undefined {\n const isETH = currencyId?.toUpperCase() === 'AAA';\n const token = useToken(isETH ? undefined : currencyId);\n return isETH ? ETHER : token;\n}\n","import { Currency, CurrencyAmount, ETHER, JSBI, Token, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport ERC20_INTERFACE from '../../constants/abis/erc20';\nimport { useAllTokens } from '../../hooks/Tokens';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useMulticallContract } from '../../hooks/useContract';\nimport { isAddress } from '../../utils';\nimport { useSingleContractMultipleData, useMultipleContractSingleData } from '../multicall/hooks';\n\n/**\n * Returns a map of the given addresses to their eventually consistent ETH balances.\n */\nexport function useETHBalances(uncheckedAddresses?: (string | undefined)[]): {\n [address: string]: CurrencyAmount | undefined;\n} {\n const multicallContract = useMulticallContract();\n\n const addresses: string[] = useMemo(\n () =>\n uncheckedAddresses\n ? uncheckedAddresses\n .map(isAddress)\n .filter((a): a is string => a !== false)\n .sort()\n : [],\n [uncheckedAddresses]\n );\n\n const results = useSingleContractMultipleData(\n multicallContract,\n 'getEthBalance',\n addresses.map((address) => [address])\n );\n\n return useMemo(\n () =>\n addresses.reduce<{ [address: string]: CurrencyAmount }>((memo, address, i) => {\n const value = results?.[i]?.result?.[0];\n if (value) memo[address] = CurrencyAmount.ether(JSBI.BigInt(value.toString()));\n return memo;\n }, {}),\n [addresses, results]\n );\n}\n\n/**\n * Returns a map of token addresses to their eventually consistent token balances for a single account.\n */\nexport function useTokenBalancesWithLoadingIndicator(\n address?: string,\n tokens?: (Token | undefined)[]\n): [{ [tokenAddress: string]: TokenAmount | undefined }, boolean] {\n const validatedTokens: Token[] = useMemo(\n () => tokens?.filter((t?: Token): t is Token => isAddress(t?.address) !== false) ?? [],\n [tokens]\n );\n\n const validatedTokenAddresses = useMemo(() => validatedTokens.map((vt) => vt.address), [validatedTokens]);\n\n const balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20_INTERFACE, 'balanceOf', [address]);\n\n const anyLoading: boolean = useMemo(() => balances.some((callState) => callState.loading), [balances]);\n\n return [\n useMemo(\n () =>\n address && validatedTokens.length > 0\n ? validatedTokens.reduce<{ [tokenAddress: string]: TokenAmount | undefined }>((memo, token, i) => {\n const value = balances?.[i]?.result?.[0];\n const amount = value ? JSBI.BigInt(value.toString()) : undefined;\n if (amount) {\n memo[token.address] = new TokenAmount(token, amount);\n }\n return memo;\n }, {})\n : {},\n [address, validatedTokens, balances]\n ),\n anyLoading,\n ];\n}\n\nexport function useTokenBalances(\n address?: string,\n tokens?: (Token | undefined)[]\n): { [tokenAddress: string]: TokenAmount | undefined } {\n return useTokenBalancesWithLoadingIndicator(address, tokens)[0];\n}\n\n// get the balance for a single token/account combo\nexport function useTokenBalance(account?: string, token?: Token): TokenAmount | undefined {\n const tokenBalances = useTokenBalances(account, [token]);\n if (!token) return undefined;\n return tokenBalances[token.address];\n}\n\nexport function useCurrencyBalances(\n account?: string,\n currencies?: (Currency | undefined)[]\n): (CurrencyAmount | undefined)[] {\n const tokens = useMemo(\n () => currencies?.filter((currency): currency is Token => currency instanceof Token) ?? [],\n [currencies]\n );\n\n const tokenBalances = useTokenBalances(account, tokens);\n const containsETH: boolean = useMemo(() => currencies?.some((currency) => currency === ETHER) ?? false, [currencies]);\n const ethBalance = useETHBalances(containsETH ? [account] : []);\n\n return useMemo(\n () =>\n currencies?.map((currency) => {\n if (!account || !currency) return undefined;\n if (currency instanceof Token) return tokenBalances[currency.address];\n if (currency === ETHER) return ethBalance[account];\n return undefined;\n }) ?? [],\n [account, currencies, ethBalance, tokenBalances]\n );\n}\n\nexport function useCurrencyBalance(account?: string, currency?: Currency): CurrencyAmount | undefined {\n return useCurrencyBalances(account, [currency])[0];\n}\n\n// mimics useAllBalances\nexport function useAllTokenBalances(): { [tokenAddress: string]: TokenAmount | undefined } {\n const { account } = useActiveWeb3React();\n const allTokens = useAllTokens();\n const allTokensArray = useMemo(() => Object.values(allTokens ?? {}), [allTokens]);\n const balances = useTokenBalances(account ?? undefined, allTokensArray);\n return balances ?? {};\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { CardProps, Text } from 'rebass';\nimport { Box } from 'rebass/styled-components';\n\nconst Card = styled(Box)<{ width?: string; padding?: string; border?: string; borderRadius?: string }>`\n width: ${({ width }) => width ?? '100%'};\n border-radius: 16px;\n padding: 1.25rem;\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n`;\nexport default Card;\n\nexport const LightCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.bg3};\n background-color: ${({ theme }) => theme.bg2};\n`;\n\nexport const GreyCard = styled(Card)`\n background-color: ${({ theme }) => theme.bg3};\n`;\n\nconst BlueCardStyled = styled(Card)`\n background-color: ${({ theme }) => theme.primary1};\n color: ${({ theme }) => theme.primary1};\n border-radius: 12px;\n width: fit-content;\n`;\n\nexport const BlueCard = ({ children, ...rest }: CardProps) => {\n return (\n \n \n {children}\n \n \n );\n};\n","import styled from 'styled-components';\nimport { Box } from 'rebass/styled-components';\n\nconst Row = styled(Box)<{\n width?: string;\n align?: string;\n justify?: string;\n padding?: string;\n border?: string;\n borderRadius?: string;\n}>`\n width: ${({ width }) => width ?? '100%'};\n display: flex;\n padding: 0;\n align-items: ${({ align }) => align ?? 'center'};\n justify-content: ${({ justify }) => justify ?? 'flex-start'};\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n`;\n\nexport const RowBetween = styled(Row)`\n justify-content: space-between;\n`;\n\nexport const RowFlat = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const AutoRow = styled(Row)<{ gap?: string; justify?: string }>`\n flex-wrap: wrap;\n margin: ${({ gap }) => gap && `-${gap}`};\n justify-content: ${({ justify }) => justify && justify};\n\n & > * {\n margin: ${({ gap }) => gap} !important;\n }\n`;\n\nexport const RowFixed = styled(Row)<{ gap?: string; justify?: string }>`\n width: fit-content;\n margin: ${({ gap }) => gap && `-${gap}`};\n`;\n\nexport default Row;\n","/**\n * Returns true if the string value is zero in hex\n * @param hexNumberString\n */\nexport default function isZero(hexNumberString: string) {\n return /^0x0*$/.test(hexNumberString);\n}\n","import { useEffect, useState } from 'react';\n\n// modified from https://usehooks.com/useDebounce/\nexport default function useDebounce(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { namehash } from 'ethers/lib/utils';\nimport { useMemo } from 'react';\nimport { useSingleCallResult } from '../state/multicall/hooks';\nimport { isAddress } from '../utils';\nimport isZero from '../utils/isZero';\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract';\nimport useDebounce from './useDebounce';\n\n/**\n * Does a reverse lookup for an address to find its ENS name.\n * Note this is not the same as looking up an ENS name to find an address.\n */\nexport default function useENSName(address?: string): { ENSName: string | null; loading: boolean } {\n const debouncedAddress = useDebounce(address, 200);\n const ensNodeArgument = useMemo(() => {\n if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined];\n try {\n return debouncedAddress ? [namehash(`${debouncedAddress.toLowerCase().substr(2)}.addr.reverse`)] : [undefined];\n } catch (error) {\n return [undefined];\n }\n }, [debouncedAddress]);\n const registrarContract = useENSRegistrarContract(false);\n const resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument);\n const resolverAddressResult = resolverAddress.result?.[0];\n const resolverContract = useENSResolverContract(\n resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,\n false\n );\n const name = useSingleCallResult(resolverContract, 'name', ensNodeArgument);\n\n const changed = debouncedAddress !== address;\n return {\n ENSName: changed ? null : name.result?.[0] ?? null,\n loading: changed || resolverAddress.loading || name.loading,\n };\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { ChainId } from '@moonrabbit/swap-sdk';\n\nexport interface SerializableTransactionReceipt {\n to: string;\n from: string;\n contractAddress: string;\n transactionIndex: number;\n blockHash: string;\n transactionHash: string;\n blockNumber: number;\n status?: number;\n}\n\nexport const addTransaction = createAction<{\n chainId: ChainId;\n hash: string;\n from: string;\n approval?: { tokenAddress: string; spender: string };\n claim?: { recipient: string };\n summary?: string;\n}>('transactions/addTransaction');\nexport const clearAllTransactions = createAction<{ chainId: ChainId }>('transactions/clearAllTransactions');\nexport const finalizeTransaction = createAction<{\n chainId: ChainId;\n hash: string;\n receipt: SerializableTransactionReceipt;\n}>('transactions/finalizeTransaction');\nexport const checkedTransaction = createAction<{\n chainId: ChainId;\n hash: string;\n blockNumber: number;\n}>('transactions/checkedTransaction');\n","import { TransactionResponse } from '@ethersproject/providers';\nimport { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { AppDispatch, AppState } from '../index';\nimport { addTransaction } from './actions';\nimport { TransactionDetails } from './reducer';\n\n// helper that can take a ethers library transaction response and add it to the list of transactions\nexport function useTransactionAdder(): (\n response: TransactionResponse,\n customData?: { summary?: string; approval?: { tokenAddress: string; spender: string }; claim?: { recipient: string } }\n) => void {\n const { chainId, account } = useActiveWeb3React();\n const dispatch = useDispatch();\n\n return useCallback(\n (\n response: TransactionResponse,\n {\n summary,\n approval,\n claim,\n }: { summary?: string; claim?: { recipient: string }; approval?: { tokenAddress: string; spender: string } } = {}\n ) => {\n if (!account) return;\n if (!chainId) return;\n\n const { hash } = response;\n if (!hash) {\n throw Error('No transaction hash found.');\n }\n dispatch(addTransaction({ hash, from: account, chainId, approval, summary, claim }));\n },\n [dispatch, chainId, account]\n );\n}\n\n// returns all the transactions for the current chain\nexport function useAllTransactions(): { [txHash: string]: TransactionDetails } {\n const { chainId } = useActiveWeb3React();\n\n const state = useSelector((state) => state.transactions);\n\n return chainId ? state[chainId] ?? {} : {};\n}\n\nexport function useIsTransactionPending(transactionHash?: string): boolean {\n const transactions = useAllTransactions();\n\n if (!transactionHash || !transactions[transactionHash]) return false;\n\n return !transactions[transactionHash].receipt;\n}\n\n/**\n * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second)\n * @param tx to check for recency\n */\nexport function isTransactionRecent(tx: TransactionDetails): boolean {\n return new Date().getTime() - tx.addedTime < 86_400_000;\n}\n\n// returns whether a token has a pending approval transaction\nexport function useHasPendingApproval(tokenAddress: string | undefined, spender: string | undefined): boolean {\n const allTransactions = useAllTransactions();\n return useMemo(\n () =>\n typeof tokenAddress === 'string' &&\n typeof spender === 'string' &&\n Object.keys(allTransactions).some((hash) => {\n const tx = allTransactions[hash];\n if (!tx) return false;\n if (tx.receipt) {\n return false;\n } else {\n const approval = tx.approval;\n if (!approval) return false;\n return approval.spender === spender && approval.tokenAddress === tokenAddress && isTransactionRecent(tx);\n }\n }),\n [allTransactions, spender, tokenAddress]\n );\n}\n\n// watch for submissions to claim\n// return null if not done loading, return undefined if not found\nexport function useUserHasSubmittedClaim(account?: string): {\n claimSubmitted: boolean;\n claimTxn: TransactionDetails | undefined;\n} {\n const allTransactions = useAllTransactions();\n\n // get the txn if it has been submitted\n const claimTxn = useMemo(() => {\n const txnIndex = Object.keys(allTransactions).find((hash) => {\n const tx = allTransactions[hash];\n return tx.claim && tx.claim.recipient === account;\n });\n return txnIndex && allTransactions[txnIndex] ? allTransactions[txnIndex] : undefined;\n }, [account, allTransactions]);\n\n return { claimSubmitted: Boolean(claimTxn), claimTxn };\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { darken, lighten } from 'polished';\n\nimport { RowBetween } from '../Row';\nimport { ChevronDown } from 'react-feather';\nimport { Button as RebassButton, ButtonProps } from 'rebass/styled-components';\n\nconst Base = styled(RebassButton)<{\n padding?: string;\n width?: string;\n borderRadius?: string;\n altDisabledStyle?: boolean;\n}>`\n padding: ${({ padding }) => (padding ? padding : '18px')};\n width: ${({ width }) => (width ? width : '100%')};\n font-weight: 500;\n text-align: center;\n border-radius: 20px;\n border-radius: ${({ borderRadius }) => borderRadius && borderRadius};\n outline: none;\n border: 1px solid transparent;\n color: white;\n text-decoration: none;\n display: flex;\n justify-content: center;\n flex-wrap: nowrap;\n align-items: center;\n cursor: pointer;\n position: relative;\n z-index: 1;\n transition: 0.25s;\n\n &:disabled {\n cursor: auto;\n }\n\n > * {\n user-select: none;\n }\n`;\n\nexport const ButtonPrimary = styled(Base)`\n background-color: ${({ theme }) => theme.primary1};\n color: white;\n &:focus {\n box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.primary1)};\n background-color: ${({ theme }) => darken(0.05, theme.primary1)};\n }\n &:hover {\n background-color: ${({ theme }) => darken(0.05, theme.primary1)};\n }\n &:active {\n box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.primary1)};\n background-color: ${({ theme }) => darken(0.1, theme.primary1)};\n }\n &:disabled {\n background-color: ${({ theme, altDisabledStyle, disabled }) =>\n altDisabledStyle ? (disabled ? theme.bg3 : theme.primary1) : theme.bg3};\n color: ${({ theme, altDisabledStyle, disabled }) =>\n altDisabledStyle ? (disabled ? theme.text3 : 'white') : theme.text3};\n cursor: auto;\n box-shadow: none;\n border: 1px solid transparent;\n outline: none;\n opacity: ${({ altDisabledStyle }) => (altDisabledStyle ? '0.5' : '1')};\n }\n`;\n\nexport const ButtonSecondary = styled(Base)`\n border: 1px solid ${({ theme }) => theme.primary4};\n color: ${({ theme }) => theme.primary1};\n background-color: transparent;\n font-size: 16px;\n border-radius: 12px;\n padding: ${({ padding }) => (padding ? padding : '10px')};\n\n &:focus {\n box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4};\n border: 1px solid ${({ theme }) => theme.primary3};\n }\n &:hover {\n border: 1px solid ${({ theme }) => theme.primary3};\n }\n &:active {\n box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4};\n border: 1px solid ${({ theme }) => theme.primary3};\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n a:hover {\n text-decoration: none;\n }\n`;\n\nexport const ButtonOutlined = styled(Base)`\n border: 1px solid ${({ theme }) => theme.bg2};\n background-color: transparent;\n color: ${({ theme }) => theme.text1};\n\n &:focus {\n box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4};\n }\n &:hover {\n box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4};\n }\n &:active {\n box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4};\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n`;\n\nexport const ButtonEmpty = styled(Base)`\n background-color: transparent;\n color: ${({ theme }) => theme.text1};\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:hover {\n text-decoration: none;\n }\n &:active {\n text-decoration: none;\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n`;\n\nconst ButtonConfirmedStyle = styled(Base)`\n background-color: ${({ theme }) => lighten(0.5, theme.green1)};\n color: ${({ theme }) => theme.green1};\n border: 1px solid ${({ theme }) => theme.green1};\n\n &:disabled {\n opacity: 50%;\n cursor: auto;\n }\n`;\n\nconst ButtonErrorStyle = styled(Base)`\n background-color: ${({ theme }) => theme.red1};\n border: 1px solid ${({ theme }) => theme.red1};\n\n &:focus {\n box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.red1)};\n background-color: ${({ theme }) => darken(0.05, theme.red1)};\n }\n &:hover {\n background-color: ${({ theme }) => darken(0.05, theme.red1)};\n }\n &:active {\n box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.red1)};\n background-color: ${({ theme }) => darken(0.1, theme.red1)};\n }\n &:disabled {\n opacity: 50%;\n cursor: auto;\n box-shadow: none;\n background-color: ${({ theme }) => theme.red1};\n border: 1px solid ${({ theme }) => theme.red1};\n }\n`;\n\nexport function ButtonConfirmed({\n confirmed,\n altDisabledStyle,\n ...rest\n}: { confirmed?: boolean; altDisabledStyle?: boolean } & ButtonProps) {\n if (confirmed) {\n return ;\n } else {\n return ;\n }\n}\n\nexport function ButtonError({ error, ...rest }: { error?: boolean } & ButtonProps) {\n if (error) {\n return ;\n } else {\n return ;\n }\n}\n\nexport function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {\n return (\n \n \n
{children}
\n \n
\n
\n );\n}\n\nexport function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) {\n return (\n \n \n
{children}
\n \n
\n
\n );\n}\n","import React, { useEffect, useRef } from 'react';\n\nimport styled from 'styled-components';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport Jazzicon from 'jazzicon';\n\nconst StyledIdenticonContainer = styled.div`\n height: 1rem;\n width: 1rem;\n border-radius: 1.125rem;\n background-color: ${({ theme }) => theme.bg4};\n`;\n\nexport default function Identicon() {\n const ref = useRef();\n\n const { account } = useActiveWeb3React();\n\n useEffect(() => {\n if (account && ref.current) {\n ref.current.innerHTML = '';\n ref.current.appendChild(Jazzicon(16, parseInt(account.slice(2, 10), 16)));\n }\n }, [account]);\n\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451\n return ;\n}\n","import React from 'react';\n\nimport styled, { keyframes } from 'styled-components';\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst StyledSVG = styled.svg<{ size: string; stroke?: string }>`\n animation: 2s ${rotate} linear infinite;\n height: ${({ size }) => size};\n width: ${({ size }) => size};\n path {\n stroke: ${({ stroke, theme }) => stroke ?? theme.primary1};\n }\n`;\n\n/**\n * Takes in custom size and stroke for circle color, default to primary color as fill,\n * need ...rest for layered styles on top\n */\nexport default function Loader({\n size = '16px',\n stroke,\n ...rest\n}: {\n size?: string;\n stroke?: string;\n [k: string]: any;\n}) {\n return (\n \n \n \n );\n}\n","var _line, _line2;\n\nvar _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgX = function SvgX(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-x\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n x1: 18,\n y1: 6,\n x2: 6,\n y2: 18\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n x1: 6,\n y1: 6,\n x2: 18,\n y2: 18\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgX, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/x.5b8e2186.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect, useRef } from 'react';\n\n// modified from https://usehooks.com/usePrevious/\nexport default function usePrevious(value: T) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef();\n\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import React, { HTMLProps, useCallback } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { keyframes } from 'styled-components';\nimport { darken } from 'polished';\nimport { ArrowLeft, X, ExternalLink as LinkIconFeather, Trash } from 'react-feather';\n\nexport const ButtonText = styled.button`\n outline: none;\n border: none;\n font-size: inherit;\n padding: 0;\n margin: 0;\n background: none;\n cursor: pointer;\n\n :hover {\n opacity: 0.7;\n }\n\n :focus {\n text-decoration: underline;\n }\n`;\n\nexport const Button = styled.button.attrs<{ warning: boolean }, { backgroundColor: string }>(({ warning, theme }) => ({\n backgroundColor: warning ? theme.red1 : theme.primary1,\n}))`\n padding: 1rem 2rem 1rem 2rem;\n border-radius: 3rem;\n cursor: pointer;\n user-select: none;\n font-size: 1rem;\n border: none;\n outline: none;\n background-color: ${({ backgroundColor }) => backgroundColor};\n color: ${({ theme }) => theme.white};\n width: 100%;\n transition: 0.2s;\n\n :hover,\n :focus {\n background-color: ${({ backgroundColor }) => darken(0.05, backgroundColor)};\n }\n\n :active {\n background-color: ${({ backgroundColor }) => darken(0.1, backgroundColor)};\n }\n\n :disabled {\n background-color: ${({ theme }) => theme.bg1};\n color: ${({ theme }) => theme.text4};\n cursor: auto;\n }\n`;\n\nexport const CloseIcon = styled(X)<{ onClick: () => void }>`\n cursor: pointer;\n`;\n\n// for wrapper react feather icons\nexport const IconWrapper = styled.div<{ stroke?: string; size?: string; marginRight?: string; marginLeft?: string }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${({ size }) => size ?? '20px'};\n height: ${({ size }) => size ?? '20px'};\n margin-right: ${({ marginRight }) => marginRight ?? 0};\n margin-left: ${({ marginLeft }) => marginLeft ?? 0};\n & > * {\n stroke: ${({ theme, stroke }) => stroke ?? theme.primary1};\n }\n`;\n\n// A button that triggers some onClick result, but looks like a link.\nexport const LinkStyledButton = styled.button<{ disabled?: boolean }>`\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n color: ${({ theme, disabled }) => (disabled ? theme.text2 : theme.primary1)};\n font-weight: 500;\n\n :hover {\n text-decoration: ${({ disabled }) => (disabled ? null : 'underline')};\n }\n\n :focus {\n outline: none;\n text-decoration: ${({ disabled }) => (disabled ? null : 'underline')};\n }\n\n :active {\n text-decoration: none;\n }\n`;\n\n// An internal link from the react-router-dom library that is correctly styled\nexport const StyledInternalLink = styled(Link)`\n text-decoration: none;\n cursor: pointer;\n color: ${({ theme }) => theme.primary1};\n font-weight: 500;\n\n :hover {\n text-decoration: underline;\n }\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n :active {\n text-decoration: none;\n }\n`;\n\nconst StyledLink = styled.a`\n text-decoration: none;\n cursor: pointer;\n color: ${({ theme }) => theme.primary1};\n font-weight: 500;\n\n :hover {\n text-decoration: underline;\n }\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n :active {\n text-decoration: none;\n }\n`;\n\nconst LinkIconWrapper = styled.a`\n text-decoration: none;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n text-decoration: none;\n opacity: 0.7;\n }\n\n :focus {\n outline: none;\n text-decoration: none;\n }\n\n :active {\n text-decoration: none;\n }\n`;\n\nexport const LinkIcon = styled(LinkIconFeather)`\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ${({ theme }) => theme.primary1};\n`;\n\nexport const TrashIcon = styled(Trash)`\n height: 16px;\n width: 18px;\n margin-left: 10px;\n stroke: ${({ theme }) => theme.text3};\n\n cursor: pointer;\n align-items: center;\n justify-content: center;\n display: flex;\n\n :hover {\n opacity: 0.7;\n }\n`;\n\nconst rotateImg = keyframes`\n 0% {\n transform: perspective(1000px) rotateY(0deg);\n }\n\n 100% {\n transform: perspective(1000px) rotateY(360deg);\n }\n`;\n\nexport const UniTokenAnimated = styled.img`\n animation: ${rotateImg} 5s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n padding: 2rem 0 0 0;\n filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.15));\n`;\n\n/**\n * Outbound link that handles firing google analytics events\n */\nexport function ExternalLink({\n target = '_blank',\n href,\n rel = 'noopener noreferrer',\n ...rest\n}: Omit, 'as' | 'ref' | 'onClick'> & { href: string }) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n // don't prevent default, don't redirect if it's a new tab\n if (target === '_blank' || event.ctrlKey || event.metaKey) {\n } else {\n event.preventDefault();\n }\n },\n [target]\n );\n return ;\n}\n\nexport function ExternalLinkIcon({\n target = '_blank',\n href,\n rel = 'noopener noreferrer',\n ...rest\n}: Omit, 'as' | 'ref' | 'onClick'> & { href: string }) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n // don't prevent default, don't redirect if it's a new tab\n if (target === '_blank' || event.ctrlKey || event.metaKey) {\n } else {\n event.preventDefault();\n }\n },\n [target]\n );\n return (\n \n \n \n );\n}\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nexport const Spinner = styled.img`\n animation: 2s ${rotate} linear infinite;\n width: 16px;\n height: 16px;\n`;\n\nconst BackArrowLink = styled(StyledInternalLink)`\n color: ${({ theme }) => theme.text1};\n`;\nexport function BackArrow({ to }: { to: string }) {\n return (\n \n \n \n );\n}\n\nexport const CustomLightSpinner = styled(Spinner)<{ size: string }>`\n height: ${({ size }) => size};\n width: ${({ size }) => size};\n`;\n\nexport const HideSmall = styled.span`\n ${({ theme }) => theme.mediaWidth.upToSmall`\n display: none;\n `};\n`;\n\nexport const HideExtraSmall = styled.span`\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n display: none;\n `};\n`;\n\nexport const ExtraSmallOnly = styled.span`\n display: none;\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n display: block;\n `};\n`;\n","import React, { useMemo } from 'react';\nimport styled, {\n ThemeProvider as StyledComponentsThemeProvider,\n createGlobalStyle,\n css,\n DefaultTheme,\n} from 'styled-components';\nimport { useIsDarkMode } from '../state/user/hooks';\nimport { Text, TextProps } from 'rebass';\nimport { Colors } from './styled';\n\nexport * from './components';\n\nconst MEDIA_WIDTHS = {\n upToExtraSmall: 540,\n upToSmall: 720,\n upToMedium: 960,\n upToLarge: 1280,\n};\n\nconst mediaWidthTemplates: { [width in keyof typeof MEDIA_WIDTHS]: typeof css } = Object.keys(MEDIA_WIDTHS).reduce(\n (accumulator, size) => {\n (accumulator as any)[size] = (a: any, b: any, c: any) => css`\n @media (max-width: ${(MEDIA_WIDTHS as any)[size]}px) {\n ${css(a, b, c)}\n }\n `;\n return accumulator;\n },\n {}\n) as any;\n\nconst white = '#FFFFFF';\nconst black = '#000000';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function colors(darkMode: boolean): Colors {\n return {\n // base\n white,\n black,\n\n // text\n text1: '#EEFFFC',\n text2: '#C6DEDD',\n text3: '#6C7D84',\n text4: '#58686F',\n text5: '#2B3235',\n\n // backgrounds / greys\n bg1: '#151818',\n bg2: '#1D2934',\n bg3: '#2E3C48',\n bg4: '#41505E',\n bg5: '#607486',\n\n //specialty colors\n modalBG: 'rgba(0,0,0,.425)',\n advancedBG: 'rgba(0,0,0,0.1)',\n\n //primary colors\n primary1: '#0AC5A3',\n primary2: '#25C7AA',\n primary3: '#41CAB1',\n primary4: '#5CCCB7',\n primary5: '#77CEBE',\n\n // color text\n primaryText1: '#fff',\n\n // secondary colors\n secondary1: '#0E836E',\n secondary2: '#17000b26',\n secondary3: '#17000b26',\n\n // other\n red1: '#F65160',\n red2: '#CF3C4A',\n red3: '#A9222F',\n green1: '#49A871',\n yellow1: '#FFF59A',\n yellow2: '#DAA352',\n blue1: '#7EA4CC',\n };\n}\n\nexport function theme(darkMode: boolean): DefaultTheme {\n return {\n ...colors(darkMode),\n\n grids: {\n sm: 8,\n md: 12,\n lg: 24,\n },\n\n //shadows\n shadow1: '#000',\n\n // media queries\n mediaWidth: mediaWidthTemplates,\n\n // css snippets\n flexColumnNoWrap: css`\n display: flex;\n flex-flow: column nowrap;\n `,\n flexRowNoWrap: css`\n display: flex;\n flex-flow: row nowrap;\n `,\n };\n}\n\nexport default function ThemeProvider({ children }: { children: React.ReactNode }) {\n const darkMode = useIsDarkMode();\n\n const themeObject = useMemo(() => theme(darkMode), [darkMode]);\n\n return {children};\n}\n\nconst TextWrapper = styled(Text)<{ color: keyof Colors }>`\n color: ${({ color, theme }) => (theme as any)[color]};\n`;\n\nexport const TYPE = {\n main(props: TextProps) {\n return ;\n },\n link(props: TextProps) {\n return ;\n },\n black(props: TextProps) {\n return ;\n },\n white(props: TextProps) {\n return ;\n },\n body(props: TextProps) {\n return ;\n },\n largeHeader(props: TextProps) {\n return ;\n },\n mediumHeader(props: TextProps) {\n return ;\n },\n subHeader(props: TextProps) {\n return ;\n },\n small(props: TextProps) {\n return ;\n },\n blue(props: TextProps) {\n return ;\n },\n yellow(props: TextProps) {\n return ;\n },\n darkGray(props: TextProps) {\n return ;\n },\n gray(props: TextProps) {\n return ;\n },\n italic(props: TextProps) {\n return ;\n },\n error({ error, ...props }: { error: boolean } & TextProps) {\n return ;\n },\n};\n\nexport const FixedGlobalStyle = createGlobalStyle`\nhtml, input, textarea, button {\n font-family: 'Inter', sans-serif;\n font-display: fallback;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n}\n\na {\n color: ${colors(false).primary1};\n}\n\n* {\n box-sizing: border-box;\n}\n\nbutton {\n user-select: none;\n}\n\nhtml {\n font-size: 18px;\n font-variant: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n font-feature-settings: 'ss01' on, 'ss02' on, 'cv01' on, 'cv03' on;\n}\n`;\n\nexport const ThemedGlobalStyle = createGlobalStyle`\nhtml {\n color: ${({ theme }) => theme.text1};\n background-color: ${({ theme }) => theme.bg2};\n}\n\nbody {\n min-height: 100vh;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n background-image: url('images/bg.png');\n background-attachment: fixed;\n}\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport useCopyClipboard from '../../hooks/useCopyClipboard';\n\nimport { LinkStyledButton } from '../../theme';\nimport { CheckCircle, Copy } from 'react-feather';\n\nconst CopyIcon = styled(LinkStyledButton)`\n color: ${({ theme }) => theme.text3};\n flex-shrink: 0;\n display: flex;\n text-decoration: none;\n font-size: 0.825rem;\n :hover,\n :active,\n :focus {\n text-decoration: none;\n color: ${({ theme }) => theme.text2};\n }\n`;\nconst TransactionStatusText = styled.span`\n margin-left: 0.25rem;\n font-size: 0.825rem;\n ${({ theme }) => theme.flexRowNoWrap};\n align-items: center;\n`;\n\nexport default function CopyHelper(props: { toCopy: string; children?: React.ReactNode }) {\n const [isCopied, setCopied] = useCopyClipboard();\n\n return (\n setCopied(props.toCopy)}>\n {isCopied ? (\n \n \n Copied\n \n ) : (\n \n \n \n )}\n {isCopied ? '' : props.children}\n \n );\n}\n","import copy from 'copy-to-clipboard';\nimport { useCallback, useEffect, useState } from 'react';\n\nexport default function useCopyClipboard(timeout = 500): [boolean, (toCopy: string) => void] {\n const [isCopied, setIsCopied] = useState(false);\n\n const staticCopy = useCallback((text) => {\n const didCopy = copy(text);\n setIsCopied(didCopy);\n }, []);\n\n useEffect(() => {\n if (isCopied) {\n const hide = setTimeout(() => {\n setIsCopied(false);\n }, timeout);\n\n return () => {\n clearTimeout(hide);\n };\n }\n return undefined;\n }, [isCopied, setIsCopied, timeout]);\n\n return [isCopied, staticCopy];\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { CheckCircle, Triangle } from 'react-feather';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { getEtherscanLink } from '../../utils';\nimport { ExternalLink } from '../../theme';\nimport { useAllTransactions } from '../../state/transactions/hooks';\nimport { RowFixed } from '../Row';\nimport Loader from '../Loader';\n\nconst TransactionWrapper = styled.div``;\n\nconst TransactionStatusText = styled.div`\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst TransactionState = styled(ExternalLink)<{ pending: boolean; success?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none !important;\n border-radius: 0.5rem;\n padding: 0.25rem 0rem;\n font-weight: 500;\n font-size: 0.825rem;\n color: ${({ theme }) => theme.primary1};\n`;\n\nconst IconWrapper = styled.div<{ pending: boolean; success?: boolean }>`\n color: ${({ pending, success, theme }) => (pending ? theme.primary1 : success ? theme.green1 : theme.red1)};\n`;\n\nexport default function Transaction({ hash }: { hash: string }) {\n const { chainId } = useActiveWeb3React();\n const allTransactions = useAllTransactions();\n\n const tx = allTransactions?.[hash];\n const summary = tx?.summary;\n const pending = !tx?.receipt;\n const success = !pending && tx && (tx.receipt?.status === 1 || typeof tx.receipt?.status === 'undefined');\n\n if (!chainId) return null;\n\n return (\n \n \n \n {summary ?? hash} ↗\n \n \n {pending ? : success ? : }\n \n \n \n );\n}\n","import React, { useCallback, useContext } from 'react';\nimport { useDispatch } from 'react-redux';\nimport styled, { ThemeContext } from 'styled-components';\nimport { useActiveWeb3React } from '../../hooks';\nimport { AppDispatch } from '../../state';\nimport { clearAllTransactions } from '../../state/transactions/actions';\nimport { shortenAddress } from '../../utils';\nimport { AutoRow } from '../Row';\nimport Copy from './Copy';\nimport Transaction from './Transaction';\n\nimport { SUPPORTED_WALLETS } from '../../constants';\nimport { ReactComponent as Close } from '../../assets/images/x.svg';\nimport { getEtherscanLink } from '../../utils';\nimport {\n injected,\n walletconnect,\n walletlink,\n // fortmatic, portis\n} from '../../connectors';\nimport CoinbaseWalletIcon from '../../assets/images/coinbaseWalletIcon.svg';\nimport WalletConnectIcon from '../../assets/images/walletConnectIcon.svg';\n// import FortmaticIcon from '../../assets/images/fortmaticIcon.png';\n// import PortisIcon from '../../assets/images/portisIcon.png';\nimport Identicon from '../Identicon';\nimport { ButtonSecondary } from '../Button';\nimport { ExternalLink as LinkIcon } from 'react-feather';\nimport { ExternalLink, LinkStyledButton, TYPE } from '../../theme';\n\nconst HeaderRow = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n padding: 1rem 1rem;\n font-weight: 500;\n color: ${(props) => (props.color === 'blue' ? ({ theme }) => theme.primary1 : 'inherit')};\n ${({ theme }) => theme.mediaWidth.upToMedium`\n padding: 1rem;\n `};\n`;\n\nconst UpperSection = styled.div`\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n`;\n\nconst InfoCard = styled.div`\n padding: 1rem;\n border: 1px solid ${({ theme }) => theme.bg3};\n border-radius: 20px;\n position: relative;\n display: grid;\n grid-row-gap: 12px;\n margin-bottom: 20px;\n`;\n\nconst AccountGroupingRow = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n justify-content: space-between;\n align-items: center;\n font-weight: 400;\n color: ${({ theme }) => theme.text1};\n\n div {\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n }\n`;\n\nconst AccountSection = styled.div`\n background-color: ${({ theme }) => theme.bg1};\n padding: 0rem 1rem;\n ${({ theme }) => theme.mediaWidth.upToMedium`padding: 0rem 1rem 1.5rem 1rem;`};\n`;\n\nconst YourAccount = styled.div`\n h5 {\n margin: 0 0 1rem 0;\n font-weight: 400;\n }\n\n h4 {\n margin: 0;\n font-weight: 500;\n }\n`;\n\nconst LowerSection = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap}\n padding: 1.5rem;\n flex-grow: 1;\n overflow: auto;\n background-color: ${({ theme }) => theme.bg2};\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n h5 {\n margin: 0;\n font-weight: 400;\n color: ${({ theme }) => theme.text3};\n }\n`;\n\nconst AccountControl = styled.div`\n display: flex;\n justify-content: space-between;\n min-width: 0;\n width: 100%;\n\n font-weight: 500;\n font-size: 1.25rem;\n\n a:hover {\n text-decoration: underline;\n }\n\n p {\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst AddressLink = styled(ExternalLink)<{ hasENS: boolean; isENS: boolean }>`\n font-size: 0.825rem;\n color: ${({ theme }) => theme.text3};\n margin-left: 1rem;\n font-size: 0.825rem;\n display: flex;\n :hover {\n color: ${({ theme }) => theme.text2};\n }\n`;\n\nconst CloseIcon = styled.div`\n position: absolute;\n right: 1rem;\n top: 14px;\n &:hover {\n cursor: pointer;\n opacity: 0.6;\n }\n`;\n\nconst CloseColor = styled(Close)`\n path {\n stroke: ${({ theme }) => theme.text4};\n }\n`;\n\nconst WalletName = styled.div`\n width: initial;\n font-size: 0.825rem;\n font-weight: 500;\n color: ${({ theme }) => theme.text3};\n`;\n\nconst IconWrapper = styled.div<{ size?: number }>`\n ${({ theme }) => theme.flexColumnNoWrap};\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n & > img,\n span {\n height: ${({ size }) => (size ? size + 'px' : '32px')};\n width: ${({ size }) => (size ? size + 'px' : '32px')};\n }\n ${({ theme }) => theme.mediaWidth.upToMedium`\n align-items: flex-end;\n `};\n`;\n\nconst TransactionListWrapper = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap};\n`;\n\nconst WalletAction = styled(ButtonSecondary)`\n width: fit-content;\n font-weight: 400;\n margin-left: 8px;\n font-size: 0.825rem;\n padding: 4px 6px;\n :hover {\n cursor: pointer;\n text-decoration: underline;\n }\n`;\n\n// const MainWalletAction = styled(WalletAction)`\n// color: ${({ theme }) => theme.primary1};\n// `;\n\nfunction renderTransactions(transactions: string[]) {\n return (\n \n {transactions.map((hash, i) => {\n return ;\n })}\n \n );\n}\n\ninterface AccountDetailsProps {\n toggleWalletModal: () => void;\n pendingTransactions: string[];\n confirmedTransactions: string[];\n ENSName?: string;\n openOptions: () => void;\n}\n\nexport default function AccountDetails({\n toggleWalletModal,\n pendingTransactions,\n confirmedTransactions,\n ENSName,\n openOptions,\n}: AccountDetailsProps) {\n const { chainId, account, connector } = useActiveWeb3React();\n const theme = useContext(ThemeContext);\n const dispatch = useDispatch();\n\n function formatConnectorName() {\n const { ethereum } = window;\n const isMetaMask = !!(ethereum && ethereum.isMetaMask);\n const name = Object.keys(SUPPORTED_WALLETS)\n .filter(\n (k) =>\n SUPPORTED_WALLETS[k].connector === connector && (connector !== injected || isMetaMask === (k === 'METAMASK'))\n )\n .map((k) => SUPPORTED_WALLETS[k].name)[0];\n return Connected with {name};\n }\n\n function getStatusIcon() {\n if (connector === injected) {\n return (\n \n \n \n );\n } else if (connector === walletconnect) {\n return (\n \n {'wallet\n \n );\n } else if (connector === walletlink) {\n return (\n \n {'coinbase\n \n );\n }\n // else if (connector === fortmatic) {\n // return (\n // \n // {'fortmatic\n // \n // );\n // } else if (connector === portis) {\n // return (\n // <>\n // \n // {'portis\n // {\n // portis.portis.showPortis();\n // }}\n // >\n // Show Portis\n // \n // \n // \n // );\n // }\n return null;\n }\n\n const clearAllTransactionsCallback = useCallback(() => {\n if (chainId) dispatch(clearAllTransactions({ chainId }));\n }, [dispatch, chainId]);\n\n return (\n <>\n \n \n \n \n Account\n \n \n \n \n {formatConnectorName()}\n
\n {connector !== injected && connector !== walletlink && (\n {\n (connector as any).close();\n }}\n >\n Disconnect\n \n )}\n {\n openOptions();\n }}\n >\n Change\n \n
\n
\n \n \n {ENSName ? (\n <>\n
\n {getStatusIcon()}\n

{ENSName}

\n
\n \n ) : (\n <>\n
\n {getStatusIcon()}\n

{account && shortenAddress(account)}

\n
\n \n )}\n
\n
\n \n {ENSName ? (\n <>\n \n
\n {account && (\n \n Copy Address\n \n )}\n {chainId && account && (\n \n \n View on Explorer\n \n )}\n
\n
\n \n ) : (\n <>\n \n
\n {account && (\n \n Copy Address\n \n )}\n {chainId && account && (\n \n \n View on Explorer\n \n )}\n
\n
\n \n )}\n
\n
\n
\n
\n
\n {!!pendingTransactions.length || !!confirmedTransactions.length ? (\n \n \n Recent Transactions\n (clear all)\n \n {renderTransactions(pendingTransactions)}\n {renderTransactions(confirmedTransactions)}\n \n ) : (\n \n Your transactions will appear here...\n \n )}\n \n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { animated, useTransition, useSpring } from 'react-spring';\nimport { DialogOverlay, DialogContent } from '@reach/dialog';\nimport { isMobile } from 'react-device-detect';\nimport '@reach/dialog/styles.css';\nimport { transparentize } from 'polished';\nimport { useGesture } from 'react-use-gesture';\n\nconst AnimatedDialogOverlay = animated(DialogOverlay);\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst StyledDialogOverlay = styled(AnimatedDialogOverlay)`\n &[data-reach-dialog-overlay] {\n z-index: 2;\n background-color: transparent;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n background-color: ${({ theme }) => theme.modalBG};\n }\n`;\n\nconst AnimatedDialogContent = animated(DialogContent);\n// destructure to not pass custom props to Dialog DOM element\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst StyledDialogContent = styled(({ minHeight, maxHeight, mobile, isOpen, ...rest }) => (\n \n)).attrs({\n 'aria-label': 'dialog',\n})`\n overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')};\n\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n background-color: ${({ theme }) => theme.bg1};\n box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.95, theme.shadow1)};\n padding: 0px;\n width: 50vw;\n overflow-y: ${({ mobile }) => (mobile ? 'scroll' : 'hidden')};\n overflow-x: hidden;\n\n align-self: ${({ mobile }) => (mobile ? 'flex-end' : 'center')};\n\n max-width: 420px;\n ${({ maxHeight }) =>\n maxHeight &&\n css`\n max-height: ${maxHeight}vh;\n `}\n ${({ minHeight }) =>\n minHeight &&\n css`\n min-height: ${minHeight}vh;\n `}\n display: flex;\n border-radius: 20px;\n ${({ theme }) => theme.mediaWidth.upToMedium`\n width: 65vw;\n margin: 0;\n `}\n ${({ theme, mobile }) => theme.mediaWidth.upToSmall`\n width: 85vw;\n ${\n mobile &&\n css`\n width: 100vw;\n border-radius: 20px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n `\n }\n `}\n }\n`;\n\ninterface ModalProps {\n isOpen: boolean;\n onDismiss: () => void;\n minHeight?: number | false;\n maxHeight?: number;\n initialFocusRef?: React.RefObject;\n children?: React.ReactNode;\n}\n\nexport default function Modal({\n isOpen,\n onDismiss,\n minHeight = false,\n maxHeight = 90,\n initialFocusRef,\n children,\n}: ModalProps) {\n const fadeTransition = useTransition(isOpen, null, {\n config: { duration: 200 },\n from: { opacity: 0 },\n enter: { opacity: 1 },\n leave: { opacity: 0 },\n });\n\n const [{ y }, set] = useSpring(() => ({ y: 0, config: { mass: 1, tension: 210, friction: 20 } }));\n const bind = useGesture({\n onDrag: (state) => {\n set({\n y: state.down ? state.movement[1] : 0,\n });\n if (state.movement[1] > 300 || (state.velocity > 3 && state.direction[1] > 0)) {\n onDismiss();\n }\n },\n });\n\n return (\n <>\n {fadeTransition.map(\n ({ item, key, props }) =>\n item && (\n \n `translateY(${y > 0 ? y : 0}px)`) },\n }\n : {})}\n aria-label=\"dialog content\"\n minHeight={minHeight}\n maxHeight={maxHeight}\n mobile={isMobile}\n >\n {/* prevents the automatic focusing of inputs on mobile by the reach dialog */}\n {!initialFocusRef && isMobile ?
: null}\n {children}\n \n \n )\n )}\n \n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { ExternalLink } from '../../theme';\n\nconst InfoCard = styled.button<{ active?: boolean }>`\n background-color: ${({ theme, active }) => (active ? theme.bg4 : theme.bg3)};\n padding: 1rem;\n outline: none;\n border: 1px solid;\n border-radius: 12px;\n width: 100% !important;\n &:focus {\n box-shadow: 0 0 0 1px ${({ theme }) => theme.primary1};\n }\n border-color: ${({ theme, active }) => (active ? theme.bg4 : theme.bg3)};\n`;\n\nconst OptionCard = styled(InfoCard as any)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-top: 2rem;\n padding: 1rem;\n`;\n\nconst OptionCardLeft = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap};\n justify-content: center;\n height: 100%;\n`;\n\nconst OptionCardClickable = styled(OptionCard as any)<{ clickable?: boolean }>`\n margin-top: 0;\n &:hover {\n cursor: ${({ clickable }) => (clickable ? 'pointer' : '')};\n border: ${({ clickable, theme }) => (clickable ? `1px solid ${theme.primary1}` : ``)};\n }\n opacity: ${({ disabled }) => (disabled ? '0.5' : '1')};\n`;\n\nconst GreenCircle = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n justify-content: center;\n align-items: center;\n\n &:first-child {\n height: 10px;\n width: 10px;\n margin-right: 10px;\n background-color: ${({ theme }) => theme.green1};\n border-radius: 50%;\n }\n`;\n\nconst CircleWrapper = styled.div`\n color: ${({ theme }) => theme.green1};\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst HeaderText = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n color: ${(props) => (props.color === 'blue' ? ({ theme }) => theme.primary1 : ({ theme }) => theme.text1)};\n font-size: 1rem;\n font-weight: 500;\n`;\n\nconst SubHeader = styled.div`\n color: ${({ theme }) => theme.text1};\n margin-top: 10px;\n font-size: 12px;\n`;\n\nconst IconWrapper = styled.div<{ size?: number | null }>`\n ${({ theme }) => theme.flexColumnNoWrap};\n align-items: center;\n justify-content: center;\n & > img,\n span {\n height: ${({ size }) => (size ? size + 'px' : '24px')};\n width: ${({ size }) => (size ? size + 'px' : '24px')};\n }\n ${({ theme }) => theme.mediaWidth.upToMedium`\n align-items: flex-end;\n `};\n`;\n\nexport default function Option({\n link = null,\n clickable = true,\n size,\n onClick = null,\n color,\n header,\n subheader = null,\n icon,\n active = false,\n id,\n}: {\n link?: string | null;\n clickable?: boolean;\n size?: number | null;\n onClick?: null | (() => void);\n color: string;\n header: React.ReactNode;\n subheader: React.ReactNode | null;\n icon: string;\n active?: boolean;\n id: string;\n}) {\n const content = (\n \n \n \n {active ? (\n \n \n
\n \n \n ) : (\n ''\n )}\n {header}\n \n {subheader && {subheader}}\n \n \n {'Icon'}\n \n \n );\n if (link) {\n return {content};\n }\n\n return content;\n}\n","import { AbstractConnector } from '@web3-react/abstract-connector';\nimport React from 'react';\nimport styled from 'styled-components';\nimport Option from './Option';\nimport { SUPPORTED_WALLETS } from '../../constants';\nimport { injected } from '../../connectors';\nimport { darken } from 'polished';\nimport Loader from '../Loader';\n\nconst PendingSection = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap};\n align-items: center;\n justify-content: center;\n width: 100%;\n & > * {\n width: 100%;\n }\n`;\n\nconst StyledLoader = styled(Loader)`\n margin-right: 1rem;\n`;\n\nconst LoadingMessage = styled.div<{ error?: boolean }>`\n ${({ theme }) => theme.flexRowNoWrap};\n align-items: center;\n justify-content: flex-start;\n border-radius: 12px;\n margin-bottom: 20px;\n color: ${({ theme, error }) => (error ? theme.red1 : 'inherit')};\n border: 1px solid ${({ theme, error }) => (error ? theme.red1 : theme.text4)};\n\n & > * {\n padding: 1rem;\n }\n`;\n\nconst ErrorGroup = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst ErrorButton = styled.div`\n border-radius: 8px;\n font-size: 12px;\n color: ${({ theme }) => theme.text1};\n background-color: ${({ theme }) => theme.bg4};\n margin-left: 1rem;\n padding: 0.5rem;\n font-weight: 600;\n user-select: none;\n\n &:hover {\n cursor: pointer;\n background-color: ${({ theme }) => darken(0.1, theme.text4)};\n }\n`;\n\nconst LoadingWrapper = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n align-items: center;\n justify-content: center;\n`;\n\nexport default function PendingView({\n connector,\n error = false,\n setPendingError,\n tryActivation,\n}: {\n connector?: AbstractConnector;\n error?: boolean;\n setPendingError: (error: boolean) => void;\n tryActivation: (connector: AbstractConnector) => void;\n}) {\n const isMetamask = window?.ethereum?.isMetaMask;\n\n return (\n \n \n \n {error ? (\n \n
Error connecting.
\n {\n setPendingError(false);\n connector && tryActivation(connector);\n }}\n >\n Try Again\n \n
\n ) : (\n <>\n \n Initializing...\n \n )}\n
\n
\n {Object.keys(SUPPORTED_WALLETS).map((key) => {\n const option = SUPPORTED_WALLETS[key];\n if (option.connector === connector) {\n if (option.connector === injected) {\n if (isMetamask && option.name !== 'MetaMask') {\n return null;\n }\n if (!isMetamask && option.name === 'MetaMask') {\n return null;\n }\n }\n return (\n \n );\n }\n return null;\n })}\n
\n );\n}\n","import { AbstractConnector } from '@web3-react/abstract-connector';\nimport { UnsupportedChainIdError, useWeb3React } from '@web3-react/core';\nimport { WalletConnectConnector } from '@web3-react/walletconnect-connector';\nimport React, { useEffect, useState } from 'react';\nimport { isMobile } from 'react-device-detect';\nimport styled from 'styled-components';\nimport MetamaskIcon from '../../assets/images/metamask.png';\nimport { ReactComponent as Close } from '../../assets/images/x.svg';\nimport {\n // fortmatic,\n injected,\n // portis\n} from '../../connectors';\n// import { OVERLAY_READY } from '../../connectors/Fortmatic';\nimport { SUPPORTED_WALLETS } from '../../constants';\nimport usePrevious from '../../hooks/usePrevious';\nimport { ApplicationModal } from '../../state/application/actions';\nimport { useModalOpen, useWalletModalToggle } from '../../state/application/hooks';\nimport { ExternalLink } from '../../theme';\nimport AccountDetails from '../AccountDetails';\n\nimport Modal from '../Modal';\nimport Option from './Option';\nimport PendingView from './PendingView';\n\nconst CloseIcon = styled.div`\n position: absolute;\n right: 1rem;\n top: 1rem;\n\n &:hover {\n cursor: pointer;\n opacity: 0.5;\n }\n`;\n\nconst CloseColor = styled(Close)`\n path {\n stroke: ${({ theme }) => theme.text4};\n }\n`;\n\nconst Wrapper = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap}\n margin: 0;\n padding: 0;\n width: 100%;\n`;\n\nconst HeaderRow = styled.div`\n ${({ theme }) => theme.flexRowNoWrap};\n padding: 1rem 1rem;\n font-weight: 500;\n color: ${(props) => (props.color === 'blue' ? ({ theme }) => theme.primary1 : 'inherit')};\n ${({ theme }) => theme.mediaWidth.upToMedium`\n padding: 1rem;\n `};\n`;\n\nconst ContentWrapper = styled.div`\n background-color: ${({ theme }) => theme.bg2};\n padding: 2rem;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n\n ${({ theme }) => theme.mediaWidth.upToMedium`padding: 1rem`};\n`;\n\nconst UpperSection = styled.div`\n position: relative;\n\n h5 {\n margin: 0;\n margin-bottom: 0.5rem;\n font-size: 1rem;\n font-weight: 400;\n }\n\n h5:last-child {\n margin-bottom: 0px;\n }\n\n h4 {\n margin-top: 0;\n font-weight: 500;\n }\n`;\n\nconst Blurb = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n margin-top: 2rem;\n ${({ theme }) => theme.mediaWidth.upToMedium`\n margin: 1rem;\n font-size: 12px;\n `};\n`;\n\nconst OptionGrid = styled.div`\n display: grid;\n grid-gap: 10px;\n ${({ theme }) => theme.mediaWidth.upToMedium`\n grid-template-columns: 1fr;\n grid-gap: 10px;\n `};\n`;\n\nconst HoverText = styled.div`\n :hover {\n cursor: pointer;\n }\n`;\n\nconst WALLET_VIEWS = {\n OPTIONS: 'options',\n OPTIONS_SECONDARY: 'options_secondary',\n ACCOUNT: 'account',\n PENDING: 'pending',\n};\n\nexport default function WalletModal({\n pendingTransactions,\n confirmedTransactions,\n ENSName,\n}: {\n pendingTransactions: string[]; // hashes of pending\n confirmedTransactions: string[]; // hashes of confirmed\n ENSName?: string;\n}) {\n // important that these are destructed from the account-specific web3-react context\n const { active, account, connector, activate, error } = useWeb3React();\n\n const [walletView, setWalletView] = useState(WALLET_VIEWS.ACCOUNT);\n\n const [pendingWallet, setPendingWallet] = useState();\n\n const [pendingError, setPendingError] = useState();\n\n const walletModalOpen = useModalOpen(ApplicationModal.WALLET);\n const toggleWalletModal = useWalletModalToggle();\n\n const previousAccount = usePrevious(account);\n\n // close on connection, when logged out before\n useEffect(() => {\n if (account && !previousAccount && walletModalOpen) {\n toggleWalletModal();\n }\n }, [account, previousAccount, toggleWalletModal, walletModalOpen]);\n\n // always reset to account view\n useEffect(() => {\n if (walletModalOpen) {\n setPendingError(false);\n setWalletView(WALLET_VIEWS.ACCOUNT);\n }\n }, [walletModalOpen]);\n\n // close modal when a connection is successful\n const activePrevious = usePrevious(active);\n const connectorPrevious = usePrevious(connector);\n useEffect(() => {\n if (walletModalOpen && ((active && !activePrevious) || (connector && connector !== connectorPrevious && !error))) {\n setWalletView(WALLET_VIEWS.ACCOUNT);\n }\n }, [setWalletView, active, error, connector, walletModalOpen, activePrevious, connectorPrevious]);\n\n const tryActivation = async (connector: AbstractConnector | undefined) => {\n setPendingWallet(connector); // set wallet for pending view\n setWalletView(WALLET_VIEWS.PENDING);\n\n // if the connector is walletconnect and the user has already tried to connect, manually reset the connector\n if (connector instanceof WalletConnectConnector && connector.walletConnectProvider?.wc?.uri) {\n connector.walletConnectProvider = undefined;\n }\n\n connector &&\n activate(connector, undefined, true).catch((error) => {\n if (error instanceof UnsupportedChainIdError) {\n activate(connector); // a little janky...can't use setError because the connector isn't set\n } else {\n setPendingError(true);\n }\n });\n };\n\n // close wallet modal if fortmatic modal is active\n // useEffect(() => {\n // fortmatic.on(OVERLAY_READY, () => {\n // toggleWalletModal();\n // });\n // }, [toggleWalletModal]);\n\n // get wallets user can switch too, depending on device/browser\n function getOptions() {\n const isMetamask = window.ethereum && window.ethereum.isMetaMask;\n return Object.keys(SUPPORTED_WALLETS).map((key) => {\n const option = SUPPORTED_WALLETS[key];\n // check for mobile options\n if (isMobile) {\n //disable portis on mobile for now\n // if (option.connector === portis) {\n // return null;\n // }\n\n if (!window.web3 && !window.ethereum && option.mobile) {\n return (\n {\n option.connector !== connector && !option.href && tryActivation(option.connector);\n }}\n id={`connect-${key}`}\n key={key}\n active={option.connector && option.connector === connector}\n color={option.color}\n link={option.href}\n header={option.name}\n subheader={null}\n icon={require('../../assets/images/' + option.iconName)}\n />\n );\n }\n return null;\n }\n\n // overwrite injected when needed\n if (option.connector === injected) {\n // don't show injected if there's no injected provider\n if (!(window.web3 || window.ethereum)) {\n if (option.name === 'MetaMask') {\n return (\n \n );\n } else {\n return null; //dont want to return install twice\n }\n }\n // don't return metamask if injected provider isn't metamask\n else if (option.name === 'MetaMask' && !isMetamask) {\n return null;\n }\n // likewise for generic\n else if (option.name === 'Injected' && isMetamask) {\n return null;\n }\n }\n\n // return rest of options\n return (\n !isMobile &&\n !option.mobileOnly && (\n {\n option.connector === connector\n ? setWalletView(WALLET_VIEWS.ACCOUNT)\n : !option.href && tryActivation(option.connector);\n }}\n key={key}\n active={option.connector === connector}\n color={option.color}\n link={option.href}\n header={option.name}\n subheader={null} //use option.descriptio to bring back multi-line\n icon={require('../../assets/images/' + option.iconName)}\n />\n )\n );\n });\n }\n\n function getModalContent() {\n if (error) {\n return (\n \n \n \n \n {error instanceof UnsupportedChainIdError ? 'Wrong Network' : 'Error connecting'}\n \n {error instanceof UnsupportedChainIdError ? (\n
Please connect to the appropriate Moon Rabbit network.
\n ) : (\n 'Error connecting. Try refreshing the page.'\n )}\n
\n
\n );\n }\n if (account && walletView === WALLET_VIEWS.ACCOUNT) {\n return (\n setWalletView(WALLET_VIEWS.OPTIONS)}\n />\n );\n }\n return (\n \n \n \n \n {walletView !== WALLET_VIEWS.ACCOUNT ? (\n \n {\n setPendingError(false);\n setWalletView(WALLET_VIEWS.ACCOUNT);\n }}\n >\n Back\n \n \n ) : (\n \n Connect to a wallet\n \n )}\n \n {walletView === WALLET_VIEWS.PENDING ? (\n \n ) : (\n {getOptions()}\n )}\n {walletView !== WALLET_VIEWS.PENDING && (\n \n New to Ethereum?  {' '}\n Learn more about wallets\n \n )}\n \n \n );\n }\n\n return (\n \n {getModalContent()}\n \n );\n}\n","import { AbstractConnector } from '@web3-react/abstract-connector';\nimport { UnsupportedChainIdError, useWeb3React } from '@web3-react/core';\nimport { darken, lighten } from 'polished';\nimport React, { useMemo } from 'react';\nimport { Activity } from 'react-feather';\nimport styled, { css } from 'styled-components';\nimport CoinbaseWalletIcon from '../../assets/images/coinbaseWalletIcon.svg';\n// import FortmaticIcon from '../../assets/images/fortmaticIcon.png';\n// import PortisIcon from '../../assets/images/portisIcon.png';\nimport WalletConnectIcon from '../../assets/images/walletConnectIcon.svg';\nimport {\n // fortmatic,\n injected,\n //portis,\n walletconnect,\n walletlink,\n} from '../../connectors';\nimport { NetworkContextName } from '../../constants';\nimport useENSName from '../../hooks/useENSName';\nimport { useWalletModalToggle } from '../../state/application/hooks';\nimport { isTransactionRecent, useAllTransactions } from '../../state/transactions/hooks';\nimport { TransactionDetails } from '../../state/transactions/reducer';\nimport { shortenAddress } from '../../utils';\nimport { ButtonSecondary } from '../Button';\n\nimport Identicon from '../Identicon';\nimport Loader from '../Loader';\n\nimport { RowBetween } from '../Row';\nimport WalletModal from '../WalletModal';\n\nconst IconWrapper = styled.div<{ size?: number }>`\n ${({ theme }) => theme.flexColumnNoWrap};\n align-items: center;\n justify-content: center;\n & > * {\n height: ${({ size }) => (size ? size + 'px' : '32px')};\n width: ${({ size }) => (size ? size + 'px' : '32px')};\n }\n`;\n\nconst Web3StatusGeneric = styled(ButtonSecondary)`\n ${({ theme }) => theme.flexRowNoWrap}\n width: 100%;\n align-items: center;\n padding: 0.4rem;\n border-radius: 12px;\n cursor: pointer;\n user-select: none;\n :focus {\n outline: none;\n }\n`;\nconst Web3StatusError = styled(Web3StatusGeneric)`\n background-color: ${({ theme }) => theme.red1};\n border: 1px solid ${({ theme }) => theme.red1};\n color: ${({ theme }) => theme.white};\n font-weight: 500;\n :hover,\n :focus {\n background-color: ${({ theme }) => darken(0.1, theme.red1)};\n }\n`;\n\nconst Web3StatusConnect = styled(Web3StatusGeneric)<{ faded?: boolean }>`\n background-color: ${({ theme }) => theme.primary1};\n border: none;\n color: ${({ theme }) => theme.primaryText1};\n font-weight: 500;\n\n :hover,\n :focus {\n border: 1px solid ${({ theme }) => darken(0.05, theme.primary4)};\n color: ${({ theme }) => theme.primaryText1};\n }\n\n ${({ faded }) =>\n faded &&\n css`\n background-color: ${({ theme }) => theme.primary1};\n border: 1px solid ${({ theme }) => theme.primary1};\n color: ${({ theme }) => theme.primaryText1};\n\n :hover,\n :focus {\n border: 1px solid ${({ theme }) => darken(0.05, theme.primary4)};\n color: ${({ theme }) => darken(0.05, theme.primaryText1)};\n }\n `}\n`;\n\nconst Web3StatusConnected = styled(Web3StatusGeneric)<{ pending?: boolean }>`\n background-color: ${({ pending, theme }) => (pending ? theme.primary1 : theme.bg2)};\n border: 1px solid ${({ pending, theme }) => (pending ? theme.primary1 : theme.bg3)};\n color: ${({ pending, theme }) => (pending ? theme.white : theme.text1)};\n font-weight: 500;\n :hover,\n :focus {\n background-color: ${({ pending, theme }) => (pending ? darken(0.05, theme.primary1) : lighten(0.05, theme.bg2))};\n\n :focus {\n border: 1px solid ${({ pending, theme }) => (pending ? darken(0.1, theme.primary1) : darken(0.1, theme.bg3))};\n }\n }\n`;\n\nconst Text = styled.p`\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 0.3rem;\n width: fit-content;\n font-weight: 500;\n`;\n\nconst NetworkIcon = styled(Activity)`\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n width: 16px;\n height: 16px;\n`;\n\n// we want the latest one to come first, so return negative if a is after b\nfunction newTransactionsFirst(a: TransactionDetails, b: TransactionDetails) {\n return b.addedTime - a.addedTime;\n}\n\n// eslint-disable-next-line react/prop-types\nfunction StatusIcon({ connector }: { connector: AbstractConnector }) {\n if (connector === injected) {\n return ;\n } else if (connector === walletconnect) {\n return (\n \n {''}\n \n );\n } else if (connector === walletlink) {\n return (\n \n {''}\n \n );\n }\n // else if (connector === fortmatic) {\n // return (\n // \n // {''}\n // \n // );\n // } else if (connector === portis) {\n // return (\n // \n // {''}\n // \n // );\n // }\n return null;\n}\n\nfunction Web3StatusInner() {\n const { account, connector, error } = useWeb3React();\n\n const { ENSName } = useENSName(account ?? undefined);\n\n const allTransactions = useAllTransactions();\n\n const sortedRecentTransactions = useMemo(() => {\n const txs = Object.values(allTransactions);\n return txs.filter(isTransactionRecent).sort(newTransactionsFirst);\n }, [allTransactions]);\n\n const pending = sortedRecentTransactions.filter((tx) => !tx.receipt).map((tx) => tx.hash);\n\n const hasPendingTransactions = !!pending.length;\n const toggleWalletModal = useWalletModalToggle();\n\n if (account) {\n return (\n \n {hasPendingTransactions ? (\n \n {pending?.length} Pending \n \n ) : (\n <>\n {ENSName || shortenAddress(account)}\n \n )}\n {!hasPendingTransactions && connector && }\n \n );\n } else if (error) {\n return (\n \n \n {error instanceof UnsupportedChainIdError ? 'Wrong Network' : 'Error'}\n \n );\n } else {\n return (\n \n {'Connect to a wallet'}\n \n );\n }\n}\n\nexport default function Web3Status() {\n const { active, account } = useWeb3React();\n const contextNetwork = useWeb3React(NetworkContextName);\n const { ENSName } = useENSName(account ?? undefined);\n const allTransactions = useAllTransactions();\n\n const sortedRecentTransactions = useMemo(() => {\n const txs = Object.values(allTransactions);\n return txs.filter(isTransactionRecent).sort(newTransactionsFirst);\n }, [allTransactions]);\n\n const pending = sortedRecentTransactions.filter((tx) => !tx.receipt).map((tx) => tx.hash);\n const confirmed = sortedRecentTransactions.filter((tx) => tx.receipt).map((tx) => tx.hash);\n\n if (!contextNetwork.active && !active) {\n return null;\n }\n\n return (\n <>\n \n \n \n );\n}\n","import { ChainId } from '@moonrabbit/swap-sdk';\nimport React from 'react';\nimport { Text } from 'rebass';\nimport { NavLink } from 'react-router-dom';\nimport { darken } from 'polished';\nimport styled from 'styled-components';\n\nimport Logo from '../../assets/svg/logo.svg';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useETHBalances } from '../../state/wallet/hooks';\n\nimport { LightCard } from '../Card';\nimport Row, { RowFixed } from '../Row';\nimport Web3Status from '../Web3Status';\nimport { ExternalLink } from '../../theme';\n\nconst HeaderFrame = styled.div`\n width: 100vw;\n margin: 0.8rem auto;\n padding: 0.8rem 1.6rem;\n z-index: 2;\n display: grid;\n grid-template-columns: 120px 1fr 120px;\n justify-content: space-between;\n align-items: center;\n flex-direction: row;\n\n ${({ theme }) => theme.mediaWidth.upToLarge`\n grid-template-columns: 200px 1fr 120px;\n `};\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n grid-template-columns: 170px 1fr;\n `};\n\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n padding: 0.5rem 1rem;\n grid-template-columns: 120px 1fr;\n `}\n`;\n\nconst HeaderControls = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-self: flex-end;\n`;\n\nconst HeaderElement = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n ${({ theme }) => theme.mediaWidth.upToMedium`\n flex-direction: row-reverse;\n align-items: center;\n `};\n`;\n\nconst HeaderRow = styled(RowFixed)`\n display: flex;\n align-items: center;\n\n ${({ theme }) => theme.mediaWidth.upToMedium`\n width: 100%;\n `};\n`;\n\nconst HeaderLinks = styled(Row)`\n width: auto;\n margin: 0 auto;\n padding: 0.3rem;\n justify-content: center;\n border-radius: 0.8rem;\n box-shadow: rgba(0, 0, 0, 0.01) 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 4px 8px, rgba(0, 0, 0, 0.04) 0px 16px 24px,\n rgba(0, 0, 0, 0.01) 0px 24px 32px;\n background-color: ${({ theme }) => theme.bg1};\n\n ${({ theme }) => theme.mediaWidth.upToLarge`\n margin: 0;\n margin-right: auto;\n `};\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n position: fixed;\n bottom: 0;\n padding: .5rem;\n width: 100%;\n left: 50%;\n transform: translateX(-50%);\n border-radius: 0;\n border-top: 1px solid ${({ theme }) => theme.bg3};\n `};\n`;\n\nconst AccountElement = styled.div<{ active: boolean }>`\n display: flex;\n flex-direction: row;\n align-items: center;\n background-color: ${({ theme, active }) => (!active ? theme.bg1 : theme.bg3)};\n border-radius: 0.8rem;\n white-space: nowrap;\n width: 100%;\n cursor: pointer;\n box-shadow: rgba(0, 0, 0, 0.01) 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 4px 8px, rgba(0, 0, 0, 0.04) 0px 16px 24px,\n rgba(0, 0, 0, 0.01) 0px 24px 32px;\n\n :focus {\n border: 1px solid blue;\n }\n`;\n\nconst HideSmall = styled.span`\n ${({ theme }) => theme.mediaWidth.upToMedium`\n display: none;\n `};\n`;\n\nconst NetworkCard = styled(LightCard)`\n border-radius: 0.8rem;\n padding: 8px 12px;\n box-shadow: rgba(0, 0, 0, 0.01) 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 4px 8px, rgba(0, 0, 0, 0.04) 0px 16px 24px,\n rgba(0, 0, 0, 0.01) 0px 24px 32px;\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n margin: 0;\n margin-right: 0.5rem;\n width: initial;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 1;\n `};\n`;\n\nconst BalanceText = styled(Text)`\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n display: none;\n `};\n`;\n\nconst StyledLogo = styled.img`\n width: 170px;\n\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n width: 120px;\n `}\n`;\n\nconst Title = styled.a`\n display: flex;\n align-items: center;\n pointer-events: auto;\n justify-self: flex-start;\n margin-right: 12px;\n ${({ theme }) => theme.mediaWidth.upToSmall`\n justify-self: center;\n `};\n :hover {\n cursor: pointer;\n }\n`;\n\nconst Icon = styled.div`\n display: flex;\n transition: transform 0.3s ease;\n :hover {\n transform: scale(1.1);\n }\n`;\n\nconst activeClassName = 'ACTIVE';\n\nconst StyledNavLink = styled(NavLink).attrs({\n activeClassName,\n})`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: left;\n border-radius: 12px;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.text2};\n font-size: 0.9rem;\n width: fit-content;\n padding: 0.3rem 0.6rem;\n font-weight: 500;\n transition: 0.3s;\n\n &:not(:last-child) {\n margin-right: 0.16rem;\n }\n\n &.${activeClassName} {\n color: ${({ theme }) => theme.text1};\n background-color: ${({ theme }) => theme.bg3};\n }\n\n :hover,\n :focus {\n color: ${({ theme }) => darken(0.1, theme.text1)};\n }\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n border-radius: 8px;\n border: 1px solid ${({ theme }) => theme.bg3};\n\n &:not(:last-child) {\n margin-right: 2%;\n }\n `};\n`;\n\nconst StyledExternalLink = styled(ExternalLink).attrs({\n activeClassName,\n})<{ isActive?: boolean }>`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: left;\n border-radius: 12px;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.text2};\n font-size: 0.9rem;\n width: fit-content;\n padding: 0.3rem 0.6rem;\n font-weight: 500;\n transition: 0.3s;\n\n &:not(:last-child) {\n margin-right: 0.16rem;\n }\n\n &.${activeClassName} {\n color: ${({ theme }) => theme.text1};\n background-color: ${({ theme }) => theme.bg3};\n }\n\n :hover,\n :focus {\n color: ${({ theme }) => darken(0.1, theme.text1)};\n text-decoration: none;\n }\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n border-radius: 8px;\n border: 1px solid ${({ theme }) => theme.bg3};\n\n &:not(:last-child) {\n margin-right: 2%;\n }\n`};\n`;\n\nexport const StyledMenuButton = styled.button`\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 35px;\n background-color: ${({ theme }) => theme.bg3};\n margin-left: 8px;\n padding: 0.15rem 0.5rem;\n border-radius: 0.5rem;\n box-shadow: rgba(0, 0, 0, 0.01) 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 4px 8px, rgba(0, 0, 0, 0.04) 0px 16px 24px,\n rgba(0, 0, 0, 0.01) 0px 24px 32px;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n background-color: ${({ theme }) => theme.bg4};\n }\n\n svg {\n margin-top: 2px;\n }\n > * {\n stroke: ${({ theme }) => theme.text1};\n }\n`;\n\nconst NETWORK_LABELS: { [chainId in ChainId]?: string } = {\n [ChainId.RINKEBY]: 'Rinkeby',\n [ChainId.ROPSTEN]: 'Ropsten',\n [ChainId.GÖRLI]: 'Goerli',\n [ChainId.KOVAN]: 'Kovan',\n};\n\nexport default function Header() {\n const { account, chainId } = useActiveWeb3React();\n const userEthBalance = useETHBalances(account ? [account] : [])?.[account ?? ''];\n\n return (\n \n \n \n <Icon>\n <StyledLogo src={Logo} alt=\"logo\" />\n </Icon>\n \n \n\n \n \n {'Swap'}\n \n \n Boolean(match) ||\n pathname.startsWith('/add') ||\n pathname.startsWith('/remove') ||\n pathname.startsWith('/create') ||\n pathname.startsWith('/find')\n }\n >\n {'Pool'}\n \n \n {'Info'}\n \n \n \n {'Legal'}\n \n \n \n\n \n \n \n {chainId && NETWORK_LABELS[chainId] && (\n {NETWORK_LABELS[chainId]}\n )}\n \n \n {account && userEthBalance ? (\n \n {userEthBalance?.toSignificant(4)} AAA\n \n ) : null}\n \n \n \n \n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { TYPE, ExternalLink } from '../../theme';\n\nimport { useBlockNumber } from '../../state/application/hooks';\nimport { getEtherscanLink } from '../../utils';\nimport { useActiveWeb3React } from '../../hooks';\n\nconst StyledPolling = styled.div`\n position: fixed;\n display: flex;\n align-items: center;\n right: 0;\n bottom: 0;\n padding: 1rem;\n transition: opacity 0.3s ease;\n color: ${({ theme }) => theme.text1};\n\n :hover {\n opacity: 1;\n }\n\n ${({ theme }) => theme.mediaWidth.upToMedium`\n display: none;\n `}\n`;\n\nconst StyledPollingDot = styled.div`\n width: 11px;\n height: 11px;\n min-height: 11px;\n min-width: 11px;\n margin-left: 0.6rem;\n border-radius: 50%;\n position: relative;\n background-color: ${({ theme }) => theme.text1};\n`;\n\nconst rotate360 = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst Spinner = styled.div`\n animation: ${rotate360} 1s cubic-bezier(0.83, 0, 0.17, 1) infinite;\n transform: translateZ(0);\n\n border-top: 1px solid transparent;\n border-right: 1px solid transparent;\n border-bottom: 1px solid transparent;\n border-left: 2px solid ${({ theme }) => theme.text1};\n background: transparent;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n position: relative;\n\n left: -6px;\n top: -6px;\n`;\n\nexport default function Polling() {\n const { chainId } = useActiveWeb3React();\n const blockNumber = useBlockNumber();\n const [isMounted, setIsMounted] = useState(true);\n\n useEffect(() => {\n const timer1 = setTimeout(() => setIsMounted(true), 1000);\n\n return () => {\n setIsMounted(false);\n clearTimeout(timer1);\n };\n }, [blockNumber]);\n\n return (\n \n \n {blockNumber}\n {!isMounted && }\n \n \n );\n}\n","import styled from 'styled-components';\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n`;\nexport const ColumnCenter = styled(Column)`\n width: 100%;\n align-items: center;\n`;\n\nexport const AutoColumn = styled.div<{\n gap?: 'sm' | 'md' | 'lg' | string;\n justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between';\n}>`\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ${({ gap }) => (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap};\n justify-items: ${({ justify }) => justify && justify};\n`;\n\nexport default Column;\n","import { ActionCreatorWithPayload, createAction } from '@reduxjs/toolkit';\nimport { TokenList, Version } from '@uniswap/token-lists';\n\nexport const fetchTokenList: Readonly<{\n pending: ActionCreatorWithPayload<{ url: string; requestId: string }>;\n fulfilled: ActionCreatorWithPayload<{ url: string; tokenList: TokenList; requestId: string }>;\n rejected: ActionCreatorWithPayload<{ url: string; errorMessage: string; requestId: string }>;\n}> = {\n pending: createAction('lists/fetchTokenList/pending'),\n fulfilled: createAction('lists/fetchTokenList/fulfilled'),\n rejected: createAction('lists/fetchTokenList/rejected'),\n};\n// add and remove from list options\nexport const addList = createAction('lists/addList');\nexport const removeList = createAction('lists/removeList');\n\n// select which lists to search across from loaded lists\nexport const enableList = createAction('lists/enableList');\nexport const disableList = createAction('lists/disableList');\n\n// versioning\nexport const acceptListUpdate = createAction('lists/acceptListUpdate');\nexport const rejectVersionUpdate = createAction('lists/rejectVersionUpdate');\n","import { Version } from '@uniswap/token-lists';\n\nexport default function listVersionLabel(version: Version): string {\n return `v${version.major}.${version.minor}.${version.patch}`;\n}\n","import { diffTokenLists, TokenList } from '@uniswap/token-lists';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Text } from 'rebass';\nimport styled from 'styled-components';\nimport { AppDispatch } from '../../state';\nimport { useRemovePopup } from '../../state/application/hooks';\nimport { acceptListUpdate } from '../../state/lists/actions';\nimport { TYPE } from '../../theme';\nimport listVersionLabel from '../../utils/listVersionLabel';\nimport { ButtonSecondary } from '../Button';\nimport { AutoColumn } from '../Column';\nimport { AutoRow } from '../Row';\n\nexport const ChangesList = styled.ul`\n max-height: 400px;\n overflow: auto;\n`;\n\nexport default function ListUpdatePopup({\n popKey,\n listUrl,\n oldList,\n newList,\n auto,\n}: {\n popKey: string;\n listUrl: string;\n oldList: TokenList;\n newList: TokenList;\n auto: boolean;\n}) {\n const removePopup = useRemovePopup();\n const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup]);\n const dispatch = useDispatch();\n\n const handleAcceptUpdate = useCallback(() => {\n if (auto) return;\n dispatch(acceptListUpdate(listUrl));\n removeThisPopup();\n }, [auto, dispatch, listUrl, removeThisPopup]);\n\n const {\n added: tokensAdded,\n changed: tokensChanged,\n removed: tokensRemoved,\n } = useMemo(() => {\n return diffTokenLists(oldList.tokens, newList.tokens);\n }, [newList.tokens, oldList.tokens]);\n const numTokensChanged = useMemo(\n () =>\n Object.keys(tokensChanged).reduce((memo, chainId: any) => memo + Object.keys(tokensChanged[chainId]).length, 0),\n [tokensChanged]\n );\n\n return (\n \n \n {auto ? (\n \n The token list "{oldList.name}" has been updated to{' '}\n {listVersionLabel(newList.version)}.\n \n ) : (\n <>\n
\n \n An update is available for the token list "{oldList.name}" (\n {listVersionLabel(oldList.version)} to {listVersionLabel(newList.version)}).\n \n \n {tokensAdded.length > 0 ? (\n
  • \n {tokensAdded.map((token, i) => (\n \n {token.symbol}\n {i === tokensAdded.length - 1 ? null : ', '}\n \n ))}{' '}\n added\n
  • \n ) : null}\n {tokensRemoved.length > 0 ? (\n
  • \n {tokensRemoved.map((token, i) => (\n \n {token.symbol}\n {i === tokensRemoved.length - 1 ? null : ', '}\n \n ))}{' '}\n removed\n
  • \n ) : null}\n {numTokensChanged > 0 ?
  • {numTokensChanged} tokens updated
  • : null}\n
    \n
    \n \n
    \n Accept update\n
    \n
    \n Dismiss\n
    \n
    \n \n )}\n
    \n
    \n );\n}\n","import React, { useContext } from 'react';\nimport { AlertCircle, CheckCircle } from 'react-feather';\nimport styled, { ThemeContext } from 'styled-components';\nimport { useActiveWeb3React } from '../../hooks';\nimport { TYPE } from '../../theme';\nimport { ExternalLink } from '../../theme/components';\nimport { getEtherscanLink } from '../../utils';\nimport { AutoColumn } from '../Column';\nimport { AutoRow } from '../Row';\n\nconst RowNoFlex = styled(AutoRow)`\n flex-wrap: nowrap;\n`;\n\nexport default function TransactionPopup({\n hash,\n success,\n summary,\n}: {\n hash: string;\n success?: boolean;\n summary?: string;\n}) {\n const { chainId } = useActiveWeb3React();\n\n const theme = useContext(ThemeContext);\n\n return (\n \n
    \n {success ? : }\n
    \n \n {summary ?? 'Hash: ' + hash.slice(0, 8) + '...' + hash.slice(58, 65)}\n {chainId && View on Explorer}\n \n
    \n );\n}\n","import React, { useCallback, useContext, useEffect } from 'react';\nimport { X } from 'react-feather';\nimport { useSpring } from 'react-spring/web';\nimport styled, { ThemeContext } from 'styled-components';\nimport { animated } from 'react-spring';\nimport { PopupContent } from '../../state/application/actions';\nimport { useRemovePopup } from '../../state/application/hooks';\nimport ListUpdatePopup from './ListUpdatePopup';\nimport TransactionPopup from './TransactionPopup';\n\nexport const StyledClose = styled(X)`\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n`;\nexport const Popup = styled.div`\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ${({ theme }) => theme.bg1};\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n min-width: 290px;\n &:not(:last-of-type) {\n margin-right: 20px;\n }\n `}\n`;\nconst Fader = styled.div`\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ${({ theme }) => theme.bg3};\n`;\n\nconst AnimatedFader = animated(Fader);\n\nexport default function PopupItem({\n removeAfterMs,\n content,\n popKey,\n}: {\n removeAfterMs: number | null;\n content: PopupContent;\n popKey: string;\n}) {\n const removePopup = useRemovePopup();\n const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup]);\n useEffect(() => {\n if (removeAfterMs === null) return undefined;\n\n const timeout = setTimeout(() => {\n removeThisPopup();\n }, removeAfterMs);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [removeAfterMs, removeThisPopup]);\n\n const theme = useContext(ThemeContext);\n\n let popupContent;\n if ('txn' in content) {\n const {\n txn: { hash, success, summary },\n } = content;\n popupContent = ;\n } else if ('listUpdate' in content) {\n const {\n listUpdate: { listUrl, oldList, newList, auto },\n } = content;\n popupContent = (\n \n );\n }\n\n const faderStyle = useSpring({\n from: { width: '100%' },\n to: { width: '0%' },\n config: { duration: removeAfterMs ?? undefined },\n });\n\n return (\n \n \n {popupContent}\n {removeAfterMs !== null ? : null}\n \n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { useActivePopups } from '../../state/application/hooks';\nimport { AutoColumn } from '../Column';\nimport PopupItem from './PopupItem';\nimport { useURLWarningVisible } from '../../state/user/hooks';\n\nconst MobilePopupWrapper = styled.div<{ height: string | number }>`\n position: relative;\n max-width: 100%;\n height: ${({ height }) => height};\n margin: ${({ height }) => (height ? '0 auto;' : 0)};\n margin-bottom: ${({ height }) => (height ? '20px' : 0)}};\n\n display: none;\n ${({ theme }) => theme.mediaWidth.upToSmall`\n display: block;\n `};\n`;\n\nconst MobilePopupInner = styled.div`\n height: 99%;\n overflow-x: auto;\n overflow-y: hidden;\n display: flex;\n flex-direction: row;\n -webkit-overflow-scrolling: touch;\n ::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst FixedPopupColumn = styled(AutoColumn)<{ extraPadding: boolean }>`\n position: fixed;\n top: ${({ extraPadding }) => (extraPadding ? '108px' : '88px')};\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 3;\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n display: none;\n `};\n`;\n\nexport default function Popups() {\n // get all popups\n const activePopups = useActivePopups();\n\n const urlWarningActive = useURLWarningVisible();\n\n return (\n <>\n \n {activePopups.map((item) => (\n \n ))}\n \n 0 ? 'fit-content' : 0}>\n \n {activePopups // reverse so new items up front\n .slice(0)\n .reverse()\n .map((item) => (\n \n ))}\n \n \n \n );\n}\n","import { transparentize } from 'polished';\nimport React from 'react';\nimport { AlertTriangle } from 'react-feather';\nimport styled, { css } from 'styled-components';\nimport { Text } from 'rebass';\nimport { AutoColumn } from '../Column';\n\nexport const Wrapper = styled.div`\n position: relative;\n padding: 1rem;\n`;\n\nexport const ArrowWrapper = styled.div<{ clickable: boolean }>`\n padding: 2px;\n\n ${({ clickable }) =>\n clickable\n ? css`\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n `\n : null}\n`;\n\nexport const SectionBreak = styled.div`\n height: 1px;\n width: 100%;\n background-color: ${({ theme }) => theme.bg3};\n`;\n\nexport const BottomGrouping = styled.div`\n margin-top: 1rem;\n`;\n\nexport const ErrorText = styled(Text)<{ severity?: 0 | 1 | 2 | 3 | 4 }>`\n color: ${({ theme, severity }) =>\n severity === 3 || severity === 4\n ? theme.red1\n : severity === 2\n ? theme.yellow2\n : severity === 1\n ? theme.text1\n : theme.green1};\n`;\n\nexport const StyledBalanceMaxMini = styled.button`\n height: 22px;\n width: 22px;\n background-color: ${({ theme }) => theme.bg2};\n border: none;\n border-radius: 50%;\n padding: 0.2rem;\n font-size: 0.875rem;\n font-weight: 400;\n margin-left: 0.4rem;\n cursor: pointer;\n color: ${({ theme }) => theme.text2};\n display: flex;\n justify-content: center;\n align-items: center;\n float: right;\n\n :hover {\n background-color: ${({ theme }) => theme.bg3};\n }\n :focus {\n background-color: ${({ theme }) => theme.bg3};\n outline: none;\n }\n`;\n\nexport const TruncatedText = styled(Text)`\n text-overflow: ellipsis;\n width: 220px;\n overflow: hidden;\n`;\n\n// styles\nexport const Dots = styled.span`\n &::after {\n display: inline-block;\n animation: ellipsis 1.25s infinite;\n content: '.';\n width: 1em;\n text-align: left;\n }\n @keyframes ellipsis {\n 0% {\n content: '.';\n }\n 33% {\n content: '..';\n }\n 66% {\n content: '...';\n }\n }\n`;\n\nconst SwapCallbackErrorInner = styled.div`\n background-color: ${({ theme }) => transparentize(0.9, theme.red1)};\n border-radius: 1rem;\n display: flex;\n align-items: center;\n font-size: 0.825rem;\n width: 100%;\n padding: 3rem 1.25rem 1rem 1rem;\n margin-top: -2rem;\n color: ${({ theme }) => theme.red1};\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n`;\n\nconst SwapCallbackErrorInnerAlertTriangle = styled.div`\n background-color: ${({ theme }) => transparentize(0.9, theme.red1)};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n border-radius: 12px;\n min-width: 48px;\n height: 48px;\n`;\n\nexport function SwapCallbackError({ error }: { error: string }) {\n return (\n \n \n \n \n

    {error}

    \n
    \n );\n}\n\nexport const SwapShowAcceptChanges = styled(AutoColumn)`\n background-color: ${({ theme }) => transparentize(0.9, theme.primary1)};\n color: ${({ theme }) => theme.primary1};\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n`;\nexport const Separator = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.bg2};\n`;\n","import Modal from '../Modal';\nimport styled from 'styled-components';\nimport React, { useCallback } from 'react';\nimport { ButtonPrimary } from '../Button';\nimport { AutoColumn } from '../Column';\nimport { TYPE } from 'theme';\nimport { SectionBreak } from 'components/swap/styleds';\n\nconst Link = styled.a`\n text-decoration: none;\n`;\n\nconst TermsWrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst TermsTextWrp = styled.div`\n margin-left: 10px;\n`;\n\nconst Checkbox = styled.input`\n accent-color: ${({ theme }) => theme.primary1};\n outline-offset: 0;\n outline: none;\n`;\n\nconst PaddedColumn = styled(AutoColumn)`\n padding: 20px;\n`;\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nexport default function TermsModal() {\n const storageKey = 'termsAccept';\n const handleDismiss = useCallback(() => null, []);\n const [checked, setChecked] = React.useState(false);\n const termsAccept = localStorage.getItem(storageKey) !== 'true';\n const [isOpen, setIsOpen] = React.useState(termsAccept);\n\n const handleChange = () => {\n setChecked(!checked);\n };\n\n const handleAcceptTerms = () => {\n localStorage.setItem(storageKey, 'true');\n setIsOpen(false);\n };\n\n return (\n \n \n \n Terms of Use\n \n \n \n \n \n \n By checking here you signify that you have read, understand, and agree to be bound by Moon Rabbit DEX and{' '}\n \n Moon Rabbit Ecosystem General Terms of Use\n \n \n \n \n Continue\n \n \n \n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useWeb3React } from '@web3-react/core';\nimport styled from 'styled-components';\n\nimport { network } from '../../connectors';\nimport { useEagerConnect, useInactiveListener } from '../../hooks';\nimport { NetworkContextName } from '../../constants';\nimport Loader from '../Loader';\n\nconst MessageWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n`;\n\nconst Message = styled.h2`\n color: ${({ theme }) => theme.secondary1};\n`;\n\nexport default function Web3ReactManager({ children }: { children: JSX.Element }) {\n const { active } = useWeb3React();\n const { active: networkActive, error: networkError, activate: activateNetwork } = useWeb3React(NetworkContextName);\n\n // try to eagerly connect to an injected provider, if it exists and has granted access already\n const triedEager = useEagerConnect();\n\n // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd\n useEffect(() => {\n if (triedEager && !networkActive && !networkError && !active) {\n activateNetwork(network);\n }\n }, [triedEager, networkActive, networkError, activateNetwork, active]);\n\n // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists\n useInactiveListener(!triedEager);\n\n // handle delayed loader state\n const [showLoader, setShowLoader] = useState(false);\n useEffect(() => {\n const timeout = setTimeout(() => {\n setShowLoader(true);\n }, 600);\n\n return () => {\n clearTimeout(timeout);\n };\n }, []);\n\n // on page load, do nothing until we've tried to connect to the injected connector\n if (!triedEager) {\n return null;\n }\n\n // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error\n if (!active && networkError) {\n return (\n \n \n {'Oops! An unknown error occurred. Please refresh the page, or visit from another browser or device.'}\n \n \n );\n }\n\n // if neither context is active, spin\n if (!active && !networkActive) {\n return showLoader ? (\n \n \n \n ) : null;\n }\n\n return children;\n}\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { parse } from 'qs';\nimport { AppDispatch } from '../state';\nimport { updateUserDarkMode } from '../state/user/actions';\n\nexport default function DarkModeQueryParamReader({ location: { search } }: RouteComponentProps): null {\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (!search) return;\n if (search.length < 2) return;\n\n const parsed = parse(search, {\n parseArrays: false,\n ignoreQueryPrefix: true,\n });\n\n const theme = parsed.theme;\n\n if (typeof theme !== 'string') return;\n\n if (theme.toLowerCase() === 'light') {\n dispatch(updateUserDarkMode({ userDarkMode: false }));\n } else if (theme.toLowerCase() === 'dark') {\n dispatch(updateUserDarkMode({ userDarkMode: true }));\n }\n }, [dispatch, search]);\n\n return null;\n}\n","import { ChainId } from '@moonrabbit/swap-sdk';\nimport React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Modal from '../Modal';\nimport { ExternalLink } from '../../theme';\nimport { Text } from 'rebass';\nimport { CloseIcon, CustomLightSpinner } from '../../theme/components';\nimport { RowBetween } from '../Row';\nimport { AlertTriangle, ArrowUpCircle } from 'react-feather';\nimport { ButtonPrimary } from '../Button';\nimport { AutoColumn, ColumnCenter } from '../Column';\nimport Circle from '../../assets/images/blue-loader.svg';\n\nimport { getEtherscanLink } from '../../utils';\nimport { useActiveWeb3React } from '../../hooks';\n\nconst Wrapper = styled.div`\n width: 100%;\n`;\nconst Section = styled(AutoColumn)`\n padding: 24px;\n`;\n\nconst BottomSection = styled(Section)`\n background-color: ${({ theme }) => theme.bg2};\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n`;\n\nconst ConfirmedIcon = styled(ColumnCenter)`\n padding: 60px 0;\n`;\n\nfunction ConfirmationPendingContent({ onDismiss, pendingText }: { onDismiss: () => void; pendingText: string }) {\n return (\n \n
    \n \n
    \n \n \n \n \n \n \n \n Waiting For Confirmation\n \n \n \n {pendingText}\n \n \n \n Confirm this transaction in your wallet\n \n \n
    \n
    \n );\n}\n\nfunction TransactionSubmittedContent({\n onDismiss,\n chainId,\n hash,\n}: {\n onDismiss: () => void;\n hash: string | undefined;\n chainId: ChainId;\n}) {\n const theme = useContext(ThemeContext);\n\n return (\n \n
    \n \n
    \n \n \n \n \n \n \n \n Transaction Submitted\n \n {chainId && hash && (\n \n \n View on Explorer\n \n \n )}\n \n \n Close\n \n \n \n
    \n
    \n );\n}\n\nexport function ConfirmationModalContent({\n title,\n bottomContent,\n onDismiss,\n topContent,\n}: {\n title: string;\n onDismiss: () => void;\n topContent: () => React.ReactNode;\n bottomContent: () => React.ReactNode;\n}) {\n return (\n \n
    \n \n \n {title}\n \n \n \n {topContent()}\n
    \n {bottomContent()}\n
    \n );\n}\n\nexport function TransactionErrorContent({ message, onDismiss }: { message: string; onDismiss: () => void }) {\n const theme = useContext(ThemeContext);\n return (\n \n
    \n \n \n Error\n \n \n \n \n \n \n {message}\n \n \n
    \n \n Dismiss\n \n
    \n );\n}\n\ninterface ConfirmationModalProps {\n isOpen: boolean;\n onDismiss: () => void;\n hash: string | undefined;\n content: () => React.ReactNode;\n attemptingTxn: boolean;\n pendingText: string;\n}\n\nexport default function TransactionConfirmationModal({\n isOpen,\n onDismiss,\n attemptingTxn,\n hash,\n pendingText,\n content,\n}: ConfirmationModalProps) {\n const { chainId } = useActiveWeb3React();\n\n if (!chainId) return null;\n\n // confirmation screen\n return (\n \n {attemptingTxn ? (\n \n ) : hash ? (\n \n ) : (\n content()\n )}\n \n );\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Returns the last value of type T that passes a filter function\n * @param value changing value\n * @param filterFn function that determines whether a given value should be considered for the last value\n */\nexport default function useLast(\n value: T | undefined | null,\n filterFn?: (value: T | null | undefined) => boolean\n): T | null | undefined {\n const [last, setLast] = useState(filterFn && filterFn(value) ? value : undefined);\n useEffect(() => {\n setLast((last) => {\n const shouldUse: boolean = filterFn ? filterFn(value) : true;\n if (shouldUse) return value;\n return last;\n });\n }, [filterFn, value]);\n return last;\n}\n\nfunction isDefined(x: T | null | undefined): x is T {\n return x !== null && x !== undefined;\n}\n\n/**\n * Returns the last truthy value of type T\n * @param value changing value\n */\nexport function useLastTruthy(value: T | undefined | null): T | null | undefined {\n return useLast(value, isDefined);\n}\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: () => void, delay: null | number, leading = true) {\n const savedCallback = useRef<() => void>();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n const current = savedCallback.current;\n current && current();\n }\n\n if (delay !== null) {\n if (leading) tick();\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n return undefined;\n }, [delay, leading]);\n}\n","import { Placement } from '@popperjs/core';\nimport { transparentize } from 'polished';\nimport React, { useCallback, useState } from 'react';\nimport { usePopper } from 'react-popper';\nimport styled from 'styled-components';\nimport useInterval from '../../hooks/useInterval';\nimport Portal from '@reach/portal';\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 9999;\n\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n\n background: ${({ theme }) => theme.bg2};\n border: 1px solid ${({ theme }) => theme.bg3};\n box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.9, theme.shadow1)};\n color: ${({ theme }) => theme.text2};\n border-radius: 8px;\n`;\n\nconst ReferenceElement = styled.div`\n display: inline-block;\n`;\n\nconst Arrow = styled.div`\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n ::before {\n position: absolute;\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n content: '';\n border: 1px solid ${({ theme }) => theme.bg3};\n transform: rotate(45deg);\n background: ${({ theme }) => theme.bg2};\n }\n\n &.arrow-top {\n bottom: -5px;\n ::before {\n border-top: none;\n border-left: none;\n }\n }\n\n &.arrow-bottom {\n top: -5px;\n ::before {\n border-bottom: none;\n border-right: none;\n }\n }\n\n &.arrow-left {\n right: -5px;\n\n ::before {\n border-bottom: none;\n border-left: none;\n }\n }\n\n &.arrow-right {\n left: -5px;\n ::before {\n border-right: none;\n border-top: none;\n }\n }\n`;\n\nexport interface PopoverProps {\n content: React.ReactNode;\n show: boolean;\n children: React.ReactNode;\n placement?: Placement;\n}\n\nexport default function Popover({ content, show, children, placement = 'auto' }: PopoverProps) {\n const [referenceElement, setReferenceElement] = useState(null);\n const [popperElement, setPopperElement] = useState(null);\n const [arrowElement, setArrowElement] = useState(null);\n const { styles, update, attributes } = usePopper(referenceElement, popperElement, {\n placement,\n strategy: 'fixed',\n modifiers: [\n { name: 'offset', options: { offset: [8, 8] } },\n { name: 'arrow', options: { element: arrowElement } },\n ],\n });\n const updateCallback = useCallback(() => {\n update && update();\n }, [update]);\n useInterval(updateCallback, show ? 100 : null);\n\n return (\n <>\n {children}\n \n \n {content}\n \n \n \n \n );\n}\n","import React, { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport Popover, { PopoverProps } from '../Popover';\n\nconst TooltipContainer = styled.div`\n width: 228px;\n padding: 0.6rem 1rem;\n line-height: 150%;\n font-weight: 400;\n`;\n\ninterface TooltipProps extends Omit {\n text: string;\n}\n\nexport default function Tooltip({ text, ...rest }: TooltipProps) {\n return {text}} {...rest} />;\n}\n\nexport function MouseoverTooltip({ children, ...rest }: Omit) {\n const [show, setShow] = useState(false);\n const open = useCallback(() => setShow(true), [setShow]);\n const close = useCallback(() => setShow(false), [setShow]);\n return (\n \n
    \n {children}\n
    \n
    \n );\n}\n","import React, { useCallback, useState } from 'react';\nimport { HelpCircle as Question } from 'react-feather';\nimport styled from 'styled-components';\nimport Tooltip from '../Tooltip';\n\nconst QuestionWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.2rem;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n background-color: ${({ theme }) => theme.bg2};\n color: ${({ theme }) => theme.text2};\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n`;\n\nconst LightQuestionWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.2rem;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n width: 24px;\n height: 24px;\n background-color: rgba(255, 255, 255, 0.1);\n color: ${({ theme }) => theme.white};\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n`;\n\nconst QuestionMark = styled.span`\n font-size: 1rem;\n`;\n\nexport default function QuestionHelper({ text }: { text: string }) {\n const [show, setShow] = useState(false);\n\n const open = useCallback(() => setShow(true), [setShow]);\n const close = useCallback(() => setShow(false), [setShow]);\n\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport function LightQuestionHelper({ text }: { text: string }) {\n const [show, setShow] = useState(false);\n\n const open = useCallback(() => setShow(true), [setShow]);\n const close = useCallback(() => setShow(false), [setShow]);\n\n return (\n \n \n \n ?\n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport { HelpCircle } from 'react-feather';\nimport { ImageProps } from 'rebass';\n\nconst BAD_SRCS: { [tokenAddress: string]: true } = {};\n\nexport interface LogoProps extends Pick {\n srcs: string[];\n}\n\n/**\n * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert\n */\nexport default function Logo({ srcs, alt, ...rest }: LogoProps) {\n const [, refresh] = useState(0);\n\n const src: string | undefined = srcs.find((src) => !BAD_SRCS[src]);\n\n if (src) {\n return (\n {\n if (src) BAD_SRCS[src] = true;\n refresh((i) => i + 1);\n }}\n />\n );\n }\n\n return ;\n}\n","import { Currency, ETHER, Token } from '@moonrabbit/swap-sdk';\nimport React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport MoonRabbitLogo from '../../assets/images/moon-rabbit.svg';\nimport { WrappedTokenInfo } from '../../state/lists/hooks';\nimport Logo from '../Logo';\nimport { useAllTokens } from '../../hooks/Tokens';\n\nconst StyledEthereumLogo = styled.img<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n border-radius: 24px;\n`;\n\nconst StyledLogo = styled(Logo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n border-radius: ${({ size }) => size};\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n`;\n\nexport default function CurrencyLogo({\n currency,\n size = '24px',\n style,\n}: {\n currency?: Currency;\n size?: string;\n style?: React.CSSProperties;\n}) {\n const tokens = useAllTokens();\n\n const srcs: string[] = useMemo(() => {\n if (currency === ETHER) return [];\n\n if (currency instanceof Token) {\n const token = tokens[currency.address] as WrappedTokenInfo;\n\n return [token?.logoURI || ''];\n }\n return [];\n }, [currency, tokens]);\n\n if (currency === ETHER) {\n return ;\n }\n\n return ;\n}\n","import React from 'react';\nimport { Text } from 'rebass';\nimport { ChainId, Currency, currencyEquals, ETHER, Token } from '@moonrabbit/swap-sdk';\nimport styled from 'styled-components';\n\nimport { SUGGESTED_BASES } from '../../constants';\nimport { AutoColumn } from '../Column';\nimport QuestionHelper from '../QuestionHelper';\nimport { AutoRow } from '../Row';\nimport CurrencyLogo from '../CurrencyLogo';\n\nconst BaseWrapper = styled.div<{ disable?: boolean }>`\n border: 1px solid ${({ theme, disable }) => (disable ? 'transparent' : theme.bg3)};\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ${({ disable }) => !disable && 'pointer'};\n background-color: ${({ theme, disable }) => !disable && theme.bg2};\n }\n\n background-color: ${({ theme, disable }) => disable && theme.bg3};\n opacity: ${({ disable }) => disable && '0.4'};\n`;\n\nexport default function CommonBases({\n chainId,\n onSelect,\n selectedCurrency,\n}: {\n chainId?: ChainId;\n selectedCurrency?: Currency | null;\n onSelect: (currency: Currency) => void;\n}) {\n return (\n \n \n \n Common bases\n \n \n \n \n {\n if (!selectedCurrency || !currencyEquals(selectedCurrency, ETHER)) {\n onSelect(ETHER);\n }\n }}\n disable={selectedCurrency === ETHER}\n >\n \n \n AAA\n \n \n {(chainId ? SUGGESTED_BASES[chainId] : []).map((token: Token) => {\n const selected = selectedCurrency instanceof Token && selectedCurrency.address === token.address;\n return (\n !selected && onSelect(token)} disable={selected} key={token.address}>\n \n \n {token.symbol}\n \n \n );\n })}\n \n \n );\n}\n","import styled from 'styled-components';\nimport { AutoColumn } from '../Column';\nimport { RowBetween, RowFixed } from '../Row';\n\nexport const ModalInfo = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n padding: 1rem 1rem;\n margin: 0.25rem 0.5rem;\n justify-content: center;\n flex: 1;\n user-select: none;\n`;\nexport const StyledMenu = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n`;\n\nexport const PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 100;\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ${({ theme }) => theme.bg2};\n border: 1px solid ${({ theme }) => theme.bg3};\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.01);\n color: ${({ theme }) => theme.text2};\n border-radius: 0.5rem;\n padding: 1rem;\n display: grid;\n grid-template-rows: 1fr;\n grid-gap: 8px;\n font-size: 1rem;\n text-align: left;\n top: 80px;\n`;\n\nexport const TextDot = styled.div`\n height: 3px;\n width: 3px;\n background-color: ${({ theme }) => theme.text2};\n border-radius: 50%;\n`;\n\nexport const FadedSpan = styled(RowFixed)`\n color: ${({ theme }) => theme.primary1};\n font-size: 14px;\n`;\nexport const Checkbox = styled.input`\n border: 1px solid ${({ theme }) => theme.red3};\n height: 20px;\n margin: 0;\n`;\n\nexport const PaddedColumn = styled(AutoColumn)`\n padding: 20px;\n`;\n\nexport const MenuItem = styled(RowBetween)`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto minmax(0, 72px);\n grid-gap: 16px;\n cursor: ${({ disabled }) => !disabled && 'pointer'};\n pointer-events: ${({ disabled }) => disabled && 'none'};\n :hover {\n background-color: ${({ theme, disabled }) => !disabled && theme.bg2};\n }\n opacity: ${({ disabled, selected }) => (disabled || selected ? 0.5 : 1)};\n`;\n\nexport const SearchInput = styled.input`\n position: relative;\n display: flex;\n padding: 16px;\n align-items: center;\n width: 100%;\n white-space: nowrap;\n background: none;\n border: none;\n outline: none;\n border-radius: 20px;\n color: ${({ theme }) => theme.text1};\n border-style: solid;\n border: 1px solid ${({ theme }) => theme.bg3};\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ${({ theme }) => theme.text3};\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ${({ theme }) => theme.primary1};\n outline: none;\n }\n`;\nexport const Separator = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.bg2};\n`;\n\nexport const SeparatorDark = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.bg3};\n`;\n","import CID from 'cids';\nimport { getCodec, rmPrefix } from 'multicodec';\nimport { decode, toB58String } from 'multihashes';\n\nexport function hexToUint8Array(hex: string): Uint8Array {\n hex = hex.startsWith('0x') ? hex.substr(2) : hex;\n if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2');\n const arr = new Uint8Array(hex.length / 2);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = parseInt(hex.substr(i * 2, 2), 16);\n }\n return arr;\n}\n\nconst UTF_8_DECODER = new TextDecoder();\n\n/**\n * Returns the URI representation of the content hash for supported codecs\n * @param contenthash to decode\n */\nexport default function contenthashToUri(contenthash: string): string {\n const buff = hexToUint8Array(contenthash);\n const codec = getCodec(buff as Buffer); // the typing is wrong for @types/multicodec\n switch (codec) {\n case 'ipfs-ns': {\n const data = rmPrefix(buff as Buffer);\n const cid = new CID(data);\n return `ipfs://${toB58String(cid.multihash)}`;\n }\n case 'ipns-ns': {\n const data = rmPrefix(buff as Buffer);\n const cid = new CID(data);\n const multihash = decode(cid.multihash);\n if (multihash.name === 'identity') {\n return `ipns://${UTF_8_DECODER.decode(multihash.digest).trim()}`;\n } else {\n return `ipns://${toB58String(cid.multihash)}`;\n }\n }\n default:\n throw new Error(`Unrecognized codec: ${codec}`);\n }\n}\n","const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+)eth(\\/.*)?$/;\n\nexport function parseENSAddress(ensAddress: string): { ensName: string; ensPath: string | undefined } | undefined {\n const match = ensAddress.match(ENS_NAME_REGEX);\n if (!match) return undefined;\n return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] };\n}\n","/**\n * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content\n * @param uri to convert to fetch-able http url\n */\nexport default function uriToHttp(uri: string): string[] {\n const protocol = uri.split(':')[0].toLowerCase();\n switch (protocol) {\n case 'https':\n return [uri];\n case 'http':\n return ['https' + uri.substr(4), uri];\n case 'ipfs':\n const hash = uri.match(/^ipfs:(\\/\\/)?(.*)$/i)?.[2];\n return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`];\n case 'ipns':\n const name = uri.match(/^ipns:(\\/\\/)?(.*)$/i)?.[2];\n return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`];\n default:\n return [];\n }\n}\n","import { useMemo } from 'react';\nimport contenthashToUri from '../utils/contenthashToUri';\nimport { parseENSAddress } from '../utils/parseENSAddress';\nimport uriToHttp from '../utils/uriToHttp';\nimport useENSContentHash from './useENSContentHash';\n\nexport default function useHttpLocations(uri: string | undefined): string[] {\n const ens = useMemo(() => (uri ? parseENSAddress(uri) : undefined), [uri]);\n const resolvedContentHash = useENSContentHash(ens?.ensName);\n return useMemo(() => {\n if (ens) {\n return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : [];\n } else {\n return uri ? uriToHttp(uri) : [];\n }\n }, [ens, resolvedContentHash.contenthash, uri]);\n}\n","import { namehash } from 'ethers/lib/utils';\nimport { useMemo } from 'react';\nimport { useSingleCallResult } from '../state/multicall/hooks';\nimport isZero from '../utils/isZero';\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract';\n\n/**\n * Does a lookup for an ENS name to find its contenthash.\n */\nexport default function useENSContentHash(ensName?: string | null): { loading: boolean; contenthash: string | null } {\n const ensNodeArgument = useMemo(() => {\n if (!ensName) return [undefined];\n try {\n return ensName ? [namehash(ensName)] : [undefined];\n } catch (error) {\n return [undefined];\n }\n }, [ensName]);\n const registrarContract = useENSRegistrarContract(false);\n const resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument);\n const resolverAddress = resolverAddressResult.result?.[0];\n const resolverContract = useENSResolverContract(\n resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress,\n false\n );\n const contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument);\n\n return {\n contenthash: contenthash.result?.[0] ?? null,\n loading: resolverAddressResult.loading || contenthash.loading,\n };\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport useHttpLocations from '../../hooks/useHttpLocations';\n\nimport Logo from '../Logo';\n\nconst StyledListLogo = styled(Logo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`;\n\nexport default function ListLogo({\n logoURI,\n style,\n size = '24px',\n alt,\n}: {\n logoURI: string;\n size?: string;\n style?: React.CSSProperties;\n alt?: string;\n}) {\n const srcs: string[] = useHttpLocations(logoURI);\n\n return ;\n}\n","import { ThemeContext } from 'styled-components';\nimport { useContext } from 'react';\n\nexport default function useTheme() {\n return useContext(ThemeContext);\n}\n","import React, { CSSProperties } from 'react';\nimport { Token } from '@moonrabbit/swap-sdk';\nimport { AutoRow, RowFixed } from 'components/Row';\nimport { AutoColumn } from 'components/Column';\nimport CurrencyLogo from 'components/CurrencyLogo';\nimport { TYPE } from 'theme';\nimport ListLogo from 'components/ListLogo';\nimport { useActiveWeb3React } from 'hooks';\nimport { useCombinedInactiveList } from 'state/lists/hooks';\nimport useTheme from 'hooks/useTheme';\nimport { ButtonPrimary } from 'components/Button';\nimport styled from 'styled-components';\nimport { useIsUserAddedToken, useIsTokenActive } from 'hooks/Tokens';\nimport { CheckCircle } from 'react-feather';\n\nconst TokenSection = styled.div<{ dim?: boolean }>`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto;\n grid-gap: 16px;\n align-items: center;\n\n opacity: ${({ dim }) => (dim ? '0.6' : '1')};\n`;\n\nconst CheckIcon = styled(CheckCircle)`\n height: 16px;\n width: 16px;\n margin-right: 6px;\n stroke: ${({ theme }) => theme.green1};\n`;\n\nconst NameOverflow = styled.div`\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 140px;\n font-size: 12px;\n`;\n\nexport default function ImportRow({\n token,\n style,\n dim,\n showImportView,\n setImportToken,\n}: {\n token: Token;\n style?: CSSProperties;\n dim?: boolean;\n showImportView: () => void;\n setImportToken: (token: Token) => void;\n}) {\n // gloabls\n const { chainId } = useActiveWeb3React();\n const theme = useTheme();\n\n // check if token comes from list\n const inactiveTokenList = useCombinedInactiveList();\n const list = chainId && inactiveTokenList?.[chainId]?.[token.address]?.list;\n\n // check if already active on list or local storage tokens\n const isAdded = useIsUserAddedToken(token);\n const isActive = useIsTokenActive(token);\n\n return (\n \n \n \n \n {token.symbol}\n \n {token.name}\n \n \n {list && list.logoURI && (\n \n \n via {list.name}\n \n \n \n )}\n \n {!isActive && !isAdded ? (\n {\n setImportToken && setImportToken(token);\n showImportView();\n }}\n >\n Import\n \n ) : (\n \n \n Active\n \n )}\n {/* */}\n \n );\n}\n","import { ChainId, Currency, CurrencyAmount, ETHER, Token, TokenAmount, WETH } from '@moonrabbit/swap-sdk';\n\nexport function wrappedCurrency(currency: Currency | undefined, chainId: ChainId | undefined): Token | undefined {\n return chainId && currency === ETHER ? WETH[chainId] : currency instanceof Token ? currency : undefined;\n}\n\nexport function wrappedCurrencyAmount(\n currencyAmount: CurrencyAmount | undefined,\n chainId: ChainId | undefined\n): TokenAmount | undefined {\n const token = currencyAmount && chainId ? wrappedCurrency(currencyAmount.currency, chainId) : undefined;\n return token && currencyAmount ? new TokenAmount(token, currencyAmount.raw) : undefined;\n}\n\nexport function unwrappedToken(token: Token): Currency {\n if (token.equals(WETH[token.chainId])) return ETHER;\n return token;\n}\n","import { Currency, CurrencyAmount, currencyEquals, ETHER, Token } from '@moonrabbit/swap-sdk';\nimport React, { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react';\nimport { FixedSizeList } from 'react-window';\nimport { Text } from 'rebass';\nimport styled from 'styled-components';\nimport { useActiveWeb3React } from '../../hooks';\nimport { WrappedTokenInfo, useCombinedActiveList } from '../../state/lists/hooks';\nimport { useCurrencyBalance } from '../../state/wallet/hooks';\nimport { TYPE } from '../../theme';\nimport { useIsUserAddedToken, useAllInactiveTokens } from '../../hooks/Tokens';\nimport Column from '../Column';\nimport { RowFixed } from '../Row';\nimport CurrencyLogo from '../CurrencyLogo';\nimport { MouseoverTooltip } from '../Tooltip';\nimport { MenuItem } from './styleds';\nimport Loader from '../Loader';\nimport { isTokenOnList } from '../../utils';\nimport ImportRow from './ImportRow';\nimport { wrappedCurrency } from 'utils/wrappedCurrency';\n\nfunction currencyKey(currency: Currency): string {\n return currency instanceof Token ? currency.address : currency === ETHER ? 'ETHER' : '';\n}\n\nconst StyledBalanceText = styled(Text)`\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n`;\n\nconst Tag = styled.div`\n background-color: ${({ theme }) => theme.bg3};\n color: ${({ theme }) => theme.text2};\n font-size: 14px;\n border-radius: 4px;\n padding: 0.25rem 0.3rem 0.25rem 0.3rem;\n max-width: 6rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n justify-self: flex-end;\n margin-right: 4px;\n`;\n\nfunction Balance({ balance }: { balance: CurrencyAmount }) {\n return {balance.toSignificant(4)};\n}\n\nconst TagContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n`;\n\nfunction TokenTags({ currency }: { currency: Currency }) {\n if (!(currency instanceof WrappedTokenInfo)) {\n return ;\n }\n\n const tags = currency.tags;\n if (!tags || tags.length === 0) return ;\n\n const tag = tags[0];\n\n return (\n \n \n {tag.name}\n \n {tags.length > 1 ? (\n `${name}: ${description}`)\n .join('; \\n')}\n >\n ...\n \n ) : null}\n \n );\n}\n\nfunction CurrencyRow({\n currency,\n onSelect,\n isSelected,\n otherSelected,\n style,\n}: {\n currency: Currency;\n onSelect: () => void;\n isSelected: boolean;\n otherSelected: boolean;\n style: CSSProperties;\n}) {\n const { account } = useActiveWeb3React();\n const key = currencyKey(currency);\n const selectedTokenList = useCombinedActiveList();\n const isOnSelectedList = isTokenOnList(selectedTokenList, currency);\n const customAdded = useIsUserAddedToken(currency);\n const balance = useCurrencyBalance(account ?? undefined, currency);\n\n // only show add or remove buttons if not on selected list\n return (\n (isSelected ? null : onSelect())}\n disabled={isSelected}\n selected={otherSelected}\n >\n \n \n \n {currency.symbol}\n \n \n {currency.name} {!isOnSelectedList && customAdded && '• Added by user'}\n \n \n \n \n {balance ? : account ? : null}\n \n \n );\n}\n\nexport default function CurrencyList({\n height,\n currencies,\n selectedCurrency,\n onCurrencySelect,\n otherCurrency,\n fixedListRef,\n showETH,\n showImportView,\n setImportToken,\n}: {\n height: number;\n currencies: Currency[];\n selectedCurrency?: Currency | null;\n onCurrencySelect: (currency: Currency) => void;\n otherCurrency?: Currency | null;\n fixedListRef?: MutableRefObject;\n showETH: boolean;\n showImportView: () => void;\n setImportToken: (token: Token) => void;\n}) {\n const itemData = useMemo(() => (showETH ? [Currency.ETHER, ...currencies] : currencies), [currencies, showETH]);\n\n const { chainId } = useActiveWeb3React();\n\n const inactiveTokens: {\n [address: string]: Token;\n } = useAllInactiveTokens();\n\n const Row = useCallback(\n ({ data, index, style }) => {\n const currency: Currency = data[index];\n const isSelected = Boolean(selectedCurrency && currencyEquals(selectedCurrency, currency));\n const otherSelected = Boolean(otherCurrency && currencyEquals(otherCurrency, currency));\n const handleSelect = () => onCurrencySelect(currency);\n\n const token = wrappedCurrency(currency, chainId);\n\n const showImport = inactiveTokens && token && Object.keys(inactiveTokens).includes(token.address);\n\n if (showImport && token) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n },\n [chainId, inactiveTokens, onCurrencySelect, otherCurrency, selectedCurrency, setImportToken, showImportView]\n );\n\n const itemKey = useCallback((index: number, data: any) => currencyKey(data[index]), []);\n\n return (\n \n {Row}\n \n );\n}\n","import { Token, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport { useAllTokenBalances } from '../../state/wallet/hooks';\n\n// compare two token amounts with highest one coming first\nfunction balanceComparator(balanceA?: TokenAmount, balanceB?: TokenAmount) {\n if (balanceA && balanceB) {\n return balanceA.greaterThan(balanceB) ? -1 : balanceA.equalTo(balanceB) ? 0 : 1;\n } else if (balanceA && balanceA.greaterThan('0')) {\n return -1;\n } else if (balanceB && balanceB.greaterThan('0')) {\n return 1;\n }\n return 0;\n}\n\nfunction getTokenComparator(balances: {\n [tokenAddress: string]: TokenAmount | undefined;\n}): (tokenA: Token, tokenB: Token) => number {\n return function sortTokens(tokenA: Token, tokenB: Token): number {\n // -1 = a is first\n // 1 = b is first\n\n // sort by balances\n const balanceA = balances[tokenA.address];\n const balanceB = balances[tokenB.address];\n\n const balanceComp = balanceComparator(balanceA, balanceB);\n if (balanceComp !== 0) return balanceComp;\n\n if (tokenA.symbol && tokenB.symbol) {\n // sort by symbol\n return tokenA.symbol.toLowerCase() < tokenB.symbol.toLowerCase() ? -1 : 1;\n } else {\n return tokenA.symbol ? -1 : tokenB.symbol ? -1 : 0;\n }\n };\n}\n\nexport function useTokenComparator(inverted: boolean): (tokenA: Token, tokenB: Token) => number {\n const balances = useAllTokenBalances();\n const comparator = useMemo(() => getTokenComparator(balances ?? {}), [balances]);\n return useMemo(() => {\n if (inverted) {\n return (tokenA: Token, tokenB: Token) => comparator(tokenA, tokenB) * -1;\n } else {\n return comparator;\n }\n }, [inverted, comparator]);\n}\n","import { useCallback, useState } from 'react';\n\nexport default function useToggle(initialState = false): [boolean, () => void] {\n const [state, setState] = useState(initialState);\n const toggle = useCallback(() => setState((state) => !state), []);\n return [state, toggle];\n}\n","import { RefObject, useEffect, useRef } from 'react';\n\nexport function useOnClickOutside(\n node: RefObject,\n handler: undefined | (() => void)\n) {\n const handlerRef = useRef void)>(handler);\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (node.current?.contains(e.target as Node) ?? false) {\n return;\n }\n if (handlerRef.current) handlerRef.current();\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [node]);\n}\n","import { Currency, ETHER, Token } from '@moonrabbit/swap-sdk';\nimport React, { KeyboardEvent, RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FixedSizeList } from 'react-window';\nimport { Text } from 'rebass';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useAllTokens, useToken, useIsUserAddedToken, useFoundOnInactiveList } from '../../hooks/Tokens';\nimport { CloseIcon, TYPE, ButtonText, IconWrapper } from '../../theme';\nimport { isAddress } from '../../utils';\nimport Column from '../Column';\nimport Row, { RowBetween, RowFixed } from '../Row';\nimport CommonBases from './CommonBases';\nimport CurrencyList from './CurrencyList';\nimport { filterTokens } from './filtering';\nimport { useTokenComparator } from './sorting';\nimport { PaddedColumn, SearchInput, Separator } from './styleds';\nimport styled from 'styled-components';\nimport useToggle from 'hooks/useToggle';\nimport { useOnClickOutside } from 'hooks/useOnClickOutside';\nimport useTheme from 'hooks/useTheme';\nimport ImportRow from './ImportRow';\nimport { Edit } from 'react-feather';\nimport { ButtonPrimary } from 'components/Button';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nconst ContentWrapper = styled(Column)`\n width: 100%;\n flex: 1 1;\n position: relative;\n`;\n\nconst Footer = styled.div`\n width: 100%;\n border-radius: 20px;\n padding: 20px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: ${({ theme }) => theme.bg1};\n border-top: 1px solid ${({ theme }) => theme.bg2};\n`;\n\ninterface CurrencySearchProps {\n isOpen: boolean;\n onDismiss: () => void;\n selectedCurrency?: Currency | null;\n onCurrencySelect: (currency: Currency) => void;\n otherSelectedCurrency?: Currency | null;\n showCommonBases?: boolean;\n showManageView: () => void;\n showImportView: () => void;\n setImportToken: (token: Token) => void;\n}\n\nexport function CurrencySearch({\n selectedCurrency,\n onCurrencySelect,\n otherSelectedCurrency,\n showCommonBases,\n onDismiss,\n isOpen,\n showManageView,\n showImportView,\n setImportToken,\n}: CurrencySearchProps) {\n const { chainId } = useActiveWeb3React();\n const theme = useTheme();\n\n // refs for fixed size lists\n const fixedList = useRef();\n\n const [searchQuery, setSearchQuery] = useState('');\n const [invertSearchOrder] = useState(false);\n\n const allTokens = useAllTokens();\n // const inactiveTokens: Token[] | undefined = useFoundOnInactiveList(searchQuery)\n\n // if they input an address, use it\n const searchToken = useToken(searchQuery);\n const searchTokenIsAdded = useIsUserAddedToken(searchToken);\n\n const showETH: boolean = useMemo(() => {\n const s = searchQuery.toLowerCase().trim();\n return s === '' || s === 'a' || s === 'aa' || s === 'aaa';\n }, [searchQuery]);\n\n const tokenComparator = useTokenComparator(invertSearchOrder);\n\n const filteredTokens: Token[] = useMemo(() => {\n return filterTokens(Object.values(allTokens), searchQuery);\n }, [allTokens, searchQuery]);\n\n const filteredSortedTokens: Token[] = useMemo(() => {\n const sorted = filteredTokens.sort(tokenComparator);\n const symbolMatch = searchQuery\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0);\n\n if (symbolMatch.length > 1) {\n return sorted;\n }\n\n return [\n // sort any exact symbol matches first\n ...sorted.filter((token) => token.symbol?.toLowerCase() === symbolMatch[0]),\n\n // sort by tokens whos symbols start with search substrng\n ...sorted.filter(\n (token) =>\n token.symbol?.toLowerCase().startsWith(searchQuery.toLowerCase().trim()) &&\n token.symbol?.toLowerCase() !== symbolMatch[0]\n ),\n\n // rest that dont match upove\n ...sorted.filter(\n (token) =>\n !token.symbol?.toLowerCase().startsWith(searchQuery.toLowerCase().trim()) &&\n token.symbol?.toLowerCase() !== symbolMatch[0]\n ),\n ];\n }, [filteredTokens, searchQuery, tokenComparator]);\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onCurrencySelect(currency);\n onDismiss();\n },\n [onDismiss, onCurrencySelect]\n );\n\n // clear the input on open\n useEffect(() => {\n if (isOpen) setSearchQuery('');\n }, [isOpen]);\n\n // manage focus on modal show\n const inputRef = useRef();\n const handleInput = useCallback((event) => {\n const input = event.target.value;\n const checksummedInput = isAddress(input);\n setSearchQuery(checksummedInput || input);\n fixedList.current?.scrollTo(0);\n }, []);\n\n const handleEnter = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n const s = searchQuery.toLowerCase().trim();\n if (s === 'aaa') {\n handleCurrencySelect(ETHER);\n } else if (filteredSortedTokens.length > 0) {\n if (\n filteredSortedTokens[0].symbol?.toLowerCase() === searchQuery.trim().toLowerCase() ||\n filteredSortedTokens.length === 1\n ) {\n handleCurrencySelect(filteredSortedTokens[0]);\n }\n }\n }\n },\n [filteredSortedTokens, handleCurrencySelect, searchQuery]\n );\n\n // menu ui\n const [open, toggle] = useToggle(false);\n const node = useRef();\n useOnClickOutside(node, open ? toggle : undefined);\n\n // if no results on main list, show option to expand into inactive\n const [showExpanded, setShowExpanded] = useState(false);\n const inactiveTokens = useFoundOnInactiveList(searchQuery);\n\n // reset expanded results on query reset\n useEffect(() => {\n if (searchQuery === '') {\n setShowExpanded(false);\n }\n }, [setShowExpanded, searchQuery]);\n\n return (\n \n \n \n \n Select a token\n \n \n \n \n }\n onChange={handleInput}\n onKeyDown={handleEnter}\n />\n \n {showCommonBases && (\n \n )}\n \n \n {searchToken && !searchTokenIsAdded ? (\n \n \n \n ) : filteredSortedTokens?.length > 0 || (showExpanded && inactiveTokens && inactiveTokens.length > 0) ? (\n
    \n \n {({ height }) => (\n \n )}\n \n
    \n ) : (\n \n \n No results found in active lists.\n \n {inactiveTokens &&\n inactiveTokens.length > 0 &&\n !(searchToken && !searchTokenIsAdded) &&\n searchQuery.length > 1 &&\n filteredSortedTokens?.length === 0 && (\n // expand button in line with no results\n \n setShowExpanded(!showExpanded)}\n >\n {!showExpanded\n ? `Show ${inactiveTokens.length} more inactive ${inactiveTokens.length === 1 ? 'token' : 'tokens'}`\n : 'Hide expanded search'}\n \n \n )}\n \n )}\n\n {inactiveTokens &&\n inactiveTokens.length > 0 &&\n !(searchToken && !searchTokenIsAdded) &&\n (searchQuery.length > 1 || showExpanded) &&\n (filteredSortedTokens?.length !== 0 || showExpanded) && (\n // button fixed to bottom\n \n setShowExpanded(!showExpanded)}\n >\n {!showExpanded\n ? `Show ${inactiveTokens.length} more inactive ${inactiveTokens.length === 1 ? 'token' : 'tokens'}`\n : 'Hide expanded search'}\n \n \n )}\n
    \n \n \n \n \n \n \n Manage\n \n \n \n
    \n
    \n );\n}\n","import React, { useState } from 'react';\nimport { Token, Currency } from '@moonrabbit/swap-sdk';\nimport styled from 'styled-components';\nimport { TYPE, CloseIcon } from 'theme';\nimport Card from 'components/Card';\nimport { AutoColumn } from 'components/Column';\nimport { RowBetween, RowFixed, AutoRow } from 'components/Row';\nimport CurrencyLogo from 'components/CurrencyLogo';\nimport { ArrowLeft, AlertTriangle } from 'react-feather';\nimport { transparentize } from 'polished';\nimport useTheme from 'hooks/useTheme';\nimport { ButtonPrimary } from 'components/Button';\nimport { SectionBreak } from 'components/swap/styleds';\nimport { useAddUserToken } from 'state/user/hooks';\nimport { getEtherscanLink } from 'utils';\nimport { useActiveWeb3React } from 'hooks';\nimport { ExternalLink } from '../../theme/components';\nimport { useCombinedInactiveList } from 'state/lists/hooks';\nimport ListLogo from 'components/ListLogo';\nimport { PaddedColumn, Checkbox } from './styleds';\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst WarningWrapper = styled(Card)<{ highWarning: boolean }>`\n background-color: ${({ theme, highWarning }) =>\n highWarning ? transparentize(0.8, theme.red1) : transparentize(0.8, theme.yellow2)};\n width: fit-content;\n`;\n\nconst AddressText = styled(TYPE.blue)`\n font-size: 12px;\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n font-size: 10px;\n`}\n`;\n\ninterface ImportProps {\n tokens: Token[];\n onBack?: () => void;\n onDismiss?: () => void;\n handleCurrencySelect?: (currency: Currency) => void;\n}\n\nexport function ImportToken({ tokens, onBack, onDismiss, handleCurrencySelect }: ImportProps) {\n const theme = useTheme();\n\n const { chainId } = useActiveWeb3React();\n\n const [confirmed, setConfirmed] = useState(false);\n\n const addToken = useAddUserToken();\n\n // use for showing import source on inactive tokens\n const inactiveTokenList = useCombinedInactiveList();\n\n // higher warning severity if either is not on a list\n const fromLists =\n (chainId && inactiveTokenList?.[chainId]?.[tokens[0]?.address]?.list) ||\n (chainId && inactiveTokenList?.[chainId]?.[tokens[1]?.address]?.list);\n\n return (\n \n \n \n {onBack ? :
    }\n Import {tokens.length > 1 ? 'Tokens' : 'Token'}\n {onDismiss ? :
    }\n
    \n
    \n \n \n {tokens.map((token) => {\n const list = chainId && inactiveTokenList?.[chainId]?.[token.address]?.list;\n return (\n \n \n \n \n \n {token.symbol}\n \n {token.name}\n \n {chainId && (\n \n {token.address}\n \n )}\n {list !== undefined ? (\n \n {list.logoURI && }\n \n via {list.name}\n \n \n ) : (\n \n \n \n \n Unkown Source\n \n \n \n )}\n \n \n );\n })}\n\n \n \n \n \n Trade at your own risk!\n \n \n\n \n \n Anyone can create a token, including creating fake versions of existing tokens that claim to represent\n projects.\n \n \n If you purchase this token, you may not be able to sell it back.\n \n \n setConfirmed(!confirmed)}>\n setConfirmed(!confirmed)}\n />\n \n I understand\n \n \n \n {\n tokens.map((token) => addToken(token));\n handleCurrencySelect && handleCurrencySelect(tokens[0]);\n }}\n className=\".token-dismiss-button\"\n >\n Import\n \n \n
    \n );\n}\n","import { TokenList } from '@uniswap/token-lists';\nimport schema from '@uniswap/token-lists/src/tokenlist.schema.json';\nimport Ajv from 'ajv';\nimport contenthashToUri from './contenthashToUri';\nimport { parseENSAddress } from './parseENSAddress';\nimport uriToHttp from './uriToHttp';\n\nconst tokenListValidator = new Ajv({ allErrors: true }).compile(schema);\n\n/**\n * Contains the logic for resolving a list URL to a validated token list\n * @param listUrl list url\n * @param resolveENSContentHash resolves an ens name to a contenthash\n */\nexport default async function getTokenList(\n listUrl: string,\n resolveENSContentHash: (ensName: string) => Promise\n): Promise {\n const parsedENS = parseENSAddress(listUrl);\n let urls: string[];\n if (parsedENS) {\n let contentHashUri;\n try {\n contentHashUri = await resolveENSContentHash(parsedENS.ensName);\n } catch (error) {\n console.debug(`Failed to resolve ENS name: ${parsedENS.ensName}`, error);\n throw new Error(`Failed to resolve ENS name: ${parsedENS.ensName}`);\n }\n let translatedUri;\n try {\n translatedUri = contenthashToUri(contentHashUri);\n } catch (error) {\n console.debug('Failed to translate contenthash to URI', contentHashUri);\n throw new Error(`Failed to translate contenthash to URI: ${contentHashUri}`);\n }\n urls = uriToHttp(`${translatedUri}${parsedENS.ensPath ?? ''}`);\n } else {\n urls = uriToHttp(listUrl);\n }\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n const isLast = i === urls.length - 1;\n let response;\n try {\n response = await fetch(url);\n } catch (error) {\n console.debug('Failed to fetch list', listUrl, error);\n if (isLast) throw new Error(`Failed to download list ${listUrl}`);\n continue;\n }\n\n if (!response.ok) {\n if (isLast) throw new Error(`Failed to download list ${listUrl}`);\n continue;\n }\n\n const json = await response.json();\n if (!tokenListValidator(json)) {\n const validationErrors: string =\n tokenListValidator.errors?.reduce((memo, error) => {\n const add = `${error.dataPath} ${error.message ?? ''}`;\n return memo.length > 0 ? `${memo}; ${add}` : `${add}`;\n }, '') ?? 'unknown error';\n throw new Error(`Token list failed validation: ${validationErrors}`);\n }\n return json;\n }\n throw new Error('Unrecognized list URL protocol.');\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/abstract-provider';\nimport { namehash } from 'ethers/lib/utils';\n\nconst REGISTRAR_ABI = [\n {\n constant: true,\n inputs: [\n {\n name: 'node',\n type: 'bytes32',\n },\n ],\n name: 'resolver',\n outputs: [\n {\n name: 'resolverAddress',\n type: 'address',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n];\nconst REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e';\n\nconst RESOLVER_ABI = [\n {\n constant: true,\n inputs: [\n {\n internalType: 'bytes32',\n name: 'node',\n type: 'bytes32',\n },\n ],\n name: 'contenthash',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n// cache the resolver contracts since most of them are the public resolver\nfunction resolverContract(resolverAddress: string, provider: Provider): Contract {\n return new Contract(resolverAddress, RESOLVER_ABI, provider);\n}\n\n/**\n * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI\n * @param ensName to resolve\n * @param provider provider to use to fetch the data\n */\nexport default async function resolveENSContentHash(ensName: string, provider: Provider): Promise {\n const ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider);\n const hash = namehash(ensName);\n const resolverAddress = await ensRegistrarContract.resolver(hash);\n return resolverContract(resolverAddress, provider).contenthash(hash);\n}\n","import { nanoid } from '@reduxjs/toolkit';\nimport { ChainId } from '@moonrabbit/swap-sdk';\nimport { TokenList } from '@uniswap/token-lists';\nimport { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { getNetworkLibrary, NETWORK_CHAIN_ID } from '../connectors';\nimport { AppDispatch } from '../state';\nimport { fetchTokenList } from '../state/lists/actions';\nimport getTokenList from '../utils/getTokenList';\nimport resolveENSContentHash from '../utils/resolveENSContentHash';\nimport { useActiveWeb3React } from './index';\n\nexport function useFetchListCallback(): (listUrl: string, sendDispatch?: boolean) => Promise {\n const { chainId, library } = useActiveWeb3React();\n const dispatch = useDispatch();\n\n const ensResolver = useCallback(\n (ensName: string) => {\n if (!library || chainId !== ChainId.MAINNET) {\n if (NETWORK_CHAIN_ID === ChainId.MAINNET) {\n const networkLibrary = getNetworkLibrary();\n if (networkLibrary) {\n return resolveENSContentHash(ensName, networkLibrary);\n }\n }\n throw new Error('Could not construct mainnet ENS resolver');\n }\n return resolveENSContentHash(ensName, library);\n },\n [chainId, library]\n );\n\n // note: prevent dispatch if using for list search or unsupported list\n return useCallback(\n async (listUrl: string, sendDispatch = true) => {\n const requestId = nanoid();\n sendDispatch && dispatch(fetchTokenList.pending({ requestId, url: listUrl }));\n return getTokenList(listUrl, ensResolver)\n .then((tokenList) => {\n sendDispatch && dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId }));\n return tokenList;\n })\n .catch((error) => {\n console.debug(`Failed to get list at url ${listUrl}`, error);\n sendDispatch && dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message }));\n throw error;\n });\n },\n [dispatch, ensResolver]\n );\n}\n","import { useState, useLayoutEffect } from 'react';\nimport { shade } from 'polished';\nimport Vibrant from 'node-vibrant';\nimport { hex } from 'wcag-contrast';\nimport { Token, ChainId } from '@moonrabbit/swap-sdk';\nimport uriToHttp from 'utils/uriToHttp';\n\nasync function getColorFromToken(token: Token): Promise {\n if (token.chainId === ChainId.RINKEBY && token.address === '0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735') {\n return Promise.resolve('#FAAB14');\n }\n\n const path = `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${token.address}/logo.png`;\n\n return Vibrant.from(path)\n .getPalette()\n .then((palette) => {\n if (palette?.Vibrant) {\n let detectedHex = palette.Vibrant.hex;\n let AAscore = hex(detectedHex, '#FFF');\n while (AAscore < 3) {\n detectedHex = shade(0.005, detectedHex);\n AAscore = hex(detectedHex, '#FFF');\n }\n return detectedHex;\n }\n return null;\n })\n .catch(() => null);\n}\n\nasync function getColorFromUriPath(uri: string): Promise {\n const formattedPath = uriToHttp(uri)[0];\n\n return Vibrant.from(formattedPath)\n .getPalette()\n .then((palette) => {\n if (palette?.Vibrant) {\n return palette.Vibrant.hex;\n }\n return null;\n })\n .catch(() => null);\n}\n\nexport function useColor(token?: Token) {\n const [color, setColor] = useState('#0AC5A3');\n\n useLayoutEffect(() => {\n let stale = false;\n\n if (token) {\n getColorFromToken(token).then((tokenColor) => {\n if (!stale && tokenColor !== null) {\n setColor(tokenColor);\n }\n });\n }\n\n return () => {\n stale = true;\n setColor('#0AC5A3');\n };\n }, [token]);\n\n return color;\n}\n\nexport function useListColor(listImageUri?: string) {\n const [color, setColor] = useState('#0AC5A3');\n\n useLayoutEffect(() => {\n let stale = false;\n\n if (listImageUri) {\n getColorFromUriPath(listImageUri).then((color) => {\n if (!stale && color !== null) {\n setColor(color);\n }\n });\n }\n\n return () => {\n stale = true;\n setColor('#0AC5A3');\n };\n }, [listImageUri]);\n\n return color;\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { TYPE } from '../../theme';\n\nconst Wrapper = styled.button<{ isActive?: boolean; activeElement?: boolean }>`\n border-radius: 20px;\n border: none;\n background: ${({ theme }) => theme.bg1};\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0.4rem 0.4rem;\n align-items: center;\n`;\n\nconst ToggleElement = styled.span<{ isActive?: boolean; bgColor?: string }>`\n border-radius: 50%;\n height: 24px;\n width: 24px;\n background-color: ${({ isActive, bgColor, theme }) => (isActive ? bgColor : theme.bg4)};\n :hover {\n opacity: 0.8;\n }\n`;\n\nconst StatusText = styled(TYPE.main)<{ isActive?: boolean }>`\n margin: 0 10px;\n width: 24px;\n color: ${({ theme, isActive }) => (isActive ? theme.text1 : theme.text3)};\n`;\n\nexport interface ToggleProps {\n id?: string;\n isActive: boolean;\n bgColor: string;\n toggle: () => void;\n}\n\nexport default function ListToggle({ id, isActive, bgColor, toggle }: ToggleProps) {\n return (\n \n {isActive && (\n \n ON\n \n )}\n \n {!isActive && (\n \n OFF\n \n )}\n \n );\n}\n","import React, { memo, useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { Settings, CheckCircle } from 'react-feather';\nimport { usePopper } from 'react-popper';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { useFetchListCallback } from '../../hooks/useFetchListCallback';\nimport { useOnClickOutside } from '../../hooks/useOnClickOutside';\nimport { TokenList } from '@uniswap/token-lists';\n\nimport useToggle from '../../hooks/useToggle';\nimport { AppDispatch, AppState } from '../../state';\nimport { acceptListUpdate, removeList, disableList, enableList } from '../../state/lists/actions';\nimport { useIsListActive, useAllLists, useActiveListUrls } from '../../state/lists/hooks';\nimport { ExternalLink, LinkStyledButton, TYPE, IconWrapper } from '../../theme';\nimport listVersionLabel from '../../utils/listVersionLabel';\nimport { parseENSAddress } from '../../utils/parseENSAddress';\nimport uriToHttp from '../../utils/uriToHttp';\nimport { ButtonEmpty, ButtonPrimary } from '../Button';\n\nimport Column, { AutoColumn } from '../Column';\nimport ListLogo from '../ListLogo';\nimport Row, { RowFixed, RowBetween } from '../Row';\nimport { PaddedColumn, SearchInput, Separator, SeparatorDark } from './styleds';\nimport { useListColor } from 'hooks/useColor';\nimport useTheme from '../../hooks/useTheme';\nimport ListToggle from '../Toggle/ListToggle';\nimport Card from 'components/Card';\nimport { CurrencyModalView } from './CurrencySearchModal';\n\nconst Wrapper = styled(Column)`\n width: 100%;\n height: 100%;\n`;\n\nconst UnpaddedLinkStyledButton = styled(LinkStyledButton)`\n padding: 0;\n font-size: 1rem;\n opacity: ${({ disabled }) => (disabled ? '0.4' : '1')};\n`;\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 100;\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ${({ theme }) => theme.bg2};\n border: 1px solid ${({ theme }) => theme.bg3};\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.01);\n color: ${({ theme }) => theme.text2};\n border-radius: 0.5rem;\n padding: 1rem;\n display: grid;\n grid-template-rows: 1fr;\n grid-gap: 8px;\n font-size: 1rem;\n text-align: left;\n`;\n\nconst StyledMenu = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n`;\n\nconst StyledTitleText = styled.div<{ active: boolean }>`\n font-size: 16px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 600;\n color: ${({ theme, active }) => (active ? theme.white : theme.text2)};\n`;\n\nconst StyledListUrlText = styled(TYPE.main)<{ active: boolean }>`\n font-size: 12px;\n color: ${({ theme, active }) => (active ? theme.white : theme.text2)};\n`;\n\nconst RowWrapper = styled(Row)<{ bgColor: string; active: boolean }>`\n background-color: ${({ bgColor, active, theme }) => (active ? bgColor ?? 'transparent' : theme.bg2)};\n transition: 200ms;\n align-items: center;\n padding: 1rem;\n border-radius: 20px;\n`;\n\nfunction listUrlRowHTMLId(listUrl: string) {\n return `list-row-${listUrl.replace(/\\./g, '-')}`;\n}\n\nconst ListRow = memo(function ListRow({ listUrl }: { listUrl: string }) {\n const listsByUrl = useSelector((state) => state.lists.byUrl);\n const dispatch = useDispatch();\n const { current: list, pendingUpdate: pending } = listsByUrl[listUrl];\n\n const theme = useTheme();\n const listColor = useListColor();\n const isActive = useIsListActive(listUrl);\n\n const [open, toggle] = useToggle(false);\n const node = useRef();\n const [referenceElement, setReferenceElement] = useState();\n const [popperElement, setPopperElement] = useState();\n\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n placement: 'auto',\n strategy: 'fixed',\n modifiers: [{ name: 'offset', options: { offset: [8, 8] } }],\n });\n\n useOnClickOutside(node, open ? toggle : undefined);\n\n const handleAcceptListUpdate = useCallback(() => {\n if (!pending) return;\n dispatch(acceptListUpdate(listUrl));\n }, [dispatch, listUrl, pending]);\n\n const handleRemoveList = useCallback(() => {\n if (window.prompt(`Please confirm you would like to remove this list by typing REMOVE`) === `REMOVE`) {\n dispatch(removeList(listUrl));\n }\n }, [dispatch, listUrl]);\n\n const handleEnableList = useCallback(() => {\n dispatch(enableList(listUrl));\n }, [dispatch, listUrl]);\n\n const handleDisableList = useCallback(() => {\n dispatch(disableList(listUrl));\n }, [dispatch, listUrl]);\n\n if (!list) return null;\n\n return (\n \n {list.logoURI ? (\n \n ) : (\n
    \n )}\n \n \n {list.name}\n \n \n \n {list.tokens.length} tokens\n \n \n \n \n \n {open && (\n \n
    {list && listVersionLabel(list.version)}
    \n \n View list\n \n Remove list\n \n {pending && (\n Update list\n )}\n
    \n )}\n
    \n
    \n
    \n {\n isActive ? handleDisableList() : handleEnableList();\n }}\n />\n \n );\n});\n\nconst ListContainer = styled.div`\n padding: 1rem;\n height: 100%;\n overflow: auto;\n padding-bottom: 80px;\n`;\n\nexport function ManageLists({\n setModalView,\n setImportList,\n setListUrl,\n}: {\n setModalView: (view: CurrencyModalView) => void;\n setImportList: (list: TokenList) => void;\n setListUrl: (url: string) => void;\n}) {\n const theme = useTheme();\n\n const [listUrlInput, setListUrlInput] = useState('');\n\n const lists = useAllLists();\n\n // sort by active but only if not visible\n const activeListUrls = useActiveListUrls();\n const [activeCopy, setActiveCopy] = useState();\n useEffect(() => {\n if (!activeCopy && activeListUrls) {\n setActiveCopy(activeListUrls);\n }\n }, [activeCopy, activeListUrls]);\n\n const handleInput = useCallback((e) => {\n setListUrlInput(e.target.value);\n }, []);\n\n const fetchList = useFetchListCallback();\n\n const validUrl: boolean = useMemo(() => {\n return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput));\n }, [listUrlInput]);\n\n const sortedLists = useMemo(() => {\n const listUrls = Object.keys(lists);\n return listUrls\n .filter((listUrl) => {\n // only show loaded lists, hide unsupported lists\n return Boolean(lists[listUrl].current);\n })\n .sort((u1, u2) => {\n const { current: l1 } = lists[u1];\n const { current: l2 } = lists[u2];\n\n // first filter on active lists\n if (activeCopy?.includes(u1) && !activeCopy?.includes(u2)) {\n return -1;\n }\n if (!activeCopy?.includes(u1) && activeCopy?.includes(u2)) {\n return 1;\n }\n\n if (l1 && l2) {\n return l1.name.toLowerCase() < l2.name.toLowerCase()\n ? -1\n : l1.name.toLowerCase() === l2.name.toLowerCase()\n ? 0\n : 1;\n }\n if (l1) return -1;\n if (l2) return 1;\n return 0;\n });\n }, [lists, activeCopy]);\n\n // temporary fetched list for import flow\n const [tempList, setTempList] = useState();\n const [addError, setAddError] = useState();\n\n useEffect(() => {\n async function fetchTempList() {\n fetchList(listUrlInput, false)\n .then((list) => setTempList(list))\n .catch(() => setAddError('Error importing list'));\n }\n // if valid url, fetch details for card\n if (validUrl) {\n fetchTempList();\n } else {\n setTempList(undefined);\n listUrlInput !== '' && setAddError('Enter valid list location');\n }\n\n // reset error\n if (listUrlInput === '') {\n setAddError(undefined);\n }\n }, [fetchList, listUrlInput, validUrl]);\n\n // check if list is already imported\n const isImported = Object.keys(lists).includes(listUrlInput);\n\n // set list values and have parent modal switch to import list view\n const handleImport = useCallback(() => {\n if (!tempList) return;\n setImportList(tempList);\n setModalView(CurrencyModalView.importList);\n setListUrl(listUrlInput);\n }, [listUrlInput, setImportList, setListUrl, setModalView, tempList]);\n\n return (\n \n \n \n \n \n {addError ? (\n \n {addError}\n \n ) : null}\n \n {tempList && (\n \n \n \n \n {tempList.logoURI && }\n \n {tempList.name}\n {tempList.tokens.length} tokens\n \n \n {isImported ? (\n \n \n \n \n Loaded\n \n ) : (\n \n Import\n \n )}\n \n \n \n )}\n \n \n \n {sortedLists.map((listUrl) => (\n \n ))}\n \n \n \n );\n}\n","import React, { useRef, RefObject, useCallback, useState, useMemo } from 'react';\nimport Column from 'components/Column';\nimport { PaddedColumn, Separator, SearchInput } from './styleds';\nimport Row, { RowBetween, RowFixed } from 'components/Row';\nimport { TYPE, ExternalLinkIcon, TrashIcon, ButtonText, ExternalLink } from 'theme';\nimport { useToken } from 'hooks/Tokens';\nimport styled from 'styled-components';\nimport { useUserAddedTokens, useRemoveUserAddedToken } from 'state/user/hooks';\nimport { Token } from '@moonrabbit/swap-sdk';\nimport CurrencyLogo from 'components/CurrencyLogo';\nimport { getEtherscanLink, isAddress } from 'utils';\nimport { useActiveWeb3React } from 'hooks';\nimport Card from 'components/Card';\nimport ImportRow from './ImportRow';\nimport useTheme from '../../hooks/useTheme';\n\nimport { CurrencyModalView } from './CurrencySearchModal';\n\nconst Wrapper = styled.div`\n width: 100%;\n height: calc(100% - 60px);\n position: relative;\n padding-bottom: 60px;\n`;\n\nconst Footer = styled.div`\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 20px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top: 1px solid ${({ theme }) => theme.bg3};\n padding: 20px;\n text-align: center;\n`;\n\nexport default function ManageTokens({\n setModalView,\n setImportToken,\n}: {\n setModalView: (view: CurrencyModalView) => void;\n setImportToken: (token: Token) => void;\n}) {\n const { chainId } = useActiveWeb3React();\n\n const [searchQuery, setSearchQuery] = useState('');\n const theme = useTheme();\n\n // manage focus on modal show\n const inputRef = useRef();\n const handleInput = useCallback((event) => {\n const input = event.target.value;\n const checksummedInput = isAddress(input);\n setSearchQuery(checksummedInput || input);\n }, []);\n\n // if they input an address, use it\n const isAddressSearch = isAddress(searchQuery);\n const searchToken = useToken(searchQuery);\n\n // all tokens for local lisr\n const userAddedTokens: Token[] = useUserAddedTokens();\n const removeToken = useRemoveUserAddedToken();\n\n const handleRemoveAll = useCallback(() => {\n if (chainId && userAddedTokens) {\n userAddedTokens.map((token) => {\n return removeToken(chainId, token.address);\n });\n }\n }, [removeToken, userAddedTokens, chainId]);\n\n const tokenList = useMemo(() => {\n return (\n chainId &&\n userAddedTokens.map((token) => (\n \n \n \n \n \n {token.symbol}\n \n \n \n \n removeToken(chainId, token.address)} />\n \n \n \n ))\n );\n }, [userAddedTokens, chainId, removeToken]);\n\n return (\n \n \n \n \n }\n onChange={handleInput}\n />\n \n {searchQuery !== '' && !isAddressSearch && Enter valid token address}\n {searchToken && (\n \n setModalView(CurrencyModalView.importToken)}\n setImportToken={setImportToken}\n style={{ height: 'fit-content' }}\n />\n \n )}\n \n \n \n \n \n {userAddedTokens?.length} Custom {userAddedTokens.length === 1 ? 'Token' : 'Tokens'}\n \n {userAddedTokens.length > 0 && (\n \n Clear all\n \n )}\n \n {tokenList}\n \n \n
    \n Tip: Custom tokens are stored locally in your browser\n
    \n
    \n );\n}\n","import React, { useState } from 'react';\nimport { PaddedColumn, Separator } from './styleds';\nimport { RowBetween } from 'components/Row';\nimport { ArrowLeft } from 'react-feather';\nimport { Text } from 'rebass';\nimport { CloseIcon } from 'theme';\nimport styled from 'styled-components';\nimport { Token } from '@moonrabbit/swap-sdk';\nimport { ManageLists } from './ManageLists';\nimport ManageTokens from './ManageTokens';\nimport { TokenList } from '@uniswap/token-lists';\nimport { CurrencyModalView } from './CurrencySearchModal';\n\nconst Wrapper = styled.div`\n width: 100%;\n position: relative;\n padding-bottom: 80px;\n`;\n\nconst ToggleWrapper = styled(RowBetween)`\n background-color: ${({ theme }) => theme.bg3};\n border-radius: 12px;\n padding: 6px;\n`;\n\nconst ToggleOption = styled.div<{ active?: boolean }>`\n width: 48%;\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n font-weight: 600;\n background-color: ${({ theme, active }) => (active ? theme.bg1 : theme.bg3)};\n color: ${({ theme, active }) => (active ? theme.text1 : theme.text2)};\n user-select: none;\n\n :hover {\n cursor: pointer;\n opacity: 0.7;\n }\n`;\n\nexport default function Manage({\n onDismiss,\n setModalView,\n setImportList,\n setImportToken,\n setListUrl,\n}: {\n onDismiss: () => void;\n setModalView: (view: CurrencyModalView) => void;\n setImportToken: (token: Token) => void;\n setImportList: (list: TokenList) => void;\n setListUrl: (url: string) => void;\n}) {\n // toggle between tokens and lists\n const [showLists, setShowLists] = useState(true);\n\n return (\n \n \n \n setModalView(CurrencyModalView.search)} />\n \n Manage\n \n \n \n \n \n \n \n setShowLists(!showLists)} active={showLists}>\n Lists\n \n setShowLists(!showLists)} active={!showLists}>\n Tokens\n \n \n \n {showLists ? (\n \n ) : (\n \n )}\n \n );\n}\n","import React, { useState, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { TYPE, CloseIcon } from 'theme';\nimport Card from 'components/Card';\nimport { AutoColumn } from 'components/Column';\nimport { RowBetween, RowFixed, AutoRow } from 'components/Row';\nimport { ArrowLeft, AlertTriangle } from 'react-feather';\nimport useTheme from 'hooks/useTheme';\nimport { transparentize } from 'polished';\nimport { ButtonPrimary } from 'components/Button';\nimport { SectionBreak } from 'components/swap/styleds';\nimport { ExternalLink } from '../../theme/components';\nimport ListLogo from 'components/ListLogo';\nimport { PaddedColumn, Checkbox, TextDot } from './styleds';\nimport { TokenList } from '@uniswap/token-lists';\nimport { useDispatch } from 'react-redux';\nimport { AppDispatch } from 'state';\nimport { useFetchListCallback } from 'hooks/useFetchListCallback';\nimport { removeList, enableList } from 'state/lists/actions';\nimport { CurrencyModalView } from './CurrencySearchModal';\nimport { useAllLists } from 'state/lists/hooks';\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\ninterface ImportProps {\n listURL: string;\n list: TokenList;\n onDismiss: () => void;\n setModalView: (view: CurrencyModalView) => void;\n}\n\nexport function ImportList({ listURL, list, setModalView, onDismiss }: ImportProps) {\n const theme = useTheme();\n const dispatch = useDispatch();\n\n // user must accept\n const [confirmed, setConfirmed] = useState(false);\n\n const lists = useAllLists();\n const fetchList = useFetchListCallback();\n\n // monitor is list is loading\n const adding = Boolean(lists[listURL]?.loadingRequestId);\n const [addError, setAddError] = useState(null);\n\n const handleAddList = useCallback(() => {\n if (adding) return;\n setAddError(null);\n fetchList(listURL)\n .then(() => {\n // turn list on\n dispatch(enableList(listURL));\n // go back to lists\n setModalView(CurrencyModalView.manage);\n })\n .catch((error) => {\n setAddError(error.message);\n dispatch(removeList(listURL));\n });\n }, [adding, dispatch, fetchList, listURL, setModalView]);\n\n return (\n \n \n \n setModalView(CurrencyModalView.manage)} />\n Import List\n \n \n \n \n \n \n \n \n \n {list.logoURI && }\n \n \n \n {list.name}\n \n \n \n {list.tokens.length} tokens\n \n \n \n \n {listURL}\n \n \n \n \n \n \n \n \n \n \n Import at your own risk{' '}\n \n \n\n \n \n By adding this list you are implicitly trusting that the data is correct. Anyone can create a list,\n including creating fake versions of existing lists and lists that claim to represent projects that do\n not have one.\n \n \n If you purchase a token from this list, you may not be able to sell it back.\n \n \n setConfirmed(!confirmed)}>\n setConfirmed(!confirmed)}\n />\n \n I understand\n \n \n \n\n \n Import\n \n {addError ? (\n \n {addError}\n \n ) : null}\n \n {/* */}\n \n \n );\n}\n","import { Currency, Token } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport useLast from '../../hooks/useLast';\nimport Modal from '../Modal';\nimport { CurrencySearch } from './CurrencySearch';\nimport { ImportToken } from './ImportToken';\nimport usePrevious from 'hooks/usePrevious';\nimport Manage from './Manage';\nimport { TokenList } from '@uniswap/token-lists';\nimport { ImportList } from './ImportList';\n\ninterface CurrencySearchModalProps {\n isOpen: boolean;\n onDismiss: () => void;\n selectedCurrency?: Currency | null;\n onCurrencySelect: (currency: Currency) => void;\n otherSelectedCurrency?: Currency | null;\n showCommonBases?: boolean;\n}\n\nexport enum CurrencyModalView {\n search,\n manage,\n importToken,\n importList,\n}\n\nexport default function CurrencySearchModal({\n isOpen,\n onDismiss,\n onCurrencySelect,\n selectedCurrency,\n otherSelectedCurrency,\n showCommonBases = false,\n}: CurrencySearchModalProps) {\n const [modalView, setModalView] = useState(CurrencyModalView.manage);\n const lastOpen = useLast(isOpen);\n\n useEffect(() => {\n if (isOpen && !lastOpen) {\n setModalView(CurrencyModalView.search);\n }\n }, [isOpen, lastOpen]);\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onCurrencySelect(currency);\n onDismiss();\n },\n [onDismiss, onCurrencySelect]\n );\n\n // for token import view\n const prevView = usePrevious(modalView);\n\n // used for import token flow\n const [importToken, setImportToken] = useState();\n\n // used for import list\n const [importList, setImportList] = useState();\n const [listURL, setListUrl] = useState();\n\n // change min height if not searching\n const minHeight = modalView === CurrencyModalView.importToken || modalView === CurrencyModalView.importList ? 40 : 80;\n\n return (\n \n {modalView === CurrencyModalView.search ? (\n setModalView(CurrencyModalView.importToken)}\n setImportToken={setImportToken}\n showManageView={() => setModalView(CurrencyModalView.manage)}\n />\n ) : modalView === CurrencyModalView.importToken && importToken ? (\n \n setModalView(prevView && prevView !== CurrencyModalView.importToken ? prevView : CurrencyModalView.search)\n }\n handleCurrencySelect={handleCurrencySelect}\n />\n ) : modalView === CurrencyModalView.importList && importList && listURL ? (\n \n ) : modalView === CurrencyModalView.manage ? (\n \n ) : (\n ''\n )}\n \n );\n}\n","import { Currency } from '@moonrabbit/swap-sdk';\nimport React from 'react';\nimport styled from 'styled-components';\nimport CurrencyLogo from '../CurrencyLogo';\n\nconst Wrapper = styled.div<{ margin: boolean; sizeraw: number }>`\n position: relative;\n display: flex;\n flex-direction: row;\n margin-right: ${({ sizeraw, margin }) => margin && (sizeraw / 3 + 8).toString() + 'px'};\n`;\n\ninterface DoubleCurrencyLogoProps {\n margin?: boolean;\n size?: number;\n currency0?: Currency;\n currency1?: Currency;\n}\n\nconst HigherLogo = styled(CurrencyLogo)`\n z-index: 2;\n`;\nconst CoveredLogo = styled(CurrencyLogo)<{ sizeraw: number }>`\n position: absolute;\n left: ${({ sizeraw }) => '-' + (sizeraw / 2).toString() + 'px'} !important;\n`;\n\nexport default function DoubleCurrencyLogo({\n currency0,\n currency1,\n size = 16,\n margin = false,\n}: DoubleCurrencyLogoProps) {\n return (\n \n {currency0 && }\n {currency1 && }\n \n );\n}\n","var _path;\n\nvar _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgDropdown = function SvgDropdown(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 7,\n viewBox: \"0 0 12 7\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.97168 1L6.20532 6L11.439 1\",\n stroke: \"#AEAEAE\"\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDropdown, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/dropdown.7d32d2fa.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport styled from 'styled-components';\nimport { escapeRegExp } from '../../utils';\n\nconst StyledInput = styled.input<{ error?: boolean; fontSize?: string; align?: string }>`\n color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)};\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: ${({ theme }) => theme.bg1};\n font-size: ${({ fontSize }) => fontSize ?? '24px'};\n text-align: ${({ align }) => align && align};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n [type='number'] {\n -moz-appearance: textfield;\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n ::placeholder {\n color: ${({ theme }) => theme.text4};\n }\n`;\n\nconst inputRegex = RegExp(`^\\\\d*(?:\\\\\\\\[.])?\\\\d*$`); // match escaped \".\" characters via in a non-capturing group\n\nexport const Input = React.memo(function InnerInput({\n value,\n onUserInput,\n placeholder,\n ...rest\n}: {\n value: string | number;\n onUserInput: (input: string) => void;\n error?: boolean;\n fontSize?: string;\n align?: 'right' | 'left';\n} & Omit, 'ref' | 'onChange' | 'as'>) {\n const enforcer = (nextUserInput: string) => {\n if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) {\n onUserInput(nextUserInput);\n }\n };\n\n return (\n enforcer(event.target.value.replace(/,/g, '.'))}\n // universal input options\n inputMode=\"decimal\"\n title=\"Token Amount\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n // text-specific options\n type=\"text\"\n pattern=\"^[0-9]*[.,]?[0-9]*$\"\n placeholder={placeholder || '0.0'}\n minLength={1}\n maxLength={79}\n spellCheck=\"false\"\n />\n );\n});\n\nexport default Input;\n","import { Currency, Pair } from '@moonrabbit/swap-sdk';\nimport React, { useState, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { darken } from 'polished';\nimport { useCurrencyBalance } from '../../state/wallet/hooks';\nimport CurrencySearchModal from '../SearchModal/CurrencySearchModal';\nimport CurrencyLogo from '../CurrencyLogo';\nimport DoubleCurrencyLogo from '../DoubleLogo';\nimport { RowBetween } from '../Row';\nimport { TYPE } from '../../theme';\nimport { Input as NumericalInput } from '../NumericalInput';\nimport { ReactComponent as DropDown } from '../../assets/images/dropdown.svg';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport useTheme from '../../hooks/useTheme';\n\nconst InputRow = styled.div<{ selected: boolean }>`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n padding: ${({ selected }) => (selected ? '0.8rem 0.6rem 0.8rem 1.1rem' : '0.8rem 0.8rem 0.8rem 1.1rem')};\n`;\n\nconst CurrencySelect = styled.button`\n align-items: center;\n height: 2.2rem;\n font-size: 20px;\n font-weight: 500;\n border: none;\n background-color: ${({ theme }) => theme.bg3};\n color: ${({ theme }) => theme.text1};\n border-radius: 12px;\n outline: none;\n cursor: pointer;\n user-select: none;\n border: none;\n padding: 0 0.5rem;\n transition: 0.2s;\n\n :focus,\n :hover {\n background-color: ${({ theme }) => theme.bg4};\n }\n`;\n\nconst LabelRow = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n color: ${({ theme }) => theme.text1};\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.75rem 1rem 0 1rem;\n span:hover {\n cursor: pointer;\n color: ${({ theme }) => darken(0.2, theme.text2)};\n }\n`;\n\nconst Aligner = styled.span`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst StyledDropDown = styled(DropDown)`\n margin: 0 0.25rem 0 0.5rem;\n height: 35%;\n\n path {\n stroke: ${({ theme }) => theme.text1};\n stroke-width: 1.5px;\n }\n`;\n\nconst InputPanel = styled.div<{ hideInput?: boolean }>`\n ${({ theme }) => theme.flexColumnNoWrap}\n position: relative;\n border-radius: ${({ hideInput }) => (hideInput ? '8px' : '20px')};\n background-color: ${({ theme }) => theme.bg1};\n z-index: 1;\n`;\n\nconst Container = styled.div<{ hideInput: boolean }>`\n border-radius: ${({ hideInput }) => (hideInput ? '8px' : '20px')};\n border: 1px solid ${({ theme }) => theme.bg3};\n`;\n\nconst StyledTokenName = styled.span<{ active?: boolean }>`\n ${({ active }) => (active ? ' margin: 0 0.25rem 0 0.75rem;' : ' margin: 0 0.25rem 0 0.25rem;')}\n font-size: ${({ active }) => (active ? '20px' : '16px')};\n`;\n\nconst StyledBalanceMax = styled.button`\n padding: 0.5rem;\n background-color: ${({ theme }) => theme.bg3};\n border: 1px solid ${({ theme }) => theme.bg3};\n border-radius: 0.5rem;\n font-size: 0.875rem;\n transition: 0.2s;\n\n font-weight: 500;\n cursor: pointer;\n margin-right: 0.5rem;\n color: ${({ theme }) => theme.primaryText1};\n\n :hover {\n background-color: ${({ theme }) => theme.primary3};\n }\n :focus {\n outline: none;\n }\n\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n margin-right: 0.5rem;\n `};\n`;\n\ninterface CurrencyInputPanelProps {\n value: string;\n onUserInput: (value: string) => void;\n onMax?: () => void;\n showMaxButton: boolean;\n label?: string;\n onCurrencySelect?: (currency: Currency) => void;\n currency?: Currency | null;\n disableCurrencySelect?: boolean;\n hideBalance?: boolean;\n pair?: Pair | null;\n hideInput?: boolean;\n otherCurrency?: Currency | null;\n id: string;\n showCommonBases?: boolean;\n customBalanceText?: string;\n}\n\nexport default function CurrencyInputPanel({\n value,\n onUserInput,\n onMax,\n showMaxButton,\n label = 'Input',\n onCurrencySelect,\n currency,\n disableCurrencySelect = false,\n hideBalance = false,\n pair = null, // used for double token logo\n hideInput = false,\n otherCurrency,\n id,\n showCommonBases,\n customBalanceText,\n}: CurrencyInputPanelProps) {\n const [modalOpen, setModalOpen] = useState(false);\n const { account } = useActiveWeb3React();\n const selectedCurrencyBalance = useCurrencyBalance(account ?? undefined, currency ?? undefined);\n const theme = useTheme();\n\n const handleDismissSearch = useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n\n return (\n \n \n {!hideInput && (\n \n \n \n {label}\n \n {account && (\n \n {!hideBalance && !!currency && selectedCurrencyBalance\n ? (customBalanceText ?? 'Balance: ') + selectedCurrencyBalance?.toSignificant(6)\n : ' -'}\n \n )}\n \n \n )}\n \n {!hideInput && (\n <>\n {\n onUserInput(val);\n }}\n />\n {account && currency && showMaxButton && label !== 'To' && (\n MAX\n )}\n \n )}\n {\n if (!disableCurrencySelect) {\n setModalOpen(true);\n }\n }}\n >\n \n {pair ? (\n \n ) : currency ? (\n \n ) : null}\n {pair ? (\n \n {pair?.token0.symbol}:{pair?.token1.symbol}\n \n ) : (\n \n {(currency && currency.symbol && currency.symbol.length > 20\n ? currency.symbol.slice(0, 4) +\n '...' +\n currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length)\n : currency?.symbol) || 'Token'}\n \n )}\n {!disableCurrencySelect && }\n \n \n \n \n {!disableCurrencySelect && onCurrencySelect && (\n \n )}\n \n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst ToggleElement = styled.span<{ isActive?: boolean; isOnSwitch?: boolean }>`\n padding: 0.25rem 0.5rem;\n border-radius: 14px;\n background: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.primary1 : theme.text4) : 'none')};\n color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text3)};\n font-size: 1rem;\n font-weight: 400;\n\n padding: 0.35rem 0.6rem;\n border-radius: 12px;\n background: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.primary1 : theme.text4) : 'none')};\n color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text2)};\n font-size: 1rem;\n font-weight: ${({ isOnSwitch }) => (isOnSwitch ? '500' : '400')};\n :hover {\n user-select: ${({ isOnSwitch }) => (isOnSwitch ? 'none' : 'initial')};\n background: ${({ theme, isActive, isOnSwitch }) =>\n isActive ? (isOnSwitch ? theme.primary1 : theme.text3) : 'none'};\n color: ${({ theme, isActive, isOnSwitch }) => (isActive ? (isOnSwitch ? theme.white : theme.text2) : theme.text3)};\n }\n`;\n\nconst StyledToggle = styled.button<{ isActive?: boolean; activeElement?: boolean }>`\n border-radius: 12px;\n border: none;\n background: ${({ theme }) => theme.bg3};\n display: flex;\n width: fit-content;\n cursor: pointer;\n outline: none;\n padding: 0;\n`;\n\nexport interface ToggleProps {\n id?: string;\n isActive: boolean;\n toggle: () => void;\n}\n\nexport default function Toggle({ id, isActive, toggle }: ToggleProps) {\n return (\n \n \n On\n \n \n Off\n \n \n );\n}\n","import React, { useState, useRef, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport QuestionHelper from '../QuestionHelper';\nimport { TYPE } from '../../theme';\nimport { AutoColumn } from '../Column';\nimport { RowBetween, RowFixed } from '../Row';\n\nimport { darken } from 'polished';\n\nenum SlippageError {\n InvalidInput = 'InvalidInput',\n RiskyLow = 'RiskyLow',\n RiskyHigh = 'RiskyHigh',\n}\n\nenum DeadlineError {\n InvalidInput = 'InvalidInput',\n}\n\nconst FancyButton = styled.button`\n color: ${({ theme }) => theme.text1};\n align-items: center;\n height: 2rem;\n border-radius: 36px;\n font-size: 1rem;\n width: auto;\n min-width: 3.5rem;\n border: 1px solid ${({ theme }) => theme.bg3};\n outline: none;\n background: ${({ theme }) => theme.bg1};\n :hover {\n border: 1px solid ${({ theme }) => theme.bg4};\n }\n :focus {\n border: 1px solid ${({ theme }) => theme.primary1};\n }\n`;\n\nconst Option = styled(FancyButton)<{ active: boolean }>`\n margin-right: 8px;\n :hover {\n cursor: pointer;\n }\n background-color: ${({ active, theme }) => active && theme.primary1};\n color: ${({ active, theme }) => (active ? theme.white : theme.text1)};\n`;\n\nconst Input = styled.input`\n background: ${({ theme }) => theme.bg1};\n font-size: 16px;\n width: auto;\n outline: none;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n color: ${({ theme, color }) => (color === 'red' ? theme.red1 : theme.text1)};\n text-align: right;\n`;\n\nconst OptionCustom = styled(FancyButton)<{ active?: boolean; warning?: boolean }>`\n height: 2rem;\n position: relative;\n padding: 0 0.75rem;\n flex: 1;\n border: ${({ theme, active, warning }) => active && `1px solid ${warning ? theme.red1 : theme.primary1}`};\n :hover {\n border: ${({ theme, active, warning }) =>\n active && `1px solid ${warning ? darken(0.1, theme.red1) : darken(0.1, theme.primary1)}`};\n }\n\n input {\n width: 100%;\n height: 100%;\n border: 0px;\n border-radius: 2rem;\n }\n`;\n\nconst SlippageEmojiContainer = styled.span`\n color: #f3841e;\n ${({ theme }) => theme.mediaWidth.upToSmall`\n display: none; \n `}\n`;\n\nexport interface SlippageTabsProps {\n rawSlippage: number;\n setRawSlippage: (rawSlippage: number) => void;\n deadline: number;\n setDeadline: (deadline: number) => void;\n}\n\nexport default function SlippageTabs({ rawSlippage, setRawSlippage, deadline, setDeadline }: SlippageTabsProps) {\n const theme = useContext(ThemeContext);\n\n const inputRef = useRef();\n\n const [slippageInput, setSlippageInput] = useState('');\n const [deadlineInput, setDeadlineInput] = useState('');\n\n const slippageInputIsValid =\n slippageInput === '' || (rawSlippage / 100).toFixed(2) === Number.parseFloat(slippageInput).toFixed(2);\n const deadlineInputIsValid = deadlineInput === '' || (deadline / 60).toString() === deadlineInput;\n\n let slippageError: SlippageError | undefined;\n if (slippageInput !== '' && !slippageInputIsValid) {\n slippageError = SlippageError.InvalidInput;\n } else if (slippageInputIsValid && rawSlippage < 50) {\n slippageError = SlippageError.RiskyLow;\n } else if (slippageInputIsValid && rawSlippage > 500) {\n slippageError = SlippageError.RiskyHigh;\n } else {\n slippageError = undefined;\n }\n\n let deadlineError: DeadlineError | undefined;\n if (deadlineInput !== '' && !deadlineInputIsValid) {\n deadlineError = DeadlineError.InvalidInput;\n } else {\n deadlineError = undefined;\n }\n\n function parseCustomSlippage(value: string) {\n setSlippageInput(value);\n\n try {\n const valueAsIntFromRoundedFloat = Number.parseInt((Number.parseFloat(value) * 100).toString());\n if (!Number.isNaN(valueAsIntFromRoundedFloat) && valueAsIntFromRoundedFloat < 5000) {\n setRawSlippage(valueAsIntFromRoundedFloat);\n }\n } catch {}\n }\n\n function parseCustomDeadline(value: string) {\n setDeadlineInput(value);\n\n try {\n const valueAsInt: number = Number.parseInt(value) * 60;\n if (!Number.isNaN(valueAsInt) && valueAsInt > 0) {\n setDeadline(valueAsInt);\n }\n } catch {}\n }\n\n return (\n \n \n \n \n Slippage tolerance\n \n \n \n \n {\n setSlippageInput('');\n setRawSlippage(10);\n }}\n active={rawSlippage === 10}\n >\n 0.1%\n \n {\n setSlippageInput('');\n setRawSlippage(50);\n }}\n active={rawSlippage === 50}\n >\n 0.5%\n \n {\n setSlippageInput('');\n setRawSlippage(100);\n }}\n active={rawSlippage === 100}\n >\n 1%\n \n \n \n {!!slippageInput &&\n (slippageError === SlippageError.RiskyLow || slippageError === SlippageError.RiskyHigh) ? (\n \n \n ⚠️\n \n \n ) : null}\n {/* https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 */}\n {\n parseCustomSlippage((rawSlippage / 100).toFixed(2));\n }}\n onChange={(e) => parseCustomSlippage(e.target.value)}\n color={!slippageInputIsValid ? 'red' : ''}\n />\n %\n \n \n \n {!!slippageError && (\n \n {slippageError === SlippageError.InvalidInput\n ? 'Enter a valid slippage percentage'\n : slippageError === SlippageError.RiskyLow\n ? 'Your transaction may fail'\n : 'Your transaction may be frontrun'}\n \n )}\n \n\n \n \n \n Transaction deadline\n \n \n \n \n \n {\n parseCustomDeadline((deadline / 60).toString());\n }}\n placeholder={(deadline / 60).toString()}\n value={deadlineInput}\n onChange={(e) => parseCustomDeadline(e.target.value)}\n />\n \n \n minutes\n \n \n \n \n );\n}\n","import React, { useContext, useRef, useState } from 'react';\nimport { Settings, X } from 'react-feather';\nimport { Text } from 'rebass';\nimport styled, { ThemeContext } from 'styled-components';\nimport { useOnClickOutside } from '../../hooks/useOnClickOutside';\nimport { ApplicationModal } from '../../state/application/actions';\nimport { useModalOpen, useToggleSettingsMenu } from '../../state/application/hooks';\nimport {\n useExpertModeManager,\n useUserTransactionTTL,\n useUserSlippageTolerance,\n useUserSingleHopOnly,\n} from '../../state/user/hooks';\nimport { TYPE } from '../../theme';\nimport { ButtonError } from '../Button';\nimport { AutoColumn } from '../Column';\nimport Modal from '../Modal';\nimport QuestionHelper from '../QuestionHelper';\nimport { RowBetween, RowFixed } from '../Row';\nimport Toggle from '../Toggle';\nimport TransactionSettings from '../TransactionSettings';\n\nconst StyledMenuIcon = styled(Settings)`\n height: 20px;\n width: 20px;\n\n > * {\n stroke: ${({ theme }) => theme.text2};\n }\n\n :hover {\n opacity: 0.7;\n }\n`;\n\nconst StyledCloseIcon = styled(X)`\n height: 20px;\n width: 20px;\n :hover {\n cursor: pointer;\n }\n\n > * {\n stroke: ${({ theme }) => theme.text1};\n }\n`;\n\nconst StyledMenuButton = styled.button`\n position: relative;\n width: 100%;\n height: 100%;\n border: none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n height: 35px;\n\n padding: 0.15rem 0.5rem;\n border-radius: 0.5rem;\n\n :hover,\n :focus {\n cursor: pointer;\n outline: none;\n }\n\n svg {\n margin-top: 2px;\n }\n`;\nconst EmojiWrapper = styled.div`\n position: absolute;\n bottom: -6px;\n right: 0px;\n font-size: 14px;\n`;\n\nconst StyledMenu = styled.div`\n margin-left: 0.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n text-align: left;\n`;\n\nconst MenuFlyout = styled.span`\n min-width: 20.125rem;\n background-color: ${({ theme }) => theme.bg2};\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.01);\n border: 1px solid ${({ theme }) => theme.bg4};\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n font-size: 1rem;\n position: absolute;\n top: 3rem;\n right: 0rem;\n z-index: 100;\n\n ${({ theme }) => theme.mediaWidth.upToMedium`\n min-width: 18.125rem;\n `};\n`;\n\nconst Break = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.bg3};\n`;\n\nconst ModalContentWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2rem 0;\n background-color: ${({ theme }) => theme.bg2};\n border-radius: 20px;\n`;\n\nexport default function SettingsTab() {\n const node = useRef();\n const open = useModalOpen(ApplicationModal.SETTINGS);\n const toggle = useToggleSettingsMenu();\n\n const theme = useContext(ThemeContext);\n const [userSlippageTolerance, setUserslippageTolerance] = useUserSlippageTolerance();\n\n const [ttl, setTtl] = useUserTransactionTTL();\n\n const [expertMode, toggleExpertMode] = useExpertModeManager();\n\n const [singleHopOnly, setSingleHopOnly] = useUserSingleHopOnly();\n\n // show confirmation view before turning on\n const [showConfirmation, setShowConfirmation] = useState(false);\n\n useOnClickOutside(node, open ? toggle : undefined);\n\n return (\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451\n \n setShowConfirmation(false)} maxHeight={100}>\n \n \n \n
    \n \n Are you sure?\n \n setShowConfirmation(false)} />\n \n \n \n \n Expert mode turns off the confirm transaction prompt and allows high slippage trades that often result\n in bad rates and lost funds.\n \n \n ONLY USE THIS MODE IF YOU KNOW WHAT YOU ARE DOING.\n \n {\n if (window.prompt(`Please type the word \"confirm\" to enable expert mode.`) === 'confirm') {\n toggleExpertMode();\n setShowConfirmation(false);\n }\n }}\n >\n \n Turn On Expert Mode\n \n \n \n \n \n \n \n \n {expertMode ? (\n \n \n 🧙\n \n \n ) : null}\n \n {open && (\n \n \n \n Transaction Settings\n \n \n \n Interface Settings\n \n \n \n \n Toggle Expert Mode\n \n \n \n {\n toggleExpertMode();\n setShowConfirmation(false);\n }\n : () => {\n toggle();\n setShowConfirmation(true);\n }\n }\n />\n \n \n \n \n Disable Multihops\n \n \n \n (singleHopOnly ? setSingleHopOnly(false) : setSingleHopOnly(true))}\n />\n \n \n \n )}\n \n );\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport enum Field {\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B',\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string; noLiquidity: boolean }>('mint/typeInputMint');\nexport const resetMintState = createAction('mint/resetMintState');\n","import React from 'react';\nimport styled from 'styled-components';\nimport { darken } from 'polished';\nimport { NavLink, Link as HistoryLink } from 'react-router-dom';\n\nimport { ArrowLeft } from 'react-feather';\nimport { RowBetween } from '../Row';\n// import QuestionHelper from '../QuestionHelper'\nimport Settings from '../Settings';\nimport { useDispatch } from 'react-redux';\nimport { AppDispatch } from 'state';\nimport { resetMintState } from 'state/mint/actions';\n\nconst Tabs = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n border-radius: 3rem;\n justify-content: space-evenly;\n`;\n\nconst activeClassName = 'ACTIVE';\n\nconst StyledNavLink = styled(NavLink).attrs({\n activeClassName,\n})`\n ${({ theme }) => theme.flexRowNoWrap}\n align-items: center;\n justify-content: center;\n height: 3rem;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.text3};\n font-size: 20px;\n\n &.${activeClassName} {\n border-radius: 12px;\n font-weight: 500;\n color: ${({ theme }) => theme.text1};\n }\n\n :hover,\n :focus {\n color: ${({ theme }) => darken(0.1, theme.text1)};\n }\n`;\n\nconst ActiveText = styled.div`\n font-weight: 500;\n font-size: 20px;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n color: ${({ theme }) => theme.text1};\n`;\n\nexport function SwapPoolTabs({ active }: { active: 'swap' | 'pool' }) {\n return (\n \n active === 'swap'}>\n {'Swap'}\n \n active === 'pool'}>\n {'Pool'}\n \n \n );\n}\n\nexport function FindPoolTabs() {\n return (\n \n \n \n \n \n Import Pool\n \n \n \n );\n}\n\nexport function AddRemoveTabs({ adding, creating }: { adding: boolean; creating: boolean }) {\n // reset states on back\n const dispatch = useDispatch();\n\n return (\n \n \n {\n adding && dispatch(resetMintState());\n }}\n >\n \n \n {creating ? 'Create a pair' : adding ? 'Add Liquidity' : 'Remove Liquidity'}\n \n \n \n );\n}\n","import { TokenAmount, Pair, Currency } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport { abi as IUniswapV2PairABI } from '@uniswap/v2-core/build/IUniswapV2Pair.json';\nimport { Interface } from '@ethersproject/abi';\nimport { useActiveWeb3React } from '../hooks';\n\nimport { useMultipleContractSingleData } from '../state/multicall/hooks';\nimport { wrappedCurrency } from '../utils/wrappedCurrency';\n\nconst PAIR_INTERFACE = new Interface(IUniswapV2PairABI);\n\nexport enum PairState {\n LOADING,\n NOT_EXISTS,\n EXISTS,\n INVALID,\n}\n\nexport function usePairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, Pair | null][] {\n const { chainId } = useActiveWeb3React();\n\n const tokens = useMemo(\n () =>\n currencies.map(([currencyA, currencyB]) => [\n wrappedCurrency(currencyA, chainId),\n wrappedCurrency(currencyB, chainId),\n ]),\n [chainId, currencies]\n );\n\n const pairAddresses = useMemo(\n () =>\n tokens.map(([tokenA, tokenB]) => {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? Pair.getAddress(tokenA, tokenB) : undefined;\n }),\n [tokens]\n );\n // computePairAddress\n const results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves');\n\n console.groupEnd();\n\n return useMemo(() => {\n return results.map((result, i) => {\n const { result: reserves, loading } = result;\n const tokenA = tokens[i][0];\n const tokenB = tokens[i][1];\n\n if (loading) return [PairState.LOADING, null];\n if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null];\n if (!reserves) return [PairState.NOT_EXISTS, null];\n const { reserve0, reserve1 } = reserves;\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];\n return [\n PairState.EXISTS,\n new Pair(new TokenAmount(token0, reserve0.toString()), new TokenAmount(token1, reserve1.toString())),\n ];\n });\n }, [results, tokens]);\n}\n\nexport function usePair(tokenA?: Currency, tokenB?: Currency): [PairState, Pair | null] {\n return usePairs([[tokenA, tokenB]])[0];\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport enum Field {\n INPUT = 'INPUT',\n OUTPUT = 'OUTPUT',\n}\n\nexport const selectCurrency = createAction<{ field: Field; currencyId: string }>('swap/selectCurrency');\nexport const switchCurrencies = createAction('swap/switchCurrencies');\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('swap/typeInput');\nexport const replaceSwapState = createAction<{\n field: Field;\n typedValue: string;\n inputCurrencyId?: string;\n outputCurrencyId?: string;\n recipient: string | null;\n}>('swap/replaceSwapState');\nexport const setRecipient = createAction<{ recipient: string | null }>('swap/setRecipient');\n","import { MaxUint256 } from '@ethersproject/constants';\nimport { TransactionResponse } from '@ethersproject/providers';\nimport { Trade, TokenAmount, CurrencyAmount, ETHER } from '@moonrabbit/swap-sdk';\nimport { useCallback, useMemo } from 'react';\nimport { ROUTER_ADDRESS } from '../constants';\nimport { useTokenAllowance } from '../data/Allowances';\nimport { Field } from '../state/swap/actions';\nimport { useTransactionAdder, useHasPendingApproval } from '../state/transactions/hooks';\nimport { computeSlippageAdjustedAmounts } from '../utils/prices';\nimport { calculateGasMargin } from '../utils';\nimport { useTokenContract } from './useContract';\nimport { useActiveWeb3React } from './index';\n\nexport enum ApprovalState {\n UNKNOWN,\n NOT_APPROVED,\n PENDING,\n APPROVED,\n}\n\n// returns a variable indicating the state of the approval and a function which approves if necessary or early returns\nexport function useApproveCallback(\n amountToApprove?: CurrencyAmount,\n spender?: string\n): [ApprovalState, () => Promise] {\n const { account } = useActiveWeb3React();\n const token = amountToApprove instanceof TokenAmount ? amountToApprove.token : undefined;\n const currentAllowance = useTokenAllowance(token, account ?? undefined, spender);\n const pendingApproval = useHasPendingApproval(token?.address, spender);\n\n // check the current approval status\n const approvalState: ApprovalState = useMemo(() => {\n if (!amountToApprove || !spender) return ApprovalState.UNKNOWN;\n if (amountToApprove.currency === ETHER) return ApprovalState.APPROVED;\n // we might not have enough data to know whether or not we need to approve\n if (!currentAllowance) return ApprovalState.UNKNOWN;\n\n // amountToApprove will be defined if currentAllowance is\n return currentAllowance.lessThan(amountToApprove)\n ? pendingApproval\n ? ApprovalState.PENDING\n : ApprovalState.NOT_APPROVED\n : ApprovalState.APPROVED;\n }, [amountToApprove, currentAllowance, pendingApproval, spender]);\n\n const tokenContract = useTokenContract(token?.address);\n const addTransaction = useTransactionAdder();\n\n const approve = useCallback(async (): Promise => {\n if (approvalState !== ApprovalState.NOT_APPROVED) {\n console.error('approve was called unnecessarily');\n return;\n }\n if (!token) {\n console.error('no token');\n return;\n }\n\n if (!tokenContract) {\n console.error('tokenContract is null');\n return;\n }\n\n if (!amountToApprove) {\n console.error('missing amount to approve');\n return;\n }\n\n if (!spender) {\n console.error('no spender');\n return;\n }\n\n let useExact = false;\n const estimatedGas = await tokenContract.estimateGas.approve(spender, MaxUint256).catch(() => {\n // general fallback for tokens who restrict approval amounts\n useExact = true;\n return tokenContract.estimateGas.approve(spender, amountToApprove.raw.toString());\n });\n\n return tokenContract\n .approve(spender, useExact ? amountToApprove.raw.toString() : MaxUint256, {\n gasLimit: calculateGasMargin(estimatedGas),\n })\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: 'Approve ' + amountToApprove.currency.symbol,\n approval: { tokenAddress: token.address, spender: spender },\n });\n })\n .catch((error: Error) => {\n console.debug('Failed to approve token', error);\n throw error;\n });\n }, [approvalState, token, tokenContract, amountToApprove, spender, addTransaction]);\n\n return [approvalState, approve];\n}\n\n// wraps useApproveCallback in the context of a swap\nexport function useApproveCallbackFromTrade(trade?: Trade, allowedSlippage = 0) {\n const amountToApprove = useMemo(\n () => (trade ? computeSlippageAdjustedAmounts(trade, allowedSlippage)[Field.INPUT] : undefined),\n [trade, allowedSlippage]\n );\n\n return useApproveCallback(amountToApprove, ROUTER_ADDRESS);\n}\n","import { BLOCKED_PRICE_IMPACT_NON_EXPERT } from '../constants';\nimport { CurrencyAmount, Fraction, JSBI, Percent, TokenAmount, Trade } from '@moonrabbit/swap-sdk';\nimport { ALLOWED_PRICE_IMPACT_HIGH, ALLOWED_PRICE_IMPACT_LOW, ALLOWED_PRICE_IMPACT_MEDIUM } from '../constants';\nimport { Field } from '../state/swap/actions';\nimport { basisPointsToPercent } from './index';\n\nconst BASE_FEE = new Percent(JSBI.BigInt(30), JSBI.BigInt(10000));\nconst ONE_HUNDRED_PERCENT = new Percent(JSBI.BigInt(10000), JSBI.BigInt(10000));\nconst INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(BASE_FEE);\n\n// computes price breakdown for the trade\nexport function computeTradePriceBreakdown(trade?: Trade | null): {\n priceImpactWithoutFee: Percent | undefined;\n realizedLPFee: CurrencyAmount | undefined | null;\n} {\n // for each hop in our trade, take away the x*y=k price impact from 0.3% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03))\n const realizedLPFee = !trade\n ? undefined\n : ONE_HUNDRED_PERCENT.subtract(\n trade.route.pairs.reduce(\n (currentFee: Fraction): Fraction => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT\n )\n );\n\n // remove lp fees from price impact\n const priceImpactWithoutFeeFraction = trade && realizedLPFee ? trade.priceImpact.subtract(realizedLPFee) : undefined;\n\n // the x*y=k impact\n const priceImpactWithoutFeePercent = priceImpactWithoutFeeFraction\n ? new Percent(priceImpactWithoutFeeFraction?.numerator, priceImpactWithoutFeeFraction?.denominator)\n : undefined;\n\n // the amount of the input that accrues to LPs\n const realizedLPFeeAmount =\n realizedLPFee &&\n trade &&\n (trade.inputAmount instanceof TokenAmount\n ? new TokenAmount(trade.inputAmount.token, realizedLPFee.multiply(trade.inputAmount.raw).quotient)\n : CurrencyAmount.ether(realizedLPFee.multiply(trade.inputAmount.raw).quotient));\n\n return { priceImpactWithoutFee: priceImpactWithoutFeePercent, realizedLPFee: realizedLPFeeAmount };\n}\n\n// computes the minimum amount out and maximum amount in for a trade given a user specified allowed slippage in bips\nexport function computeSlippageAdjustedAmounts(\n trade: Trade | undefined,\n allowedSlippage: number\n): { [field in Field]?: CurrencyAmount } {\n const pct = basisPointsToPercent(allowedSlippage);\n return {\n [Field.INPUT]: trade?.maximumAmountIn(pct),\n [Field.OUTPUT]: trade?.minimumAmountOut(pct),\n };\n}\n\nexport function warningSeverity(priceImpact: Percent | undefined): 0 | 1 | 2 | 3 | 4 {\n if (!priceImpact?.lessThan(BLOCKED_PRICE_IMPACT_NON_EXPERT)) return 4;\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) return 3;\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_MEDIUM)) return 2;\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_LOW)) return 1;\n return 0;\n}\n\nexport function formatExecutionPrice(trade?: Trade, inverted?: boolean): string {\n if (!trade) {\n return '';\n }\n return inverted\n ? `${trade.executionPrice.invert().toSignificant(6)} ${trade.inputAmount.currency.symbol} / ${\n trade.outputAmount.currency.symbol\n }`\n : `${trade.executionPrice.toSignificant(6)} ${trade.outputAmount.currency.symbol} / ${\n trade.inputAmount.currency.symbol\n }`;\n}\n","import { Token, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\n\nimport { useTokenContract } from '../hooks/useContract';\nimport { useSingleCallResult } from '../state/multicall/hooks';\n\nexport function useTokenAllowance(token?: Token, owner?: string, spender?: string): TokenAmount | undefined {\n const contract = useTokenContract(token?.address, false);\n\n const inputs = useMemo(() => [owner, spender], [owner, spender]);\n const allowance = useSingleCallResult(contract, 'allowance', inputs).result;\n\n return useMemo(\n () => (token && allowance ? new TokenAmount(token, allowance.toString()) : undefined),\n [token, allowance]\n );\n}\n","import { BigNumber } from 'ethers';\nimport { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../state';\nimport useCurrentBlockTimestamp from './useCurrentBlockTimestamp';\n\n// combines the block timestamp with the user setting to give the deadline that should be used for any submitted transaction\nexport default function useTransactionDeadline(): BigNumber | undefined {\n const ttl = useSelector((state) => state.user.userDeadline);\n const blockTimestamp = useCurrentBlockTimestamp();\n return useMemo(() => {\n if (blockTimestamp && ttl) return blockTimestamp.add(ttl);\n return undefined;\n }, [blockTimestamp, ttl]);\n}\n","import { BigNumber } from 'ethers';\nimport { useSingleCallResult } from '../state/multicall/hooks';\nimport { useMulticallContract } from './useContract';\n\n// gets the current timestamp from the blockchain\nexport default function useCurrentBlockTimestamp(): BigNumber | undefined {\n const multicall = useMulticallContract();\n return useSingleCallResult(multicall, 'getCurrentBlockTimestamp')?.result?.[0];\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { Token, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useTokenContract } from '../hooks/useContract';\nimport { useSingleCallResult } from '../state/multicall/hooks';\n\n// returns undefined if input token is undefined, or fails to get token contract,\n// or contract total supply cannot be fetched\nexport function useTotalSupply(token?: Token): TokenAmount | undefined {\n const contract = useTokenContract(token?.address, false);\n\n const totalSupply: BigNumber = useSingleCallResult(contract, 'totalSupply')?.result?.[0];\n\n return token && totalSupply ? new TokenAmount(token, totalSupply.toString()) : undefined;\n}\n","import { isAddress } from '../utils';\nimport useENSAddress from './useENSAddress';\nimport useENSName from './useENSName';\n\n/**\n * Given a name or address, does a lookup to resolve to an address and name\n * @param nameOrAddress ENS name or address\n */\nexport default function useENS(nameOrAddress?: string | null): {\n loading: boolean;\n address: string | null;\n name: string | null;\n} {\n const validated = isAddress(nameOrAddress);\n const reverseLookup = useENSName(validated ? validated : undefined);\n const lookup = useENSAddress(nameOrAddress);\n\n return {\n loading: reverseLookup.loading || lookup.loading,\n address: validated ? validated : lookup.address,\n name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null,\n };\n}\n","import { namehash } from 'ethers/lib/utils';\nimport { useMemo } from 'react';\nimport { useSingleCallResult } from '../state/multicall/hooks';\nimport isZero from '../utils/isZero';\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract';\nimport useDebounce from './useDebounce';\n\n/**\n * Does a lookup for an ENS name to find its address.\n */\nexport default function useENSAddress(ensName?: string | null): { loading: boolean; address: string | null } {\n const debouncedName = useDebounce(ensName, 200);\n const ensNodeArgument = useMemo(() => {\n if (!debouncedName) return [undefined];\n try {\n return debouncedName ? [namehash(debouncedName)] : [undefined];\n } catch (error) {\n return [undefined];\n }\n }, [debouncedName]);\n const registrarContract = useENSRegistrarContract(false);\n const resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument);\n const resolverAddressResult = resolverAddress.result?.[0];\n const resolverContract = useENSResolverContract(\n resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,\n false\n );\n const addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument);\n\n const changed = debouncedName !== ensName;\n return {\n address: changed ? null : addr.result?.[0] ?? null,\n loading: changed || resolverAddress.loading || addr.loading,\n };\n}\n","import { ZERO_PERCENT, ONE_HUNDRED_PERCENT } from './../constants/index';\nimport { Trade, Percent, currencyEquals } from '@moonrabbit/swap-sdk';\n\n// returns whether tradeB is better than tradeA by at least a threshold percentage amount\nexport function isTradeBetter(\n tradeA: Trade | undefined | null,\n tradeB: Trade | undefined | null,\n minimumDelta: Percent = ZERO_PERCENT\n): boolean | undefined {\n if (tradeA && !tradeB) return false;\n if (tradeB && !tradeA) return true;\n if (!tradeA || !tradeB) return undefined;\n\n if (\n tradeA.tradeType !== tradeB.tradeType ||\n !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) ||\n !currencyEquals(tradeB.outputAmount.currency, tradeB.outputAmount.currency)\n ) {\n throw new Error('Trades are not comparable');\n }\n\n if (minimumDelta.equalTo(ZERO_PERCENT)) {\n return tradeA.executionPrice.lessThan(tradeB.executionPrice);\n } else {\n return tradeA.executionPrice.raw.multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)).lessThan(tradeB.executionPrice);\n }\n}\n","import { isTradeBetter } from 'utils/trades';\nimport { Currency, CurrencyAmount, Pair, Token, Trade } from '@moonrabbit/swap-sdk';\nimport flatMap from 'lodash.flatmap';\nimport { useMemo } from 'react';\n\nimport { BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES, BETTER_TRADE_LESS_HOPS_THRESHOLD } from '../constants';\nimport { PairState, usePairs } from '../data/Reserves';\nimport { wrappedCurrency } from '../utils/wrappedCurrency';\n\nimport { useActiveWeb3React } from './index';\nimport { useUserSingleHopOnly } from 'state/user/hooks';\n\nfunction useAllCommonPairs(currencyA?: Currency, currencyB?: Currency): Pair[] {\n const { chainId } = useActiveWeb3React();\n\n const bases: Token[] = chainId ? BASES_TO_CHECK_TRADES_AGAINST[chainId] : [];\n\n const [tokenA, tokenB] = chainId\n ? [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n : [undefined, undefined];\n\n const basePairs: [Token, Token][] = useMemo(\n () =>\n flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])).filter(\n ([t0, t1]) => t0.address !== t1.address\n ),\n [bases]\n );\n\n const allPairCombinations: [Token, Token][] = useMemo(\n () =>\n tokenA && tokenB\n ? [\n // the direct pair\n [tokenA, tokenB],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenA, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenB, base]),\n // each base against all bases\n ...basePairs,\n ]\n .filter((tokens): tokens is [Token, Token] => Boolean(tokens[0] && tokens[1]))\n .filter(([t0, t1]) => t0.address !== t1.address)\n .filter(([tokenA, tokenB]) => {\n if (!chainId) return true;\n const customBases = CUSTOM_BASES[chainId];\n if (!customBases) return true;\n\n const customBasesA: Token[] | undefined = customBases[tokenA.address];\n const customBasesB: Token[] | undefined = customBases[tokenB.address];\n\n if (!customBasesA && !customBasesB) return true;\n\n if (customBasesA && !customBasesA.find((base) => tokenB.equals(base))) return false;\n if (customBasesB && !customBasesB.find((base) => tokenA.equals(base))) return false;\n\n return true;\n })\n : [],\n [tokenA, tokenB, bases, basePairs, chainId]\n );\n\n const allPairs = usePairs(allPairCombinations);\n\n // only pass along valid pairs, non-duplicated pairs\n return useMemo(\n () =>\n Object.values(\n allPairs\n // filter out invalid pairs\n .filter((result): result is [PairState.EXISTS, Pair] => Boolean(result[0] === PairState.EXISTS && result[1]))\n // filter out duplicated pairs\n .reduce<{ [pairAddress: string]: Pair }>((memo, [, curr]) => {\n memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr;\n return memo;\n }, {})\n ),\n [allPairs]\n );\n}\n\nconst MAX_HOPS = 3;\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useTradeExactIn(currencyAmountIn?: CurrencyAmount, currencyOut?: Currency): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyAmountIn?.currency, currencyOut);\n\n const [singleHopOnly] = useUserSingleHopOnly();\n\n return useMemo(() => {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n );\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null;\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade: Trade | null =\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null;\n // if current trade is best yet, save it\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade;\n }\n }\n return bestTradeSoFar;\n }\n\n return null;\n }, [allowedPairs, currencyAmountIn, currencyOut, singleHopOnly]);\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useTradeExactOut(currencyIn?: Currency, currencyAmountOut?: CurrencyAmount): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyIn, currencyAmountOut?.currency);\n\n const [singleHopOnly] = useUserSingleHopOnly();\n\n return useMemo(() => {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n if (singleHopOnly) {\n return (\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, { maxHops: 1, maxNumResults: 1 })[0] ??\n null\n );\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null;\n for (let i = 1; i <= MAX_HOPS; i++) {\n const currentTrade =\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, { maxHops: i, maxNumResults: 1 })[0] ??\n null;\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade;\n }\n }\n return bestTradeSoFar;\n }\n return null;\n }, [currencyIn, currencyAmountOut, allowedPairs, singleHopOnly]);\n}\n","import useENS from '../../hooks/useENS';\nimport { parseUnits } from '@ethersproject/units';\nimport { Currency, CurrencyAmount, ETHER, JSBI, Token, TokenAmount, Trade } from '@moonrabbit/swap-sdk';\nimport { ParsedQs } from 'qs';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useCurrency } from '../../hooks/Tokens';\nimport { useTradeExactIn, useTradeExactOut } from '../../hooks/Trades';\nimport useParsedQueryString from '../../hooks/useParsedQueryString';\nimport { isAddress } from '../../utils';\nimport { AppDispatch, AppState } from '../index';\nimport { useCurrencyBalances } from '../wallet/hooks';\nimport { Field, replaceSwapState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions';\nimport { SwapState } from './reducer';\nimport { useUserSlippageTolerance } from '../user/hooks';\nimport { computeSlippageAdjustedAmounts } from '../../utils/prices';\nimport { FACTORY_ADDRESS, ROUTER_ADDRESS } from '../../constants';\n\nexport function useSwapState(): AppState['swap'] {\n return useSelector((state) => state.swap);\n}\n\nexport function useSwapActionHandlers(): {\n onCurrencySelection: (field: Field, currency: Currency) => void;\n onSwitchTokens: () => void;\n onUserInput: (field: Field, typedValue: string) => void;\n onChangeRecipient: (recipient: string | null) => void;\n} {\n const dispatch = useDispatch();\n const onCurrencySelection = useCallback(\n (field: Field, currency: Currency) => {\n dispatch(\n selectCurrency({\n field,\n currencyId: currency instanceof Token ? currency.address : currency === ETHER ? 'AAA' : '',\n })\n );\n },\n [dispatch]\n );\n\n const onSwitchTokens = useCallback(() => {\n dispatch(switchCurrencies());\n }, [dispatch]);\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }));\n },\n [dispatch]\n );\n\n const onChangeRecipient = useCallback(\n (recipient: string | null) => {\n dispatch(setRecipient({ recipient }));\n },\n [dispatch]\n );\n\n return {\n onSwitchTokens,\n onCurrencySelection,\n onUserInput,\n onChangeRecipient,\n };\n}\n\n// try to parse a user entered amount for a given token\nexport function tryParseAmount(value?: string, currency?: Currency): CurrencyAmount | undefined {\n if (!value || !currency) {\n return undefined;\n }\n try {\n const typedValueParsed = parseUnits(value, currency.decimals).toString();\n if (typedValueParsed !== '0') {\n return currency instanceof Token\n ? new TokenAmount(currency, JSBI.BigInt(typedValueParsed))\n : CurrencyAmount.ether(JSBI.BigInt(typedValueParsed));\n }\n } catch (error) {\n // should fail if the user specifies too many decimal places of precision (or maybe exceed max uint?)\n console.debug(`Failed to parse input amount: \"${value}\"`, error);\n }\n // necessary for all paths to return a value\n return undefined;\n}\n\nconst BAD_RECIPIENT_ADDRESSES: string[] = [FACTORY_ADDRESS, ROUTER_ADDRESS];\n\n/**\n * Returns true if any of the pairs or tokens in a trade have the given checksummed address\n * @param trade to check for the given address\n * @param checksummedAddress address to check in the pairs and tokens\n */\nfunction involvesAddress(trade: Trade, checksummedAddress: string): boolean {\n return (\n trade.route.path.some((token) => token.address === checksummedAddress) ||\n trade.route.pairs.some((pair) => pair.liquidityToken.address === checksummedAddress)\n );\n}\n\n// from the current swap inputs, compute the best trade and return it.\nexport function useDerivedSwapInfo(): {\n currencies: { [field in Field]?: Currency };\n currencyBalances: { [field in Field]?: CurrencyAmount };\n parsedAmount: CurrencyAmount | undefined;\n v2Trade: Trade | undefined;\n inputError?: string;\n} {\n const { account } = useActiveWeb3React();\n\n const {\n independentField,\n typedValue,\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n recipient,\n } = useSwapState();\n\n const inputCurrency = useCurrency(inputCurrencyId);\n const outputCurrency = useCurrency(outputCurrencyId);\n const recipientLookup = useENS(recipient ?? undefined);\n const to: string | null = (recipient === null ? account : recipientLookup.address) ?? null;\n\n const relevantTokenBalances = useCurrencyBalances(account ?? undefined, [\n inputCurrency ?? undefined,\n outputCurrency ?? undefined,\n ]);\n\n const isExactIn: boolean = independentField === Field.INPUT;\n const parsedAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined);\n\n const bestTradeExactIn = useTradeExactIn(isExactIn ? parsedAmount : undefined, outputCurrency ?? undefined);\n const bestTradeExactOut = useTradeExactOut(inputCurrency ?? undefined, !isExactIn ? parsedAmount : undefined);\n\n const v2Trade = isExactIn ? bestTradeExactIn : bestTradeExactOut;\n\n const currencyBalances = {\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n };\n\n const currencies: { [field in Field]?: Currency } = {\n [Field.INPUT]: inputCurrency ?? undefined,\n [Field.OUTPUT]: outputCurrency ?? undefined,\n };\n\n let inputError: string | undefined;\n if (!account) {\n inputError = 'Connect Wallet';\n }\n\n if (!parsedAmount) {\n inputError = inputError ?? 'Enter an amount';\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? 'Select a token';\n }\n\n const formattedTo = isAddress(to);\n if (!to || !formattedTo) {\n inputError = inputError ?? 'Enter a recipient';\n } else {\n if (\n BAD_RECIPIENT_ADDRESSES.indexOf(formattedTo) !== -1 ||\n (bestTradeExactIn && involvesAddress(bestTradeExactIn, formattedTo)) ||\n (bestTradeExactOut && involvesAddress(bestTradeExactOut, formattedTo))\n ) {\n inputError = inputError ?? 'Invalid recipient';\n }\n }\n\n const [allowedSlippage] = useUserSlippageTolerance();\n\n const slippageAdjustedAmounts =\n v2Trade && allowedSlippage && computeSlippageAdjustedAmounts(v2Trade, allowedSlippage);\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [\n currencyBalances[Field.INPUT],\n slippageAdjustedAmounts ? slippageAdjustedAmounts[Field.INPUT] : null,\n ];\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = 'Insufficient ' + amountIn.currency.symbol + ' balance';\n }\n\n return {\n currencies,\n currencyBalances,\n parsedAmount,\n v2Trade: v2Trade ?? undefined,\n inputError,\n };\n}\n\nfunction parseCurrencyFromURLParameter(urlParam: any): string {\n if (typeof urlParam === 'string') {\n const valid = isAddress(urlParam);\n if (valid) return valid;\n if (urlParam.toUpperCase() === 'AAA') return 'AAA';\n if (valid === false) return 'AAA';\n }\n return 'AAA' ?? '';\n}\n\nfunction parseTokenAmountURLParameter(urlParam: any): string {\n return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : '';\n}\n\nfunction parseIndependentFieldURLParameter(urlParam: any): Field {\n return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT;\n}\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/;\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;\nfunction validatedRecipient(recipient: any): string | null {\n if (typeof recipient !== 'string') return null;\n const address = isAddress(recipient);\n if (address) return address;\n if (ENS_NAME_REGEX.test(recipient)) return recipient;\n if (ADDRESS_REGEX.test(recipient)) return recipient;\n return null;\n}\n\nexport function queryParametersToSwapState(parsedQs: ParsedQs): SwapState {\n let inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency);\n let outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency);\n if (inputCurrency === outputCurrency) {\n if (typeof parsedQs.outputCurrency === 'string') {\n inputCurrency = '';\n } else {\n outputCurrency = '';\n }\n }\n\n const recipient = validatedRecipient(parsedQs.recipient);\n\n return {\n [Field.INPUT]: {\n currencyId: inputCurrency,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrency,\n },\n typedValue: parseTokenAmountURLParameter(parsedQs.exactAmount),\n independentField: parseIndependentFieldURLParameter(parsedQs.exactField),\n recipient,\n };\n}\n\n// updates the swap state to use the defaults for a given network\nexport function useDefaultsFromURLSearch():\n | { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined }\n | undefined {\n const { chainId } = useActiveWeb3React();\n const dispatch = useDispatch();\n const parsedQs = useParsedQueryString();\n const [result, setResult] = useState<\n { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined } | undefined\n >();\n\n useEffect(() => {\n if (!chainId) return;\n const parsed = queryParametersToSwapState(parsedQs);\n\n dispatch(\n replaceSwapState({\n typedValue: parsed.typedValue,\n field: parsed.independentField,\n inputCurrencyId: parsed[Field.INPUT].currencyId,\n outputCurrencyId: parsed[Field.OUTPUT].currencyId,\n recipient: parsed.recipient,\n })\n );\n\n setResult({ inputCurrencyId: parsed[Field.INPUT].currencyId, outputCurrencyId: parsed[Field.OUTPUT].currencyId });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, chainId]);\n\n return result;\n}\n","import { parse, ParsedQs } from 'qs';\nimport { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport default function useParsedQueryString(): ParsedQs {\n const { search } = useLocation();\n return useMemo(\n () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}),\n [search]\n );\n}\n","import { Currency, CurrencyAmount, ETHER, JSBI, Pair, Percent, Price, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { PairState, usePair } from '../../data/Reserves';\nimport { useTotalSupply } from '../../data/TotalSupply';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { wrappedCurrency, wrappedCurrencyAmount } from '../../utils/wrappedCurrency';\nimport { AppDispatch, AppState } from '../index';\nimport { tryParseAmount } from '../swap/hooks';\nimport { useCurrencyBalances } from '../wallet/hooks';\nimport { Field, typeInput } from './actions';\n\nconst ZERO = JSBI.BigInt(0);\n\nexport function useMintState(): AppState['mint'] {\n return useSelector((state) => state.mint);\n}\n\nexport function useMintActionHandlers(noLiquidity: boolean | undefined): {\n onFieldAInput: (typedValue: string) => void;\n onFieldBInput: (typedValue: string) => void;\n} {\n const dispatch = useDispatch();\n\n const onFieldAInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_A, typedValue, noLiquidity: noLiquidity === true }));\n },\n [dispatch, noLiquidity]\n );\n const onFieldBInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_B, typedValue, noLiquidity: noLiquidity === true }));\n },\n [dispatch, noLiquidity]\n );\n\n return {\n onFieldAInput,\n onFieldBInput,\n };\n}\n\nexport function useDerivedMintInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined\n): {\n dependentField: Field;\n currencies: { [field in Field]?: Currency };\n pair?: Pair | null;\n pairState: PairState;\n currencyBalances: { [field in Field]?: CurrencyAmount };\n parsedAmounts: { [field in Field]?: CurrencyAmount };\n price?: Price;\n noLiquidity?: boolean;\n liquidityMinted?: TokenAmount;\n poolTokenPercentage?: Percent;\n error?: string;\n} {\n const { account, chainId } = useActiveWeb3React();\n\n const { independentField, typedValue, otherTypedValue } = useMintState();\n\n const dependentField = independentField === Field.CURRENCY_A ? Field.CURRENCY_B : Field.CURRENCY_A;\n\n // tokens\n const currencies: { [field in Field]?: Currency } = useMemo(\n () => ({\n [Field.CURRENCY_A]: currencyA ?? undefined,\n [Field.CURRENCY_B]: currencyB ?? undefined,\n }),\n [currencyA, currencyB]\n );\n\n // pair\n const [pairState, pair] = usePair(currencies[Field.CURRENCY_A], currencies[Field.CURRENCY_B]);\n const totalSupply = useTotalSupply(pair?.liquidityToken);\n\n const noLiquidity: boolean =\n pairState === PairState.NOT_EXISTS || Boolean(totalSupply && JSBI.equal(totalSupply.raw, ZERO));\n\n // balances\n const balances = useCurrencyBalances(account ?? undefined, [\n currencies[Field.CURRENCY_A],\n currencies[Field.CURRENCY_B],\n ]);\n const currencyBalances: { [field in Field]?: CurrencyAmount } = {\n [Field.CURRENCY_A]: balances[0],\n [Field.CURRENCY_B]: balances[1],\n };\n\n // amounts\n const independentAmount: CurrencyAmount | undefined = tryParseAmount(typedValue, currencies[independentField]);\n const dependentAmount: CurrencyAmount | undefined = useMemo(() => {\n if (noLiquidity) {\n if (otherTypedValue && currencies[dependentField]) {\n return tryParseAmount(otherTypedValue, currencies[dependentField]);\n }\n return undefined;\n } else if (independentAmount) {\n // we wrap the currencies just to get the price in terms of the other token\n const wrappedIndependentAmount = wrappedCurrencyAmount(independentAmount, chainId);\n const [tokenA, tokenB] = [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)];\n if (tokenA && tokenB && wrappedIndependentAmount && pair) {\n const dependentCurrency = dependentField === Field.CURRENCY_B ? currencyB : currencyA;\n const dependentTokenAmount =\n dependentField === Field.CURRENCY_B\n ? pair.priceOf(tokenA).quote(wrappedIndependentAmount)\n : pair.priceOf(tokenB).quote(wrappedIndependentAmount);\n return dependentCurrency === ETHER ? CurrencyAmount.ether(dependentTokenAmount.raw) : dependentTokenAmount;\n }\n return undefined;\n } else {\n return undefined;\n }\n }, [\n noLiquidity,\n otherTypedValue,\n currencies,\n dependentField,\n independentAmount,\n currencyA,\n chainId,\n currencyB,\n pair,\n ]);\n const parsedAmounts: { [field in Field]: CurrencyAmount | undefined } = {\n [Field.CURRENCY_A]: independentField === Field.CURRENCY_A ? independentAmount : dependentAmount,\n [Field.CURRENCY_B]: independentField === Field.CURRENCY_A ? dependentAmount : independentAmount,\n };\n\n const price = useMemo(() => {\n if (noLiquidity) {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts;\n if (currencyAAmount && currencyBAmount) {\n return new Price(currencyAAmount.currency, currencyBAmount.currency, currencyAAmount.raw, currencyBAmount.raw);\n }\n return undefined;\n } else {\n const wrappedCurrencyA = wrappedCurrency(currencyA, chainId);\n return pair && wrappedCurrencyA ? pair.priceOf(wrappedCurrencyA) : undefined;\n }\n }, [chainId, currencyA, noLiquidity, pair, parsedAmounts]);\n\n // liquidity minted\n const liquidityMinted = useMemo(() => {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts;\n const [tokenAmountA, tokenAmountB] = [\n wrappedCurrencyAmount(currencyAAmount, chainId),\n wrappedCurrencyAmount(currencyBAmount, chainId),\n ];\n if (pair && totalSupply && tokenAmountA && tokenAmountB) {\n return pair.getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB);\n } else {\n return undefined;\n }\n }, [parsedAmounts, chainId, pair, totalSupply]);\n\n const poolTokenPercentage = useMemo(() => {\n if (liquidityMinted && totalSupply) {\n return new Percent(liquidityMinted.raw, totalSupply.add(liquidityMinted).raw);\n } else {\n return undefined;\n }\n }, [liquidityMinted, totalSupply]);\n\n let error: string | undefined;\n if (!account) {\n error = 'Connect Wallet';\n }\n\n if (pairState === PairState.INVALID) {\n error = error ?? 'Invalid pair';\n }\n\n if (!parsedAmounts[Field.CURRENCY_A] || !parsedAmounts[Field.CURRENCY_B]) {\n error = error ?? 'Enter an amount';\n }\n\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts;\n\n if (currencyAAmount && currencyBalances?.[Field.CURRENCY_A]?.lessThan(currencyAAmount)) {\n error = 'Insufficient ' + currencies[Field.CURRENCY_A]?.symbol + ' balance';\n }\n\n if (currencyBAmount && currencyBalances?.[Field.CURRENCY_B]?.lessThan(currencyBAmount)) {\n error = 'Insufficient ' + currencies[Field.CURRENCY_B]?.symbol + ' balance';\n }\n\n return {\n dependentField,\n currencies,\n pair,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n };\n}\n","import { CurrencyAmount, ETHER, JSBI } from '@moonrabbit/swap-sdk';\nimport { MIN_ETH } from '../constants';\n\n/**\n * Given some token amount, return the max that can be spent of it\n * @param currencyAmount to return max of\n */\nexport function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined {\n if (!currencyAmount) return undefined;\n if (currencyAmount.currency === ETHER) {\n if (JSBI.greaterThan(currencyAmount.raw, MIN_ETH)) {\n return CurrencyAmount.ether(JSBI.subtract(currencyAmount.raw, MIN_ETH));\n } else {\n return CurrencyAmount.ether(JSBI.BigInt(0));\n }\n }\n return currencyAmount;\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const BodyWrapper = styled.div`\n position: relative;\n max-width: 500px;\n width: 100%;\n padding: 0.2rem;\n border-radius: 1.6rem;\n box-shadow: rgba(0, 0, 0, 0.01) 0px 0px 1px, rgba(0, 0, 0, 0.04) 0px 4px 8px, rgba(0, 0, 0, 0.04) 0px 16px 24px,\n rgba(0, 0, 0, 0.01) 0px 24px 32px;\n background: ${({ theme }) => theme.bg1};\n\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n width: 90%;\n `}\n`;\n\nexport default function AppBody({ children }: { children: React.ReactNode }) {\n return {children};\n}\n","import { Text } from 'rebass';\nimport styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n position: relative;\n padding: 1rem;\n`;\n\nexport const ClickableText = styled(Text)`\n :hover {\n cursor: pointer;\n }\n color: ${({ theme }) => theme.primary1};\n`;\nexport const MaxButton = styled.button<{ width: string }>`\n padding: 0.5rem 1rem;\n background-color: ${({ theme }) => theme.primary5};\n border: 1px solid ${({ theme }) => theme.primary5};\n border-radius: 0.5rem;\n font-size: 1rem;\n font-weight: 500;\n cursor: pointer;\n margin: 0.25rem;\n overflow: hidden;\n transition: 0.2s;\n\n :hover {\n opacity: 0.6;\n }\n\n :focus {\n border: 1px solid ${({ theme }) => theme.primary1};\n outline: none;\n }\n\n ${({ theme }) => theme.mediaWidth.upToSmall`\n padding: 0.25rem 0.5rem;\n `};\n`;\n\nexport const Dots = styled.span`\n &::after {\n display: inline-block;\n animation: ellipsis 1.25s infinite;\n content: '.';\n width: 1em;\n text-align: left;\n }\n @keyframes ellipsis {\n 0% {\n content: '.';\n }\n 33% {\n content: '..';\n }\n 66% {\n content: '...';\n }\n }\n`;\n","import { Currency, CurrencyAmount, Fraction, Percent } from '@moonrabbit/swap-sdk';\nimport React from 'react';\nimport { Text } from 'rebass';\nimport { ButtonPrimary } from '../../components/Button';\nimport { RowBetween, RowFixed } from '../../components/Row';\nimport CurrencyLogo from '../../components/CurrencyLogo';\nimport { Field } from '../../state/mint/actions';\nimport { TYPE } from '../../theme';\n\nexport function ConfirmAddModalBottom({\n noLiquidity,\n price,\n currencies,\n parsedAmounts,\n poolTokenPercentage,\n onAdd,\n}: {\n noLiquidity?: boolean;\n price?: Fraction;\n currencies: { [field in Field]?: Currency };\n parsedAmounts: { [field in Field]?: CurrencyAmount };\n poolTokenPercentage?: Percent;\n onAdd: () => void;\n}) {\n return (\n <>\n \n {currencies[Field.CURRENCY_A]?.symbol} Deposited\n \n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n {currencies[Field.CURRENCY_B]?.symbol} Deposited\n \n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n Rates\n \n {`1 ${currencies[Field.CURRENCY_A]?.symbol} = ${price?.toSignificant(4)} ${\n currencies[Field.CURRENCY_B]?.symbol\n }`}\n \n \n \n \n {`1 ${currencies[Field.CURRENCY_B]?.symbol} = ${price?.invert().toSignificant(4)} ${\n currencies[Field.CURRENCY_A]?.symbol\n }`}\n \n \n \n Share of Pool:\n {noLiquidity ? '100' : poolTokenPercentage?.toSignificant(4)}%\n \n \n \n {noLiquidity ? 'Create Pool & Supply' : 'Confirm Supply'}\n \n \n \n );\n}\n","import { Currency, ETHER, Token } from '@moonrabbit/swap-sdk';\n\nexport function currencyId(currency: Currency): string {\n if (currency === ETHER) return 'AAA';\n if (currency instanceof Token) return currency.address;\n throw new Error('invalid currency');\n}\n","import { Currency, Percent, Price } from '@moonrabbit/swap-sdk';\nimport React, { useContext } from 'react';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { AutoColumn } from '../../components/Column';\nimport { AutoRow } from '../../components/Row';\nimport { ONE_BIPS } from '../../constants';\nimport { Field } from '../../state/mint/actions';\nimport { TYPE } from '../../theme';\n\nexport function PoolPriceBar({\n currencies,\n noLiquidity,\n poolTokenPercentage,\n price,\n}: {\n currencies: { [field in Field]?: Currency };\n noLiquidity?: boolean;\n poolTokenPercentage?: Percent;\n price?: Price;\n}) {\n const theme = useContext(ThemeContext);\n return (\n \n \n \n {price?.toSignificant(6) ?? '-'}\n \n {currencies[Field.CURRENCY_B]?.symbol} per {currencies[Field.CURRENCY_A]?.symbol}\n \n \n \n {price?.invert()?.toSignificant(6) ?? '-'}\n \n {currencies[Field.CURRENCY_A]?.symbol} per {currencies[Field.CURRENCY_B]?.symbol}\n \n \n \n \n {noLiquidity && price\n ? '100'\n : (poolTokenPercentage?.lessThan(ONE_BIPS) ? '<0.01' : poolTokenPercentage?.toFixed(2)) ?? '0'}\n %\n \n \n Share of Pool\n \n \n \n \n );\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { TransactionResponse } from '@ethersproject/providers';\nimport { Currency, ETHER, TokenAmount } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { Plus } from 'react-feather';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { ButtonError, ButtonPrimary } from '../../components/Button';\nimport { LightCard } from '../../components/Card';\nimport { AutoColumn, ColumnCenter } from '../../components/Column';\nimport TransactionConfirmationModal, { ConfirmationModalContent } from '../../components/TransactionConfirmationModal';\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel';\nimport DoubleCurrencyLogo from '../../components/DoubleLogo';\nimport { AddRemoveTabs } from '../../components/NavigationTabs';\nimport Row, { RowBetween, RowFlat } from '../../components/Row';\n\nimport { ROUTER_ADDRESS } from '../../constants';\nimport { PairState } from '../../data/Reserves';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useCurrency } from '../../hooks/Tokens';\nimport { ApprovalState, useApproveCallback } from '../../hooks/useApproveCallback';\nimport useTransactionDeadline from '../../hooks/useTransactionDeadline';\nimport { useWalletModalToggle } from '../../state/application/hooks';\nimport { Field } from '../../state/mint/actions';\nimport { useDerivedMintInfo, useMintActionHandlers, useMintState } from '../../state/mint/hooks';\n\nimport { useTransactionAdder } from '../../state/transactions/hooks';\nimport { useIsExpertMode, useUserSlippageTolerance } from '../../state/user/hooks';\nimport { TYPE } from '../../theme';\nimport { calculateGasMargin, calculateSlippageAmount, getRouterContract } from '../../utils';\nimport { maxAmountSpend } from '../../utils/maxAmountSpend';\nimport { wrappedCurrency } from '../../utils/wrappedCurrency';\nimport AppBody from '../AppBody';\nimport { Dots, Wrapper } from '../Pool/styleds';\nimport { ConfirmAddModalBottom } from './ConfirmAddModalBottom';\nimport { currencyId } from '../../utils/currencyId';\nimport { PoolPriceBar } from './PoolPriceBar';\n\nexport default function AddLiquidity({\n match: {\n params: { currencyIdA, currencyIdB },\n },\n history,\n}: RouteComponentProps<{ currencyIdA?: string; currencyIdB?: string }>) {\n const { account, chainId, library } = useActiveWeb3React();\n const theme = useContext(ThemeContext);\n\n const currencyA = useCurrency(currencyIdA);\n const currencyB = useCurrency(currencyIdB);\n\n const toggleWalletModal = useWalletModalToggle(); // toggle wallet when disconnected\n\n const expertMode = useIsExpertMode();\n\n // mint state\n const { independentField, typedValue, otherTypedValue } = useMintState();\n const {\n dependentField,\n currencies,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n } = useDerivedMintInfo(currencyA ?? undefined, currencyB ?? undefined);\n\n const { onFieldAInput, onFieldBInput } = useMintActionHandlers(noLiquidity);\n\n const isValid = !error;\n\n // modal and loading\n const [showConfirm, setShowConfirm] = useState(false);\n const [attemptingTxn, setAttemptingTxn] = useState(false); // clicked confirm\n\n // txn values\n const deadline = useTransactionDeadline(); // custom from users settings\n const [allowedSlippage] = useUserSlippageTolerance(); // custom from users\n const [txHash, setTxHash] = useState('');\n\n // get formatted amounts\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: noLiquidity ? otherTypedValue : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n };\n\n // get the max amounts user can add\n const maxAmounts: { [field in Field]?: TokenAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmountSpend(currencyBalances[field]),\n };\n },\n {}\n );\n\n const atMaxAmounts: { [field in Field]?: TokenAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmounts[field]?.equalTo(parsedAmounts[field] ?? '0'),\n };\n },\n {}\n );\n\n // check whether the user has approved the router on the tokens\n const [approvalA, approveACallback] = useApproveCallback(parsedAmounts[Field.CURRENCY_A], ROUTER_ADDRESS);\n const [approvalB, approveBCallback] = useApproveCallback(parsedAmounts[Field.CURRENCY_B], ROUTER_ADDRESS);\n\n const addTransaction = useTransactionAdder();\n\n async function onAdd() {\n if (!chainId || !library || !account) return;\n const router = getRouterContract(chainId, library, account);\n\n const { [Field.CURRENCY_A]: parsedAmountA, [Field.CURRENCY_B]: parsedAmountB } = parsedAmounts;\n if (!parsedAmountA || !parsedAmountB || !currencyA || !currencyB || !deadline) {\n return;\n }\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(parsedAmountA, noLiquidity ? 0 : allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(parsedAmountB, noLiquidity ? 0 : allowedSlippage)[0],\n };\n\n let estimate,\n method: (...args: any) => Promise,\n args: Array,\n value: BigNumber | null;\n if (currencyA === ETHER || currencyB === ETHER) {\n const tokenBIsETH = currencyB === ETHER;\n estimate = router.estimateGas.addLiquidityETH;\n method = router.addLiquidityETH;\n args = [\n wrappedCurrency(tokenBIsETH ? currencyA : currencyB, chainId)?.address ?? '', // token\n (tokenBIsETH ? parsedAmountA : parsedAmountB).raw.toString(), // token desired\n amountsMin[tokenBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(), // token min\n amountsMin[tokenBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(), // eth min\n account,\n deadline.toHexString(),\n ];\n value = BigNumber.from((tokenBIsETH ? parsedAmountB : parsedAmountA).raw.toString());\n } else {\n estimate = router.estimateGas.addLiquidity;\n method = router.addLiquidity;\n args = [\n wrappedCurrency(currencyA, chainId)?.address ?? '',\n wrappedCurrency(currencyB, chainId)?.address ?? '',\n parsedAmountA.raw.toString(),\n parsedAmountB.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadline.toHexString(),\n ];\n value = null;\n }\n\n setAttemptingTxn(true);\n await estimate(...args, value ? { value } : {})\n .then((estimatedGasLimit) =>\n method(...args, {\n ...(value ? { value } : {}),\n gasLimit: calculateGasMargin(estimatedGasLimit),\n }).then((response) => {\n setAttemptingTxn(false);\n\n addTransaction(response, {\n summary:\n 'Add ' +\n parsedAmounts[Field.CURRENCY_A]?.toSignificant(3) +\n ' ' +\n currencies[Field.CURRENCY_A]?.symbol +\n ' and ' +\n parsedAmounts[Field.CURRENCY_B]?.toSignificant(3) +\n ' ' +\n currencies[Field.CURRENCY_B]?.symbol,\n });\n\n setTxHash(response.hash);\n })\n )\n .catch((error) => {\n setAttemptingTxn(false);\n // we only care if the error is something _other_ than the user rejected the tx\n if (error?.code !== 4001) {\n console.error(error);\n }\n });\n }\n\n const modalHeader = () => {\n return noLiquidity ? (\n \n \n \n \n {currencies[Field.CURRENCY_A]?.symbol + '/' + currencies[Field.CURRENCY_B]?.symbol}\n \n \n \n \n \n ) : (\n \n \n \n {liquidityMinted?.toSignificant(6)}\n \n \n \n \n \n {currencies[Field.CURRENCY_A]?.symbol + '/' + currencies[Field.CURRENCY_B]?.symbol + ' Pool Tokens'}\n \n \n \n {`Output is estimated. If the price changes by more than ${\n allowedSlippage / 100\n }% your transaction will revert.`}\n \n \n );\n };\n\n const modalBottom = () => {\n return (\n \n );\n };\n\n const pendingText = `Supplying ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)} ${\n currencies[Field.CURRENCY_A]?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)} ${currencies[Field.CURRENCY_B]?.symbol}`;\n\n const handleCurrencyASelect = useCallback(\n (currencyA: Currency) => {\n const newCurrencyIdA = currencyId(currencyA);\n if (newCurrencyIdA === currencyIdB) {\n history.push(`/add/${currencyIdB}/${currencyIdA}`);\n } else {\n history.push(`/add/${newCurrencyIdA}/${currencyIdB}`);\n }\n },\n [currencyIdB, history, currencyIdA]\n );\n const handleCurrencyBSelect = useCallback(\n (currencyB: Currency) => {\n const newCurrencyIdB = currencyId(currencyB);\n if (currencyIdA === newCurrencyIdB) {\n if (currencyIdB) {\n history.push(`/add/${currencyIdB}/${newCurrencyIdB}`);\n } else {\n history.push(`/add/${newCurrencyIdB}`);\n }\n } else {\n history.push(`/add/${currencyIdA ? currencyIdA : 'AAA'}/${newCurrencyIdB}`);\n }\n },\n [currencyIdA, history, currencyIdB]\n );\n\n const handleDismissConfirmation = useCallback(() => {\n setShowConfirm(false);\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onFieldAInput('');\n }\n setTxHash('');\n }, [onFieldAInput, txHash]);\n\n const isCreate = history.location.pathname.includes('/create');\n\n return (\n <>\n \n \n \n (\n \n )}\n pendingText={pendingText}\n />\n \n {noLiquidity ||\n (isCreate ? (\n \n \n \n \n You are the first liquidity provider.\n \n \n The ratio of tokens you add will set the price of this pool.\n \n \n Once you are happy with the rate click supply to review.\n \n \n \n \n ) : (\n \n \n \n \n Tip: When you add liquidity, you will receive pool tokens representing your position.\n These tokens automatically earn fees proportional to your share of the pool, and can be redeemed\n at any time.\n \n \n \n \n ))}\n {\n onFieldAInput(maxAmounts[Field.CURRENCY_A]?.toExact() ?? '');\n }}\n onCurrencySelect={handleCurrencyASelect}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_A]}\n currency={currencies[Field.CURRENCY_A]}\n id=\"add-liquidity-input-tokena\"\n showCommonBases\n />\n \n \n \n {\n onFieldBInput(maxAmounts[Field.CURRENCY_B]?.toExact() ?? '');\n }}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_B]}\n currency={currencies[Field.CURRENCY_B]}\n id=\"add-liquidity-input-tokenb\"\n showCommonBases\n />\n {currencies[Field.CURRENCY_A] && currencies[Field.CURRENCY_B] && pairState !== PairState.INVALID && (\n <>\n \n \n \n {noLiquidity ? 'Initial prices' : 'Prices'} and pool share\n \n {' '}\n \n \n \n \n \n )}\n\n {!account ? (\n Connect Wallet\n ) : (\n \n {(approvalA === ApprovalState.NOT_APPROVED ||\n approvalA === ApprovalState.PENDING ||\n approvalB === ApprovalState.NOT_APPROVED ||\n approvalB === ApprovalState.PENDING) &&\n isValid && (\n \n {approvalA !== ApprovalState.APPROVED && (\n \n {approvalA === ApprovalState.PENDING ? (\n Approving {currencies[Field.CURRENCY_A]?.symbol}\n ) : (\n 'Approve ' + currencies[Field.CURRENCY_A]?.symbol\n )}\n \n )}\n {approvalB !== ApprovalState.APPROVED && (\n \n {approvalB === ApprovalState.PENDING ? (\n Approving {currencies[Field.CURRENCY_B]?.symbol}\n ) : (\n 'Approve ' + currencies[Field.CURRENCY_B]?.symbol\n )}\n \n )}\n \n )}\n {\n expertMode ? onAdd() : setShowConfirm(true);\n }}\n disabled={!isValid || approvalA !== ApprovalState.APPROVED || approvalB !== ApprovalState.APPROVED}\n error={!isValid && !!parsedAmounts[Field.CURRENCY_A] && !!parsedAmounts[Field.CURRENCY_B]}\n >\n \n {error ?? 'Supply'}\n \n \n \n )}\n \n \n \n \n );\n}\n","import React from 'react';\nimport { Redirect, RouteComponentProps } from 'react-router-dom';\nimport AddLiquidity from './index';\n\nexport function RedirectToAddLiquidity() {\n return ;\n}\n\nconst OLD_PATH_STRUCTURE = /^(0x[a-fA-F0-9]{40})-(0x[a-fA-F0-9]{40})$/;\nexport function RedirectOldAddLiquidityPathStructure(props: RouteComponentProps<{ currencyIdA: string }>) {\n const {\n match: {\n params: { currencyIdA },\n },\n } = props;\n const match = currencyIdA.match(OLD_PATH_STRUCTURE);\n if (match?.length) {\n return ;\n }\n\n return ;\n}\n\nexport function RedirectDuplicateTokenIds(props: RouteComponentProps<{ currencyIdA: string; currencyIdB: string }>) {\n const {\n match: {\n params: { currencyIdA, currencyIdB },\n },\n } = props;\n if (currencyIdA.toLowerCase() === currencyIdB.toLowerCase()) {\n return ;\n }\n return ;\n}\n","import { JSBI, Pair, Percent, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { darken } from 'polished';\nimport React, { useState } from 'react';\nimport { ChevronDown, ChevronUp } from 'react-feather';\nimport { Link } from 'react-router-dom';\nimport { Text } from 'rebass';\nimport styled from 'styled-components';\nimport { useTotalSupply } from '../../data/TotalSupply';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { useTokenBalance } from '../../state/wallet/hooks';\nimport { TYPE } from '../../theme';\nimport { currencyId } from '../../utils/currencyId';\nimport { unwrappedToken } from '../../utils/wrappedCurrency';\nimport { ButtonPrimary, ButtonEmpty } from '../Button';\n\nimport { useColor } from '../../hooks/useColor';\n\nimport Card, { GreyCard, LightCard } from '../Card';\nimport { AutoColumn } from '../Column';\nimport CurrencyLogo from '../CurrencyLogo';\nimport DoubleCurrencyLogo from '../DoubleLogo';\nimport { RowBetween, RowFixed, AutoRow } from '../Row';\nimport { Dots } from '../swap/styleds';\nimport { BIG_INT_ZERO } from '../../constants';\n\nexport const FixedHeightRow = styled(RowBetween)`\n height: 24px;\n`;\n\nexport const HoverCard = styled(Card)`\n border: 1px solid transparent;\n\n :hover {\n border: 1px solid ${({ theme }) => darken(0.06, theme.bg2)};\n }\n`;\nconst StyledPositionCard = styled(LightCard)<{ bgColor: any }>`\n position: relative;\n overflow: hidden;\n border: 1px solid ${({ theme }) => theme.primary1};\n background: ${({ theme }) => theme.bg1};\n`;\n\ninterface PositionCardProps {\n pair: Pair;\n showUnwrapped?: boolean;\n border?: string;\n stakedBalance?: TokenAmount; // optional balance to indicate that liquidity is deposited in mining pool\n}\n\nexport function MinimalPositionCard({ pair, showUnwrapped = false, border }: PositionCardProps) {\n const { account } = useActiveWeb3React();\n\n const currency0 = showUnwrapped ? pair.token0 : unwrappedToken(pair.token0);\n const currency1 = showUnwrapped ? pair.token1 : unwrappedToken(pair.token1);\n\n const [showMore, setShowMore] = useState(false);\n\n const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken);\n const totalPoolTokens = useTotalSupply(pair.liquidityToken);\n\n const poolTokenPercentage =\n !!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? new Percent(userPoolBalance.raw, totalPoolTokens.raw)\n : undefined;\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined];\n\n return (\n <>\n {userPoolBalance && JSBI.greaterThan(userPoolBalance.raw, JSBI.BigInt(0)) ? (\n \n \n \n \n \n Your position\n \n \n \n setShowMore(!showMore)}>\n \n \n \n {currency0.symbol}/{currency1.symbol}\n \n \n \n \n {userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}\n \n \n \n \n \n \n Your pool share:\n \n \n {poolTokenPercentage ? poolTokenPercentage.toFixed(6) + '%' : '-'}\n \n \n \n \n {currency0.symbol}:\n \n {token0Deposited ? (\n \n \n {token0Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n \n \n {currency1.symbol}:\n \n {token1Deposited ? (\n \n \n {token1Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n \n \n \n ) : (\n \n \n \n ⭐️\n {' '}\n By adding liquidity you'll earn 0.3% of all trades on this pair proportional to your share of the pool.\n Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\n \n \n )}\n \n );\n}\n\nexport default function FullPositionCard({ pair, border, stakedBalance }: PositionCardProps) {\n const { account } = useActiveWeb3React();\n\n const currency0 = unwrappedToken(pair.token0);\n const currency1 = unwrappedToken(pair.token1);\n\n const [showMore, setShowMore] = useState(false);\n\n const userDefaultPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken);\n const totalPoolTokens = useTotalSupply(pair.liquidityToken);\n\n // if staked balance balance provided, add to standard liquidity amount\n const userPoolBalance = stakedBalance ? userDefaultPoolBalance?.add(stakedBalance) : userDefaultPoolBalance;\n\n const poolTokenPercentage =\n !!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? new Percent(userPoolBalance.raw, totalPoolTokens.raw)\n : undefined;\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined];\n\n const backgroundColor = useColor(pair?.token0);\n\n return (\n \n \n \n \n \n \n {!currency0 || !currency1 ? Loading : `${currency0.symbol}/${currency1.symbol}`}\n \n \n \n setShowMore(!showMore)}>\n {showMore ? (\n <>\n Manage\n \n \n ) : (\n <>\n Manage\n \n \n )}\n \n \n \n\n {showMore && (\n \n \n \n Your total pool tokens:\n \n \n {userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}\n \n \n {stakedBalance && (\n \n \n Pool tokens in rewards pool:\n \n \n {stakedBalance.toSignificant(4)}\n \n \n )}\n \n \n \n Pooled {currency0.symbol}:\n \n \n {token0Deposited ? (\n \n \n {token0Deposited?.toSignificant(6)}\n \n \n \n ) : (\n '-'\n )}\n \n\n \n \n \n Pooled {currency1.symbol}:\n \n \n {token1Deposited ? (\n \n \n {token1Deposited?.toSignificant(6)}\n \n \n \n ) : (\n '-'\n )}\n \n\n \n \n Your pool share:\n \n \n {poolTokenPercentage\n ? (poolTokenPercentage.toFixed(2) === '0.00' ? '<0.01' : poolTokenPercentage.toFixed(2)) + '%'\n : '-'}\n \n \n\n {userDefaultPoolBalance && JSBI.greaterThan(userDefaultPoolBalance.raw, BIG_INT_ZERO) && (\n \n \n Add\n \n \n Remove\n \n \n )}\n {stakedBalance && JSBI.greaterThan(stakedBalance.raw, BIG_INT_ZERO) && (\n \n Manage Liquidity in Rewards Pool\n \n )}\n \n )}\n \n \n );\n}\n","import React, { useContext, useMemo } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { Pair } from '@moonrabbit/swap-sdk';\nimport { Link } from 'react-router-dom';\nimport { SwapPoolTabs } from '../../components/NavigationTabs';\nimport AppBody from '../AppBody';\nimport FullPositionCard from '../../components/PositionCard';\nimport { useTokenBalancesWithLoadingIndicator } from '../../state/wallet/hooks';\nimport { TYPE } from '../../theme';\nimport Card from '../../components/Card';\nimport { RowBetween, RowFixed } from '../../components/Row';\nimport { ButtonPrimary } from '../../components/Button';\nimport { AutoColumn } from '../../components/Column';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { usePairs } from '../../data/Reserves';\nimport { toV2LiquidityToken, useTrackedTokenPairs } from '../../state/user/hooks';\nimport { Dots } from '../../components/swap/styleds';\n\nconst PageWrapper = styled(AutoColumn)`\n max-width: 640px;\n width: 100%;\n padding: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n justify-content: center;\n ${({ theme }) => theme.mediaWidth.upToSmall`\n flex-wrap: wrap;\n gap: 12px;\n width: 100%;\n flex-direction: column-reverse;\n `};\n`;\n\nconst ButtonRow = styled(RowFixed)`\n gap: 8px;\n width: 100%;\n ${({ theme }) => theme.mediaWidth.upToExtraSmall`\n flex-wrap: wrap;\n `};\n`;\n\nconst ResponsiveButtonPrimary = styled(ButtonPrimary)`\n width: 100%;\n`;\n\nconst EmptyProposals = styled.div`\n border: 1px solid ${({ theme }) => theme.text4};\n padding: 16px 12px;\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nexport default function Pool() {\n const theme = useContext(ThemeContext);\n const { account } = useActiveWeb3React();\n\n // fetch the user's balances of all tracked V2 LP tokens\n const trackedTokenPairs = useTrackedTokenPairs();\n const tokenPairsWithLiquidityTokens = useMemo(\n () => trackedTokenPairs.map((tokens) => ({ liquidityToken: toV2LiquidityToken(tokens), tokens })),\n [trackedTokenPairs]\n );\n const liquidityTokens = useMemo(\n () => tokenPairsWithLiquidityTokens.map((tpwlt) => tpwlt.liquidityToken),\n [tokenPairsWithLiquidityTokens]\n );\n const [v2PairsBalances, fetchingV2PairBalances] = useTokenBalancesWithLoadingIndicator(\n account ?? undefined,\n liquidityTokens\n );\n\n // fetch the reserves for all V2 pools in which the user has a balance\n const liquidityTokensWithBalances = useMemo(\n () =>\n tokenPairsWithLiquidityTokens.filter(({ liquidityToken }) =>\n v2PairsBalances[liquidityToken.address]?.greaterThan('0')\n ),\n [tokenPairsWithLiquidityTokens, v2PairsBalances]\n );\n\n const v2Pairs = usePairs(liquidityTokensWithBalances.map(({ tokens }) => tokens));\n const v2IsLoading =\n fetchingV2PairBalances ||\n v2Pairs?.length < liquidityTokensWithBalances.length ||\n v2Pairs?.some((V2Pair) => !V2Pair);\n const allV2PairsWithLiquidity = v2Pairs.map(([, pair]) => pair).filter((v2Pair): v2Pair is Pair => Boolean(v2Pair));\n\n return (\n \n \n \n \n \n \n Your liquidity\n \n\n \n \n Add Pool\n \n \n Create a pair\n \n \n Add Liquidity\n \n \n\n {!account ? (\n \n \n Connect to a wallet to view your liquidity.\n \n \n ) : v2IsLoading ? (\n \n \n Loading\n \n \n ) : allV2PairsWithLiquidity?.length > 0 ? (\n <>\n {allV2PairsWithLiquidity.map((v2Pair) => (\n \n ))}\n \n ) : (\n \n \n No Liquidity found\n \n \n )}\n \n \n \n \n );\n}\n","import { Currency, ETHER, JSBI, TokenAmount } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Plus } from 'react-feather';\nimport { Text } from 'rebass';\nimport { ButtonDropdownLight } from '../../components/Button';\nimport { LightCard } from '../../components/Card';\nimport { AutoColumn, ColumnCenter } from '../../components/Column';\nimport CurrencyLogo from '../../components/CurrencyLogo';\nimport { FindPoolTabs } from '../../components/NavigationTabs';\nimport { MinimalPositionCard } from '../../components/PositionCard';\nimport Row from '../../components/Row';\nimport CurrencySearchModal from '../../components/SearchModal/CurrencySearchModal';\nimport { PairState, usePair } from '../../data/Reserves';\nimport { useActiveWeb3React } from '../../hooks';\nimport { usePairAdder } from '../../state/user/hooks';\nimport { useTokenBalance } from '../../state/wallet/hooks';\nimport { StyledInternalLink } from '../../theme';\nimport { currencyId } from '../../utils/currencyId';\nimport AppBody from '../AppBody';\nimport { Dots } from '../Pool/styleds';\nimport { BlueCard } from '../../components/Card';\nimport { TYPE } from '../../theme';\n\nenum Fields {\n TOKEN0 = 0,\n TOKEN1 = 1,\n}\n\nexport default function PoolFinder() {\n const { account } = useActiveWeb3React();\n\n const [showSearch, setShowSearch] = useState(false);\n const [activeField, setActiveField] = useState(Fields.TOKEN1);\n\n const [currency0, setCurrency0] = useState(ETHER);\n const [currency1, setCurrency1] = useState(null);\n\n const [pairState, pair] = usePair(currency0 ?? undefined, currency1 ?? undefined);\n const addPair = usePairAdder();\n useEffect(() => {\n if (pair) {\n addPair(pair);\n }\n }, [pair, addPair]);\n\n const validPairNoLiquidity: boolean =\n pairState === PairState.NOT_EXISTS ||\n Boolean(\n pairState === PairState.EXISTS &&\n pair &&\n JSBI.equal(pair.reserve0.raw, JSBI.BigInt(0)) &&\n JSBI.equal(pair.reserve1.raw, JSBI.BigInt(0))\n );\n\n const position: TokenAmount | undefined = useTokenBalance(account ?? undefined, pair?.liquidityToken);\n const hasPosition = Boolean(position && JSBI.greaterThan(position.raw, JSBI.BigInt(0)));\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n if (activeField === Fields.TOKEN0) {\n setCurrency0(currency);\n } else {\n setCurrency1(currency);\n }\n },\n [activeField]\n );\n\n const handleSearchDismiss = useCallback(() => {\n setShowSearch(false);\n }, [setShowSearch]);\n\n const prerequisiteMessage = (\n \n \n {!account ? 'Connect to a wallet to find pools' : 'Select a token to find your liquidity.'}\n \n \n );\n\n return (\n \n \n \n \n \n \n Tip: Use this tool to find pairs that don't automatically appear in the interface.\n \n \n \n {\n setShowSearch(true);\n setActiveField(Fields.TOKEN0);\n }}\n >\n {currency0 ? (\n \n \n \n {currency0.symbol}\n \n \n ) : (\n \n Select a Token\n \n )}\n \n\n \n \n \n\n {\n setShowSearch(true);\n setActiveField(Fields.TOKEN1);\n }}\n >\n {currency1 ? (\n \n \n \n {currency1.symbol}\n \n \n ) : (\n \n Select a Token\n \n )}\n \n\n {hasPosition && (\n \n \n Pool Found!\n \n \n Manage this pool.\n \n \n )}\n\n {currency0 && currency1 ? (\n pairState === PairState.EXISTS ? (\n hasPosition && pair ? (\n \n ) : (\n \n \n You don’t have liquidity in this pool yet.\n \n Add liquidity.\n \n \n \n )\n ) : validPairNoLiquidity ? (\n \n \n No pool found.\n \n Create pool.\n \n \n \n ) : pairState === PairState.INVALID ? (\n \n \n \n Invalid pair.\n \n \n \n ) : pairState === PairState.LOADING ? (\n \n \n \n Loading\n \n \n \n \n ) : null\n ) : (\n prerequisiteMessage\n )}\n \n\n \n \n );\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport enum Field {\n LIQUIDITY_PERCENT = 'LIQUIDITY_PERCENT',\n LIQUIDITY = 'LIQUIDITY',\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B',\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('burn/typeInputBurn');\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\n\nconst StyledRangeInput = styled.input<{ size: number }>`\n -webkit-appearance: none; /* Hides the slider so that custom slider can be made */\n width: 100%; /* Specific width is required for Firefox. */\n background: transparent; /* Otherwise white in Chrome */\n cursor: pointer;\n\n &:focus {\n outline: none;\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n border: none;\n transform: translateY(-50%);\n color: ${({ theme }) => theme.bg1};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-moz-range-thumb {\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n border: none;\n color: ${({ theme }) => theme.bg1};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-ms-thumb {\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n color: ${({ theme }) => theme.bg1};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-webkit-slider-runnable-track {\n background: linear-gradient(90deg, ${({ theme }) => theme.bg5}, ${({ theme }) => theme.bg3});\n height: 2px;\n }\n\n &::-moz-range-track {\n background: linear-gradient(90deg, ${({ theme }) => theme.bg5}, ${({ theme }) => theme.bg3});\n height: 2px;\n }\n\n &::-ms-track {\n width: 100%;\n border-color: transparent;\n color: transparent;\n\n background: ${({ theme }) => theme.bg5};\n height: 2px;\n }\n &::-ms-fill-lower {\n background: ${({ theme }) => theme.bg5};\n }\n &::-ms-fill-upper {\n background: ${({ theme }) => theme.bg3};\n }\n`;\n\ninterface InputSliderProps {\n value: number;\n onChange: (value: number) => void;\n step?: number;\n min?: number;\n max?: number;\n size?: number;\n}\n\nexport default function Slider({ value, onChange, min = 0, step = 1, max = 100, size = 28 }: InputSliderProps) {\n const changeCallback = useCallback(\n (e) => {\n onChange(parseInt(e.target.value));\n },\n [onChange]\n );\n\n return (\n \n );\n}\n","import { NEVER_RELOAD, useSingleCallResult } from '../state/multicall/hooks';\nimport { useActiveWeb3React } from './index';\nimport { useArgentWalletDetectorContract } from './useContract';\n\nexport default function useIsArgentWallet(): boolean {\n const { account } = useActiveWeb3React();\n const argentWalletDetector = useArgentWalletDetectorContract();\n const call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', [account ?? undefined], NEVER_RELOAD);\n return call?.result?.[0] ?? false;\n}\n","import ARGENT_WALLET_DETECTOR_ABI from './argent-wallet-detector.json';\n\nconst ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8';\n\nexport { ARGENT_WALLET_DETECTOR_ABI, ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS };\n","import { Currency, CurrencyAmount, JSBI, Pair, Percent, TokenAmount } from '@moonrabbit/swap-sdk';\nimport { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { usePair } from '../../data/Reserves';\nimport { useTotalSupply } from '../../data/TotalSupply';\n\nimport { useActiveWeb3React } from '../../hooks';\nimport { wrappedCurrency } from '../../utils/wrappedCurrency';\nimport { AppDispatch, AppState } from '../index';\nimport { tryParseAmount } from '../swap/hooks';\nimport { useTokenBalances } from '../wallet/hooks';\nimport { Field, typeInput } from './actions';\n\nexport function useBurnState(): AppState['burn'] {\n return useSelector((state) => state.burn);\n}\n\nexport function useDerivedBurnInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined\n): {\n pair?: Pair | null;\n parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent;\n [Field.LIQUIDITY]?: TokenAmount;\n [Field.CURRENCY_A]?: CurrencyAmount;\n [Field.CURRENCY_B]?: CurrencyAmount;\n };\n error?: string;\n} {\n const { account, chainId } = useActiveWeb3React();\n\n const { independentField, typedValue } = useBurnState();\n\n // pair + totalsupply\n const [, pair] = usePair(currencyA, currencyB);\n\n // balances\n const relevantTokenBalances = useTokenBalances(account ?? undefined, [pair?.liquidityToken]);\n const userLiquidity: undefined | TokenAmount = relevantTokenBalances?.[pair?.liquidityToken?.address ?? ''];\n\n const [tokenA, tokenB] = [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)];\n const tokens = {\n [Field.CURRENCY_A]: tokenA,\n [Field.CURRENCY_B]: tokenB,\n [Field.LIQUIDITY]: pair?.liquidityToken,\n };\n\n // liquidity values\n const totalSupply = useTotalSupply(pair?.liquidityToken);\n const liquidityValueA =\n pair &&\n totalSupply &&\n userLiquidity &&\n tokenA &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalSupply.raw, userLiquidity.raw)\n ? new TokenAmount(tokenA, pair.getLiquidityValue(tokenA, totalSupply, userLiquidity, false).raw)\n : undefined;\n const liquidityValueB =\n pair &&\n totalSupply &&\n userLiquidity &&\n tokenB &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalSupply.raw, userLiquidity.raw)\n ? new TokenAmount(tokenB, pair.getLiquidityValue(tokenB, totalSupply, userLiquidity, false).raw)\n : undefined;\n const liquidityValues: { [Field.CURRENCY_A]?: TokenAmount; [Field.CURRENCY_B]?: TokenAmount } = {\n [Field.CURRENCY_A]: liquidityValueA,\n [Field.CURRENCY_B]: liquidityValueB,\n };\n\n let percentToRemove: Percent = new Percent('0', '100');\n // user specified a %\n if (independentField === Field.LIQUIDITY_PERCENT) {\n percentToRemove = new Percent(typedValue, '100');\n }\n // user specified a specific amount of liquidity tokens\n else if (independentField === Field.LIQUIDITY) {\n if (pair?.liquidityToken) {\n const independentAmount = tryParseAmount(typedValue, pair.liquidityToken);\n if (independentAmount && userLiquidity && !independentAmount.greaterThan(userLiquidity)) {\n percentToRemove = new Percent(independentAmount.raw, userLiquidity.raw);\n }\n }\n }\n // user specified a specific amount of token a or b\n else {\n if (tokens[independentField]) {\n const independentAmount = tryParseAmount(typedValue, tokens[independentField]);\n const liquidityValue = liquidityValues[independentField];\n if (independentAmount && liquidityValue && !independentAmount.greaterThan(liquidityValue)) {\n percentToRemove = new Percent(independentAmount.raw, liquidityValue.raw);\n }\n }\n }\n\n const parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent;\n [Field.LIQUIDITY]?: TokenAmount;\n [Field.CURRENCY_A]?: TokenAmount;\n [Field.CURRENCY_B]?: TokenAmount;\n } = {\n [Field.LIQUIDITY_PERCENT]: percentToRemove,\n [Field.LIQUIDITY]:\n userLiquidity && percentToRemove && percentToRemove.greaterThan('0')\n ? new TokenAmount(userLiquidity.token, percentToRemove.multiply(userLiquidity.raw).quotient)\n : undefined,\n [Field.CURRENCY_A]:\n tokenA && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueA\n ? new TokenAmount(tokenA, percentToRemove.multiply(liquidityValueA.raw).quotient)\n : undefined,\n [Field.CURRENCY_B]:\n tokenB && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueB\n ? new TokenAmount(tokenB, percentToRemove.multiply(liquidityValueB.raw).quotient)\n : undefined,\n };\n\n let error: string | undefined;\n if (!account) {\n error = 'Connect Wallet';\n }\n\n if (!parsedAmounts[Field.LIQUIDITY] || !parsedAmounts[Field.CURRENCY_A] || !parsedAmounts[Field.CURRENCY_B]) {\n error = error ?? 'Enter an amount';\n }\n\n return { pair, parsedAmounts, error };\n}\n\nexport function useBurnActionHandlers(): {\n onUserInput: (field: Field, typedValue: string) => void;\n} {\n const dispatch = useDispatch();\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }));\n },\n [dispatch]\n );\n\n return {\n onUserInput,\n };\n}\n","import { splitSignature } from '@ethersproject/bytes';\nimport { Contract } from '@ethersproject/contracts';\nimport { TransactionResponse } from '@ethersproject/providers';\nimport { Currency, currencyEquals, ETHER, Percent, WETH } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\nimport { ArrowDown, Plus } from 'react-feather';\nimport { RouteComponentProps } from 'react-router';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { ButtonPrimary, ButtonError, ButtonConfirmed } from '../../components/Button';\nimport { GreyCard, LightCard } from '../../components/Card';\nimport { AutoColumn, ColumnCenter } from '../../components/Column';\nimport TransactionConfirmationModal, { ConfirmationModalContent } from '../../components/TransactionConfirmationModal';\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel';\nimport DoubleCurrencyLogo from '../../components/DoubleLogo';\nimport { AddRemoveTabs } from '../../components/NavigationTabs';\nimport { MinimalPositionCard } from '../../components/PositionCard';\nimport Row, { RowBetween, RowFixed } from '../../components/Row';\n\nimport Slider from '../../components/Slider';\nimport CurrencyLogo from '../../components/CurrencyLogo';\nimport { ROUTER_ADDRESS, LP_TOKEN_NAME } from '../../constants';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useCurrency } from '../../hooks/Tokens';\nimport { usePairContract } from '../../hooks/useContract';\nimport useIsArgentWallet from '../../hooks/useIsArgentWallet';\nimport useTransactionDeadline from '../../hooks/useTransactionDeadline';\n\nimport { useTransactionAdder } from '../../state/transactions/hooks';\nimport { StyledInternalLink, TYPE } from '../../theme';\nimport { calculateGasMargin, calculateSlippageAmount, getRouterContract } from '../../utils';\nimport { currencyId } from '../../utils/currencyId';\nimport useDebouncedChangeHandler from '../../utils/useDebouncedChangeHandler';\nimport { wrappedCurrency } from '../../utils/wrappedCurrency';\nimport AppBody from '../AppBody';\nimport { ClickableText, MaxButton, Wrapper } from '../Pool/styleds';\nimport { useApproveCallback, ApprovalState } from '../../hooks/useApproveCallback';\nimport { Dots } from '../../components/swap/styleds';\nimport { useBurnActionHandlers } from '../../state/burn/hooks';\nimport { useDerivedBurnInfo, useBurnState } from '../../state/burn/hooks';\nimport { Field } from '../../state/burn/actions';\nimport { useWalletModalToggle } from '../../state/application/hooks';\nimport { useUserSlippageTolerance } from '../../state/user/hooks';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nexport default function RemoveLiquidity({\n history,\n match: {\n params: { currencyIdA, currencyIdB },\n },\n}: RouteComponentProps<{ currencyIdA: string; currencyIdB: string }>) {\n const [currencyA, currencyB] = [useCurrency(currencyIdA) ?? undefined, useCurrency(currencyIdB) ?? undefined];\n const { account, chainId, library } = useActiveWeb3React();\n const [tokenA, tokenB] = useMemo(\n () => [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)],\n [currencyA, currencyB, chainId]\n );\n\n const theme = useContext(ThemeContext);\n\n // toggle wallet when disconnected\n const toggleWalletModal = useWalletModalToggle();\n\n // burn state\n const { independentField, typedValue } = useBurnState();\n const { pair, parsedAmounts, error } = useDerivedBurnInfo(currencyA ?? undefined, currencyB ?? undefined);\n const { onUserInput: _onUserInput } = useBurnActionHandlers();\n const isValid = !error;\n\n // modal and loading\n const [showConfirm, setShowConfirm] = useState(false);\n const [showDetailed, setShowDetailed] = useState(false);\n const [attemptingTxn, setAttemptingTxn] = useState(false); // clicked confirm\n\n // txn values\n const [txHash, setTxHash] = useState('');\n const deadline = useTransactionDeadline();\n const [allowedSlippage] = useUserSlippageTolerance();\n\n const formattedAmounts = {\n [Field.LIQUIDITY_PERCENT]: parsedAmounts[Field.LIQUIDITY_PERCENT].equalTo('0')\n ? '0'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].lessThan(new Percent('1', '100'))\n ? '<1'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0),\n [Field.LIQUIDITY]:\n independentField === Field.LIQUIDITY ? typedValue : parsedAmounts[Field.LIQUIDITY]?.toSignificant(6) ?? '',\n [Field.CURRENCY_A]:\n independentField === Field.CURRENCY_A ? typedValue : parsedAmounts[Field.CURRENCY_A]?.toSignificant(6) ?? '',\n [Field.CURRENCY_B]:\n independentField === Field.CURRENCY_B ? typedValue : parsedAmounts[Field.CURRENCY_B]?.toSignificant(6) ?? '',\n };\n\n const atMaxAmount = parsedAmounts[Field.LIQUIDITY_PERCENT]?.equalTo(new Percent('1'));\n\n // pair contract\n const pairContract: Contract | null = usePairContract(pair?.liquidityToken?.address);\n\n // allowance handling\n const [signatureData, setSignatureData] = useState<{ v: number; r: string; s: string; deadline: number } | null>(\n null\n );\n const [approval, approveCallback] = useApproveCallback(parsedAmounts[Field.LIQUIDITY], ROUTER_ADDRESS);\n\n const isArgentWallet = useIsArgentWallet();\n\n async function onAttemptToApprove() {\n if (!pairContract || !pair || !library || !deadline) throw new Error('missing dependencies');\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY];\n if (!liquidityAmount) throw new Error('missing liquidity amount');\n\n if (isArgentWallet) {\n return approveCallback();\n }\n\n // try to gather a signature for permission\n const nonce = await pairContract.nonces(account);\n\n const EIP712Domain = [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ];\n const domain = {\n name: LP_TOKEN_NAME,\n version: '1',\n chainId: chainId,\n verifyingContract: pair.liquidityToken.address,\n };\n const Permit = [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ];\n const message = {\n owner: account,\n spender: ROUTER_ADDRESS,\n value: liquidityAmount.raw.toString(),\n nonce: nonce.toHexString(),\n deadline: deadline.toNumber(),\n };\n const data = JSON.stringify({\n types: {\n EIP712Domain,\n Permit,\n },\n domain,\n primaryType: 'Permit',\n message,\n });\n\n library\n .send('eth_signTypedData_v4', [account, data])\n .then(splitSignature)\n .then((signature) => {\n setSignatureData({\n v: signature.v,\n r: signature.r,\n s: signature.s,\n deadline: deadline.toNumber(),\n });\n })\n .catch((error) => {\n // for all errors other than 4001 (EIP-1193 user rejected request), fall back to manual approve\n if (error?.code !== 4001) {\n approveCallback();\n }\n });\n }\n\n // wrapped onUserInput to clear signatures\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n setSignatureData(null);\n return _onUserInput(field, typedValue);\n },\n [_onUserInput]\n );\n\n const onLiquidityInput = useCallback(\n (typedValue: string): void => onUserInput(Field.LIQUIDITY, typedValue),\n [onUserInput]\n );\n const onCurrencyAInput = useCallback(\n (typedValue: string): void => onUserInput(Field.CURRENCY_A, typedValue),\n [onUserInput]\n );\n const onCurrencyBInput = useCallback(\n (typedValue: string): void => onUserInput(Field.CURRENCY_B, typedValue),\n [onUserInput]\n );\n\n // tx sending\n const addTransaction = useTransactionAdder();\n async function onRemove() {\n if (!chainId || !library || !account || !deadline) throw new Error('missing dependencies');\n const { [Field.CURRENCY_A]: currencyAmountA, [Field.CURRENCY_B]: currencyAmountB } = parsedAmounts;\n if (!currencyAmountA || !currencyAmountB) {\n throw new Error('missing currency amounts');\n }\n const router = getRouterContract(chainId, library, account);\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(currencyAmountA, allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(currencyAmountB, allowedSlippage)[0],\n };\n\n if (!currencyA || !currencyB) throw new Error('missing tokens');\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY];\n if (!liquidityAmount) throw new Error('missing liquidity amount');\n\n const currencyBIsETH = currencyB === ETHER;\n const oneCurrencyIsETH = currencyA === ETHER || currencyBIsETH;\n\n if (!tokenA || !tokenB) throw new Error('could not wrap');\n\n let methodNames: string[], args: Array;\n // we have approval, use normal remove liquidity\n if (approval === ApprovalState.APPROVED) {\n // removeLiquidityETH\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETH', 'removeLiquidityETHSupportingFeeOnTransferTokens'];\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n deadline.toHexString(),\n ];\n }\n // removeLiquidity\n else {\n methodNames = ['removeLiquidity'];\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadline.toHexString(),\n ];\n }\n }\n // we have a signataure, use permit versions of remove liquidity\n else if (signatureData !== null) {\n // removeLiquidityETHWithPermit\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETHWithPermit', 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens'];\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ];\n }\n // removeLiquidityETHWithPermit\n else {\n methodNames = ['removeLiquidityWithPermit'];\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ];\n }\n } else {\n throw new Error('Attempting to confirm without approval or a signature. Please contact support.');\n }\n\n const safeGasEstimates: (BigNumber | undefined)[] = await Promise.all(\n methodNames.map((methodName) =>\n router.estimateGas[methodName](...args)\n .then(calculateGasMargin)\n .catch((error) => {\n console.error(`estimateGas failed`, methodName, args, error);\n return undefined;\n })\n )\n );\n\n const indexOfSuccessfulEstimation = safeGasEstimates.findIndex((safeGasEstimate) =>\n BigNumber.isBigNumber(safeGasEstimate)\n );\n\n // all estimations failed...\n if (indexOfSuccessfulEstimation === -1) {\n console.error('This transaction would fail. Please contact support.');\n } else {\n const methodName = methodNames[indexOfSuccessfulEstimation];\n const safeGasEstimate = safeGasEstimates[indexOfSuccessfulEstimation];\n\n setAttemptingTxn(true);\n await router[methodName](...args, {\n gasLimit: safeGasEstimate,\n })\n .then((response: TransactionResponse) => {\n setAttemptingTxn(false);\n\n addTransaction(response, {\n summary:\n 'Remove ' +\n parsedAmounts[Field.CURRENCY_A]?.toSignificant(3) +\n ' ' +\n currencyA?.symbol +\n ' and ' +\n parsedAmounts[Field.CURRENCY_B]?.toSignificant(3) +\n ' ' +\n currencyB?.symbol,\n });\n\n setTxHash(response.hash);\n })\n .catch((error: Error) => {\n setAttemptingTxn(false);\n // we only care if the error is something _other_ than the user rejected the tx\n console.error(error);\n });\n }\n }\n\n function modalHeader() {\n return (\n \n \n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n \n {currencyA?.symbol}\n \n \n \n \n \n \n \n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n \n {currencyB?.symbol}\n \n \n \n\n \n {`Output is estimated. If the price changes by more than ${\n allowedSlippage / 100\n }% your transaction will revert.`}\n \n \n );\n }\n\n function modalBottom() {\n return (\n <>\n \n \n {'UNI ' + currencyA?.symbol + '/' + currencyB?.symbol} Burned\n \n \n \n \n {parsedAmounts[Field.LIQUIDITY]?.toSignificant(6)}\n \n \n \n {pair && (\n <>\n \n \n Price\n \n \n 1 {currencyA?.symbol} = {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n \n \n \n
    \n \n 1 {currencyB?.symbol} = {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n \n \n \n )}\n \n \n Confirm\n \n \n \n );\n }\n\n const pendingText = `Removing ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)} ${\n currencyA?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)} ${currencyB?.symbol}`;\n\n const liquidityPercentChangeCallback = useCallback(\n (value: number) => {\n onUserInput(Field.LIQUIDITY_PERCENT, value.toString());\n },\n [onUserInput]\n );\n\n const oneCurrencyIsETH = currencyA === ETHER || currencyB === ETHER;\n const oneCurrencyIsWETH = Boolean(\n chainId &&\n ((currencyA && currencyEquals(WETH[chainId], currencyA)) ||\n (currencyB && currencyEquals(WETH[chainId], currencyB)))\n );\n\n const handleSelectCurrencyA = useCallback(\n (currency: Currency) => {\n if (currencyIdB && currencyId(currency) === currencyIdB) {\n history.push(`/remove/${currencyId(currency)}/${currencyIdA}`);\n } else {\n history.push(`/remove/${currencyId(currency)}/${currencyIdB}`);\n }\n },\n [currencyIdA, currencyIdB, history]\n );\n const handleSelectCurrencyB = useCallback(\n (currency: Currency) => {\n if (currencyIdA && currencyId(currency) === currencyIdA) {\n history.push(`/remove/${currencyIdB}/${currencyId(currency)}`);\n } else {\n history.push(`/remove/${currencyIdA}/${currencyId(currency)}`);\n }\n },\n [currencyIdA, currencyIdB, history]\n );\n\n const handleDismissConfirmation = useCallback(() => {\n setShowConfirm(false);\n setSignatureData(null); // important that we clear signature data to avoid bad sigs\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.LIQUIDITY_PERCENT, '0');\n }\n setTxHash('');\n }, [onUserInput, txHash]);\n\n const [innerLiquidityPercentage, setInnerLiquidityPercentage] = useDebouncedChangeHandler(\n Number.parseInt(parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0)),\n liquidityPercentChangeCallback\n );\n\n return (\n <>\n \n \n \n (\n \n )}\n pendingText={pendingText}\n />\n \n \n \n \n Tip: Removing pool tokens converts your position back into underlying tokens at the current\n rate, proportional to your share of the pool. Accrued fees are included in the amounts you receive.\n \n \n \n \n \n \n Amount\n {\n setShowDetailed(!showDetailed);\n }}\n >\n {showDetailed ? 'Simple' : 'Detailed'}\n \n \n \n \n {formattedAmounts[Field.LIQUIDITY_PERCENT]}%\n \n \n {!showDetailed && (\n <>\n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '25')} width=\"24%\">\n 25%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '50')} width=\"24%\">\n 50%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '75')} width=\"24%\">\n 75%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')} width=\"24%\">\n Max\n \n \n \n )}\n \n \n {!showDetailed && (\n <>\n \n \n \n \n \n \n \n {formattedAmounts[Field.CURRENCY_A] || '-'}\n \n \n \n \n {currencyA?.symbol}\n \n \n \n \n \n {formattedAmounts[Field.CURRENCY_B] || '-'}\n \n \n \n \n {currencyB?.symbol}\n \n \n \n {chainId && (oneCurrencyIsWETH || oneCurrencyIsETH) ? (\n \n {oneCurrencyIsETH ? (\n \n Receive WAAA\n \n ) : oneCurrencyIsWETH ? (\n \n Receive AAA\n \n ) : null}\n \n ) : null}\n \n \n \n )}\n\n {showDetailed && (\n <>\n {\n onUserInput(Field.LIQUIDITY_PERCENT, '100');\n }}\n showMaxButton={!atMaxAmount}\n disableCurrencySelect\n currency={pair?.liquidityToken}\n pair={pair}\n id=\"liquidity-amount\"\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyA}\n label={'Output'}\n onCurrencySelect={handleSelectCurrencyA}\n id=\"remove-liquidity-tokena\"\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyB}\n label={'Output'}\n onCurrencySelect={handleSelectCurrencyB}\n id=\"remove-liquidity-tokenb\"\n />\n \n )}\n {pair && (\n
    \n \n Price:\n
    \n 1 {currencyA?.symbol} = {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n
    \n
    \n \n
    \n
    \n 1 {currencyB?.symbol} = {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n
    \n \n
    \n )}\n
    \n {!account ? (\n Connect Wallet\n ) : (\n \n \n {approval === ApprovalState.PENDING ? (\n Approving\n ) : approval === ApprovalState.APPROVED || signatureData !== null ? (\n 'Approved'\n ) : (\n 'Approve'\n )}\n \n {\n setShowConfirm(true);\n }}\n disabled={!isValid || (signatureData === null && approval !== ApprovalState.APPROVED)}\n error={!isValid && !!parsedAmounts[Field.CURRENCY_A] && !!parsedAmounts[Field.CURRENCY_B]}\n >\n \n {error || 'Remove'}\n \n \n \n )}\n
    \n \n \n \n\n {pair ? (\n \n \n \n ) : null}\n \n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input\n * @param value value that is rapidly changing\n * @param onChange change handler that should receive the debounced updates to the value\n * @param debouncedMs how long we should wait for changes to be applied\n */\nexport default function useDebouncedChangeHandler(\n value: T,\n onChange: (newValue: T) => void,\n debouncedMs = 100\n): [T, (value: T) => void] {\n const [inner, setInner] = useState(() => value);\n const timer = useRef>();\n\n const onChangeInner = useCallback(\n (newValue: T) => {\n setInner(newValue);\n if (timer.current) {\n clearTimeout(timer.current);\n }\n timer.current = setTimeout(() => {\n onChange(newValue);\n timer.current = undefined;\n }, debouncedMs);\n },\n [debouncedMs, onChange]\n );\n\n useEffect(() => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = undefined;\n }\n setInner(value);\n }, [value]);\n\n return [inner, onChangeInner];\n}\n","import React from 'react';\nimport { RouteComponentProps, Redirect } from 'react-router-dom';\n\nconst OLD_PATH_STRUCTURE = /^(0x[a-fA-F0-9]{40})-(0x[a-fA-F0-9]{40})$/;\n\nexport function RedirectOldRemoveLiquidityPathStructure({\n match: {\n params: { tokens },\n },\n}: RouteComponentProps<{ tokens: string }>) {\n if (!OLD_PATH_STRUCTURE.test(tokens)) {\n return ;\n }\n const [currency0, currency1] = tokens.split('-');\n\n return ;\n}\n","import React, { useContext, useCallback } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport useENS from '../../hooks/useENS';\nimport { useActiveWeb3React } from '../../hooks';\nimport { ExternalLink, TYPE } from '../../theme';\nimport { AutoColumn } from '../Column';\nimport { RowBetween } from '../Row';\nimport { getEtherscanLink } from '../../utils';\n\nconst InputPanel = styled.div`\n ${({ theme }) => theme.flexColumnNoWrap}\n position: relative;\n border-radius: 1.25rem;\n background-color: ${({ theme }) => theme.bg1};\n z-index: 1;\n width: 100%;\n`;\n\nconst ContainerRow = styled.div<{ error: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ${({ error, theme }) => (error ? theme.red1 : theme.bg2)};\n transition: border-color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')},\n color 500ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n background-color: ${({ theme }) => theme.bg1};\n`;\n\nconst InputContainer = styled.div`\n flex: 1;\n padding: 1rem;\n`;\n\nconst Input = styled.input<{ error?: boolean }>`\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ${({ theme }) => theme.bg1};\n transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n color: ${({ error, theme }) => (error ? theme.red1 : theme.text1)};\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ${({ theme }) => theme.text4};\n }\n padding: 0px;\n -webkit-appearance: textfield;\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n ::placeholder {\n color: ${({ theme }) => theme.text4};\n }\n`;\n\nexport default function AddressInputPanel({\n id,\n value,\n onChange,\n}: {\n id?: string;\n // the typed string value\n value: string;\n // triggers whenever the typed value changes\n onChange: (value: string) => void;\n}) {\n const { chainId } = useActiveWeb3React();\n const theme = useContext(ThemeContext);\n\n const { address, loading, name } = useENS(value);\n\n const handleInput = useCallback(\n (event) => {\n const input = event.target.value;\n const withoutSpaces = input.replace(/\\s+/g, '');\n onChange(withoutSpaces);\n },\n [onChange]\n );\n\n const error = Boolean(value.length > 0 && !loading && !address);\n\n return (\n \n \n \n \n \n \n Recipient\n \n {address && chainId && (\n \n (View on Explorer)\n \n )}\n \n \n \n \n \n \n );\n}\n","import { Percent } from '@moonrabbit/swap-sdk';\nimport React from 'react';\nimport { ONE_BIPS } from '../../constants';\nimport { warningSeverity } from '../../utils/prices';\nimport { ErrorText } from './styleds';\n\n/**\n * Formatted version of price impact text with warning colors\n */\nexport default function FormattedPriceImpact({ priceImpact }: { priceImpact?: Percent }) {\n return (\n \n {priceImpact ? (priceImpact.lessThan(ONE_BIPS) ? '<0.01%' : `${priceImpact.toFixed(2)}%`) : '-'}\n \n );\n}\n","import { Trade, TradeType } from '@moonrabbit/swap-sdk';\nimport React, { useContext, useMemo, useState } from 'react';\nimport { Repeat } from 'react-feather';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { Field } from '../../state/swap/actions';\nimport { TYPE } from '../../theme';\nimport {\n computeSlippageAdjustedAmounts,\n computeTradePriceBreakdown,\n formatExecutionPrice,\n warningSeverity,\n} from '../../utils/prices';\nimport { ButtonError } from '../Button';\nimport { AutoColumn } from '../Column';\nimport QuestionHelper from '../QuestionHelper';\nimport { AutoRow, RowBetween, RowFixed } from '../Row';\nimport FormattedPriceImpact from './FormattedPriceImpact';\nimport { StyledBalanceMaxMini, SwapCallbackError } from './styleds';\n\nexport default function SwapModalFooter({\n trade,\n onConfirm,\n allowedSlippage,\n swapErrorMessage,\n disabledConfirm,\n}: {\n trade: Trade;\n allowedSlippage: number;\n onConfirm: () => void;\n swapErrorMessage: string | undefined;\n disabledConfirm: boolean;\n}) {\n const [showInverted, setShowInverted] = useState(false);\n const theme = useContext(ThemeContext);\n const slippageAdjustedAmounts = useMemo(\n () => computeSlippageAdjustedAmounts(trade, allowedSlippage),\n [allowedSlippage, trade]\n );\n const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade]);\n const severity = warningSeverity(priceImpactWithoutFee);\n\n return (\n <>\n \n \n \n Price\n \n \n {formatExecutionPrice(trade, showInverted)}\n setShowInverted(!showInverted)}>\n \n \n \n \n\n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT ? 'Minimum received' : 'Maximum sold'}\n \n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4) ?? '-'\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4) ?? '-'}\n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n \n \n \n \n \n \n Price Impact\n \n \n \n \n \n \n \n \n Liquidity Provider Fee\n \n \n \n \n {realizedLPFee ? realizedLPFee?.toSignificant(6) + ' ' + trade.inputAmount.currency.symbol : '-'}\n \n \n \n\n \n 2}\n style={{ margin: '10px 0 0 0' }}\n id=\"confirm-swap-or-send\"\n >\n \n {severity > 2 ? 'Swap Anyway' : 'Confirm Swap'}\n \n \n\n {swapErrorMessage ? : null}\n \n \n );\n}\n","import { Trade, TradeType } from '@moonrabbit/swap-sdk';\nimport React, { useContext, useMemo } from 'react';\nimport { ArrowDown, AlertTriangle } from 'react-feather';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { Field } from '../../state/swap/actions';\nimport { TYPE } from '../../theme';\nimport { ButtonPrimary } from '../Button';\nimport { isAddress, shortenAddress } from '../../utils';\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown, warningSeverity } from '../../utils/prices';\nimport { AutoColumn } from '../Column';\nimport CurrencyLogo from '../CurrencyLogo';\nimport { RowBetween, RowFixed } from '../Row';\nimport { TruncatedText, SwapShowAcceptChanges } from './styleds';\n\nexport default function SwapModalHeader({\n trade,\n allowedSlippage,\n recipient,\n showAcceptChanges,\n onAcceptChanges,\n}: {\n trade: Trade;\n allowedSlippage: number;\n recipient: string | null;\n showAcceptChanges: boolean;\n onAcceptChanges: () => void;\n}) {\n const slippageAdjustedAmounts = useMemo(\n () => computeSlippageAdjustedAmounts(trade, allowedSlippage),\n [trade, allowedSlippage]\n );\n const { priceImpactWithoutFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade]);\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee);\n\n const theme = useContext(ThemeContext);\n\n return (\n \n \n \n \n \n {trade.inputAmount.toSignificant(6)}\n \n \n \n \n {trade.inputAmount.currency.symbol}\n \n \n \n \n \n \n \n \n \n 2\n ? theme.red1\n : showAcceptChanges && trade.tradeType === TradeType.EXACT_INPUT\n ? theme.primary1\n : ''\n }\n >\n {trade.outputAmount.toSignificant(6)}\n \n \n \n \n {trade.outputAmount.currency.symbol}\n \n \n \n {showAcceptChanges ? (\n \n \n \n \n Price Updated\n \n \n Accept\n \n \n \n ) : null}\n \n {trade.tradeType === TradeType.EXACT_INPUT ? (\n \n {`Output is estimated. You will receive at least `}\n \n {slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6)} {trade.outputAmount.currency.symbol}\n \n {' or the transaction will revert.'}\n \n ) : (\n \n {`Input is estimated. You will sell at most `}\n \n {slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6)} {trade.inputAmount.currency.symbol}\n \n {' or the transaction will revert.'}\n \n )}\n \n {recipient !== null ? (\n \n \n Output will be sent to{' '}\n {isAddress(recipient) ? shortenAddress(recipient) : recipient}\n \n \n ) : null}\n \n );\n}\n","import { currencyEquals, Trade } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useMemo } from 'react';\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from '../TransactionConfirmationModal';\nimport SwapModalFooter from './SwapModalFooter';\nimport SwapModalHeader from './SwapModalHeader';\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param tradeA trade A\n * @param tradeB trade B\n */\nfunction tradeMeaningfullyDiffers(tradeA: Trade, tradeB: Trade): boolean {\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !currencyEquals(tradeA.outputAmount.currency, tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n );\n}\n\nexport default function ConfirmSwapModal({\n trade,\n originalTrade,\n onAcceptChanges,\n allowedSlippage,\n onConfirm,\n onDismiss,\n recipient,\n swapErrorMessage,\n isOpen,\n attemptingTxn,\n txHash,\n}: {\n isOpen: boolean;\n trade: Trade | undefined;\n originalTrade: Trade | undefined;\n attemptingTxn: boolean;\n txHash: string | undefined;\n recipient: string | null;\n allowedSlippage: number;\n onAcceptChanges: () => void;\n onConfirm: () => void;\n swapErrorMessage: string | undefined;\n onDismiss: () => void;\n}) {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade]\n );\n\n const modalHeader = useCallback(() => {\n return trade ? (\n \n ) : null;\n }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade]);\n\n const modalBottom = useCallback(() => {\n return trade ? (\n \n ) : null;\n }, [allowedSlippage, onConfirm, showAcceptChanges, swapErrorMessage, trade]);\n\n // text to show while loading\n const pendingText = `Swapping ${trade?.inputAmount?.toSignificant(6)} ${\n trade?.inputAmount?.currency?.symbol\n } for ${trade?.outputAmount?.toSignificant(6)} ${trade?.outputAmount?.currency?.symbol}`;\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage]\n );\n\n return (\n \n );\n}\n","import React from 'react';\nimport { Price } from '@moonrabbit/swap-sdk';\nimport { useContext } from 'react';\nimport { Repeat } from 'react-feather';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { StyledBalanceMaxMini } from './styleds';\n\ninterface TradePriceProps {\n price?: Price;\n showInverted: boolean;\n setShowInverted: (showInverted: boolean) => void;\n}\n\nexport default function TradePrice({ price, showInverted, setShowInverted }: TradePriceProps) {\n const theme = useContext(ThemeContext);\n\n const formattedPrice = showInverted ? price?.toSignificant(6) : price?.invert()?.toSignificant(6);\n\n const show = Boolean(price?.baseCurrency && price?.quoteCurrency);\n const label = showInverted\n ? `${price?.quoteCurrency?.symbol} per ${price?.baseCurrency?.symbol}`\n : `${price?.baseCurrency?.symbol} per ${price?.quoteCurrency?.symbol}`;\n\n return (\n \n {show ? (\n <>\n {formattedPrice ?? '-'} {label}\n setShowInverted(!showInverted)}>\n \n \n \n ) : (\n '-'\n )}\n \n );\n}\n","import { Token } from '@moonrabbit/swap-sdk';\nimport React, { useCallback } from 'react';\nimport Modal from '../Modal';\nimport { ImportToken } from 'components/SearchModal/ImportToken';\n\nexport default function TokenWarningModal({\n isOpen,\n tokens,\n onConfirm,\n}: {\n isOpen: boolean;\n tokens: Token[];\n onConfirm: () => void;\n}) {\n const handleDismiss = useCallback(() => null, []);\n\n return (\n \n \n \n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { RowBetween } from '../Row';\nimport { AutoColumn } from '../Column';\nimport { transparentize } from 'polished';\n\nconst Wrapper = styled(AutoColumn)``;\n\nconst Grouping = styled(RowBetween)`\n width: 50%;\n`;\n\nconst Circle = styled.div<{ confirmed?: boolean; disabled?: boolean }>`\n min-width: 20px;\n min-height: 20px;\n background-color: ${({ theme, confirmed, disabled }) =>\n disabled ? theme.bg4 : confirmed ? theme.green1 : theme.primary1};\n border-radius: 50%;\n color: ${({ theme }) => theme.white};\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 8px;\n font-size: 12px;\n`;\n\nconst CircleRow = styled.div`\n width: calc(100% - 20px);\n display: flex;\n align-items: center;\n`;\n\nconst Connector = styled.div<{ prevConfirmed?: boolean; disabled?: boolean }>`\n width: 100%;\n height: 2px;\n background-color: ;\n background: linear-gradient(\n 90deg,\n ${({ theme, prevConfirmed, disabled }) =>\n disabled ? theme.bg4 : transparentize(0.5, prevConfirmed ? theme.green1 : theme.primary1)}\n 0%,\n ${({ theme, prevConfirmed, disabled }) => (disabled ? theme.bg4 : prevConfirmed ? theme.primary1 : theme.bg4)} 80%\n );\n opacity: 0.6;\n`;\n\ninterface ProgressCirclesProps {\n steps: boolean[];\n disabled?: boolean;\n}\n\n/**\n * Based on array of steps, create a step counter of circles.\n * A circle can be enabled, disabled, or confirmed. States are derived\n * from previous step.\n *\n * An extra circle is added to represent the ability to swap, add, or remove.\n * This step will never be marked as complete (because no 'txn done' state in body ui).\n *\n * @param steps array of booleans where true means step is complete\n */\nexport default function ProgressCircles({ steps, disabled = false, ...rest }: ProgressCirclesProps) {\n return (\n \n \n {steps.map((step, i) => {\n return (\n \n \n {step ? '✓' : i + 1}\n \n \n \n );\n })}\n {steps.length + 1}\n \n \n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Settings from '../Settings';\nimport { RowBetween } from '../Row';\nimport { TYPE } from '../../theme';\n\nconst StyledSwapHeader = styled.div`\n padding: 12px 1rem 0px 1.5rem;\n margin-bottom: 0.4rem;\n width: 100%;\n color: ${({ theme }) => theme.text2};\n`;\n\nexport default function SwapHeader() {\n return (\n \n \n Swap\n \n \n \n );\n}\n","import { Trade } from '@moonrabbit/swap-sdk';\nimport React, { Fragment, memo, useContext } from 'react';\nimport { ChevronRight } from 'react-feather';\nimport { Flex } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport { TYPE } from '../../theme';\nimport { unwrappedToken } from 'utils/wrappedCurrency';\n\nexport default memo(function SwapRoute({ trade }: { trade: Trade }) {\n const theme = useContext(ThemeContext);\n return (\n \n {trade.route.path.map((token, i, path) => {\n const isLastItem: boolean = i === path.length - 1;\n const currency = unwrappedToken(token);\n return (\n \n \n \n {currency.symbol}\n \n \n {isLastItem ? null : }\n \n );\n })}\n \n );\n});\n","import { Trade, TradeType } from '@moonrabbit/swap-sdk';\nimport React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\nimport { Field } from '../../state/swap/actions';\nimport { useUserSlippageTolerance } from '../../state/user/hooks';\nimport { TYPE } from '../../theme';\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from '../../utils/prices';\nimport { AutoColumn } from '../Column';\nimport QuestionHelper from '../QuestionHelper';\nimport { RowBetween, RowFixed } from '../Row';\nimport FormattedPriceImpact from './FormattedPriceImpact';\nimport SwapRoute from './SwapRoute';\n\nfunction TradeSummary({ trade, allowedSlippage }: { trade: Trade; allowedSlippage: number }) {\n const theme = useContext(ThemeContext);\n const { priceImpactWithoutFee, realizedLPFee } = computeTradePriceBreakdown(trade);\n const isExactIn = trade.tradeType === TradeType.EXACT_INPUT;\n const slippageAdjustedAmounts = computeSlippageAdjustedAmounts(trade, allowedSlippage);\n\n return (\n <>\n \n \n \n \n {isExactIn ? 'Minimum received' : 'Maximum sold'}\n \n \n \n \n \n {isExactIn\n ? `${slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4)} ${trade.outputAmount.currency.symbol}` ??\n '-'\n : `${slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4)} ${trade.inputAmount.currency.symbol}` ??\n '-'}\n \n \n \n \n \n \n Price Impact\n \n \n \n \n \n\n \n \n \n Liquidity Provider Fee\n \n \n \n \n {realizedLPFee ? `${realizedLPFee.toSignificant(4)} ${trade.inputAmount.currency.symbol}` : '-'}\n \n \n \n \n );\n}\n\nexport interface AdvancedSwapDetailsProps {\n trade?: Trade;\n}\n\nexport function AdvancedSwapDetails({ trade }: AdvancedSwapDetailsProps) {\n const theme = useContext(ThemeContext);\n\n const [allowedSlippage] = useUserSlippageTolerance();\n\n const showRoute = Boolean(trade && trade.route.path.length > 2);\n\n return (\n \n {trade && (\n <>\n \n {showRoute && (\n <>\n \n \n \n Route\n \n \n \n \n \n \n )}\n \n )}\n \n );\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { JSBI, Percent, Router, SwapParameters, Trade, TradeType } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport { BIPS_BASE, INITIAL_ALLOWED_SLIPPAGE } from '../constants';\nimport { useTransactionAdder } from '../state/transactions/hooks';\nimport { calculateGasMargin, getRouterContract, isAddress, shortenAddress } from '../utils';\nimport isZero from '../utils/isZero';\nimport { useActiveWeb3React } from './index';\nimport useTransactionDeadline from './useTransactionDeadline';\nimport useENS from './useENS';\n\nexport enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface SwapCall {\n contract: Contract;\n parameters: SwapParameters;\n}\n\ninterface SuccessfulCall {\n call: SwapCall;\n gasEstimate: BigNumber;\n}\n\ninterface FailedCall {\n call: SwapCall;\n error: Error;\n}\n\ntype EstimatedSwapCall = SuccessfulCall | FailedCall;\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param recipientAddressOrName\n */\nfunction useSwapCallArguments(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddressOrName: string | null // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n): SwapCall[] {\n const { account, chainId, library } = useActiveWeb3React();\n\n const { address: recipientAddress } = useENS(recipientAddressOrName);\n const recipient = recipientAddressOrName === null ? account : recipientAddress;\n const deadline = useTransactionDeadline();\n\n return useMemo(() => {\n if (!trade || !recipient || !library || !account || !chainId || !deadline) return [];\n\n const contract: Contract | null = getRouterContract(chainId, library, account);\n if (!contract) {\n return [];\n }\n\n const swapMethods = [];\n\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(JSBI.BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: deadline.toNumber(),\n })\n );\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage: new Percent(JSBI.BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n deadline: deadline.toNumber(),\n })\n );\n }\n\n return swapMethods.map((parameters) => ({ parameters, contract }));\n }, [account, allowedSlippage, chainId, deadline, library, recipient, trade]);\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n recipientAddressOrName: string | null // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n): { state: SwapCallbackState; callback: null | (() => Promise); error: string | null } {\n const { account, chainId, library } = useActiveWeb3React();\n\n const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName);\n\n const addTransaction = useTransactionAdder();\n\n const { address: recipientAddress } = useENS(recipientAddressOrName);\n const recipient = recipientAddressOrName === null ? account : recipientAddress;\n\n return useMemo(() => {\n if (!trade || !library || !account || !chainId) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Missing dependencies' };\n }\n if (!recipient) {\n if (recipientAddressOrName !== null) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Invalid recipient' };\n } else {\n return { state: SwapCallbackState.LOADING, callback: null, error: null };\n }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async function onSwap(): Promise {\n const estimatedCalls: EstimatedSwapCall[] = await Promise.all(\n swapCalls.map((call) => {\n const {\n parameters: { methodName, args, value },\n contract,\n } = call;\n const options = !value || isZero(value) ? {} : { value };\n\n return contract.estimateGas[methodName](...args, options)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n };\n })\n .catch((gasError) => {\n console.debug('Gas estimate failed, trying eth_call to extract error', call);\n\n return contract.callStatic[methodName](...args, options)\n .then((result) => {\n console.debug('Unexpected successful call after failed estimate gas', call, gasError, result);\n return { call, error: new Error('Unexpected issue with estimating the gas. Please try again.') };\n })\n .catch((callError) => {\n console.debug('Call threw error', call, callError);\n let errorMessage: string;\n switch (callError.reason) {\n case 'MoonRabbitDEXRouter: INSUFFICIENT_OUTPUT_AMOUNT':\n case 'MoonRabbitDEXRouter: EXCESSIVE_INPUT_AMOUNT':\n errorMessage =\n 'This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.';\n break;\n default:\n errorMessage = `The transaction cannot succeed due to error: ${callError.reason}. This is probably an issue with one of the tokens you are swapping.`;\n }\n return { call, error: new Error(errorMessage) };\n });\n });\n })\n );\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n const successfulEstimation = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1])\n );\n\n if (!successfulEstimation) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call);\n if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error;\n throw new Error('Unexpected error. Please contact support: none of the calls threw an error');\n }\n\n const {\n call: {\n contract,\n parameters: { methodName, args, value },\n },\n gasEstimate,\n } = successfulEstimation;\n\n return contract[methodName](...args, {\n gasLimit: calculateGasMargin(gasEstimate),\n ...(value && !isZero(value) ? { value, from: account } : { from: account }),\n })\n .then((response: any) => {\n const inputSymbol = trade.inputAmount.currency.symbol;\n const outputSymbol = trade.outputAmount.currency.symbol;\n const inputAmount = trade.inputAmount.toSignificant(3);\n const outputAmount = trade.outputAmount.toSignificant(3);\n\n const base = `Swap ${inputAmount} ${inputSymbol} for ${outputAmount} ${outputSymbol}`;\n const withRecipient =\n recipient === account\n ? base\n : `${base} to ${\n recipientAddressOrName && isAddress(recipientAddressOrName)\n ? shortenAddress(recipientAddressOrName)\n : recipientAddressOrName\n }`;\n\n addTransaction(response, {\n summary: withRecipient,\n });\n\n return response.hash;\n })\n .catch((error: any) => {\n // if the user rejected the tx, pass this along\n if (error?.code === 4001) {\n throw new Error('Transaction rejected.');\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, methodName, args, value);\n throw new Error(`Swap failed: ${error.message}`);\n }\n });\n },\n error: null,\n };\n }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction]);\n}\n","import { Currency, currencyEquals, ETHER, WETH } from '@moonrabbit/swap-sdk';\nimport { useMemo } from 'react';\nimport { tryParseAmount } from '../state/swap/hooks';\nimport { useTransactionAdder } from '../state/transactions/hooks';\nimport { useCurrencyBalance } from '../state/wallet/hooks';\nimport { useActiveWeb3React } from './index';\nimport { useWETHContract } from './useContract';\n\nexport enum WrapType {\n NOT_APPLICABLE,\n WRAP,\n UNWRAP,\n}\n\nconst NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE };\n/**\n * Given the selected input and output currency, return a wrap callback\n * @param inputCurrency the selected input currency\n * @param outputCurrency the selected output currency\n * @param typedValue the user input value\n */\nexport default function useWrapCallback(\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n typedValue: string | undefined\n): { wrapType: WrapType; execute?: undefined | (() => Promise); inputError?: string } {\n const { chainId, account } = useActiveWeb3React();\n const wethContract = useWETHContract();\n const balance = useCurrencyBalance(account ?? undefined, inputCurrency);\n // we can always parse the amount typed as the input currency, since wrapping is 1:1\n const inputAmount = useMemo(() => tryParseAmount(typedValue, inputCurrency), [inputCurrency, typedValue]);\n const addTransaction = useTransactionAdder();\n\n return useMemo(() => {\n if (!wethContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE;\n\n const sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount);\n\n if (inputCurrency === ETHER && currencyEquals(WETH[chainId], outputCurrency)) {\n return {\n wrapType: WrapType.WRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.deposit({ value: `0x${inputAmount.raw.toString(16)}` });\n addTransaction(txReceipt, { summary: `Wrap ${inputAmount.toSignificant(6)} AAA to WAAA` });\n } catch (error) {\n console.error('Could not deposit', error);\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : 'Insufficient AAA balance',\n };\n } else if (currencyEquals(WETH[chainId], inputCurrency) && outputCurrency === ETHER) {\n return {\n wrapType: WrapType.UNWRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.withdraw(`0x${inputAmount.raw.toString(16)}`);\n addTransaction(txReceipt, { summary: `Unwrap ${inputAmount.toSignificant(6)} WAAA to AAA` });\n } catch (error) {\n console.error('Could not withdraw', error);\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : 'Insufficient WAAA balance',\n };\n } else {\n return NOT_APPLICABLE;\n }\n }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction]);\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { useLastTruthy } from '../../hooks/useLast';\nimport { AdvancedSwapDetails, AdvancedSwapDetailsProps } from './AdvancedSwapDetails';\n\nconst AdvancedDetailsFooter = styled.div<{ show: boolean }>`\n padding-top: calc(8px + 2rem);\n padding-bottom: 16px;\n margin-top: -2rem;\n width: 100%;\n max-width: 500px;\n border-radius: 0 0 1.2rem 1.2rem;\n color: ${({ theme }) => theme.text2};\n background-color: ${({ theme }) => theme.advancedBG};\n z-index: -1;\n\n transform: ${({ show }) => (show ? 'translateY(0%)' : 'translateY(-100%)')};\n transition: transform 300ms ease-in-out;\n`;\n\nexport default function AdvancedSwapDetailsDropdown({ trade, ...rest }: AdvancedSwapDetailsProps) {\n const lastTrade = useLastTruthy(trade);\n\n return (\n \n \n \n );\n}\n","import { CurrencyAmount, JSBI, Token, Trade } from '@moonrabbit/swap-sdk';\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { ArrowDown } from 'react-feather';\nimport { Text } from 'rebass';\nimport { ThemeContext } from 'styled-components';\nimport AddressInputPanel from '../../components/AddressInputPanel';\nimport { ButtonError, ButtonPrimary, ButtonConfirmed } from '../../components/Button';\nimport Card, { GreyCard } from '../../components/Card';\nimport Column, { AutoColumn } from '../../components/Column';\nimport ConfirmSwapModal from '../../components/swap/ConfirmSwapModal';\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel';\nimport { SwapPoolTabs } from '../../components/NavigationTabs';\nimport { AutoRow, RowBetween } from '../../components/Row';\nimport confirmPriceImpactWithoutFee from '../../components/swap/confirmPriceImpactWithoutFee';\nimport { ArrowWrapper, BottomGrouping, SwapCallbackError, Wrapper } from '../../components/swap/styleds';\nimport TradePrice from '../../components/swap/TradePrice';\nimport TokenWarningModal from '../../components/TokenWarningModal';\nimport ProgressSteps from '../../components/ProgressSteps';\nimport SwapHeader from '../../components/swap/SwapHeader';\nimport AdvancedSwapDetailsDropdown from '../../components/swap/AdvancedSwapDetailsDropdown';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useCurrency, useAllTokens } from '../../hooks/Tokens';\nimport { ApprovalState, useApproveCallbackFromTrade } from '../../hooks/useApproveCallback';\nimport { useSwapCallback } from '../../hooks/useSwapCallback';\nimport useWrapCallback, { WrapType } from '../../hooks/useWrapCallback';\nimport { useToggleSettingsMenu, useWalletModalToggle } from '../../state/application/hooks';\nimport { Field } from '../../state/swap/actions';\nimport {\n useDefaultsFromURLSearch,\n useDerivedSwapInfo,\n useSwapActionHandlers,\n useSwapState,\n} from '../../state/swap/hooks';\nimport { useExpertModeManager, useUserSlippageTolerance, useUserSingleHopOnly } from '../../state/user/hooks';\nimport { LinkStyledButton, TYPE } from '../../theme';\nimport { maxAmountSpend } from '../../utils/maxAmountSpend';\nimport { computeTradePriceBreakdown, warningSeverity } from '../../utils/prices';\nimport AppBody from '../AppBody';\nimport { ClickableText } from '../Pool/styleds';\nimport Loader from '../../components/Loader';\n\nexport default function Swap() {\n const loadedUrlParams = useDefaultsFromURLSearch();\n\n // token warning stuff\n const [loadedInputCurrency, loadedOutputCurrency] = [\n useCurrency(loadedUrlParams?.inputCurrencyId),\n useCurrency(loadedUrlParams?.outputCurrencyId),\n ];\n const [dismissTokenWarning, setDismissTokenWarning] = useState(false);\n const urlLoadedTokens: Token[] = useMemo(\n () => [loadedInputCurrency, loadedOutputCurrency]?.filter((c): c is Token => c instanceof Token) ?? [],\n [loadedInputCurrency, loadedOutputCurrency]\n );\n const handleConfirmTokenWarning = useCallback(() => {\n setDismissTokenWarning(true);\n }, []);\n\n // dismiss warning if all imported tokens are in active lists\n const defaultTokens = useAllTokens();\n const importTokensNotInDefault =\n urlLoadedTokens &&\n urlLoadedTokens.filter((token: Token) => {\n return !Boolean(token.address in defaultTokens);\n });\n\n const { account } = useActiveWeb3React();\n const theme = useContext(ThemeContext);\n\n // toggle wallet when disconnected\n const toggleWalletModal = useWalletModalToggle();\n\n // for expert mode\n const toggleSettings = useToggleSettingsMenu();\n const [isExpertMode] = useExpertModeManager();\n\n // get custom setting values for user\n const [allowedSlippage] = useUserSlippageTolerance();\n\n // swap state\n const { independentField, typedValue, recipient } = useSwapState();\n const { v2Trade, currencyBalances, parsedAmount, currencies, inputError: swapInputError } = useDerivedSwapInfo();\n const {\n wrapType,\n execute: onWrap,\n inputError: wrapInputError,\n } = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue);\n\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE;\n const trade = showWrap ? undefined : v2Trade;\n\n const parsedAmounts = showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n };\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers();\n const isValid = !swapInputError;\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT;\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value);\n },\n [onUserInput]\n );\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value);\n },\n [onUserInput]\n );\n\n // modal and loading\n const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n showConfirm: boolean;\n tradeToConfirm: Trade | undefined;\n attemptingTxn: boolean;\n swapErrorMessage: string | undefined;\n txHash: string | undefined;\n }>({\n showConfirm: false,\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n });\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n };\n\n const route = trade?.route;\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(JSBI.BigInt(0))\n );\n const noRoute = !route;\n\n // check whether the user has approved the router on the input token\n const [approval, approveCallback] = useApproveCallbackFromTrade(trade, allowedSlippage);\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState(false);\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approval === ApprovalState.PENDING) {\n setApprovalSubmitted(true);\n }\n }, [approval, approvalSubmitted]);\n\n const maxAmountInput: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT]);\n const atMaxAmountInput = Boolean(maxAmountInput && parsedAmounts[Field.INPUT]?.equalTo(maxAmountInput));\n\n // the callback to execute the swap\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback(trade, allowedSlippage, recipient);\n\n const { priceImpactWithoutFee } = computeTradePriceBreakdown(trade);\n\n const [singleHopOnly] = useUserSingleHopOnly();\n\n const handleSwap = useCallback(() => {\n if (priceImpactWithoutFee && !confirmPriceImpactWithoutFee(priceImpactWithoutFee)) {\n return;\n }\n if (!swapCallback) {\n return;\n }\n setSwapState({ attemptingTxn: true, tradeToConfirm, showConfirm, swapErrorMessage: undefined, txHash: undefined });\n swapCallback()\n .then((hash) => {\n setSwapState({ attemptingTxn: false, tradeToConfirm, showConfirm, swapErrorMessage: undefined, txHash: hash });\n })\n .catch((error) => {\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n showConfirm,\n swapErrorMessage: error.message,\n txHash: undefined,\n });\n });\n }, [priceImpactWithoutFee, swapCallback, tradeToConfirm, showConfirm]);\n\n // errors\n const [showInverted, setShowInverted] = useState(false);\n\n // warnings on slippage\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee);\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !swapInputError &&\n (approval === ApprovalState.NOT_APPROVED ||\n approval === ApprovalState.PENDING ||\n (approvalSubmitted && approval === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode);\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState({ showConfirm: false, tradeToConfirm, attemptingTxn, swapErrorMessage, txHash });\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '');\n }\n }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash]);\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState({ tradeToConfirm: trade, swapErrorMessage, txHash, attemptingTxn, showConfirm });\n }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash]);\n\n const handleInputSelect = useCallback(\n (inputCurrency) => {\n setApprovalSubmitted(false); // reset 2 step UI for approvals\n onCurrencySelection(Field.INPUT, inputCurrency);\n },\n [onCurrencySelection]\n );\n\n const handleMaxInput = useCallback(() => {\n maxAmountInput && onUserInput(Field.INPUT, maxAmountInput.toExact());\n }, [maxAmountInput, onUserInput]);\n\n const handleOutputSelect = useCallback(\n (outputCurrency) => onCurrencySelection(Field.OUTPUT, outputCurrency),\n [onCurrencySelection]\n );\n\n return (\n <>\n 0 && !dismissTokenWarning}\n tokens={importTokensNotInDefault}\n onConfirm={handleConfirmTokenWarning}\n />\n \n \n \n \n \n\n \n \n \n \n \n {\n setApprovalSubmitted(false); // reset 2 step UI for approvals\n onSwitchTokens();\n }}\n color={currencies[Field.INPUT] && currencies[Field.OUTPUT] ? theme.primary1 : theme.text2}\n />\n \n {recipient === null && !showWrap && isExpertMode ? (\n onChangeRecipient('')}>\n + Add a send (optional)\n \n ) : null}\n \n \n \n\n {recipient !== null && !showWrap ? (\n <>\n \n \n \n \n onChangeRecipient(null)}>\n - Remove send\n \n \n \n \n ) : null}\n\n {showWrap ? null : (\n \n \n {Boolean(trade) && (\n \n \n Price\n \n \n \n )}\n \n \n Slippage Tolerance\n \n \n {allowedSlippage / 100}%\n \n \n \n \n )}\n \n\n \n {!account ? (\n Connect Wallet\n ) : showWrap ? (\n \n {wrapInputError ??\n (wrapType === WrapType.WRAP ? 'Wrap' : wrapType === WrapType.UNWRAP ? 'Unwrap' : null)}\n \n ) : noRoute && userHasSpecifiedInputOutput ? (\n \n Insufficient liquidity for this trade.\n {singleHopOnly && Try enabling multi-hop trades.}\n \n ) : showApproveFlow ? (\n \n \n {approval === ApprovalState.PENDING ? (\n \n Approving \n \n ) : approvalSubmitted && approval === ApprovalState.APPROVED ? (\n 'Approved'\n ) : (\n 'Approve ' + currencies[Field.INPUT]?.symbol\n )}\n \n {\n if (isExpertMode) {\n handleSwap();\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n });\n }\n }}\n width=\"48%\"\n id=\"swap-button\"\n disabled={\n !isValid || approval !== ApprovalState.APPROVED || (priceImpactSeverity > 3 && !isExpertMode)\n }\n error={isValid && priceImpactSeverity > 2}\n >\n \n {priceImpactSeverity > 3 && !isExpertMode\n ? `Price Impact High`\n : `Swap${priceImpactSeverity > 2 ? ' Anyway' : ''}`}\n \n \n \n ) : (\n {\n if (isExpertMode) {\n handleSwap();\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n });\n }\n }}\n id=\"swap-button\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n error={isValid && priceImpactSeverity > 2 && !swapCallbackError}\n >\n \n {swapInputError\n ? swapInputError\n : priceImpactSeverity > 3 && !isExpertMode\n ? `Price Impact Too High`\n : `Swap${priceImpactSeverity > 2 ? ' Anyway' : ''}`}\n \n \n )}\n {showApproveFlow && (\n \n \n \n )}\n {isExpertMode && swapErrorMessage ? : null}\n \n \n\n {trade && }\n \n \n );\n}\n","import { Percent } from '@moonrabbit/swap-sdk';\nimport { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from '../../constants';\n\n/**\n * Given the price impact, get user confirmation.\n *\n * @param priceImpactWithoutFee price impact of the trade without the fee.\n */\nexport default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean {\n if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) {\n return (\n window.prompt(\n `This swap has a price impact of at least ${PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(\n 0\n )}%. Please type the word \"confirm\" to continue with this swap.`\n ) === 'confirm'\n );\n } else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) {\n return window.confirm(\n `This swap has a price impact of at least ${ALLOWED_PRICE_IMPACT_HIGH.toFixed(\n 0\n )}%. Please confirm that you would like to continue with this swap.`\n );\n }\n return true;\n}\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Redirect, RouteComponentProps } from 'react-router-dom';\nimport { AppDispatch } from '../../state';\nimport { ApplicationModal, setOpenModal } from '../../state/application/actions';\n\n// Redirects to swap but only replace the pathname\nexport function RedirectPathToSwapOnly({ location }: RouteComponentProps) {\n return ;\n}\n\n// Redirects from the /swap/:outputCurrency path to the /swap?outputCurrency=:outputCurrency format\nexport function RedirectToSwap(props: RouteComponentProps<{ outputCurrency: string }>) {\n const {\n location: { search },\n match: {\n params: { outputCurrency },\n },\n } = props;\n\n return (\n 1\n ? `${search}&outputCurrency=${outputCurrency}`\n : `?outputCurrency=${outputCurrency}`,\n }}\n />\n );\n}\n\nexport function OpenClaimAddressModalAndRedirectToSwap(props: RouteComponentProps) {\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(setOpenModal(ApplicationModal.ADDRESS_CLAIM));\n }, [dispatch]);\n return ;\n}\n","import React, { Suspense } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport Header from '../components/Header';\nimport Polling from '../components/Header/Polling';\nimport Popups from '../components/Popups';\nimport TermsModal from '../components/TermsModal';\nimport Web3ReactManager from '../components/Web3ReactManager';\nimport DarkModeQueryParamReader from '../theme/DarkModeQueryParamReader';\nimport AddLiquidity from './AddLiquidity';\nimport {\n RedirectDuplicateTokenIds,\n RedirectOldAddLiquidityPathStructure,\n RedirectToAddLiquidity,\n} from './AddLiquidity/redirects';\nimport Pool from './Pool';\nimport PoolFinder from './PoolFinder';\nimport RemoveLiquidity from './RemoveLiquidity';\nimport { RedirectOldRemoveLiquidityPathStructure } from './RemoveLiquidity/redirects';\nimport Swap from './Swap';\nimport { OpenClaimAddressModalAndRedirectToSwap, RedirectPathToSwapOnly } from './Swap/redirects';\n\nconst AppWrapper = styled.div`\n min-height: 100vh;\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: flex-start;\n overflow-x: hidden;\n`;\n\nconst HeaderWrapper = styled.div`\n ${({ theme }) => theme.flexRowNoWrap}\n width: 100%;\n justify-content: space-between;\n`;\n\nconst BodyWrapper = styled.div`\n width: 100%;\n padding: 3rem 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n overflow-y: auto;\n overflow-x: hidden;\n z-index: 1;\n`;\n\nexport default function App() {\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 \n \n \n \n \n );\n}\n","import { createReducer, nanoid } from '@reduxjs/toolkit';\nimport { addPopup, PopupContent, removePopup, updateBlockNumber, ApplicationModal, setOpenModal } from './actions';\n\ntype PopupList = Array<{ key: string; show: boolean; content: PopupContent; removeAfterMs: number | null }>;\n\nexport interface ApplicationState {\n readonly blockNumber: { readonly [chainId: number]: number };\n readonly popupList: PopupList;\n readonly openModal: ApplicationModal | null;\n}\n\nconst initialState: ApplicationState = {\n blockNumber: {},\n popupList: [],\n openModal: null,\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(updateBlockNumber, (state, action) => {\n const { chainId, blockNumber } = action.payload;\n if (typeof state.blockNumber[chainId] !== 'number') {\n state.blockNumber[chainId] = blockNumber;\n } else {\n state.blockNumber[chainId] = Math.max(blockNumber, state.blockNumber[chainId]);\n }\n })\n .addCase(setOpenModal, (state, action) => {\n state.openModal = action.payload;\n })\n .addCase(addPopup, (state, { payload: { content, key, removeAfterMs = 15000 } }) => {\n state.popupList = (key ? state.popupList.filter((popup) => popup.key !== key) : state.popupList).concat([\n {\n key: key || nanoid(),\n show: true,\n content,\n removeAfterMs,\n },\n ]);\n })\n .addCase(removePopup, (state, { payload: { key } }) => {\n state.popupList.forEach((p) => {\n if (p.key === key) {\n p.show = false;\n }\n });\n })\n);\n","import { createAction } from '@reduxjs/toolkit';\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction('global/updateVersion');\n","import { INITIAL_ALLOWED_SLIPPAGE, DEFAULT_DEADLINE_FROM_NOW } from '../../constants';\nimport { createReducer } from '@reduxjs/toolkit';\nimport { updateVersion } from '../global/actions';\nimport {\n addSerializedPair,\n addSerializedToken,\n removeSerializedPair,\n removeSerializedToken,\n SerializedPair,\n SerializedToken,\n updateMatchesDarkMode,\n updateUserDarkMode,\n updateUserExpertMode,\n updateUserSlippageTolerance,\n updateUserDeadline,\n toggleURLWarning,\n updateUserSingleHopOnly,\n} from './actions';\n\nconst currentTimestamp = () => new Date().getTime();\n\nexport interface UserState {\n // the timestamp of the last updateVersion action\n lastUpdateVersionTimestamp?: number;\n\n userDarkMode: boolean | null; // the user's choice for dark mode or light mode\n matchesDarkMode: boolean; // whether the dark mode media query matches\n\n userExpertMode: boolean;\n\n userSingleHopOnly: boolean; // only allow swaps on direct pairs\n\n // user defined slippage tolerance in bips, used in all txns\n userSlippageTolerance: number;\n\n // deadline set by user in minutes, used in all txns\n userDeadline: number;\n\n tokens: {\n [chainId: number]: {\n [address: string]: SerializedToken;\n };\n };\n\n pairs: {\n [chainId: number]: {\n // keyed by token0Address:token1Address\n [key: string]: SerializedPair;\n };\n };\n\n timestamp: number;\n URLWarningVisible: boolean;\n}\n\nfunction pairKey(token0Address: string, token1Address: string) {\n return `${token0Address};${token1Address}`;\n}\n\nexport const initialState: UserState = {\n userDarkMode: null,\n matchesDarkMode: false,\n userExpertMode: false,\n userSingleHopOnly: false,\n userSlippageTolerance: INITIAL_ALLOWED_SLIPPAGE,\n userDeadline: DEFAULT_DEADLINE_FROM_NOW,\n tokens: {},\n pairs: {},\n timestamp: currentTimestamp(),\n URLWarningVisible: true,\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(updateVersion, (state) => {\n // slippage isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userSlippageTolerance !== 'number') {\n state.userSlippageTolerance = INITIAL_ALLOWED_SLIPPAGE;\n }\n\n // deadline isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userDeadline !== 'number') {\n state.userDeadline = DEFAULT_DEADLINE_FROM_NOW;\n }\n\n state.lastUpdateVersionTimestamp = currentTimestamp();\n })\n .addCase(updateUserDarkMode, (state, action) => {\n state.userDarkMode = action.payload.userDarkMode;\n state.timestamp = currentTimestamp();\n })\n .addCase(updateMatchesDarkMode, (state, action) => {\n state.matchesDarkMode = action.payload.matchesDarkMode;\n state.timestamp = currentTimestamp();\n })\n .addCase(updateUserExpertMode, (state, action) => {\n state.userExpertMode = action.payload.userExpertMode;\n state.timestamp = currentTimestamp();\n })\n .addCase(updateUserSlippageTolerance, (state, action) => {\n state.userSlippageTolerance = action.payload.userSlippageTolerance;\n state.timestamp = currentTimestamp();\n })\n .addCase(updateUserDeadline, (state, action) => {\n state.userDeadline = action.payload.userDeadline;\n state.timestamp = currentTimestamp();\n })\n .addCase(updateUserSingleHopOnly, (state, action) => {\n state.userSingleHopOnly = action.payload.userSingleHopOnly;\n })\n .addCase(addSerializedToken, (state, { payload: { serializedToken } }) => {\n state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {};\n state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken;\n state.timestamp = currentTimestamp();\n })\n .addCase(removeSerializedToken, (state, { payload: { address, chainId } }) => {\n state.tokens[chainId] = state.tokens[chainId] || {};\n delete state.tokens[chainId][address];\n state.timestamp = currentTimestamp();\n })\n .addCase(addSerializedPair, (state, { payload: { serializedPair } }) => {\n if (\n serializedPair.token0.chainId === serializedPair.token1.chainId &&\n serializedPair.token0.address !== serializedPair.token1.address\n ) {\n const chainId = serializedPair.token0.chainId;\n state.pairs[chainId] = state.pairs[chainId] || {};\n state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair;\n }\n state.timestamp = currentTimestamp();\n })\n .addCase(removeSerializedPair, (state, { payload: { chainId, tokenAAddress, tokenBAddress } }) => {\n if (state.pairs[chainId]) {\n // just delete both keys if either exists\n delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)];\n delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)];\n }\n state.timestamp = currentTimestamp();\n })\n .addCase(toggleURLWarning, (state) => {\n state.URLWarningVisible = !state.URLWarningVisible;\n })\n);\n","import { createReducer } from '@reduxjs/toolkit';\nimport {\n addTransaction,\n checkedTransaction,\n clearAllTransactions,\n finalizeTransaction,\n SerializableTransactionReceipt,\n} from './actions';\n\nconst now = () => new Date().getTime();\n\nexport interface TransactionDetails {\n hash: string;\n approval?: { tokenAddress: string; spender: string };\n summary?: string;\n claim?: { recipient: string };\n receipt?: SerializableTransactionReceipt;\n lastCheckedBlockNumber?: number;\n addedTime: number;\n confirmedTime?: number;\n from: string;\n}\n\nexport interface TransactionState {\n [chainId: number]: {\n [txHash: string]: TransactionDetails;\n };\n}\n\nexport const initialState: TransactionState = {};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(addTransaction, (transactions, { payload: { chainId, from, hash, approval, summary, claim } }) => {\n if (transactions[chainId]?.[hash]) {\n throw Error('Attempted to add existing transaction.');\n }\n const txs = transactions[chainId] ?? {};\n txs[hash] = { hash, approval, summary, claim, from, addedTime: now() };\n transactions[chainId] = txs;\n })\n .addCase(clearAllTransactions, (transactions, { payload: { chainId } }) => {\n if (!transactions[chainId]) return;\n transactions[chainId] = {};\n })\n .addCase(checkedTransaction, (transactions, { payload: { chainId, hash, blockNumber } }) => {\n const tx = transactions[chainId]?.[hash];\n if (!tx) {\n return;\n }\n if (!tx.lastCheckedBlockNumber) {\n tx.lastCheckedBlockNumber = blockNumber;\n } else {\n tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber);\n }\n })\n .addCase(finalizeTransaction, (transactions, { payload: { hash, chainId, receipt } }) => {\n const tx = transactions[chainId]?.[hash];\n if (!tx) {\n return;\n }\n tx.receipt = receipt;\n tx.confirmedTime = now();\n })\n);\n","import { createReducer } from '@reduxjs/toolkit';\nimport { Field, replaceSwapState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions';\n\nexport interface SwapState {\n readonly independentField: Field;\n readonly typedValue: string;\n readonly [Field.INPUT]: {\n readonly currencyId: string | undefined;\n };\n readonly [Field.OUTPUT]: {\n readonly currencyId: string | undefined;\n };\n // the typed recipient address or ENS name, or null if swap should go to sender\n readonly recipient: string | null;\n}\n\nconst initialState: SwapState = {\n independentField: Field.INPUT,\n typedValue: '',\n [Field.INPUT]: {\n currencyId: '',\n },\n [Field.OUTPUT]: {\n currencyId: '',\n },\n recipient: null,\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(\n replaceSwapState,\n (state, { payload: { typedValue, recipient, field, inputCurrencyId, outputCurrencyId } }) => {\n return {\n [Field.INPUT]: {\n currencyId: inputCurrencyId,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrencyId,\n },\n independentField: field,\n typedValue: typedValue,\n recipient,\n };\n }\n )\n .addCase(selectCurrency, (state, { payload: { currencyId, field } }) => {\n const otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT;\n if (currencyId === state[otherField].currencyId) {\n // the case where we have to swap the order\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [field]: { currencyId: currencyId },\n [otherField]: { currencyId: state[field].currencyId },\n };\n } else {\n // the normal case\n return {\n ...state,\n [field]: { currencyId: currencyId },\n };\n }\n })\n .addCase(switchCurrencies, (state) => {\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [Field.INPUT]: { currencyId: state[Field.OUTPUT].currencyId },\n [Field.OUTPUT]: { currencyId: state[Field.INPUT].currencyId },\n };\n })\n .addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue,\n };\n })\n .addCase(setRecipient, (state, { payload: { recipient } }) => {\n state.recipient = recipient;\n })\n);\n","import { createReducer } from '@reduxjs/toolkit';\nimport { Field, resetMintState, typeInput } from './actions';\n\nexport interface MintState {\n readonly independentField: Field;\n readonly typedValue: string;\n readonly otherTypedValue: string; // for the case when there's no liquidity\n}\n\nconst initialState: MintState = {\n independentField: Field.CURRENCY_A,\n typedValue: '',\n otherTypedValue: '',\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(resetMintState, () => initialState)\n .addCase(typeInput, (state, { payload: { field, typedValue, noLiquidity } }) => {\n if (noLiquidity) {\n // they're typing into the field they've last typed in\n if (field === state.independentField) {\n return {\n ...state,\n independentField: field,\n typedValue,\n };\n }\n // they're typing into a new field, store the other value\n else {\n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: state.typedValue,\n };\n }\n } else {\n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: '',\n };\n }\n })\n);\n","import { DEFAULT_ACTIVE_LIST_URLS } from './../../constants/lists';\nimport { createReducer } from '@reduxjs/toolkit';\nimport { getVersionUpgrade, VersionUpgrade } from '@uniswap/token-lists';\nimport { TokenList } from '@uniswap/token-lists/dist/types';\nimport { DEFAULT_LIST_OF_LISTS } from '../../constants/lists';\nimport { updateVersion } from '../global/actions';\nimport { acceptListUpdate, addList, fetchTokenList, removeList, enableList, disableList } from './actions';\n\nexport interface ListsState {\n readonly byUrl: {\n readonly [url: string]: {\n readonly current: TokenList | null;\n readonly pendingUpdate: TokenList | null;\n readonly loadingRequestId: string | null;\n readonly error: string | null;\n };\n };\n // this contains the default list of lists from the last time the updateVersion was called, i.e. the app was reloaded\n readonly lastInitializedDefaultListOfLists?: string[];\n\n // currently active lists\n readonly activeListUrls: string[] | undefined;\n}\n\ntype ListState = ListsState['byUrl'][string];\n\nconst NEW_LIST_STATE: ListState = {\n error: null,\n current: null,\n loadingRequestId: null,\n pendingUpdate: null,\n};\n\ntype Mutable = { -readonly [P in keyof T]: T[P] extends ReadonlyArray ? U[] : T[P] };\n\nconst initialState: ListsState = {\n lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS,\n byUrl: {\n ...DEFAULT_LIST_OF_LISTS.reduce>((memo, listUrl) => {\n memo[listUrl] = NEW_LIST_STATE;\n return memo;\n }, {}),\n },\n activeListUrls: DEFAULT_ACTIVE_LIST_URLS,\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(fetchTokenList.pending, (state, { payload: { requestId, url } }) => {\n state.byUrl[url] = {\n current: null,\n pendingUpdate: null,\n ...state.byUrl[url],\n loadingRequestId: requestId,\n error: null,\n };\n })\n .addCase(fetchTokenList.fulfilled, (state, { payload: { requestId, tokenList, url } }) => {\n const current = state.byUrl[url]?.current;\n const loadingRequestId = state.byUrl[url]?.loadingRequestId;\n\n // no-op if update does nothing\n if (current) {\n const upgradeType = getVersionUpgrade(current.version, tokenList.version);\n\n if (upgradeType === VersionUpgrade.NONE) return;\n if (loadingRequestId === null || loadingRequestId === requestId) {\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: null,\n current: current,\n pendingUpdate: tokenList,\n };\n }\n } else {\n // activate if on default active\n if (DEFAULT_ACTIVE_LIST_URLS.includes(url)) {\n state.activeListUrls?.push(url);\n }\n\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: null,\n current: tokenList,\n pendingUpdate: null,\n };\n }\n })\n .addCase(fetchTokenList.rejected, (state, { payload: { url, requestId, errorMessage } }) => {\n if (state.byUrl[url]?.loadingRequestId !== requestId) {\n // no-op since it's not the latest request\n return;\n }\n\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: errorMessage,\n current: null,\n pendingUpdate: null,\n };\n })\n .addCase(addList, (state, { payload: url }) => {\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE;\n }\n })\n .addCase(removeList, (state, { payload: url }) => {\n if (state.byUrl[url]) {\n delete state.byUrl[url];\n }\n // remove list from active urls if needed\n if (state.activeListUrls && state.activeListUrls.includes(url)) {\n state.activeListUrls = state.activeListUrls.filter((u) => u !== url);\n }\n })\n .addCase(enableList, (state, { payload: url }) => {\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE;\n }\n\n if (state.activeListUrls && !state.activeListUrls.includes(url)) {\n state.activeListUrls.push(url);\n }\n\n if (!state.activeListUrls) {\n state.activeListUrls = [url];\n }\n })\n .addCase(disableList, (state, { payload: url }) => {\n if (state.activeListUrls && state.activeListUrls.includes(url)) {\n state.activeListUrls = state.activeListUrls.filter((u) => u !== url);\n }\n })\n .addCase(acceptListUpdate, (state, { payload: url }) => {\n if (!state.byUrl[url]?.pendingUpdate) {\n throw new Error('accept list update called without pending update');\n }\n state.byUrl[url] = {\n ...state.byUrl[url],\n pendingUpdate: null,\n current: state.byUrl[url].pendingUpdate,\n };\n })\n .addCase(updateVersion, (state) => {\n // state loaded from localStorage, but new lists have never been initialized\n if (!state.lastInitializedDefaultListOfLists) {\n state.byUrl = initialState.byUrl;\n state.activeListUrls = initialState.activeListUrls;\n } else if (state.lastInitializedDefaultListOfLists) {\n const lastInitializedSet = state.lastInitializedDefaultListOfLists.reduce>(\n (s, l) => s.add(l),\n new Set()\n );\n const newListOfListsSet = DEFAULT_LIST_OF_LISTS.reduce>((s, l) => s.add(l), new Set());\n\n DEFAULT_LIST_OF_LISTS.forEach((listUrl) => {\n if (!lastInitializedSet.has(listUrl)) {\n state.byUrl[listUrl] = NEW_LIST_STATE;\n }\n });\n\n state.lastInitializedDefaultListOfLists.forEach((listUrl) => {\n if (!newListOfListsSet.has(listUrl)) {\n delete state.byUrl[listUrl];\n }\n });\n }\n\n state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS;\n\n // if no active lists, activate defaults\n if (!state.activeListUrls) {\n state.activeListUrls = DEFAULT_ACTIVE_LIST_URLS;\n\n // for each list on default list, initialize if needed\n DEFAULT_ACTIVE_LIST_URLS.map((listUrl: string) => {\n if (!state.byUrl[listUrl]) {\n state.byUrl[listUrl] = NEW_LIST_STATE;\n }\n return true;\n });\n }\n })\n);\n","import { createReducer } from '@reduxjs/toolkit';\nimport { Field, typeInput } from './actions';\n\nexport interface BurnState {\n readonly independentField: Field;\n readonly typedValue: string;\n}\n\nconst initialState: BurnState = {\n independentField: Field.LIQUIDITY_PERCENT,\n typedValue: '0',\n};\n\nexport default createReducer(initialState, (builder) =>\n builder.addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue,\n };\n })\n);\n","import { createReducer } from '@reduxjs/toolkit';\nimport {\n addMulticallListeners,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n removeMulticallListeners,\n toCallKey,\n updateMulticallResults,\n} from './actions';\n\nexport interface MulticallState {\n callListeners?: {\n // on a per-chain basis\n [chainId: number]: {\n // stores for each call key the listeners' preferences\n [callKey: string]: {\n // stores how many listeners there are per each blocks per fetch preference\n [blocksPerFetch: number]: number;\n };\n };\n };\n\n callResults: {\n [chainId: number]: {\n [callKey: string]: {\n data?: string | null;\n blockNumber?: number;\n fetchingBlockNumber?: number;\n };\n };\n };\n}\n\nconst initialState: MulticallState = {\n callResults: {},\n};\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(addMulticallListeners, (state, { payload: { calls, chainId, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {});\n listeners[chainId] = listeners[chainId] ?? {};\n calls.forEach((call) => {\n const callKey = toCallKey(call);\n listeners[chainId][callKey] = listeners[chainId][callKey] ?? {};\n listeners[chainId][callKey][blocksPerFetch] = (listeners[chainId][callKey][blocksPerFetch] ?? 0) + 1;\n });\n })\n .addCase(\n removeMulticallListeners,\n (state, { payload: { chainId, calls, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {});\n\n if (!listeners[chainId]) return;\n calls.forEach((call) => {\n const callKey = toCallKey(call);\n if (!listeners[chainId][callKey]) return;\n if (!listeners[chainId][callKey][blocksPerFetch]) return;\n\n if (listeners[chainId][callKey][blocksPerFetch] === 1) {\n delete listeners[chainId][callKey][blocksPerFetch];\n } else {\n listeners[chainId][callKey][blocksPerFetch]--;\n }\n });\n }\n )\n .addCase(fetchingMulticallResults, (state, { payload: { chainId, fetchingBlockNumber, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {};\n calls.forEach((call) => {\n const callKey = toCallKey(call);\n const current = state.callResults[chainId][callKey];\n if (!current) {\n state.callResults[chainId][callKey] = {\n fetchingBlockNumber,\n };\n } else {\n if ((current.fetchingBlockNumber ?? 0) >= fetchingBlockNumber) return;\n state.callResults[chainId][callKey].fetchingBlockNumber = fetchingBlockNumber;\n }\n });\n })\n .addCase(errorFetchingMulticallResults, (state, { payload: { fetchingBlockNumber, chainId, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {};\n calls.forEach((call) => {\n const callKey = toCallKey(call);\n const current = state.callResults[chainId][callKey];\n if (!current) return; // only should be dispatched if we are already fetching\n if (current.fetchingBlockNumber === fetchingBlockNumber) {\n delete current.fetchingBlockNumber;\n current.data = null;\n current.blockNumber = fetchingBlockNumber;\n }\n });\n })\n .addCase(updateMulticallResults, (state, { payload: { chainId, results, blockNumber } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {};\n Object.keys(results).forEach((callKey) => {\n const current = state.callResults[chainId][callKey];\n if ((current?.blockNumber ?? 0) > blockNumber) return;\n state.callResults[chainId][callKey] = {\n data: results[callKey],\n blockNumber,\n };\n });\n })\n);\n","import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';\nimport { save, load } from 'redux-localstorage-simple';\n\nimport application from './application/reducer';\nimport { updateVersion } from './global/actions';\nimport user from './user/reducer';\nimport transactions from './transactions/reducer';\nimport swap from './swap/reducer';\nimport mint from './mint/reducer';\nimport lists from './lists/reducer';\nimport burn from './burn/reducer';\nimport multicall from './multicall/reducer';\n\nconst PERSISTED_KEYS: string[] = ['user', 'transactions', 'lists'];\n\nconst store = configureStore({\n reducer: {\n application,\n user,\n transactions,\n swap,\n mint,\n burn,\n multicall,\n lists,\n },\n middleware: [\n ...getDefaultMiddleware({ immutableCheck: false, thunk: false, serializableCheck: false }),\n save({ states: PERSISTED_KEYS }),\n ],\n preloadedState: load({ states: PERSISTED_KEYS }),\n});\n\nstore.dispatch(updateVersion());\n\nexport default store;\nexport type AppState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\n","import { useCallback, useEffect, useState } from 'react';\n\nconst VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document;\n\nfunction isWindowVisible() {\n return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden';\n}\n\n/**\n * Returns whether the window is currently visible to the user.\n */\nexport default function useIsWindowVisible(): boolean {\n const [focused, setFocused] = useState(isWindowVisible());\n const listener = useCallback(() => {\n setFocused(isWindowVisible());\n }, [setFocused]);\n\n useEffect(() => {\n if (!VISIBILITY_STATE_SUPPORTED) return undefined;\n\n document.addEventListener('visibilitychange', listener);\n return () => {\n document.removeEventListener('visibilitychange', listener);\n };\n }, [listener]);\n\n return focused;\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { useActiveWeb3React } from '../../hooks';\nimport useDebounce from '../../hooks/useDebounce';\nimport useIsWindowVisible from '../../hooks/useIsWindowVisible';\nimport { updateBlockNumber } from './actions';\nimport { useDispatch } from 'react-redux';\n\nexport default function Updater(): null {\n const { library, chainId } = useActiveWeb3React();\n const dispatch = useDispatch();\n\n const windowVisible = useIsWindowVisible();\n\n const [state, setState] = useState<{ chainId: number | undefined; blockNumber: number | null }>({\n chainId,\n blockNumber: null,\n });\n\n const blockNumberCallback = useCallback(\n (blockNumber: number) => {\n setState((state) => {\n if (chainId === state.chainId) {\n if (typeof state.blockNumber !== 'number') return { chainId, blockNumber };\n return { chainId, blockNumber: Math.max(blockNumber, state.blockNumber) };\n }\n return state;\n });\n },\n [chainId, setState]\n );\n\n // attach/detach listeners\n useEffect(() => {\n if (!library || !chainId || !windowVisible) return undefined;\n\n setState({ chainId, blockNumber: null });\n\n library\n .getBlockNumber()\n .then(blockNumberCallback)\n .catch((error) => console.error(`Failed to get block number for chainId: ${chainId}`, error));\n\n library.on('block', blockNumberCallback);\n return () => {\n library.removeListener('block', blockNumberCallback);\n };\n }, [dispatch, chainId, library, blockNumberCallback, windowVisible]);\n\n const debouncedState = useDebounce(state, 100);\n\n useEffect(() => {\n if (!debouncedState.chainId || !debouncedState.blockNumber || !windowVisible) return;\n dispatch(updateBlockNumber({ chainId: debouncedState.chainId, blockNumber: debouncedState.blockNumber }));\n }, [windowVisible, dispatch, debouncedState.blockNumber, debouncedState.chainId]);\n\n return null;\n}\n","import { useAllLists } from 'state/lists/hooks';\nimport { getVersionUpgrade, minVersionBump, VersionUpgrade } from '@uniswap/token-lists';\nimport { useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useFetchListCallback } from '../../hooks/useFetchListCallback';\nimport useInterval from '../../hooks/useInterval';\nimport useIsWindowVisible from '../../hooks/useIsWindowVisible';\nimport { AppDispatch } from '../index';\nimport { acceptListUpdate } from './actions';\nimport { useActiveListUrls } from './hooks';\nimport { useAllInactiveTokens } from 'hooks/Tokens';\n\nexport default function Updater(): null {\n const { library } = useActiveWeb3React();\n const dispatch = useDispatch();\n const isWindowVisible = useIsWindowVisible();\n\n // get all loaded lists, and the active urls\n const lists = useAllLists();\n const activeListUrls = useActiveListUrls();\n\n // initiate loading\n useAllInactiveTokens();\n\n const fetchList = useFetchListCallback();\n const fetchAllListsCallback = useCallback(() => {\n if (!isWindowVisible) return;\n Object.keys(lists).forEach((url) =>\n fetchList(url).catch((error) => console.debug('interval list fetching error', error))\n );\n }, [fetchList, isWindowVisible, lists]);\n\n // fetch all lists every 10 minutes, but only after we initialize library\n useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null);\n\n // whenever a list is not loaded and not loading, try again to load it\n useEffect(() => {\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl];\n if (!list.current && !list.loadingRequestId && !list.error) {\n fetchList(listUrl).catch((error) => console.debug('list added fetching error', error));\n }\n });\n }, [dispatch, fetchList, library, lists]);\n\n // automatically update lists if versions are minor/patch\n useEffect(() => {\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl];\n if (list.current && list.pendingUpdate) {\n const bump = getVersionUpgrade(list.current.version, list.pendingUpdate.version);\n switch (bump) {\n case VersionUpgrade.NONE:\n throw new Error('unexpected no version bump');\n case VersionUpgrade.PATCH:\n case VersionUpgrade.MINOR:\n const min = minVersionBump(list.current.tokens, list.pendingUpdate.tokens);\n // automatically update minor/patch as long as bump matches the min update\n if (bump >= min) {\n dispatch(acceptListUpdate(listUrl));\n } else {\n console.error(\n `List at url ${listUrl} could not automatically update because the version bump was only PATCH/MINOR while the update had breaking changes and should have been MAJOR`\n );\n }\n break;\n\n case VersionUpgrade.MAJOR:\n if (activeListUrls?.includes(listUrl)) {\n dispatch(acceptListUpdate(listUrl));\n }\n }\n }\n });\n }, [dispatch, lists, activeListUrls]);\n\n return null;\n}\n","function wait(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction waitRandom(min: number, max: number): Promise {\n return wait(min + Math.round(Math.random() * Math.max(0, max - min)));\n}\n\n/**\n * This error is thrown if the function is cancelled before completing\n */\nexport class CancelledError extends Error {\n constructor() {\n super('Cancelled');\n }\n}\n\n/**\n * Throw this error if the function should retry\n */\nexport class RetryableError extends Error {}\n\n/**\n * Retries the function that returns the promise until the promise successfully resolves up to n retries\n * @param fn function to retry\n * @param n how many times to retry\n * @param minWait min wait between retries in ms\n * @param maxWait max wait between retries in ms\n */\nexport function retry(\n fn: () => Promise,\n { n, minWait, maxWait }: { n: number; minWait: number; maxWait: number }\n): { promise: Promise; cancel: () => void } {\n let completed = false;\n let rejectCancelled: (error: Error) => void;\n const promise = new Promise(async (resolve, reject) => {\n rejectCancelled = reject;\n while (true) {\n let result: T;\n try {\n result = await fn();\n if (!completed) {\n resolve(result);\n completed = true;\n }\n break;\n } catch (error) {\n if (completed) {\n break;\n }\n if (n <= 0 || !(error instanceof RetryableError)) {\n reject(error);\n completed = true;\n break;\n }\n n--;\n }\n await waitRandom(minWait, maxWait);\n }\n });\n return {\n promise,\n cancel: () => {\n if (completed) return;\n completed = true;\n rejectCancelled(new CancelledError());\n },\n };\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { useEffect, useMemo, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useMulticallContract } from '../../hooks/useContract';\nimport useDebounce from '../../hooks/useDebounce';\nimport chunkArray from '../../utils/chunkArray';\nimport { CancelledError, retry, RetryableError } from '../../utils/retry';\nimport { useBlockNumber } from '../application/hooks';\nimport { AppDispatch, AppState } from '../index';\nimport {\n Call,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n parseCallKey,\n updateMulticallResults,\n} from './actions';\n\n// chunk calls so we do not exceed the gas limit\nconst CALL_CHUNK_SIZE = 500;\n\n/**\n * Fetches a chunk of calls, enforcing a minimum block number constraint\n * @param multicallContract multicall contract to fetch against\n * @param chunk chunk of calls to make\n * @param minBlockNumber minimum block number of the result set\n */\nasync function fetchChunk(\n multicallContract: Contract,\n chunk: Call[],\n minBlockNumber: number\n): Promise<{ results: string[]; blockNumber: number }> {\n console.debug('Fetching chunk', multicallContract, chunk, minBlockNumber);\n let resultsBlockNumber, returnData;\n try {\n [resultsBlockNumber, returnData] = await multicallContract.aggregate(\n chunk.map((obj) => [obj.address, obj.callData])\n );\n } catch (error) {\n console.debug('Failed to fetch chunk inside retry', error);\n throw error;\n }\n if (resultsBlockNumber.toNumber() < minBlockNumber) {\n console.debug(`Fetched results for old block number: ${resultsBlockNumber.toString()} vs. ${minBlockNumber}`);\n throw new RetryableError('Fetched for old block number');\n }\n return { results: returnData, blockNumber: resultsBlockNumber.toNumber() };\n}\n\n/**\n * From the current all listeners state, return each call key mapped to the\n * minimum number of blocks per fetch. This is how often each key must be fetched.\n * @param allListeners the all listeners state\n * @param chainId the current chain id\n */\nexport function activeListeningKeys(\n allListeners: AppState['multicall']['callListeners'],\n chainId?: number\n): { [callKey: string]: number } {\n if (!allListeners || !chainId) return {};\n const listeners = allListeners[chainId];\n if (!listeners) return {};\n\n return Object.keys(listeners).reduce<{ [callKey: string]: number }>((memo, callKey) => {\n const keyListeners = listeners[callKey];\n\n memo[callKey] = Object.keys(keyListeners)\n .filter((key) => {\n const blocksPerFetch = parseInt(key);\n if (blocksPerFetch <= 0) return false;\n return keyListeners[blocksPerFetch] > 0;\n })\n .reduce((previousMin, current) => {\n return Math.min(previousMin, parseInt(current));\n }, Infinity);\n return memo;\n }, {});\n}\n\n/**\n * Return the keys that need to be refetched\n * @param callResults current call result state\n * @param listeningKeys each call key mapped to how old the data can be in blocks\n * @param chainId the current chain id\n * @param latestBlockNumber the latest block number\n */\nexport function outdatedListeningKeys(\n callResults: AppState['multicall']['callResults'],\n listeningKeys: { [callKey: string]: number },\n chainId: number | undefined,\n latestBlockNumber: number | undefined\n): string[] {\n if (!chainId || !latestBlockNumber) return [];\n const results = callResults[chainId];\n // no results at all, load everything\n if (!results) return Object.keys(listeningKeys);\n\n return Object.keys(listeningKeys).filter((callKey) => {\n const blocksPerFetch = listeningKeys[callKey];\n\n const data = callResults[chainId][callKey];\n // no data, must fetch\n if (!data) return true;\n\n const minDataBlockNumber = latestBlockNumber - (blocksPerFetch - 1);\n\n // already fetching it for a recent enough block, don't refetch it\n if (data.fetchingBlockNumber && data.fetchingBlockNumber >= minDataBlockNumber) return false;\n\n // if data is older than minDataBlockNumber, fetch it\n return !data.blockNumber || data.blockNumber < minDataBlockNumber;\n });\n}\n\nexport default function Updater(): null {\n const dispatch = useDispatch();\n const state = useSelector((state) => state.multicall);\n // wait for listeners to settle before triggering updates\n const debouncedListeners = useDebounce(state.callListeners, 100);\n const latestBlockNumber = useBlockNumber();\n const { chainId } = useActiveWeb3React();\n const multicallContract = useMulticallContract();\n const cancellations = useRef<{ blockNumber: number; cancellations: (() => void)[] }>();\n\n const listeningKeys: { [callKey: string]: number } = useMemo(() => {\n return activeListeningKeys(debouncedListeners, chainId);\n }, [debouncedListeners, chainId]);\n\n const unserializedOutdatedCallKeys = useMemo(() => {\n return outdatedListeningKeys(state.callResults, listeningKeys, chainId, latestBlockNumber);\n }, [chainId, state.callResults, listeningKeys, latestBlockNumber]);\n\n const serializedOutdatedCallKeys = useMemo(\n () => JSON.stringify(unserializedOutdatedCallKeys.sort()),\n [unserializedOutdatedCallKeys]\n );\n\n useEffect(() => {\n if (!latestBlockNumber || !chainId || !multicallContract) return;\n\n const outdatedCallKeys: string[] = JSON.parse(serializedOutdatedCallKeys);\n if (outdatedCallKeys.length === 0) return;\n const calls = outdatedCallKeys.map((key) => parseCallKey(key));\n\n const chunkedCalls = chunkArray(calls, CALL_CHUNK_SIZE);\n\n if (cancellations.current?.blockNumber !== latestBlockNumber) {\n cancellations.current?.cancellations?.forEach((c) => c());\n }\n\n dispatch(\n fetchingMulticallResults({\n calls,\n chainId,\n fetchingBlockNumber: latestBlockNumber,\n })\n );\n\n cancellations.current = {\n blockNumber: latestBlockNumber,\n cancellations: chunkedCalls.map((chunk, index) => {\n const { cancel, promise } = retry(() => fetchChunk(multicallContract, chunk, latestBlockNumber), {\n n: Infinity,\n minWait: 2500,\n maxWait: 3500,\n });\n promise\n .then(({ results: returnData, blockNumber: fetchBlockNumber }) => {\n cancellations.current = { cancellations: [], blockNumber: latestBlockNumber };\n\n // accumulates the length of all previous indices\n const firstCallKeyIndex = chunkedCalls\n .slice(0, index)\n .reduce((memo, curr) => memo + curr.length, 0);\n const lastCallKeyIndex = firstCallKeyIndex + returnData.length;\n\n dispatch(\n updateMulticallResults({\n chainId,\n results: outdatedCallKeys\n .slice(firstCallKeyIndex, lastCallKeyIndex)\n .reduce<{ [callKey: string]: string | null }>((memo, callKey, i) => {\n memo[callKey] = returnData[i] ?? null;\n return memo;\n }, {}),\n blockNumber: fetchBlockNumber,\n })\n );\n })\n .catch((error: any) => {\n if (error instanceof CancelledError) {\n console.debug('Cancelled fetch for blockNumber', latestBlockNumber);\n return;\n }\n console.error('Failed to fetch multicall chunk', chunk, chainId, error);\n dispatch(\n errorFetchingMulticallResults({\n calls: chunk,\n chainId,\n fetchingBlockNumber: latestBlockNumber,\n })\n );\n });\n return cancel;\n }),\n };\n }, [chainId, multicallContract, dispatch, serializedOutdatedCallKeys, latestBlockNumber]);\n\n return null;\n}\n","// chunks array into chunks of maximum size\n// evenly distributes items among the chunks\nexport default function chunkArray(items: T[], maxChunkSize: number): T[][] {\n if (maxChunkSize < 1) throw new Error('maxChunkSize must be gte 1');\n if (items.length <= maxChunkSize) return [items];\n\n const numChunks: number = Math.ceil(items.length / maxChunkSize);\n const chunkSize = Math.ceil(items.length / numChunks);\n\n return [...Array(numChunks).keys()].map((ix) => items.slice(ix * chunkSize, ix * chunkSize + chunkSize));\n}\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useActiveWeb3React } from '../../hooks';\nimport { useAddPopup, useBlockNumber } from '../application/hooks';\nimport { AppDispatch, AppState } from '../index';\nimport { checkedTransaction, finalizeTransaction } from './actions';\n\nexport function shouldCheck(\n lastBlockNumber: number,\n tx: { addedTime: number; receipt?: {}; lastCheckedBlockNumber?: number }\n): boolean {\n if (tx.receipt) return false;\n if (!tx.lastCheckedBlockNumber) return true;\n const blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber;\n if (blocksSinceCheck < 1) return false;\n const minutesPending = (new Date().getTime() - tx.addedTime) / 1000 / 60;\n if (minutesPending > 60) {\n // every 10 blocks if pending for longer than an hour\n return blocksSinceCheck > 9;\n } else if (minutesPending > 5) {\n // every 3 blocks if pending more than 5 minutes\n return blocksSinceCheck > 2;\n } else {\n // otherwise every block\n return true;\n }\n}\n\nexport default function Updater(): null {\n const { chainId, library } = useActiveWeb3React();\n\n const lastBlockNumber = useBlockNumber();\n\n const dispatch = useDispatch();\n const state = useSelector((state) => state.transactions);\n\n const transactions = chainId ? state[chainId] ?? {} : {};\n\n // show popup on confirm\n const addPopup = useAddPopup();\n\n useEffect(() => {\n if (!chainId || !library || !lastBlockNumber) return;\n\n Object.keys(transactions)\n .filter((hash) => shouldCheck(lastBlockNumber, transactions[hash]))\n .forEach((hash) => {\n library\n .getTransactionReceipt(hash)\n .then((receipt) => {\n if (receipt) {\n dispatch(\n finalizeTransaction({\n chainId,\n hash,\n receipt: {\n blockHash: receipt.blockHash,\n blockNumber: receipt.blockNumber,\n contractAddress: receipt.contractAddress,\n from: receipt.from,\n status: receipt.status,\n to: receipt.to,\n transactionHash: receipt.transactionHash,\n transactionIndex: receipt.transactionIndex,\n },\n })\n );\n\n addPopup(\n {\n txn: {\n hash,\n success: receipt.status === 1,\n summary: transactions[hash]?.summary,\n },\n },\n hash\n );\n } else {\n dispatch(checkedTransaction({ chainId, hash, blockNumber: lastBlockNumber }));\n }\n })\n .catch((error) => {\n console.error(`failed to check transaction hash: ${hash}`, error);\n });\n });\n }, [chainId, library, transactions, lastBlockNumber, dispatch, addPopup]);\n\n return null;\n}\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { AppDispatch } from '../index';\nimport { updateMatchesDarkMode } from './actions';\n\nexport default function Updater(): null {\n const dispatch = useDispatch();\n\n // keep dark mode in sync with the system\n useEffect(() => {\n const darkHandler = (match: MediaQueryListEvent) => {\n dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches }));\n };\n\n const match = window?.matchMedia('(prefers-color-scheme: dark)');\n dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches }));\n\n if (match?.addListener) {\n match?.addListener(darkHandler);\n } else if (match?.addEventListener) {\n match?.addEventListener('change', darkHandler);\n }\n\n return () => {\n if (match?.removeListener) {\n match?.removeListener(darkHandler);\n } else if (match?.removeEventListener) {\n match?.removeEventListener('change', darkHandler);\n }\n };\n }, [dispatch]);\n\n return null;\n}\n","import { Web3Provider } from '@ethersproject/providers';\n\nexport default function getLibrary(provider: any): Web3Provider {\n const library = new Web3Provider(provider, 'any');\n library.pollingInterval = 15000;\n return library;\n}\n","import { createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core';\nimport 'inter-ui';\nimport React, { StrictMode } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { HashRouter } from 'react-router-dom';\nimport { NetworkContextName } from './constants';\nimport App from './pages/App';\nimport store from './state';\nimport ApplicationUpdater from './state/application/updater';\nimport ListsUpdater from './state/lists/updater';\nimport MulticallUpdater from './state/multicall/updater';\nimport TransactionUpdater from './state/transactions/updater';\nimport UserUpdater from './state/user/updater';\nimport ThemeProvider, { FixedGlobalStyle, ThemedGlobalStyle } from './theme';\nimport getLibrary from './utils/getLibrary';\n\nconst Web3ProviderNetwork = createWeb3ReactRoot(NetworkContextName);\n\nif ('ethereum' in window) {\n (window.ethereum as any).autoRefreshOnNetworkChange = false;\n}\n\nfunction Updaters() {\n return (\n <>\n \n \n \n \n \n \n );\n}\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}