@ape.swap/bonds-sdk 7.0.4-test.0 → 7.0.4-test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/adapters/evm/state/fetchBondsDataEVM.js +43 -8
  2. package/dist/adapters/evm/state/fetchBondsDataEVM.js.map +1 -1
  3. package/dist/adapters/evm/state/fetchUsersBondsEVM.js +7 -1
  4. package/dist/adapters/evm/state/fetchUsersBondsEVM.js.map +1 -1
  5. package/dist/adapters/evm/state/lpStaking/useSoulZapLpStakingQuote.js +5 -1
  6. package/dist/adapters/evm/state/lpStaking/useSoulZapLpStakingQuote.js.map +1 -1
  7. package/dist/adapters/evm/views/BuyComponent.js +2 -2
  8. package/dist/adapters/evm/views/BuyComponent.js.map +1 -1
  9. package/dist/adapters/evm/views/lpStaking/BuyComponentLpStaking.js +27 -9
  10. package/dist/adapters/evm/views/lpStaking/BuyComponentLpStaking.js.map +1 -1
  11. package/dist/adapters/solana/views/BuyComponentSolana.js +3 -3
  12. package/dist/adapters/solana/views/BuyComponentSolana.js.map +1 -1
  13. package/dist/config/abi/lpStakingVault.json.js +14 -0
  14. package/dist/config/abi/lpStakingVault.json.js.map +1 -1
  15. package/dist/config/constants/variables.d.ts +1 -1
  16. package/dist/config/constants/variables.js +1 -1
  17. package/dist/config/constants/variables.js.map +1 -1
  18. package/dist/hooks/useSendReferenceId.d.ts +4 -1
  19. package/dist/hooks/useSendReferenceId.js +9 -3
  20. package/dist/hooks/useSendReferenceId.js.map +1 -1
  21. package/dist/state/bonds/useBondsData.js +0 -1
  22. package/dist/state/bonds/useBondsData.js.map +1 -1
  23. package/dist/state/useSDKConfig.js +9 -0
  24. package/dist/state/useSDKConfig.js.map +1 -1
  25. package/dist/utils/displayHelpers.js +19 -0
  26. package/dist/utils/displayHelpers.js.map +1 -1
  27. package/dist/views/Bonds/utils.js +1 -0
  28. package/dist/views/Bonds/utils.js.map +1 -1
  29. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js +2 -1
  30. package/dist/views/YourBonds/components/ClaimAll/ClaimAllModal.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BuyComponent.js","sources":["../../../../src/adapters/evm/views/BuyComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport clsx from 'clsx'\nimport { convertToBigish } from '../../../utils/convertToBigish'\nimport { mulDivRound, toFixedString } from '../../../utils/fixedPoint'\nimport ABI_DEPOSIT from '../../../config/abi/deposit.json'\nimport ABI_DEPOSIT_SIG from '../../../config/abi/depositSig.json'\nimport type { ChainBuyComponentProps } from '../../types'\nimport {\n useChainId,\n useSendTransaction,\n useWriteContract,\n // useConfig\n} from 'wagmi'\nimport useModal from '../../../hooks/useModal'\n// import ZapModal from '../ZapModal'\nimport { BillVersion, ChainId, LaunchBondTiers, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport TokenSelectorPanel from '../../../components/TokenSelectorPanel'\nimport { useApproval } from '../state/useAllowance'\nimport { SoulZapTokenManager } from '../../../config/constants/addresses'\nimport useSoulZapBondQuote from '../state/useSoulZapBondQuote'\nimport { parseEther } from 'viem'\nimport useBondsData from '../../../state/bonds/useBondsData'\nimport useTokenFromZapList from '../../../hooks/useTokenFromZapList'\nimport { useMonitorTx } from '../state/useMonitorTx'\nimport { usePopups } from '../../../state/popups/usePopups'\nimport {\n formatUSDNumber,\n getMaxBuy,\n getPayoutAmount,\n getPrincipalAmount,\n getRawBonus,\n} from '../../../utils/displayHelpers'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport { zapSupported, ZapSupportedChainId } from '../../../config/constants/variables'\nimport { getSymbol } from '../../../utils/getNativeTicker'\nimport { useSendReferenceId } from '../../../hooks/useSendReferenceId'\nimport ConnectButton from '../../../components/ConnectButton'\nimport BondModalHeader from '../../../views/BuyBond/components/BondModalHeader'\nimport BondCards from '../../../views/BuyBond/components/BondCards/BondCards'\nimport Estimations from '../../../views/BuyBond/components/Estimations'\nimport ProjectDescription from '../../../views/BuyBond/components/ProjectDescription'\nimport track from '../../../utils/track'\nimport { remove0xPrefix } from '../../../utils/remove0xPrefix'\nimport useTierPoints from '../../../state/tiers/useTierPoints'\nimport { getUserTier, Promotions, TIERS_WEIGHT } from '../../../state/tiers/tiers'\nimport NewRateModal from '../../../views/BuyBond/components/NewRateModal/NewRateModal'\nimport NoBonusModal from '../../../views/BuyBond/components/NoBonusModal/NoBonusModal'\nimport useTierProofSignature from '../state/useTierProofSignature'\nimport PointsLeftForNextTier from '../../../views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier'\nimport SafeHTMLComponent from '../../../components/SafeHTMLComponent'\nimport useSortedZapList from '../../../hooks/useSortedZapList'\nimport TransactionModal from './TransactionModal'\nimport { reportError } from '../../../utils/reportError'\nimport { findHighestTrueBondPrice } from '../../../utils/bondPriceHelpers'\nimport { MCBuyComponentStyles } from '../../../utils/campaignStyles'\nimport useEVMAccount from '../state/useEVMAccount'\nimport { getBridgeAdapter } from '../../registry'\n// import useTierOptimizationPreview from '../../state/zap/useTierOptimizationPreview'\nimport { SHORT_NETWORK_LABEL } from '../../../config/constants/chains'\nimport Flex from '../../../components/uikit-sdk/Flex'\nimport Text from '../../../components/uikit-sdk/Text'\nimport Button from '../../../components/uikit-sdk/Button/Button'\nimport { formatNumberSI } from '../../../utils/formatNumber'\nimport L1xIframe from '../../../views/BuyBond/components/L1xIframe/L1xIframe'\n// import { simulateContract } from 'wagmi/actions'\n\nexport type BuyComponentProps = ChainBuyComponentProps\n\nconst PROMOTION_TRACKING_SUFFIXES: Partial<Record<Promotions, string>> = {\n [Promotions.WelcomeBonus]: 'welcome-bonus',\n [Promotions.BonusWeek]: 'bonus-week',\n}\n\nconst getPromotionTrackingSuffix = (promotion?: Promotions | null): string => {\n if (!promotion) return ''\n return PROMOTION_TRACKING_SUFFIXES[promotion] ?? ''\n}\n\nconst BuyComponent: React.FC<BuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n // const config = useConfig()\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { address: account } = useEVMAccount()\n const { writeContractAsync } = useWriteContract()\n const { sendTransactionAsync } = useSendTransaction()\n const { data: bonds, refetch: refetchBondState } = useBondsData()\n const sendReferenceId = useSendReferenceId()\n const { data: tierPointsState } = useTierPoints()\n const { promotionalPoints, promotion, eligibleChains, onChainPoints } = tierPointsState || {}\n // if promotion comes with eligibleChains undefined means it should be used for every chain\n const isBondEligibleForPromotion = eligibleChains === undefined || eligibleChains?.includes(bondChain as ChainId)\n const pointsToBeUsed = isBondEligibleForPromotion ? promotionalPoints : onChainPoints\n // Bond To be used\n const bondData = useMemo(() => {\n return bonds?.find((bond) => bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase())!\n }, [bonds, bondAddress])\n\n // Tier Gating\n const userTier = getUserTier(pointsToBeUsed ?? '0')\n const minTier = bondData?.minTier !== undefined ? bondData.minTier : null\n const isUserRestricted = minTier !== null && (userTier === null || userTier < minTier)\n const trueBondPriceData = findHighestTrueBondPrice(pointsToBeUsed, bondData?.trueBondPrices)\n const trueBondPrice = trueBondPriceData?.trueBondPrice\n const { data: tierProofSig } = useTierProofSignature(bondAddress, bondChain, isUserRestricted)\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n\n // On-chain Data\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const isZapSupported = zapSupported.includes(bondData?.chainId as ZapSupportedChainId)\n\n const [fetchingZapQuote, zapData, zapDepositAmount, zapError, zapTrueBondPrice] = useSoulZapBondQuote(\n inputValue,\n inputToken,\n bondData,\n account,\n tierProofSig ?? undefined,\n )\n\n const { sortedZapList, isFetched: zapListFetched } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n const inputTokenPrice = enrichedTokenData?.price\n const rateChanged = parseFloat(zapTrueBondPrice ?? '0') > parseFloat(trueBondPrice ?? '0') * 1.01 && isZapSupported\n const promotionTrackingSuffix = getPromotionTrackingSuffix(promotion)\n const getTrackingCategory = useCallback(\n (baseCategory: string) => (promotionTrackingSuffix ? `${baseCategory}-${promotionTrackingSuffix}` : baseCategory),\n [promotionTrackingSuffix],\n )\n\n // Estimations\n const depositAmount = isZapSupported ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumberSI(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = \n $${formatUSDNumber((parseFloat(inputValue) * (inputTokenPrice ?? 0)).toString())}`\n\n // Validations\n const exceedsRealMaxBuy = getMaxBuy(bondData, true) <= getPayoutAmount(bondData, depositAmount, pointsToBeUsed)\n const exceedsSafeMaxBuy =\n getMaxBuy(bondData, false) * (isZapSupported ? 0.995 : 0.9995) <=\n getPayoutAmount(bondData, depositAmount, pointsToBeUsed)\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isPrincipalTokenLP = bondData?.lpToken?.symbol?.includes('-')\n\n // Loading State\n const [loadingTx, setLoadingTx] = useState(false)\n const { addToastError } = usePopups()\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, userChainId)\n\n // Once the buy tx is confirmed, report the new bill id (the last topic of the bill NFT's log), like the other chain\n // families do, so the bond list can open it in YourBondsModal.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const billNftAddress = bondData?.billNnftAddress?.[bondData?.chainId]?.toLowerCase()\n const billNftLog = buyTxReceipt.logs.find((log) => log.address.toLowerCase() === billNftAddress)\n const billIdTopic = billNftLog?.topics[billNftLog.topics.length - 1]\n if (billIdTopic) setBillId(parseInt(billIdTopic, 16).toString())\n } catch (e) {\n console.log(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n // State Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = useCallback(() => {\n const balance = Number(inputCurrencyBalance ?? '0')\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n if (!isZapSupported) {\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), pointsToBeUsed)\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 18\n if (maxPossibleUserPurchase > maxBuyAmount) {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), pointsToBeUsed)\n setInputValue(toFixedString(principalForMaxBuy, principalDecimals, 'trunc'))\n } else {\n setInputValue(toFixedString(inputCurrencyBalance ?? '0', principalDecimals, 'trunc'))\n }\n } else {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), pointsToBeUsed)\n const principalForMaxBuyUSD = principalForMaxBuy * Number(bondData?.principalTokenPrice ?? 0)\n const maxBuyAmountInSelectedToken = principalForMaxBuyUSD / (inputTokenPrice ?? 0)\n const decimals =\n enrichedTokenData?.token === 'NATIVE' ? 18 : (enrichedTokenData?.token.decimals[bondData?.chainId] ?? 18)\n\n if (balance >= maxBuyAmountInSelectedToken) {\n setInputValue(toFixedString(maxBuyAmountInSelectedToken, decimals, 'trunc'))\n } else {\n setInputValue(toFixedString(inputCurrencyBalance ?? '0', decimals, 'trunc'))\n }\n }\n }, [\n bondData,\n isZapSupported,\n pointsToBeUsed,\n SDKConfig.showLowValueBonds,\n inputTokenPrice,\n enrichedTokenData?.token,\n inputCurrencyBalance,\n ])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n (isZapSupported\n ? SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId]\n : bondData?.contractAddress?.[bondData.chainId]) ?? null,\n account ?? null,\n bondData?.chainId ?? null,\n )\n const handleApprove = async () => {\n return approveCallback().then(() => {\n track({\n event: 'approveBondClick',\n chain: userChainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n })\n }\n\n const handleBuyCallback = async () => {\n const billAddress: `0x${string}` = bondData?.contractAddress?.[bondData.chainId] as `0x${string}`\n const decimals = bondData?.lpToken.decimals?.[bondData?.chainId] ?? 18\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n try {\n const maxPrice = mulDivRound(BigInt(trueBondPrice ?? '0'), 102n, 100n, 'halfUp').toString() // multiply it by 1.02\n const amount = convertToBigish(inputValue, decimals)\n\n const shouldUseSig = bondData?.billVersion === BillVersion.V4 && SDKConfig.useTiers\n const args = shouldUseSig ? [amount, maxPrice, account, tierProofSig] : [amount, maxPrice, account]\n\n // const simulationResult = await simulateContract(config, {\n // address: billAddress,\n // abi: ABI_DEPOSIT_SIG,\n // functionName: 'deposit',\n // args: args,\n // chainId: bondData?.chainId as any,\n // account,\n // })\n // .then((e) => console.log('success!', e))\n // .catch((e) => {\n // console.error(e)\n // })\n\n const hash = await writeContractAsync({\n address: billAddress,\n abi: shouldUseSig ? ABI_DEPOSIT_SIG : ABI_DEPOSIT,\n functionName: 'deposit',\n args: args,\n chain: bondData?.chainId as any,\n account,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(billAddress, userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: getTrackingCategory('lp-buy'),\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n }\n }\n\n const handleZapCallback = async () => {\n if (zapData && zapData?.txData?.to && zapData?.txData?.data) {\n console.log('Attempting zap tx')\n track({\n event: 'buyBondClick',\n chain: bondData?.chainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol ?? '',\n value: zapData.lpQuote.fromAmountUSD,\n },\n })\n try {\n console.log(zapData)\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\n\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(bondData?.contractAddress?.[bondData.chainId] ?? '', userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bill',\n token1: getSymbol(inputToken),\n token2: `${bondData?.lpToken.symbol ?? ''}`,\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: getTrackingCategory('zap-buy'),\n type: bondData?.billType ?? '',\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n amount: inputValue,\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (e: any) {\n console.log(e)\n addToastError(e.shortMessage)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e,\n extraInfo: { type: 'zapBuyBond', bondData, zapData, e },\n chainId: bondChain,\n account,\n })\n }\n }\n }\n\n const handleBothPurchases = () => {\n setLoadingTx(true)\n if (isZapSupported) {\n handleZapCallback().finally(() => setLoadingTx(false))\n } else {\n handleBuyCallback().finally(() => setLoadingTx(false))\n }\n }\n\n const handleOpenModal = () => {\n const bonus = trueBondPriceData?.bonusWithFee ?? 0\n if (bonus <= 0) {\n openNoBonusModal()\n } else {\n openTxModal()\n }\n }\n\n const openExternal = () => {\n if (bondData?.lpToken?.getLpUrl?.[bondData?.chainId]) {\n window.open(bondData.lpToken.getLpUrl?.[bondData?.chainId], '_blank')\n } else {\n window.open(\n `https://ape.bond/swap?outputcurrency=${bondData?.lpToken.address[bondData?.chainId]}&outputChain=${bondData?.chainId}`,\n '_blank',\n )\n }\n }\n\n // Modals\n const [onOpenl1xIframe] = useModal(<L1xIframe />)\n\n // Optional bridge (LiFi adapter); without it the secondary button falls back to its non-bridge options.\n const bridge = getBridgeAdapter()\n const canBridge = !!bridge && !!bondChain && bridge.supportsChain(bondChain)\n const [onOpenBridgeModal] = useModal(\n canBridge ? (\n <bridge.BridgeModal\n bondChain={bondChain}\n principalToken={isPrincipalTokenLP ? 'ETH' : bondData?.lpToken?.address?.[bondData?.chainId]}\n />\n ) : null,\n )\n\n const [openNewRateModal] = useModal(\n <NewRateModal\n bond={bondData}\n zapTrueBondPrice={zapTrueBondPrice}\n depositAmount={depositAmount}\n youSpendString={youSpendString}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />,\n true,\n false,\n 'newRateModal',\n )\n\n const [openTxModal] = useModal(\n <TransactionModal\n txChain={bondChain}\n approvalState={approvalState}\n approveCallback={handleApprove}\n loadingTx={loadingTx}\n txCallback={handleBothPurchases}\n bondData={bondData!}\n inputToken={inputToken}\n inputValue={inputValue}\n depositAmount={depositAmount}\n buyTxHash={buyTxHash}\n rateChanged={rateChanged}\n />,\n false,\n true,\n 'transactionModal',\n )\n\n const [openNoBonusModal] = useModal(\n <NoBonusModal onAcknowledge={openTxModal} showcaseTokenName={bondData?.showcaseTokenName} />,\n true,\n true,\n 'NoBonusModal',\n )\n\n // Effects\n const [hasChecked, setHasChecked] = useState(false)\n useEffect(() => {\n if (zapListFetched && !hasChecked) {\n if (parseFloat(inputCurrencyBalance ?? '0') < 0.0001) {\n setInputTokenString(\n sortedZapList[0].token === 'NATIVE' ? 'NATIVE' : sortedZapList[0].token.address[bondChain as ChainId],\n )\n }\n setHasChecked(true)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [inputCurrencyBalance, zapListFetched])\n\n // If rateChanged meaning the zap quote has a >1% difference from the true bond price, we let the user know and we update state\n useEffect(() => {\n if (rateChanged) {\n console.log('rate changed, refetch state and let user know')\n openNewRateModal()\n refetchBondState()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [rateChanged])\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <BondModalHeader bondData={bondData} onDismiss={onDismiss} />\n <ProjectDescription description={bondData.shortDescription} isProjectView />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={exceedsSafeMaxBuy && !exceedsRealMaxBuy} />\n </Flex>\n <Estimations\n depositAmount={depositAmount}\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={isZapSupported}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={inputTokenPrice}\n inputDisabled={isUserRestricted}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {SDKConfig.useTiers &&\n userTier !== LaunchBondTiers.Mythical &&\n bondData?.billVersion === BillVersion.V4 &&\n account && (\n <PointsLeftForNextTier\n bond={bondData}\n inputAmount={inputValue}\n setInputValue={setInputValue}\n inputTokenPrice={inputTokenPrice}\n inputTokenDecimals={inputToken === 'NATIVE' ? 18 : (inputToken?.decimals?.[bondData?.chainId] ?? 18)}\n />\n )}\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Flex className=\"ape:w-full ape:gap-[10px] ape:flex-col ape:md:flex-row\">\n <Button\n variant=\"secondary\"\n onClick={() =>\n canBridge ? onOpenBridgeModal() : bondChain === ChainId.L1X ? onOpenl1xIframe() : openExternal()\n }\n onMouseEnter={canBridge ? bridge.preload : undefined}\n onFocus={canBridge ? bridge.preload : undefined}\n className=\"ape:w-full ape:md:w-[35%] ape:text-[14px]! ape:lg:text-[16px]!\"\n >\n {canBridge\n ? isProjectView\n ? 'Bridge funds'\n : `Bridge to ${SHORT_NETWORK_LABEL[bondData?.chainId as ChainId]}`\n : `Get ${getSymbol(bondData?.lpToken, bondData?.chainId)}`}\n </Button>\n {isUserRestricted ? (\n <Button className=\"action-button ape:w-full\" disabled>\n INSUFFICIENT TIER\n </Button>\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || fetchingZapQuote}\n disabled={\n load ||\n bondData?.soldOut ||\n !account ||\n !inputValue ||\n parseFloat(inputValue) === 0 ||\n fetchingZapQuote ||\n zapError ||\n exceedsRealMaxBuy ||\n exceedsBalance ||\n (isZapSupported && !zapData) ||\n SDKConfig.blockSales\n }\n onClick={handleOpenModal}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Exceeds balance'\n : zapError\n ? 'something went wrong'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : `buy`}\n </Button>\n )}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\nexport default React.memo(BuyComponent)\n"],"names":["_jsx","L1xIframe","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"BuyComponent.js","sources":["../../../../src/adapters/evm/views/BuyComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport clsx from 'clsx'\nimport { convertToBigish } from '../../../utils/convertToBigish'\nimport { mulDivRound, toFixedString } from '../../../utils/fixedPoint'\nimport ABI_DEPOSIT from '../../../config/abi/deposit.json'\nimport ABI_DEPOSIT_SIG from '../../../config/abi/depositSig.json'\nimport type { ChainBuyComponentProps } from '../../types'\nimport {\n useChainId,\n useSendTransaction,\n useWriteContract,\n // useConfig\n} from 'wagmi'\nimport useModal from '../../../hooks/useModal'\n// import ZapModal from '../ZapModal'\nimport { BillVersion, ChainId, LaunchBondTiers, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport TokenSelectorPanel from '../../../components/TokenSelectorPanel'\nimport { useApproval } from '../state/useAllowance'\nimport { SoulZapTokenManager } from '../../../config/constants/addresses'\nimport useSoulZapBondQuote from '../state/useSoulZapBondQuote'\nimport { parseEther } from 'viem'\nimport useBondsData from '../../../state/bonds/useBondsData'\nimport useTokenFromZapList from '../../../hooks/useTokenFromZapList'\nimport { useMonitorTx } from '../state/useMonitorTx'\nimport { usePopups } from '../../../state/popups/usePopups'\nimport {\n formatUSDNumber,\n getMaxBuy,\n getPayoutAmount,\n getPrincipalAmount,\n getRawBonus,\n} from '../../../utils/displayHelpers'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport { zapSupported, ZapSupportedChainId } from '../../../config/constants/variables'\nimport { getSymbol } from '../../../utils/getNativeTicker'\nimport { useSendReferenceId } from '../../../hooks/useSendReferenceId'\nimport ConnectButton from '../../../components/ConnectButton'\nimport BondModalHeader from '../../../views/BuyBond/components/BondModalHeader'\nimport BondCards from '../../../views/BuyBond/components/BondCards/BondCards'\nimport Estimations from '../../../views/BuyBond/components/Estimations'\nimport ProjectDescription from '../../../views/BuyBond/components/ProjectDescription'\nimport track from '../../../utils/track'\nimport { remove0xPrefix } from '../../../utils/remove0xPrefix'\nimport useTierPoints from '../../../state/tiers/useTierPoints'\nimport { getUserTier, Promotions, TIERS_WEIGHT } from '../../../state/tiers/tiers'\nimport NewRateModal from '../../../views/BuyBond/components/NewRateModal/NewRateModal'\nimport NoBonusModal from '../../../views/BuyBond/components/NoBonusModal/NoBonusModal'\nimport useTierProofSignature from '../state/useTierProofSignature'\nimport PointsLeftForNextTier from '../../../views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier'\nimport SafeHTMLComponent from '../../../components/SafeHTMLComponent'\nimport useSortedZapList from '../../../hooks/useSortedZapList'\nimport TransactionModal from './TransactionModal'\nimport { reportError } from '../../../utils/reportError'\nimport { findHighestTrueBondPrice } from '../../../utils/bondPriceHelpers'\nimport { MCBuyComponentStyles } from '../../../utils/campaignStyles'\nimport useEVMAccount from '../state/useEVMAccount'\nimport { getBridgeAdapter } from '../../registry'\n// import useTierOptimizationPreview from '../../state/zap/useTierOptimizationPreview'\nimport { SHORT_NETWORK_LABEL } from '../../../config/constants/chains'\nimport Flex from '../../../components/uikit-sdk/Flex'\nimport Text from '../../../components/uikit-sdk/Text'\nimport Button from '../../../components/uikit-sdk/Button/Button'\nimport { formatNumberSI } from '../../../utils/formatNumber'\nimport L1xIframe from '../../../views/BuyBond/components/L1xIframe/L1xIframe'\n// import { simulateContract } from 'wagmi/actions'\n\nexport type BuyComponentProps = ChainBuyComponentProps\n\nconst PROMOTION_TRACKING_SUFFIXES: Partial<Record<Promotions, string>> = {\n [Promotions.WelcomeBonus]: 'welcome-bonus',\n [Promotions.BonusWeek]: 'bonus-week',\n}\n\nconst getPromotionTrackingSuffix = (promotion?: Promotions | null): string => {\n if (!promotion) return ''\n return PROMOTION_TRACKING_SUFFIXES[promotion] ?? ''\n}\n\nconst BuyComponent: React.FC<BuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n // const config = useConfig()\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { address: account } = useEVMAccount()\n const { writeContractAsync } = useWriteContract()\n const { sendTransactionAsync } = useSendTransaction()\n const { data: bonds, refetch: refetchBondState } = useBondsData()\n const sendReferenceId = useSendReferenceId()\n const { data: tierPointsState } = useTierPoints()\n const { promotionalPoints, promotion, eligibleChains, onChainPoints } = tierPointsState || {}\n // if promotion comes with eligibleChains undefined means it should be used for every chain\n const isBondEligibleForPromotion = eligibleChains === undefined || eligibleChains?.includes(bondChain as ChainId)\n const pointsToBeUsed = isBondEligibleForPromotion ? promotionalPoints : onChainPoints\n // Bond To be used\n const bondData = useMemo(() => {\n return bonds?.find((bond) => bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase())!\n }, [bonds, bondAddress])\n\n // Tier Gating\n const userTier = getUserTier(pointsToBeUsed ?? '0')\n const minTier = bondData?.minTier !== undefined ? bondData.minTier : null\n const isUserRestricted = minTier !== null && (userTier === null || userTier < minTier)\n const trueBondPriceData = findHighestTrueBondPrice(pointsToBeUsed, bondData?.trueBondPrices)\n const trueBondPrice = trueBondPriceData?.trueBondPrice\n const { data: tierProofSig } = useTierProofSignature(bondAddress, bondChain, isUserRestricted)\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n\n // On-chain Data\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const isZapSupported = zapSupported.includes(bondData?.chainId as ZapSupportedChainId)\n\n const [fetchingZapQuote, zapData, zapDepositAmount, zapError, zapTrueBondPrice] = useSoulZapBondQuote(\n inputValue,\n inputToken,\n bondData,\n account,\n tierProofSig ?? undefined,\n )\n\n const { sortedZapList, isFetched: zapListFetched } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n const inputTokenPrice = enrichedTokenData?.price\n const rateChanged = parseFloat(zapTrueBondPrice ?? '0') > parseFloat(trueBondPrice ?? '0') * 1.01 && isZapSupported\n const promotionTrackingSuffix = getPromotionTrackingSuffix(promotion)\n const getTrackingCategory = useCallback(\n (baseCategory: string) => (promotionTrackingSuffix ? `${baseCategory}-${promotionTrackingSuffix}` : baseCategory),\n [promotionTrackingSuffix],\n )\n\n // Estimations\n const depositAmount = isZapSupported ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumberSI(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = \n $${formatUSDNumber((parseFloat(inputValue) * (inputTokenPrice ?? 0)).toString())}`\n\n // Validations\n const exceedsRealMaxBuy = getMaxBuy(bondData, true) <= getPayoutAmount(bondData, depositAmount, pointsToBeUsed)\n const exceedsSafeMaxBuy =\n getMaxBuy(bondData, false) * (isZapSupported ? 0.995 : 0.9995) <=\n getPayoutAmount(bondData, depositAmount, pointsToBeUsed)\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isPrincipalTokenLP = bondData?.lpToken?.symbol?.includes('-')\n\n // Loading State\n const [loadingTx, setLoadingTx] = useState(false)\n const { addToastError } = usePopups()\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, userChainId)\n\n // Once the buy tx is confirmed, report the new bill id (the last topic of the bill NFT's log), like the other chain\n // families do, so the bond list can open it in YourBondsModal.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const billNftAddress = bondData?.billNnftAddress?.[bondData?.chainId]?.toLowerCase()\n const billNftLog = buyTxReceipt.logs.find((log) => log.address.toLowerCase() === billNftAddress)\n const billIdTopic = billNftLog?.topics[billNftLog.topics.length - 1]\n if (billIdTopic) setBillId(parseInt(billIdTopic, 16).toString())\n } catch (e) {\n console.log(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n // State Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = useCallback(() => {\n const balance = Number(inputCurrencyBalance ?? '0')\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n if (!isZapSupported) {\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), pointsToBeUsed)\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 18\n if (maxPossibleUserPurchase > maxBuyAmount) {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), pointsToBeUsed)\n setInputValue(toFixedString(principalForMaxBuy, principalDecimals, 'trunc'))\n } else {\n setInputValue(toFixedString(inputCurrencyBalance ?? '0', principalDecimals, 'trunc'))\n }\n } else {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), pointsToBeUsed)\n const principalForMaxBuyUSD = principalForMaxBuy * Number(bondData?.principalTokenPrice ?? 0)\n const maxBuyAmountInSelectedToken = principalForMaxBuyUSD / (inputTokenPrice ?? 0)\n const decimals =\n enrichedTokenData?.token === 'NATIVE' ? 18 : (enrichedTokenData?.token.decimals[bondData?.chainId] ?? 18)\n\n if (balance >= maxBuyAmountInSelectedToken) {\n setInputValue(toFixedString(maxBuyAmountInSelectedToken, decimals, 'trunc'))\n } else {\n setInputValue(toFixedString(inputCurrencyBalance ?? '0', decimals, 'trunc'))\n }\n }\n }, [\n bondData,\n isZapSupported,\n pointsToBeUsed,\n SDKConfig.showLowValueBonds,\n inputTokenPrice,\n enrichedTokenData?.token,\n inputCurrencyBalance,\n ])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n (isZapSupported\n ? SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId]\n : bondData?.contractAddress?.[bondData.chainId]) ?? null,\n account ?? null,\n bondData?.chainId ?? null,\n )\n const handleApprove = async () => {\n return approveCallback().then(() => {\n track({\n event: 'approveBondClick',\n chain: userChainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n })\n }\n\n const handleBuyCallback = async () => {\n const billAddress: `0x${string}` = bondData?.contractAddress?.[bondData.chainId] as `0x${string}`\n const decimals = bondData?.lpToken.decimals?.[bondData?.chainId] ?? 18\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n try {\n const maxPrice = mulDivRound(BigInt(trueBondPrice ?? '0'), 102n, 100n, 'halfUp').toString() // multiply it by 1.02\n const amount = convertToBigish(inputValue, decimals)\n\n const shouldUseSig = bondData?.billVersion === BillVersion.V4 && SDKConfig.useTiers\n const args = shouldUseSig ? [amount, maxPrice, account, tierProofSig] : [amount, maxPrice, account]\n\n // const simulationResult = await simulateContract(config, {\n // address: billAddress,\n // abi: ABI_DEPOSIT_SIG,\n // functionName: 'deposit',\n // args: args,\n // chainId: bondData?.chainId as any,\n // account,\n // })\n // .then((e) => console.log('success!', e))\n // .catch((e) => {\n // console.error(e)\n // })\n\n const hash = await writeContractAsync({\n address: billAddress,\n abi: shouldUseSig ? ABI_DEPOSIT_SIG : ABI_DEPOSIT,\n functionName: 'deposit',\n args: args,\n chain: bondData?.chainId as any,\n account,\n })\n if (hash) {\n setBuyTxHash(hash)\n sendReferenceId(billAddress, userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: getTrackingCategory('lp-buy'),\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n }\n }\n\n const handleZapCallback = async () => {\n if (zapData && zapData?.txData?.to && zapData?.txData?.data) {\n console.log('Attempting zap tx')\n track({\n event: 'buyBondClick',\n chain: bondData?.chainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol ?? '',\n value: zapData.lpQuote.fromAmountUSD,\n },\n })\n try {\n console.log(zapData)\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\n\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n sendReferenceId(bondData?.contractAddress?.[bondData.chainId] ?? '', userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bill',\n token1: getSymbol(inputToken),\n token2: `${bondData?.lpToken.symbol ?? ''}`,\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: getTrackingCategory('zap-buy'),\n type: bondData?.billType ?? '',\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n amount: inputValue,\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (e: any) {\n console.log(e)\n addToastError(e.shortMessage)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e,\n extraInfo: { type: 'zapBuyBond', bondData, zapData, e },\n chainId: bondChain,\n account,\n })\n }\n }\n }\n\n const handleBothPurchases = () => {\n setLoadingTx(true)\n if (isZapSupported) {\n handleZapCallback().finally(() => setLoadingTx(false))\n } else {\n handleBuyCallback().finally(() => setLoadingTx(false))\n }\n }\n\n const handleOpenModal = () => {\n const bonus = trueBondPriceData?.bonusWithFee ?? 0\n if (bonus <= 0) {\n openNoBonusModal()\n } else {\n openTxModal()\n }\n }\n\n const openExternal = () => {\n if (bondData?.lpToken?.getLpUrl?.[bondData?.chainId]) {\n window.open(bondData.lpToken.getLpUrl?.[bondData?.chainId], '_blank')\n } else {\n window.open(\n `https://ape.bond/swap?outputcurrency=${bondData?.lpToken.address[bondData?.chainId]}&outputChain=${bondData?.chainId}`,\n '_blank',\n )\n }\n }\n\n // Modals\n const [onOpenl1xIframe] = useModal(<L1xIframe />)\n\n // Optional bridge (LiFi adapter); without it the secondary button falls back to its non-bridge options.\n const bridge = getBridgeAdapter()\n const canBridge = !!bridge && !!bondChain && bridge.supportsChain(bondChain)\n const [onOpenBridgeModal] = useModal(\n canBridge ? (\n <bridge.BridgeModal\n bondChain={bondChain}\n principalToken={isPrincipalTokenLP ? 'ETH' : bondData?.lpToken?.address?.[bondData?.chainId]}\n />\n ) : null,\n )\n\n const [openNewRateModal] = useModal(\n <NewRateModal\n bond={bondData}\n zapTrueBondPrice={zapTrueBondPrice}\n depositAmount={depositAmount}\n youSpendString={youSpendString}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />,\n true,\n false,\n 'newRateModal',\n )\n\n const [openTxModal] = useModal(\n <TransactionModal\n txChain={bondChain}\n approvalState={approvalState}\n approveCallback={handleApprove}\n loadingTx={loadingTx}\n txCallback={handleBothPurchases}\n bondData={bondData!}\n inputToken={inputToken}\n inputValue={inputValue}\n depositAmount={depositAmount}\n buyTxHash={buyTxHash}\n rateChanged={rateChanged}\n />,\n false,\n true,\n 'transactionModal',\n )\n\n const [openNoBonusModal] = useModal(\n <NoBonusModal onAcknowledge={openTxModal} showcaseTokenName={bondData?.showcaseTokenName} />,\n true,\n true,\n 'NoBonusModal',\n )\n\n // Effects\n const [hasChecked, setHasChecked] = useState(false)\n useEffect(() => {\n if (zapListFetched && !hasChecked) {\n if (parseFloat(inputCurrencyBalance ?? '0') < 0.0001) {\n setInputTokenString(\n sortedZapList[0].token === 'NATIVE' ? 'NATIVE' : sortedZapList[0].token.address[bondChain as ChainId],\n )\n }\n setHasChecked(true)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [inputCurrencyBalance, zapListFetched])\n\n // If rateChanged meaning the zap quote has a >1% difference from the true bond price, we let the user know and we update state\n useEffect(() => {\n if (rateChanged) {\n console.log('rate changed, refetch state and let user know')\n openNewRateModal()\n refetchBondState()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [rateChanged])\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <BondModalHeader bondData={bondData} onDismiss={onDismiss} />\n <ProjectDescription description={bondData.shortDescription} isProjectView />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={exceedsSafeMaxBuy && !exceedsRealMaxBuy} />\n </Flex>\n <Estimations\n depositAmount={depositAmount}\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={isZapSupported}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={inputTokenPrice}\n inputDisabled={isUserRestricted}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {SDKConfig.useTiers &&\n userTier !== LaunchBondTiers.Mythical &&\n bondData?.billVersion === BillVersion.V4 &&\n account && (\n <PointsLeftForNextTier\n bond={bondData}\n inputAmount={inputValue}\n setInputValue={setInputValue}\n inputTokenPrice={inputTokenPrice}\n inputTokenDecimals={inputToken === 'NATIVE' ? 18 : (inputToken?.decimals?.[bondData?.chainId] ?? 18)}\n />\n )}\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Flex className=\"ape:w-full ape:gap-[10px] ape:flex-col ape:md:flex-row\">\n <Button\n variant=\"secondary\"\n onClick={() =>\n canBridge ? onOpenBridgeModal() : bondChain === ChainId.L1X ? onOpenl1xIframe() : openExternal()\n }\n onMouseEnter={canBridge ? bridge.preload : undefined}\n onFocus={canBridge ? bridge.preload : undefined}\n className=\"ape:w-full ape:md:w-[35%] ape:text-[14px]! ape:lg:text-[16px]!\"\n >\n {canBridge\n ? isProjectView\n ? 'Bridge funds'\n : `Bridge to ${SHORT_NETWORK_LABEL[bondData?.chainId as ChainId]}`\n : `Get ${getSymbol(bondData?.lpToken, bondData?.chainId)}`}\n </Button>\n {isUserRestricted ? (\n <Button className=\"action-button ape:w-full\" disabled>\n INSUFFICIENT TIER\n </Button>\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || fetchingZapQuote}\n disabled={\n load ||\n bondData?.soldOut ||\n !account ||\n !inputValue ||\n parseFloat(inputValue) === 0 ||\n fetchingZapQuote ||\n zapError ||\n exceedsRealMaxBuy ||\n exceedsBalance ||\n (isZapSupported && !zapData) ||\n SDKConfig.blockSales\n }\n onClick={handleOpenModal}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Exceeds balance'\n : zapError\n ? 'something went wrong'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : `buy`}\n </Button>\n )}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\nexport default React.memo(BuyComponent)\n"],"names":["_jsx","L1xIframe","_jsxs","_Fragment"],"mappings":"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"}
@@ -30,7 +30,7 @@ import LpBondModalHeader from './LpBondModalHeader.js';
30
30
  import LpStakingEstimations from './LpStakingEstimations.js';
31
31
  import useSortedZapList from '../../../../hooks/useSortedZapList.js';
32
32
  import { getSymbol } from '../../../../utils/getNativeTicker.js';
33
- import { formatUSDNumber } from '../../../../utils/displayHelpers.js';
33
+ import { formatUSDNumber, getMaxBuy } from '../../../../utils/displayHelpers.js';
34
34
 
35
35
  /**
36
36
  * Buy form of LP staking bonds (`billType === 'lpStaking'`). Kept apart from the regular EVM BuyComponent because the
@@ -75,6 +75,17 @@ const BuyComponentLpStaking = ({ onDismiss, bondAddress, bondChain, handlePurcha
75
75
  const spendAmount = parseFloat(inputValue) || 0;
76
76
  const youSpendString = `${spendAmount.toLocaleString()} ${getSymbol(inputToken, bondData?.chainId)}${inputTokenPrice ? ` ($${formatUSDNumber((spendAmount * inputTokenPrice).toString())})` : ''}`;
77
77
  const isZapSupported = false;
78
+ // Every purchase goes through the zap, so it can't be sent without a quote to send
79
+ const hasZapQuote = !zapError && !!zapData?.txData;
80
+ // maxPayout and the bond's remaining capacity are in the pool's stablecoin (lpToken1), counted at $1. Paying with it
81
+ // needs no price; other tokens are converted with their USD price, and can't be checked without one (the price
82
+ // guard still reverts the tx).
83
+ const stablecoinAddress = bondData?.lpStakingConfig?.lpToken1?.address?.[bondChain]?.toLowerCase();
84
+ const isPayingWithStablecoin = inputToken !== 'NATIVE' && inputToken?.address?.[bondChain]?.toLowerCase() === stablecoinAddress;
85
+ const spendInStablecoin = isPayingWithStablecoin ? spendAmount : spendAmount * (inputTokenPrice ?? 0);
86
+ const maxBuy = getMaxBuy(bondData, true);
87
+ // 0 when the limits couldn't be read; the price guard still applies then
88
+ const exceedsMaxBuy = maxBuy > 0 && spendInStablecoin > maxBuy;
78
89
  // Once the buy tx is confirmed, report the new position's NFT id so ModalHandlerLpStaking can show it. The adapter's
79
90
  // deposit event has it: topics = [event, tokenId, campaignId, buyer]. It's the token_id REAL's API lists the
80
91
  // position under, which is the bill's id.
@@ -126,7 +137,7 @@ const BuyComponentLpStaking = ({ onDismiss, bondAddress, bondChain, handlePurcha
126
137
  });
127
138
  };
128
139
  const handleBuy = async () => {
129
- if (!bondData || !bondAddress || !bondChain)
140
+ if (!bondData || !bondAddress || !bondChain || !hasZapQuote)
130
141
  return;
131
142
  if (isWrongChain) {
132
143
  try {
@@ -158,7 +169,7 @@ const BuyComponentLpStaking = ({ onDismiss, bondAddress, bondChain, handlePurcha
158
169
  });
159
170
  if (hash) {
160
171
  setBuyTxHash(hash);
161
- await sendReferenceId(bondAddress, bondChain, hash);
172
+ sendReferenceId(bondAddress, bondChain, hash);
162
173
  handlePurchasedBond?.({ buyTxHash: hash });
163
174
  track({
164
175
  event: 'bond',
@@ -195,16 +206,23 @@ const BuyComponentLpStaking = ({ onDismiss, bondAddress, bondChain, handlePurcha
195
206
  bondData?.soldOut ||
196
207
  isEmptyInput ||
197
208
  exceedsBalance ||
209
+ exceedsMaxBuy ||
198
210
  SDKConfig.blockSales ||
199
- zapLoading, onClick: isApproved ? handleBuy : handleApprove, children: exceedsBalance
211
+ zapLoading ||
212
+ // Approving doesn't need the quote, buying does
213
+ (isApproved && !hasZapQuote), onClick: isApproved ? handleBuy : handleApprove, children: exceedsBalance
200
214
  ? 'Exceeds balance'
201
215
  : isEmptyInput
202
216
  ? 'Insert amount'
203
- : isApproved
204
- ? zapLoading
205
- ? 'Loading'
206
- : 'buy'
207
- : 'approve' })) }) })] }) })) : (jsx(Fragment, {}));
217
+ : exceedsMaxBuy
218
+ ? 'Exceeds Max Buy. Reduce amount'
219
+ : isApproved
220
+ ? zapLoading
221
+ ? 'Loading'
222
+ : hasZapQuote
223
+ ? 'buy'
224
+ : 'Quote unavailable'
225
+ : 'approve' })) }) })] }) })) : (jsx(Fragment, {}));
208
226
  };
209
227
  var BuyComponentLpStaking$1 = React.memo(BuyComponentLpStaking);
210
228
 
@@ -1 +1 @@
1
- {"version":3,"file":"BuyComponentLpStaking.js","sources":["../../../../../src/adapters/evm/views/lpStaking/BuyComponentLpStaking.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useChainId, useSendTransaction, useSwitchChain } from 'wagmi'\nimport { ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport type { ChainBuyComponentProps } from '../../../types'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useSendReferenceId } from '../../../../hooks/useSendReferenceId'\nimport TokenSelectorPanel from '../../../../components/TokenSelectorPanel'\nimport ConnectButton from '../../../../components/ConnectButton'\nimport ProjectDescription from '../../../../views/BuyBond/components/ProjectDescription'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { MCBuyComponentStyles } from '../../../../utils/campaignStyles'\nimport { toFixedString } from '../../../../utils/fixedPoint'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport track from '../../../../utils/track'\nimport useEVMAccount from '../../state/useEVMAccount'\nimport { ApprovalState, useApproval } from '../../state/useAllowance'\nimport { useMonitorTx } from '../../state/useMonitorTx'\nimport clsx from 'clsx'\nimport BondCards from '../../../../views/BuyBond/components/BondCards/BondCards'\nimport Text from '../../../../components/uikit-sdk/Text'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport useSoulZapLpStakingQuote from '../../state/lpStaking/useSoulZapLpStakingQuote'\nimport { parseEther } from 'viem'\nimport useTokenFromZapList from '../../../../hooks/useTokenFromZapList'\nimport { SoulZapTokenManager } from '../../../../config/constants/addresses'\nimport { ZapSupportedChainId } from '../../../../config/constants/variables'\nimport LpBondModalHeader from './LpBondModalHeader'\nimport LpStakingEstimations from './LpStakingEstimations'\nimport useSortedZapList from '../../../../hooks/useSortedZapList'\nimport { getSymbol } from '../../../../utils/getNativeTicker'\nimport { formatUSDNumber } from '../../../../utils/displayHelpers'\n\n/**\n * Buy form of LP staking bonds (`billType === 'lpStaking'`). Kept apart from the regular EVM BuyComponent because the\n * flow is different: no zaps, tiers, bridge or max-buy rules. Rendered inside ModalHandlerLpStaking from the bond list,\n * and directly by ChainBuyComponent elsewhere.\n */\nconst BuyComponentLpStaking: React.FC<ChainBuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { switchChainAsync } = useSwitchChain()\n const { address: account } = useEVMAccount()\n const { data: bonds } = useBondsData()\n const { addToastError } = usePopups()\n const sendReferenceId = useSendReferenceId()\n const { sendTransactionAsync } = useSendTransaction()\n\n // Bond to be used\n const bondData = useMemo(\n () =>\n bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n ),\n [bonds, bondAddress, bondChain],\n )\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, bondChain)\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n\n const { sortedZapList } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n\n const inputTokenPrice = enrichedTokenData?.price\n\n // Zap call data\n\n const [zapLoading, zapData, , zapError] = useSoulZapLpStakingQuote(inputValue, inputToken, bondData, account)\n // console.log(zapData)\n\n // Static Data\n const load = loadingTx || (isConfirming && !isConfirmed)\n const isWrongChain = !!bondChain && userChainId !== bondChain\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isEmptyInput = !inputValue || parseFloat(inputValue) === 0\n\n const spendAmount = parseFloat(inputValue) || 0\n const youSpendString = `${spendAmount.toLocaleString()} ${getSymbol(inputToken, bondData?.chainId)}${inputTokenPrice ? ` ($${formatUSDNumber((spendAmount * inputTokenPrice).toString())})` : ''}`\n const isZapSupported = false\n\n // Once the buy tx is confirmed, report the new position's NFT id so ModalHandlerLpStaking can show it. The adapter's\n // deposit event has it: topics = [event, tokenId, campaignId, buyer]. It's the token_id REAL's API lists the\n // position under, which is the bill's id.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const adapter = bondData?.lpStakingConfig?.adapter?.toLowerCase()\n const campaignId = bondData?.lpStakingConfig?.campaignId?.toLowerCase()\n const depositLog = buyTxReceipt.logs.find(\n (log) => log.address.toLowerCase() === adapter && log.topics[2]?.toLowerCase() === campaignId,\n )\n const tokenIdTopic = depositLog?.topics[1]\n if (tokenIdTopic) setBillId(BigInt(tokenIdTopic).toString())\n } catch (e) {\n console.error(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n\n // State Handlers\n const handleMaxButton = useCallback(() => {\n setInputValue(inputCurrencyBalance ?? '0')\n }, [inputCurrencyBalance])\n\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId] ?? null,\n account ?? null,\n bondChain ?? null,\n )\n const isApproved = approvalState === ApprovalState.APPROVED\n\n const handleApprove = async () => {\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n await approveCallback()\n track({\n event: 'approveBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n }\n\n const handleBuy = async () => {\n if (!bondData || !bondAddress || !bondChain) return\n\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n\n setLoadingTx(true)\n const usdAmount = parseFloat(inputValue) * parseFloat(bondData?.principalTokenPrice ?? '0')\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: usdAmount,\n },\n })\n try {\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(bondAddress, bondChain, hash)\n handlePurchasedBond?.({ buyTxHash: hash })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-staking-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondAddress),\n usdAmount,\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyLpStakingBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n } finally {\n setLoadingTx(false)\n }\n }\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <LpBondModalHeader bondData={bondData} onDismiss={onDismiss} />\n <ProjectDescription description={bondData.shortDescription} isProjectView={isProjectView} />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={false} />\n </Flex>\n <LpStakingEstimations\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={zapLoading}\n zapError={zapError}\n protocolQuote={zapData?.protocolQuote}\n lpQuote={zapData?.lpQuote}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={parseFloat(bondData?.principalTokenPrice ?? '0')}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || approvalState === ApprovalState.PENDING || zapLoading}\n disabled={\n load ||\n approvalState === ApprovalState.PENDING ||\n bondData?.soldOut ||\n isEmptyInput ||\n exceedsBalance ||\n SDKConfig.blockSales ||\n zapLoading\n }\n onClick={isApproved ? handleBuy : handleApprove}\n >\n {exceedsBalance\n ? 'Exceeds balance'\n : isEmptyInput\n ? 'Insert amount'\n : isApproved\n ? zapLoading\n ? 'Loading'\n : 'buy'\n : 'approve'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default React.memo(BuyComponentLpStaking)\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"BuyComponentLpStaking.js","sources":["../../../../../src/adapters/evm/views/lpStaking/BuyComponentLpStaking.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useChainId, useSendTransaction, useSwitchChain } from 'wagmi'\nimport { ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport type { ChainBuyComponentProps } from '../../../types'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useSendReferenceId } from '../../../../hooks/useSendReferenceId'\nimport TokenSelectorPanel from '../../../../components/TokenSelectorPanel'\nimport ConnectButton from '../../../../components/ConnectButton'\nimport ProjectDescription from '../../../../views/BuyBond/components/ProjectDescription'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { MCBuyComponentStyles } from '../../../../utils/campaignStyles'\nimport { toFixedString } from '../../../../utils/fixedPoint'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport track from '../../../../utils/track'\nimport useEVMAccount from '../../state/useEVMAccount'\nimport { ApprovalState, useApproval } from '../../state/useAllowance'\nimport { useMonitorTx } from '../../state/useMonitorTx'\nimport clsx from 'clsx'\nimport BondCards from '../../../../views/BuyBond/components/BondCards/BondCards'\nimport Text from '../../../../components/uikit-sdk/Text'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport useSoulZapLpStakingQuote from '../../state/lpStaking/useSoulZapLpStakingQuote'\nimport { parseEther } from 'viem'\nimport useTokenFromZapList from '../../../../hooks/useTokenFromZapList'\nimport { SoulZapTokenManager } from '../../../../config/constants/addresses'\nimport { ZapSupportedChainId } from '../../../../config/constants/variables'\nimport LpBondModalHeader from './LpBondModalHeader'\nimport LpStakingEstimations from './LpStakingEstimations'\nimport useSortedZapList from '../../../../hooks/useSortedZapList'\nimport { getSymbol } from '../../../../utils/getNativeTicker'\nimport { formatUSDNumber, getMaxBuy } from '../../../../utils/displayHelpers'\n\n/**\n * Buy form of LP staking bonds (`billType === 'lpStaking'`). Kept apart from the regular EVM BuyComponent because the\n * flow is different: no zaps, tiers, bridge or max-buy rules. Rendered inside ModalHandlerLpStaking from the bond list,\n * and directly by ChainBuyComponent elsewhere.\n */\nconst BuyComponentLpStaking: React.FC<ChainBuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { switchChainAsync } = useSwitchChain()\n const { address: account } = useEVMAccount()\n const { data: bonds } = useBondsData()\n const { addToastError } = usePopups()\n const sendReferenceId = useSendReferenceId()\n const { sendTransactionAsync } = useSendTransaction()\n\n // Bond to be used\n const bondData = useMemo(\n () =>\n bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n ),\n [bonds, bondAddress, bondChain],\n )\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, bondChain)\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n\n const { sortedZapList } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n\n const inputTokenPrice = enrichedTokenData?.price\n\n // Zap call data\n\n const [zapLoading, zapData, , zapError] = useSoulZapLpStakingQuote(inputValue, inputToken, bondData, account)\n // console.log(zapData)\n\n // Static Data\n const load = loadingTx || (isConfirming && !isConfirmed)\n const isWrongChain = !!bondChain && userChainId !== bondChain\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isEmptyInput = !inputValue || parseFloat(inputValue) === 0\n\n const spendAmount = parseFloat(inputValue) || 0\n const youSpendString = `${spendAmount.toLocaleString()} ${getSymbol(inputToken, bondData?.chainId)}${inputTokenPrice ? ` ($${formatUSDNumber((spendAmount * inputTokenPrice).toString())})` : ''}`\n const isZapSupported = false\n // Every purchase goes through the zap, so it can't be sent without a quote to send\n const hasZapQuote = !zapError && !!zapData?.txData\n\n // maxPayout and the bond's remaining capacity are in the pool's stablecoin (lpToken1), counted at $1. Paying with it\n // needs no price; other tokens are converted with their USD price, and can't be checked without one (the price\n // guard still reverts the tx).\n const stablecoinAddress = bondData?.lpStakingConfig?.lpToken1?.address?.[bondChain as ChainId]?.toLowerCase()\n const isPayingWithStablecoin =\n inputToken !== 'NATIVE' && inputToken?.address?.[bondChain as ChainId]?.toLowerCase() === stablecoinAddress\n const spendInStablecoin = isPayingWithStablecoin ? spendAmount : spendAmount * (inputTokenPrice ?? 0)\n const maxBuy = getMaxBuy(bondData, true)\n // 0 when the limits couldn't be read; the price guard still applies then\n const exceedsMaxBuy = maxBuy > 0 && spendInStablecoin > maxBuy\n\n // Once the buy tx is confirmed, report the new position's NFT id so ModalHandlerLpStaking can show it. The adapter's\n // deposit event has it: topics = [event, tokenId, campaignId, buyer]. It's the token_id REAL's API lists the\n // position under, which is the bill's id.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const adapter = bondData?.lpStakingConfig?.adapter?.toLowerCase()\n const campaignId = bondData?.lpStakingConfig?.campaignId?.toLowerCase()\n const depositLog = buyTxReceipt.logs.find(\n (log) => log.address.toLowerCase() === adapter && log.topics[2]?.toLowerCase() === campaignId,\n )\n const tokenIdTopic = depositLog?.topics[1]\n if (tokenIdTopic) setBillId(BigInt(tokenIdTopic).toString())\n } catch (e) {\n console.error(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n\n // State Handlers\n const handleMaxButton = useCallback(() => {\n setInputValue(inputCurrencyBalance ?? '0')\n }, [inputCurrencyBalance])\n\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId] ?? null,\n account ?? null,\n bondChain ?? null,\n )\n const isApproved = approvalState === ApprovalState.APPROVED\n\n const handleApprove = async () => {\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n await approveCallback()\n track({\n event: 'approveBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n }\n\n const handleBuy = async () => {\n if (!bondData || !bondAddress || !bondChain || !hasZapQuote) return\n\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n\n setLoadingTx(true)\n const usdAmount = parseFloat(inputValue) * parseFloat(bondData?.principalTokenPrice ?? '0')\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: usdAmount,\n },\n })\n try {\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n sendReferenceId(bondAddress, bondChain, hash)\n handlePurchasedBond?.({ buyTxHash: hash })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-staking-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondAddress),\n usdAmount,\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyLpStakingBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n } finally {\n setLoadingTx(false)\n }\n }\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <LpBondModalHeader bondData={bondData} onDismiss={onDismiss} />\n <ProjectDescription description={bondData.shortDescription} isProjectView={isProjectView} />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={false} />\n </Flex>\n <LpStakingEstimations\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={zapLoading}\n zapError={zapError}\n protocolQuote={zapData?.protocolQuote}\n lpQuote={zapData?.lpQuote}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={parseFloat(bondData?.principalTokenPrice ?? '0')}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || approvalState === ApprovalState.PENDING || zapLoading}\n disabled={\n load ||\n approvalState === ApprovalState.PENDING ||\n bondData?.soldOut ||\n isEmptyInput ||\n exceedsBalance ||\n exceedsMaxBuy ||\n SDKConfig.blockSales ||\n zapLoading ||\n // Approving doesn't need the quote, buying does\n (isApproved && !hasZapQuote)\n }\n onClick={isApproved ? handleBuy : handleApprove}\n >\n {exceedsBalance\n ? 'Exceeds balance'\n : isEmptyInput\n ? 'Insert amount'\n : exceedsMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : isApproved\n ? zapLoading\n ? 'Loading'\n : hasZapQuote\n ? 'buy'\n : 'Quote unavailable'\n : 'approve'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default React.memo(BuyComponentLpStaking)\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -238,7 +238,7 @@ const BuyComponentSolana = ({ onDismiss, bondAddress, bondChain, isProjectView,
238
238
  usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),
