Skip to content

Commit

Permalink
feat: fetch Prime APYs and append Prime distributions to assets (#1646)
Browse files Browse the repository at this point in the history
  • Loading branch information
therealemjy authored Oct 30, 2023
1 parent 3ee3371 commit 23a30c9
Show file tree
Hide file tree
Showing 37 changed files with 1,286 additions and 204 deletions.
27 changes: 27 additions & 0 deletions src/__mocks__/contracts/prime.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { BigNumber as BN } from 'ethers';
import { Prime } from 'packages/contracts';

const primeResponses: {
MINIMUM_STAKED_XVS: Awaited<ReturnType<Prime['MINIMUM_STAKED_XVS']>>;
getAllMarkets: Awaited<ReturnType<Prime['getAllMarkets']>>;
calculateAPR: Awaited<ReturnType<Prime['calculateAPR']>>;
estimateAPR: Awaited<ReturnType<Prime['estimateAPR']>>;
} = {
MINIMUM_STAKED_XVS: BN.from('1000000000000000000000'),
getAllMarkets: [
'0xD5C4C2e2facBEB59D0216D0595d63FcDc6F9A1a7',
'0xb7526572FFE56AB9D7489838Bf2E18e3323b441A',
'0x08e0A5575De71037aE36AbfAfb516595fE68e5e4',
'0x74469281310195A04840Daf6EdF576F559a3dE80',
] as Awaited<ReturnType<Prime['getAllMarkets']>>,
calculateAPR: {
borrowAPR: BN.from('32'),
supplyAPR: BN.from('29'),
} as Awaited<ReturnType<Prime['calculateAPR']>>,
estimateAPR: {
borrowAPR: BN.from('20'),
supplyAPR: BN.from('23'),
} as Awaited<ReturnType<Prime['estimateAPR']>>,
};

export default primeResponses;
15 changes: 15 additions & 0 deletions src/__mocks__/models/asset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ export const assetData: Asset[] = [
type: 'primeSimulation',
token: xvs,
apyPercentage: new BigNumber('1.753105649796123742'),
referenceValues: {
userBorrowBalanceTokens: new BigNumber('1000'),
userSupplyBalanceTokens: new BigNumber('1000'),
userXvsStakedTokens: new BigNumber('1000'),
},
},
],
borrowDistributions: [
Expand All @@ -154,6 +159,11 @@ export const assetData: Asset[] = [
type: 'primeSimulation',
token: xvs,
apyPercentage: new BigNumber('1.015310564979612374'),
referenceValues: {
userBorrowBalanceTokens: new BigNumber('1000'),
userSupplyBalanceTokens: new BigNumber('1000'),
userXvsStakedTokens: new BigNumber('1000'),
},
},
],
},
Expand Down Expand Up @@ -195,6 +205,11 @@ export const assetData: Asset[] = [
type: 'primeSimulation',
token: xvs,
apyPercentage: new BigNumber('1.753105649796123742'),
referenceValues: {
userBorrowBalanceTokens: new BigNumber('1000'),
userSupplyBalanceTokens: new BigNumber('1000'),
userXvsStakedTokens: new BigNumber('1000'),
},
},
],
borrowDistributions: [
Expand Down
11 changes: 1 addition & 10 deletions src/clients/api/queries/getHypotheticalPrimeApys/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import BigNumber from 'bignumber.js';
import { Prime } from 'packages/contracts';
import { calculateApy } from 'utilities';

import { DAYS_PER_YEAR } from 'constants/daysPerYear';
import { convertAprToApy } from 'utilities';

export interface GetHypotheticalPrimeApysInput {
primeContract: Prime;
Expand All @@ -18,13 +16,6 @@ export interface GetHypotheticalPrimeApysOutput {
borrowApyPercentage: BigNumber;
}

const convertAprToApy = ({ aprBips }: { aprBips: string }) => {
// Convert bips to daily rate
const dailyRate = new BigNumber(aprBips).div(1000).div(DAYS_PER_YEAR);
// Convert daily rate to APY
return calculateApy({ dailyRate });
};

const getHypotheticalPrimeApys = async ({
primeContract,
vTokenAddress,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "400000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -111,7 +111,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -138,7 +138,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "1000000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -149,7 +149,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down Expand Up @@ -199,7 +199,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "14880000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -210,7 +210,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -237,7 +237,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "18600000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -248,7 +248,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down Expand Up @@ -298,7 +298,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "14880000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -309,7 +309,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -336,7 +336,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "18600000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -347,7 +347,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down Expand Up @@ -397,7 +397,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "56000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -408,7 +408,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -435,7 +435,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "80000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -446,7 +446,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down Expand Up @@ -485,7 +485,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "14880000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -496,7 +496,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -523,7 +523,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "18600000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -534,7 +534,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down Expand Up @@ -584,7 +584,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"borrowCapTokens": "14880000",
"borrowDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -595,7 +595,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -622,7 +622,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"supplyCapTokens": "18600000",
"supplyDistributions": [
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand All @@ -633,7 +633,7 @@ exports[`api/queries/getIsolatedPools > returns isolated pools in the correct fo
"type": "rewardDistributor",
},
{
"apyPercentage": "Infinity",
"apyPercentage": "1000000",
"dailyDistributedTokens": "25.0000000000000128",
"token": {
"address": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { logError } from 'errors';
import { AssetDistribution, Token } from 'types';

import findTokenByAddress from 'utilities/findTokenByAddress';
import formatDistribution from 'utilities/formatDistribution';
import formatRewardDistribution from 'utilities/formatRewardDistribution';
import multiplyMantissaDaily from 'utilities/multiplyMantissaDaily';

import { RewardsDistributorSettingsResult } from '../getRewardsDistributorSettingsMapping';
Expand Down Expand Up @@ -72,8 +72,7 @@ const formatDistributions = ({
});

supplyDistributions.push(
formatDistribution({
type: 'rewardDistributor',
formatRewardDistribution({
rewardToken,
rewardTokenPriceDollars,
dailyDistributedRewardTokens: supplyDailyDistributedRewardTokens,
Expand All @@ -94,8 +93,7 @@ const formatDistributions = ({
});

borrowDistributions.push(
formatDistribution({
type: 'rewardDistributor',
formatRewardDistribution({
rewardToken,
rewardTokenPriceDollars,
dailyDistributedRewardTokens: borrowDailyDistributedRewardTokens,
Expand Down
Loading

0 comments on commit 23a30c9

Please sign in to comment.