{"version":3,"file":"static/chunks/pages/vesting-615ab03bb5586ffb.js","mappings":"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","sources":["webpack://_N_E/./src/state/claim/weekly/hooks.ts","webpack://_N_E/./src/state/claim/protocol/hooks.ts","webpack://_N_E/./src/pages/vesting/index.tsx","webpack://_N_E/?803b"],"sourcesContent":["import { ChainId, Currency, CurrencyAmount, JSBI, Token, SUSHI } from '@sushiswap/core-sdk'\nimport { WEEKLY_MERKLE_ROOT as MERKLE_ROOT } from './../../../constants/index'\nimport { getAddress, isAddress } from '@ethersproject/address'\nimport { useEffect, useState } from 'react'\nimport { TransactionResponse } from '@ethersproject/providers'\nimport { calculateGasMargin } from '../../../functions/trade'\nimport { useActiveWeb3React } from '../../../services/web3'\nimport { useMerkleDistributorContract } from '../../../hooks/useContract'\nimport { useSingleCallResult } from '../../multicall/hooks'\nimport { useTransactionAdder } from '../../transactions/hooks'\n\ninterface UserClaimData {\n index: number\n amount: string\n proof: string[]\n flags?: {\n isSOCKS: boolean\n isLP: boolean\n isUser: boolean\n }\n}\n\nconst CLAIM_PROMISES: { [key: string]: Promise } = {}\n\n// returns the claim for the given address, or null if not valid\nfunction fetchClaim(account: string, chainId: ChainId): Promise {\n if (!isAddress(account)) return Promise.reject(new Error('Invalid address'))\n const key = `${chainId}:${account}`\n // console.log('CLAIM_PROMISE:', CLAIM_PROMISES[key], key)\n return (CLAIM_PROMISES[key] =\n CLAIM_PROMISES[key] ??\n fetch(MERKLE_ROOT)\n .then((response) => response.json())\n .then((data) => {\n const claim: typeof data.claims[0] | undefined = data.claims[getAddress(account)] ?? undefined\n if (!claim) return null\n\n // console.log('claim:', claim)\n return {\n index: claim.index,\n amount: claim.amount,\n proof: claim.proof,\n }\n })\n .catch((error) => console.error('Failed to get claim data', error)))\n}\n\n// parse distributorContract blob and detect if user has claim data\n// null means we know it does not\nexport function useUserClaimData(account: string | null | undefined): UserClaimData | null | undefined {\n const { chainId } = useActiveWeb3React()\n\n const key = `${chainId}:${account}`\n const [claimInfo, setClaimInfo] = useState<{\n [key: string]: UserClaimData | null\n }>({})\n\n useEffect(() => {\n if (!account || !chainId) return\n fetchClaim(account, chainId).then((accountClaimInfo) =>\n setClaimInfo((claimInfo) => {\n // console.log('claimInfo:', claimInfo, accountClaimInfo, key)\n return {\n ...claimInfo,\n [key]: accountClaimInfo,\n }\n })\n )\n }, [account, chainId, key])\n\n return account && chainId ? claimInfo[key] : undefined\n}\n\n// check if user is in blob and has not yet claimed UNI\nexport function useUserHasAvailableClaim(account: string | null | undefined): boolean {\n const userClaimData = useUserClaimData(account)\n const distributorContract = useMerkleDistributorContract()\n const isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData?.index])\n // user is in blob and contract marks as unclaimed\n return Boolean(userClaimData && !isClaimedResult.loading && isClaimedResult.result?.[0] === false)\n}\n\nexport function useUserUnclaimedAmount(account: string | null | undefined): CurrencyAmount | undefined {\n const { chainId } = useActiveWeb3React()\n const userClaimData = useUserClaimData(account)\n const canClaim = useUserHasAvailableClaim(account)\n\n const sushi = chainId ? SUSHI[chainId] : undefined\n\n // console.log('claimStats:', {\n // canClaim: canClaim,\n // userClaimData: userClaimData,\n // sushi: sushi\n // })\n\n if (!sushi) return undefined\n if (!canClaim || !userClaimData) {\n return CurrencyAmount.fromRawAmount(sushi, JSBI.BigInt(0))\n }\n return CurrencyAmount.fromRawAmount(sushi, JSBI.BigInt(userClaimData.amount))\n}\n\nexport function useClaimCallback(account: string | null | undefined): {\n claimCallback: () => Promise\n} {\n // get claim data for this account\n const { library, chainId } = useActiveWeb3React()\n const claimData = useUserClaimData(account)\n\n // used for popup summary\n const unClaimedAmount: CurrencyAmount | undefined = useUserUnclaimedAmount(account)\n const addTransaction = useTransactionAdder()\n const distributorContract = useMerkleDistributorContract()\n\n const claimCallback = async function () {\n if (!claimData || !account || !library || !chainId || !distributorContract) return\n\n const args = [claimData.index, account, claimData.amount, claimData.proof]\n\n return distributorContract.estimateGas['claim'](...args, {}).then((estimatedGasLimit) => {\n return distributorContract\n .claim(...args, {\n value: null,\n gasLimit: calculateGasMargin(estimatedGasLimit),\n })\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: `Claimed ${unClaimedAmount?.toSignificant(4)} SUSHI`,\n claim: { recipient: account },\n })\n return response.hash\n })\n })\n }\n\n return { claimCallback }\n}\n","import { ChainId, Currency, CurrencyAmount, JSBI, Token, SUSHI } from '@sushiswap/core-sdk'\nimport { PROTOCOL_MERKLE_ROOT as MERKLE_ROOT } from './../../../constants'\nimport { getAddress, isAddress } from '@ethersproject/address'\nimport { useEffect, useState } from 'react'\n\nimport { TransactionResponse } from '@ethersproject/providers'\nimport { calculateGasMargin } from '../../../functions/trade'\nimport { useActiveWeb3React } from '../../../services/web3'\nimport { useProtocolMerkleDistributorContract as useMerkleDistributorContract } from '../../../hooks/useContract'\nimport { useSingleCallResult } from '../../multicall/hooks'\nimport { useTransactionAdder } from '../../transactions/hooks'\n\ninterface UserClaimData {\n index: number\n amount: string\n proof: string[]\n flags?: {\n isSOCKS: boolean\n isLP: boolean\n isUser: boolean\n }\n}\n\nconst CLAIM_PROMISES: { [key: string]: Promise } = {}\n\n// returns the claim for the given address, or null if not valid\nfunction fetchClaim(account: string, chainId: ChainId): Promise {\n if (!isAddress(account)) return Promise.reject(new Error('Invalid address'))\n const key = `${chainId}:${account}`\n // console.log('CLAIM_PROMISE:', CLAIM_PROMISES[key], key)\n return (CLAIM_PROMISES[key] =\n CLAIM_PROMISES[key] ??\n fetch(MERKLE_ROOT)\n .then((response) => response.json())\n .then((data) => {\n const claim: typeof data.claims[0] | undefined = data.claims[getAddress(account)] ?? undefined\n if (!claim) return null\n\n // console.log('claim:', claim)\n return {\n index: claim.index,\n amount: claim.amount,\n proof: claim.proof,\n }\n })\n .catch((error) => console.error('Failed to get claim data', error)))\n}\n\n// parse distributorContract blob and detect if user has claim data\n// null means we know it does not\nexport function useUserClaimData(account: string | null | undefined): UserClaimData | null | undefined {\n const { chainId } = useActiveWeb3React()\n\n const key = `${chainId}:${account}`\n const [claimInfo, setClaimInfo] = useState<{\n [key: string]: UserClaimData | null\n }>({})\n\n useEffect(() => {\n if (!account || !chainId) return\n fetchClaim(account, chainId).then((accountClaimInfo) =>\n setClaimInfo((claimInfo) => {\n // console.log('claimInfo:', claimInfo, accountClaimInfo, key)\n return {\n ...claimInfo,\n [key]: accountClaimInfo,\n }\n })\n )\n }, [account, chainId, key])\n\n return account && chainId ? claimInfo[key] : undefined\n}\n\n// check if user is in blob and has not yet claimed UNI\nexport function useUserHasAvailableClaim(account: string | null | undefined): boolean {\n const userClaimData = useUserClaimData(account)\n const distributorContract = useMerkleDistributorContract()\n const isClaimedResult = useSingleCallResult(distributorContract, 'isClaimed', [userClaimData?.index])\n // user is in blob and contract marks as unclaimed\n return Boolean(userClaimData && !isClaimedResult.loading && isClaimedResult.result?.[0] === false)\n}\n\nexport function useUserUnclaimedAmount(account: string | null | undefined): CurrencyAmount | undefined {\n const { chainId } = useActiveWeb3React()\n const userClaimData = useUserClaimData(account)\n const canClaim = useUserHasAvailableClaim(account)\n\n const sushi = chainId ? SUSHI[chainId] : undefined\n\n // console.log('claimStats:', {\n // canClaim: canClaim,\n // userClaimData: userClaimData,\n // sushi: sushi\n // })\n\n if (!sushi) return undefined\n if (!canClaim || !userClaimData) {\n return CurrencyAmount.fromRawAmount(sushi, JSBI.BigInt(0))\n }\n return CurrencyAmount.fromRawAmount(sushi, JSBI.BigInt(userClaimData.amount))\n}\n\nexport function useClaimCallback(account: string | null | undefined): {\n claimCallback: () => Promise\n} {\n // get claim data for this account\n const { library, chainId } = useActiveWeb3React()\n const claimData = useUserClaimData(account)\n\n // used for popup summary\n const unClaimedAmount: CurrencyAmount | undefined = useUserUnclaimedAmount(account)\n const addTransaction = useTransactionAdder()\n const distributorContract = useMerkleDistributorContract()\n\n const claimCallback = async function () {\n if (!claimData || !account || !library || !chainId || !distributorContract) return\n\n const args = [claimData.index, account, claimData.amount, claimData.proof]\n\n return distributorContract.estimateGas['claim'](...args, {}).then((estimatedGasLimit) => {\n return distributorContract\n .claim(...args, {\n value: null,\n gasLimit: calculateGasMargin(estimatedGasLimit),\n })\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: `Claimed ${unClaimedAmount?.toSignificant(4)} SUSHI`,\n claim: { recipient: account },\n })\n return response.hash\n })\n })\n }\n\n return { claimCallback }\n}\n","import { Currency, CurrencyAmount, Token } from '@sushiswap/core-sdk'\nimport React, { useEffect, useState } from 'react'\nimport Link from 'next/link'\nimport { useClaimCallback, useUserUnclaimedAmount } from '../../state/claim/weekly/hooks'\nimport {\n useClaimCallback as useProtocolClaimCallback,\n useUserUnclaimedAmount as useUserUnclaimedProtocolAmount,\n} from '../../state/claim/protocol/hooks'\nimport { useModalOpen, useToggleSelfClaimModal } from '../../state/application/hooks'\n\nimport { ApplicationModal } from '../../state/application/actions'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport Button from '../../components/Button'\nimport Container from '../../components/Container'\nimport Dots from '../../components/Dots'\nimport ExternalLink from '../../components/ExternalLink'\nimport Fraction from '../../entities/Fraction'\nimport Head from 'next/head'\nimport Loader from '../../components/Loader'\nimport QuestionHelper from '../../components/QuestionHelper'\nimport { formatNumber } from '../../functions/format'\nimport { isAddress } from '@ethersproject/address'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../../services/web3'\nimport { useLingui } from '@lingui/react'\nimport { useUserHasSubmittedClaim } from '../../state/transactions/hooks'\n\nimport DoubleGlowShadow from '../../components/DoubleGlowShadow'\nimport InariButton from '../../features/inari/Button'\nimport InariDescription from '../../features/inari/InariDescription'\nimport SideSwitch from '../../features/inari/SideSwitch'\nimport { ArrowRightIcon } from '@heroicons/react/outline'\nimport BalancePanel from '../../features/inari/BalancePanel'\nimport { useDerivedInariState, useInariState, useSelectedInariStrategy } from '../../state/inari/hooks'\nimport NetworkGuard from '../../guards/Network'\nimport { ChainId } from '@sushiswap/core-sdk'\nimport StrategyStepDisplay from '../../features/inari/StrategyStepDisplay'\nimport StrategySelector from '../../features/inari/StrategySelector'\nimport { Field } from '../../state/inari/types'\n\nconst Strategies = () => {\n const { i18n } = useLingui()\n const { inputValue, outputValue } = useInariState()\n const { tokens, general } = useDerivedInariState()\n const { balances } = useSelectedInariStrategy()\n\n return (\n <>\n \n Vesting | Sushi\n \n \n \n
\n \n
\n
\n
\n
\n \n \n \n {'SUSHI → MEOW'}\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 Execute\n \n
\n \n
\n
\n
\n
\n \n
\n \n )\n}\n\nconst VestingLayout = () => {\n const { i18n } = useLingui()\n\n return (\n
\n
\n
\n
{i18n._(t`Community Approval`)}
\n \n <>\n {i18n._(t`Vesting is executed within the guidelines selected by the community in`)}{' '}\n \n SIMP3\n \n .\n
\n
\n {i18n._(t`Please refer to the`)}{' '}\n \n {i18n._(t`forum discussion`)}\n {' '}\n {i18n._(t`for deliberations on additional points.`)}\n
\n
\n {i18n._(t`Additional records and weekly merkle updates can be found on`)}{' '}\n Github\n \n
\n
\n
\n \n \n \n )\n}\n\nconst ProtocolVesting = () => {\n const { i18n } = useLingui()\n\n const isOpen = useModalOpen(ApplicationModal.SELF_CLAIM)\n const toggleClaimModal = useToggleSelfClaimModal()\n\n const { account } = useActiveWeb3React()\n const [attempting, setAttempting] = useState(false)\n const { claimCallback } = useProtocolClaimCallback(account)\n const unclaimedAmount: CurrencyAmount | undefined = useUserUnclaimedProtocolAmount(account)\n const { claimSubmitted } = useUserHasSubmittedClaim(account ?? undefined)\n const claimConfirmed = false\n\n function onClaim() {\n setAttempting(true)\n claimCallback()\n // reset modal and log error\n .catch((error) => {\n setAttempting(false)\n console.log(error)\n })\n }\n\n // once confirmed txn is found, if modal is closed open, mark as not attempting regradless\n useEffect(() => {\n if (claimConfirmed && claimSubmitted && attempting) {\n setAttempting(false)\n if (!isOpen) {\n toggleClaimModal()\n }\n }\n }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal])\n\n const [totalLocked, setTotalLocked] = useState()\n useEffect(() => {\n const fetchLockup = async () => {\n if (account) {\n fetch(\n 'https://raw.githubusercontent.com/sushiswap/sushi-vesting/master/amounts-protocols-10959148-12171394.json'\n )\n .then((response) => response.json())\n .then((data) => {\n // console.log('vesting:', data)\n const userLockedAmount = data[account.toLowerCase()] ? data[account.toLowerCase()] : '0'\n const userLocked = Fraction.from(BigNumber.from(userLockedAmount), BigNumber.from(10).pow(18)).toString()\n setTotalLocked(userLocked)\n // console.log('userLocked:', userLocked)\n })\n .catch((error) => {\n console.log(error)\n })\n }\n return []\n }\n fetchLockup()\n }, [account])\n\n // remove once treasury signature passed\n const pendingTreasurySignature = false\n\n return (\n
\n
\n
\n
\n
{i18n._(t`Claimable SUSHI from Protocols`)}
\n \n
\n {/*
*/}\n
\n
\n {unclaimedAmount?.toFixed(4, { groupSeparator: ',' } ?? {})}\n
\n {account ? (\n
\n {totalLocked ? (\n i18n._(t`Historical Total Locked: ${formatNumber(totalLocked)} SUSHI`)\n ) : (\n {i18n._(t`Historical Total Locked: Fetching Total`)}\n )}\n
\n ) : (\n
{i18n._(t`Historical Total Locked: Connect Wallet`)}
\n )}\n
\n\n \n {pendingTreasurySignature ? (\n {i18n._(t`Pending Treasury Transfer`)}\n ) : (\n <> {claimConfirmed ? i18n._(t`Claimed`) : i18n._(t`Claim SUSHI`)}\n )}\n\n {attempting && (\n \n )}\n \n
\n
\n
\n )\n}\n\nconst WeeklyVesting = () => {\n const { i18n } = useLingui()\n\n const isOpen = useModalOpen(ApplicationModal.SELF_CLAIM)\n const toggleClaimModal = useToggleSelfClaimModal()\n\n const { account } = useActiveWeb3React()\n const [attempting, setAttempting] = useState(false)\n const { claimCallback } = useClaimCallback(account)\n const unclaimedAmount: CurrencyAmount | undefined = useUserUnclaimedAmount(account)\n const { claimSubmitted } = useUserHasSubmittedClaim(account ?? undefined)\n const claimConfirmed = false\n\n function onClaim() {\n setAttempting(true)\n claimCallback()\n // reset modal and log error\n .catch((error) => {\n setAttempting(false)\n console.log(error)\n })\n }\n\n // once confirmed txn is found, if modal is closed open, mark as not attempting regradless\n useEffect(() => {\n if (claimConfirmed && claimSubmitted && attempting) {\n setAttempting(false)\n if (!isOpen) {\n toggleClaimModal()\n }\n }\n }, [attempting, claimConfirmed, claimSubmitted, isOpen, toggleClaimModal])\n\n const [totalLocked, setTotalLocked] = useState()\n useEffect(() => {\n const fetchLockup = async () => {\n if (account) {\n fetch('https://raw.githubusercontent.com/sushiswap/sushi-vesting/master/amounts-10959148-12171394.json')\n .then((response) => response.json())\n .then((data) => {\n // console.log('vesting:', data)\n const userLockedAmount = data[account.toLowerCase()] ? data[account.toLowerCase()] : '0'\n const userLocked = Fraction.from(BigNumber.from(userLockedAmount), BigNumber.from(10).pow(18)).toString()\n setTotalLocked(userLocked)\n // console.log('userLocked:', userLocked)\n })\n .catch((error) => {\n console.log(error)\n })\n }\n return []\n }\n fetchLockup()\n }, [account])\n\n // remove once treasury signature passed\n const pendingTreasurySignature = false\n\n let vault = ''\n if (!pendingTreasurySignature && Number(unclaimedAmount?.toFixed(8)) > 0) {\n vault = 'https://raw.githubusercontent.com/sushiswap/sushi-content/master/images/sushi-vault-reverse.png'\n } else if (!pendingTreasurySignature && Number(unclaimedAmount?.toFixed(8)) <= 0) {\n vault = 'https://raw.githubusercontent.com/sushiswap/sushi-content/master/images/vesting-safe-off.png'\n } else if (pendingTreasurySignature) {\n vault = 'https://raw.githubusercontent.com/sushiswap/sushi-content/master/images/vesting-safe-closed.png'\n }\n\n return (\n
\n
\n
\n
\n
{i18n._(t`Your Claimable SUSHI this Week`)}
\n \n
\n {/*
*/}\n
\n
\n {unclaimedAmount?.toFixed(4, { groupSeparator: ',' } ?? {})}\n
\n {account ? (\n
\n {totalLocked ? (\n i18n._(t`Historical Total Locked: ${formatNumber(totalLocked)} SUSHI`)\n ) : (\n {i18n._(t`Historical Total Locked: Fetching Total`)}\n )}\n
\n ) : (\n
{i18n._(t`Historical Total Locked: Connect Wallet`)}
\n )}\n
\n\n \n {pendingTreasurySignature ? (\n {i18n._(t`Pending Treasury Transfer`)}\n ) : (\n <> {claimConfirmed ? i18n._(t`Claimed`) : i18n._(t`Claim SUSHI`)}\n )}\n\n {attempting && (\n \n )}\n \n
\n
\n
\n )\n}\n\nStrategies.Guard = NetworkGuard([ChainId.ETHEREUM])\n\nexport default Strategies\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/vesting\",\n function () {\n return require(\"private-next-pages/vesting/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/vesting\"])\n });\n }\n "],"names":["CLAIM_PROMISES","useUserClaimData","account","chainId","useActiveWeb3React","key","claimInfo","setClaimInfo","useState","useEffect","isAddress","Promise","reject","Error","fetch","MERKLE_ROOT","then","response","json","data","claim","claims","getAddress","undefined","index","amount","proof","catch","error","console","fetchClaim","accountClaimInfo","useUserUnclaimedAmount","userClaimData","canClaim","distributorContract","useMerkleDistributorContract","isClaimedResult","useSingleCallResult","Boolean","loading","result","useUserHasAvailableClaim","sushi","SUSHI","CurrencyAmount","JSBI","Strategies","i18n","useLingui","inputValue","outputValue","useInariState","tokens","general","useDerivedInariState","balances","useSelectedInariStrategy","name","content","Container","maxWidth","className","VestingLayout","StrategySelector","href","StrategyStepDisplay","SideSwitch","DoubleGlowShadow","BalancePanel","label","_","showMax","value","token","inputToken","symbol","inputSymbol","balance","inputTokenBalance","field","Field","width","height","outputToken","outputSymbol","outputTokenBalance","color","InariDescription","style","minHeight","ExternalLink","WeeklyVesting","ProtocolVesting","isOpen","useModalOpen","ApplicationModal","toggleClaimModal","useToggleSelfClaimModal","attempting","setAttempting","claimCallback","library","claimData","unClaimedAmount","addTransaction","useTransactionAdder","async","args","estimateGas","estimatedGasLimit","gasLimit","calculateGasMargin","summary","toSignificant","recipient","hash","useProtocolClaimCallback","unclaimedAmount","useUserUnclaimedProtocolAmount","claimSubmitted","useUserHasSubmittedClaim","claimConfirmed","totalLocked","setTotalLocked","userLockedAmount","toLowerCase","userLocked","Fraction","BigNumber","pow","toString","log","fetchLockup","pendingTreasurySignature","QuestionHelper","text","toFixed","groupSeparator","formatNumber","Dots","Button","Number","disabled","size","onClick","Loader","stroke","marginLeft","useClaimCallback","vault","Guard","NetworkGuard","ChainId","window","__NEXT_P","push"],"sourceRoot":""}