config#BLOCKS_PER_YEAR TypeScript Examples
The following examples show how to use
config#BLOCKS_PER_YEAR.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: apr.ts From glide-frontend with GNU General Public License v3.0 | 6 votes |
getPoolApr = (
stakingTokenPrice: number,
rewardTokenPrice: number,
totalStaked: number,
tokenPerBlock: number,
): number => {
const totalRewardPricePerYear = new BigNumber(rewardTokenPrice).times(tokenPerBlock).times(BLOCKS_PER_YEAR)
const totalStakingTokenInPool = new BigNumber(stakingTokenPrice).times(totalStaked)
const apr = totalRewardPricePerYear.div(totalStakingTokenInPool).times(100)
return apr.isNaN() || !apr.isFinite() ? null : apr.toNumber()
}
Example #2
Source File: calculations.ts From glide-frontend with GNU General Public License v3.0 | 6 votes |
getGlidesPerYear = (currentBlock: BigNumber) => {
// Reward sum
let rewardSum = new BigNumber(0)
let totalBlocks = BLOCKS_PER_YEAR
if (currentBlock.lt(GLIDE_START_BLOCK)) {
totalBlocks = totalBlocks.minus(GLIDE_START_BLOCK.minus(currentBlock))
}
let iterationBlocks = GLIDE_START_BLOCK.plus(1)
const currentPhase = phase(currentBlock)
// Calculate reward sum
while (totalBlocks.gt(0)) {
let nextBlockBorder
const iterationPhase = phase(iterationBlocks)
if (iterationPhase === 1) {
nextBlockBorder = GLIDE_BONUS_PERIOD
} else {
nextBlockBorder = GLIDE_REDUCTION_PERIOD
}
// If loop is same or after current block phase
if (currentPhase > 0 && iterationPhase >= currentPhase) {
let blocksForReward
if (iterationPhase === currentPhase) {
blocksForReward = iterationBlocks.minus(currentBlock)
} else if (iterationPhase > currentPhase) {
blocksForReward = nextBlockBorder
}
// Calculate rewards for current loop phase
blocksForReward = totalBlocks.minus(blocksForReward).gt(0) ? blocksForReward : totalBlocks
// Calculate reward sum before and for current loop phase
rewardSum = rewardSum.plus(rewardPerPhase(iterationPhase).multipliedBy(new BigNumber(blocksForReward)))
totalBlocks = totalBlocks.minus(blocksForReward)
}
iterationBlocks = iterationBlocks.plus(nextBlockBorder)
}
return rewardSum
}
Example #3
Source File: apr.ts From vvs-ui with GNU General Public License v3.0 | 6 votes |
getPoolApr = (
stakingTokenPrice: number,
rewardTokenPrice: number,
totalStaked: number,
tokenPerBlock: number,
): number => {
const totalRewardPricePerYear = new BigNumber(rewardTokenPrice).times(tokenPerBlock).times(BLOCKS_PER_YEAR)
const totalStakingTokenInPool = new BigNumber(stakingTokenPrice).times(totalStaked)
// const totalStakingTokenInPool = new BigNumber(stakingTokenPrice).times(1000000000) // XXX debug hard code for APR
const apr = totalRewardPricePerYear.div(totalStakingTokenInPool).times(100)
return apr.isNaN() || !apr.isFinite() ? null : apr.toNumber()
}
Example #4
Source File: EarnAPYCard.tsx From frontend-ui with GNU General Public License v3.0 | 5 votes |
EarnAPYCard = () => {
const TranslateString = useI18n()
const farmsLP = useFarms()
const bnbPrice = usePriceBnbBusd()
const maxAPY = useRef(Number.MIN_VALUE)
const getHighestAPY = () => {
const activeFarms = farmsLP.filter((farm) => farm.pid !== 0 && farm.multiplier !== '0X')
calculateAPY(activeFarms)
return (maxAPY.current * 100).toLocaleString('en-US').slice(0, -1)
}
const calculateAPY = useCallback(
(farmsToDisplay) => {
const pizzaPriceVsBNB = new BigNumber(farmsLP.find((farm) => farm.pid === PIZZA_POOL_PID)?.tokenPriceVsQuote || 0)
farmsToDisplay.map((farm) => {
if (!farm.tokenAmount || !farm.lpTotalInQuoteToken || !farm.lpTotalInQuoteToken) {
return farm
}
const pizzaRewardPerBlock = PIZZA_PER_BLOCK.times(farm.poolWeight)
const pizzaRewardPerYear = pizzaRewardPerBlock.times(BLOCKS_PER_YEAR)
let apy = pizzaPriceVsBNB.times(pizzaRewardPerYear).div(farm.lpTotalInQuoteToken)
if (farm.quoteTokenSymbol === QuoteToken.BUSD) {
apy = pizzaPriceVsBNB.times(pizzaRewardPerYear).div(farm.lpTotalInQuoteToken).times(bnbPrice)
} else if (farm.quoteTokenSymbol === QuoteToken.PIZZA) {
apy = pizzaRewardPerYear.div(farm.lpTotalInQuoteToken)
} else if (farm.dual) {
const pizzaApy =
farm && pizzaPriceVsBNB.times(pizzaRewardPerBlock).times(BLOCKS_PER_YEAR).div(farm.lpTotalInQuoteToken)
const dualApy =
farm.tokenPriceVsQuote &&
new BigNumber(farm.tokenPriceVsQuote)
.times(farm.dual.rewardPerBlock)
.times(BLOCKS_PER_YEAR)
.div(farm.lpTotalInQuoteToken)
apy = pizzaApy && dualApy && pizzaApy.plus(dualApy)
}
if (maxAPY.current < apy.toNumber()) maxAPY.current = apy.toNumber()
return apy
})
},
[bnbPrice, farmsLP],
)
return (
<StyledFarmStakingCard>
<CardBody>
<Heading color="contrast" size="lg">
Earn up to
</Heading>
<CardMidContent color="#EF4E7B">
{getHighestAPY() ? (
`${getHighestAPY()}% ${TranslateString(736, 'APY')}`
) : (
<Skeleton animation="pulse" variant="rect" height="44px" />
)}
</CardMidContent>
<Flex justifyContent="space-between">
<Heading color="contrast" size="lg">
in Farms
</Heading>
<NavLink exact activeClassName="active" to="/farms">
<ArrowForwardIcon mt={30} color="primary" />
</NavLink>
</Flex>
</CardBody>
</StyledFarmStakingCard>
)
}
Example #5
Source File: Farms.tsx From frontend-ui with GNU General Public License v3.0 | 4 votes |
Farms: React.FC = () => {
const { path } = useRouteMatch()
const TranslateString = useI18n()
const farmsLP = useFarms()
const pizzaPrice = usePricePizzaBusd()
const bnbPrice = usePriceBnbBusd()
const { account, ethereum }: { account: string; ethereum: provider } = useWallet()
const dispatch = useDispatch()
const { fastRefresh } = useRefresh()
useEffect(() => {
if (account) {
dispatch(fetchFarmUserDataAsync(account))
}
}, [account, dispatch, fastRefresh])
const activeFarms = farmsLP.filter((farm) => farm.pid !== 0 && farm.multiplier !== '0X')
const inactiveFarms = farmsLP.filter((farm) => farm.pid !== 0 && farm.multiplier === '0X')
// /!\ This function will be removed soon
// This function compute the APY for each farm and will be replaced when we have a reliable API
// to retrieve assets prices against USD
const farmsList = useCallback(
(farmsToDisplay, removed: boolean) => {
const pizzaPriceVsBNB = new BigNumber(farmsLP.find((farm) => farm.pid === PIZZA_POOL_PID)?.tokenPriceVsQuote || 0)
const farmsToDisplayWithAPY: FarmWithStakedValue[] = farmsToDisplay.map((farm) => {
if (!farm.tokenAmount || !farm.lpTotalInQuoteToken || !farm.lpTotalInQuoteToken) {
return farm
}
const pizzaRewardPerBlock = PIZZA_PER_BLOCK.times(farm.poolWeight)
const pizzaRewardPerYear = pizzaRewardPerBlock.times(BLOCKS_PER_YEAR)
let apy = pizzaPriceVsBNB.times(pizzaRewardPerYear).div(farm.lpTotalInQuoteToken)
if (farm.quoteTokenSymbol === QuoteToken.USDT || farm.quoteTokenSymbol === QuoteToken.USDC) {
apy = pizzaPriceVsBNB.times(pizzaRewardPerYear).div(farm.lpTotalInQuoteToken).times(bnbPrice)
} else if (farm.quoteTokenSymbol === QuoteToken.PIZZA) {
apy = pizzaRewardPerYear.div(farm.lpTotalInQuoteToken)
} else if (farm.dual) {
const pizzaApy =
farm && pizzaPriceVsBNB.times(pizzaRewardPerBlock).times(BLOCKS_PER_YEAR).div(farm.lpTotalInQuoteToken)
const dualApy =
farm.tokenPriceVsQuote &&
new BigNumber(farm.tokenPriceVsQuote)
.times(farm.dual.rewardPerBlock)
.times(BLOCKS_PER_YEAR)
.div(farm.lpTotalInQuoteToken)
apy = pizzaApy && dualApy && pizzaApy.plus(dualApy)
}
return { ...farm, apy }
})
return farmsToDisplayWithAPY.map((farm) => (
<FarmCard
key={farm.pid}
farm={farm}
removed={removed}
bnbPrice={bnbPrice}
pizzaPrice={pizzaPrice}
ethereum={ethereum}
account={account}
/>
))
},
[bnbPrice, farmsLP, account, pizzaPrice, ethereum],
)
return (
<Page>
<Heading as="h1" size="lg" color="secondary" mb="50px" style={{ textAlign: 'center' }}>
{TranslateString(999, 'Stake Cheese-LP tokens to earn PIZZA')}
</Heading>
<Heading as="h3" size="lg" color="secondary" mb="50px" style={{ textAlign: 'center' }}>
{TranslateString(999, 'CAUTION!: FARMS CALCULATED "APY" DATA IS REAL TIME AND AUTOMATICALLY COLLECTED FROM BLOCKCHAIN. DATA MAY NOT BE ACCURATE.')}
</Heading>
<FarmTabButtons />
<div>
<Divider />
<FlexLayout>
<Route exact path={`${path}`}>
{farmsList(activeFarms, false)}
</Route>
<Route exact path={`${path}/history`}>
{farmsList(inactiveFarms, true)}
</Route>
</FlexLayout>
</div>
<Image src="/images/farm-bg.svg" alt="PizzaFinance illustration" width={1080} height={600} responsive />
</Page>
)
}
Example #6
Source File: Pasta.tsx From frontend-ui with GNU General Public License v3.0 | 4 votes |
Farm: React.FC = () => {
const { path } = useRouteMatch()
const TranslateString = useI18n()
const { account } = useWallet()
const farms = useFarms()
const pools = usePools(account)
const bnbPriceUSD = usePriceBnbBusd()
const block = useBlock()
const priceToBnb = (tokenName: string, tokenPrice: BigNumber, quoteToken: QuoteToken): BigNumber => {
const tokenPriceBN = new BigNumber(tokenPrice)
if (tokenName === 'BNB') {
return new BigNumber(1)
}
if (tokenPrice && quoteToken === QuoteToken.BUSD) {
return tokenPriceBN.div(bnbPriceUSD)
}
return tokenPriceBN
}
const poolsWithApy = pools.map((pool) => {
const isBnbPool = pool.poolCategory === PoolCategory.BINANCE
const rewardTokenFarm = farms.find((f) => f.tokenSymbol === pool.tokenName)
const stakingTokenFarm = farms.find((s) => s.tokenSymbol === pool.stakingTokenName)
// /!\ Assume that the farm quote price is BNB
const stakingTokenPriceInBNB = isBnbPool ? new BigNumber(1) : new BigNumber(stakingTokenFarm?.tokenPriceVsQuote)
const rewardTokenPriceInBNB = priceToBnb(
pool.tokenName,
rewardTokenFarm?.tokenPriceVsQuote,
rewardTokenFarm?.quoteTokenSymbol,
)
const totalRewardPricePerYear = rewardTokenPriceInBNB.times(pool.tokenPerBlock).times(BLOCKS_PER_YEAR)
const totalStakingTokenInPool = stakingTokenPriceInBNB.times(getBalanceNumber(pool.totalStaked))
const apy = totalRewardPricePerYear.div(totalStakingTokenInPool).times(100)
return {
...pool,
isFinished: pool.pastaId === 0 ? false : pool.isFinished || block > pool.endBlock,
apy,
}
})
const [finishedPools, openPools] = partition(poolsWithApy, (pool) => pool.isFinished)
return (
<Page>
<Hero>
<div>
<Heading as="h1" size="xxl" mb="16px">
{TranslateString(282, 'SMART Pool')}
</Heading>
<Heading as="h4" size="l" mb="14px">
{TranslateString(282, 'PIZZA Smart Staking Pool')}
</Heading>
<Heading as="h4" size="l" mb="14px">
{TranslateString(282, 'CAUTION!!! PLEASE DO NOT SELL / MOVE YOUR EARNED #PASTA TOKEN. YOUR TRANSACTION MAY REVERT THEN.')}
</Heading>
<ul>
<li>{TranslateString(580, 'Stake PIZZA or supported tokens to earn')}</li>
<li>{TranslateString(580, 'Any listed NEW BEP20 tokens.')}</li>
<li>{TranslateString(404, 'You can unstake at any time..')}</li>
<li>{TranslateString(406, 'Rewards are calculated per block.')}</li>
<li>{TranslateString(406, '______________________________________________________________')}</li>
<li>{TranslateString(406, 'CAUTION!: STAKING POOLS CALCULATED "APY" DATA IS REAL TIME AND AUTOMATICALLY COLLECTED FROM BLOCKCHAIN. DATA MAY NOT ACCURATE.')}</li>
</ul>
</div>
<img src="/images/pasta-space.svg" alt="PASTA POOL icon" width={250} height={191} />
</Hero>
<PoolTabButtons />
<Divider />
<FlexLayout>
<Route exact path={`${path}`}>
<>
{orderBy(openPools, ['sortOrder']).map((pool) => (
<PoolCard key={pool.pastaId} pool={pool} />
))}
<Coming />
</>
</Route>
<Route path={`${path}/history`}>
{orderBy(finishedPools, ['sortOrder']).map((pool) => (
<PoolCard key={pool.pastaId} pool={pool} />
))}
</Route>
</FlexLayout>
</Page>
)
}