239
239
  },
240
240
  });
241
- await sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, txId);
241
+ sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, txId);
242
242
  // waits 3 seconds before triggering after-purchase flow
243
243
  await new Promise((resolve) => setTimeout(resolve, 3000));
244
244
  addToastSuccess(txId, bondChain);
@@ -477,7 +477,7 @@ const BuyComponentSolana = ({ onDismiss, bondAddress, bondChain, isProjectView,
477
477
  console.log('SINGLE transaction confirmed:', txId);
478
478
  // Track success
479
479
  trackZapEvents('single-tx');
480
- await sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, txId);
480
+ sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, txId);
481
481
  await new Promise((resolve) => setTimeout(resolve, 3000));
482
482
  addToastSuccess(txId, bondChain);
483
483
  setBillId?.(nftMint.publicKey.toString());
@@ -528,7 +528,7 @@ const BuyComponentSolana = ({ onDismiss, bondAddress, bondChain, isProjectView,
528
528
  console.log('Bond transaction confirmed:', bondTxId);
529
529
  // Track both transactions
530
530
  trackZapEvents('two-tx');
531
- await sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, bondTxId);
531
+ sendReferenceId(bondData.contractAddress[bondData.chainId], ChainId.SOL, bondTxId);
532
532
  await new Promise((resolve) => setTimeout(resolve, 3000));
533
533
  addToastSuccess(bondTxId, bondChain);
534
534
  setBillId?.(nftMint.publicKey.toString());