UNPKG

@augustdigital/pools

Version:

JS SDK for web3 interactions with the August Digital Lending Pools

116 lines 6.74 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRewardsStakingPositions = getRewardsStakingPositions; const utils_1 = require("@augustdigital/utils"); const abis_1 = require("@augustdigital/abis"); const ethers_1 = require("ethers"); const REWARDS_CHAIN = 43114; const REWARDS_SYMBOL = 'AVAX'; const REWARDS_DECIMALS = 18; const REWARDS_NAME = 'Avalanche'; const APR_MULTIPLIER = 31536000; const UP_AUSD_SYMBOL = 'upAUSD'; function getRewardsStakingPositions(_a) { return __awaiter(this, arguments, void 0, function* ({ rpcUrl, wallet, env, }) { var _b; try { const provider = (0, utils_1.createProvider)(rpcUrl); const chainId = Number((_b = (yield provider.getNetwork())) === null || _b === void 0 ? void 0 : _b.chainId); if (chainId !== REWARDS_CHAIN) { console.warn('#getStakingPositions: no rewards distributor on chain_id', chainId); return []; } if (wallet && !(0, ethers_1.isAddress)(wallet)) { console.warn('#getStakingPositions: wallet passed is not a valid address', wallet); return []; } const rewardDistributorAddresses = (0, utils_1.REWARD_DISTRIBUTOR_ADDRESS)(chainId); const positions = yield Promise.all(rewardDistributorAddresses.map((contract, i) => __awaiter(this, void 0, void 0, function* () { const rewardContract = (0, utils_1.createContract)({ address: contract, provider: provider, abi: abis_1.ABI_REWARD_DISTRIBUTOR, }); const totalStaked = yield rewardContract.totalStaked(); const rewardsPerSecond = yield rewardContract.rewardsPerSecond(); const stakingTokenCalls = ['decimals', 'symbol', 'name', 'totalSupply']; const stakingTokenAddress = (yield rewardContract.stakingToken()); const stakingTokenContract = (0, utils_1.createContract)({ address: stakingTokenAddress, provider: provider, abi: abis_1.ABI_ERC20, }); const [decimals, symbol, name, totalSupply] = yield Promise.all(stakingTokenCalls.map((staking) => stakingTokenContract[staking]())); let balance; let earned; if (wallet) { const formattedWallet = (0, ethers_1.getAddress)(wallet); balance = yield rewardContract.balanceOf(formattedWallet); earned = yield rewardContract.earned(formattedWallet); } const rewardTokenPriceInUsd = yield (0, utils_1.fetchTokenPrice)(REWARDS_SYMBOL); const normalizedRewardTokenPrice = (0, utils_1.toNormalizedBn)(rewardTokenPriceInUsd); const normalizedTotalStakedInPool = (0, utils_1.toNormalizedBn)(totalStaked, decimals); const normalizedTotalSupply = (0, utils_1.toNormalizedBn)(totalSupply, decimals); const normalizedRedeemable = (0, utils_1.toNormalizedBn)(earned, REWARDS_DECIMALS); const normalizedRewardsPerSecond = (0, utils_1.toNormalizedBn)(rewardsPerSecond, REWARDS_DECIMALS); const normalizedTotalStakedBalance = (0, utils_1.toNormalizedBn)(balance, decimals); const rewardTokenPriceToMultiply = symbol === UP_AUSD_SYMBOL ? Number(normalizedRewardTokenPrice === null || normalizedRewardTokenPrice === void 0 ? void 0 : normalizedRewardTokenPrice.normalized) : 1; const STAKED_APR = ((Number(normalizedRewardsPerSecond === null || normalizedRewardsPerSecond === void 0 ? void 0 : normalizedRewardsPerSecond.normalized) * APR_MULTIPLIER * rewardTokenPriceToMultiply) / (Number(normalizedTotalStakedInPool === null || normalizedTotalStakedInPool === void 0 ? void 0 : normalizedTotalStakedInPool.normalized) * Number(1))) * 100; const MAX_APR = ((Number(normalizedRewardsPerSecond === null || normalizedRewardsPerSecond === void 0 ? void 0 : normalizedRewardsPerSecond.normalized) * APR_MULTIPLIER * rewardTokenPriceToMultiply) / (Number(normalizedTotalStakedInPool === null || normalizedTotalStakedInPool === void 0 ? void 0 : normalizedTotalStakedInPool.normalized) * Number(1))) * 100; const activePosition = { id: String(i), rewardToken: { decimals: REWARDS_DECIMALS, symbol: REWARDS_SYMBOL, address: ethers_1.ZeroAddress, chain: REWARDS_CHAIN, redeemable: normalizedRedeemable, usd: normalizedRewardTokenPrice, name: REWARDS_NAME, }, stakingToken: { decimals: Number(decimals), symbol: symbol, address: stakingTokenAddress, chain: REWARDS_CHAIN, totalStaked: normalizedTotalStakedBalance, usd: normalizedRewardTokenPrice, totalSupply: normalizedTotalStakedInPool, name: name, }, rewardDistributor: contract, rewardPerSecond: (0, utils_1.toNormalizedBn)(rewardsPerSecond), apy: STAKED_APR, maxApy: MAX_APR, chainId: REWARDS_CHAIN, }; return activePosition; }))); return positions; } catch (e) { console.error('#getStakingPositions:', e); } }); } //# sourceMappingURL=staking.js.map