@augustdigital/pools
Version:
JS SDK for web3 interactions with the August Digital Lending Pools
116 lines • 6.74 kB
JavaScript
;
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