Skip to content

Commit

Permalink
feat: estimate Prime APYs with averages from Prime users (#1903)
Browse files Browse the repository at this point in the history
  • Loading branch information
gleiser-oliveira authored Dec 6, 2023
1 parent 058d14c commit 5eb68a0
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ exports[`getLegacyPool > does not fetch Prime distributions if user is not Prime
{
"apyPercentage": "0.20019958435848473",
"referenceValues": {
"userBorrowBalanceTokens": "66012867068.78838627155172413793",
"userSupplyBalanceTokens": "15951129109546755.24488088106947945753",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "2405.43",
"userSupplyBalanceTokens": "13068.75",
"userXvsStakedTokens": "3265.3",
},
"token": {
"address": "0x16227D60f7a0e586C66B005219dfc887D13C9531",
Expand Down Expand Up @@ -66,9 +66,9 @@ exports[`getLegacyPool > does not fetch Prime distributions if user is not Prime
{
"apyPercentage": "0.23026397657694986",
"referenceValues": {
"userBorrowBalanceTokens": "66012867068.78838627155172413793",
"userSupplyBalanceTokens": "15951129109546755.24488088106947945753",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "2405.43",
"userSupplyBalanceTokens": "13068.75",
"userXvsStakedTokens": "3265.3",
},
"token": {
"address": "0x16227D60f7a0e586C66B005219dfc887D13C9531",
Expand Down Expand Up @@ -120,9 +120,9 @@ exports[`getLegacyPool > does not fetch Prime distributions if user is not Prime
{
"apyPercentage": "0.20019958435848473",
"referenceValues": {
"userBorrowBalanceTokens": "110643.61749019365079365079",
"userSupplyBalanceTokens": "1.358795738297682434014619091383216952499549585717162e+31",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "10009.21",
"userSupplyBalanceTokens": "5003.94",
"userXvsStakedTokens": "3731.33",
},
"token": {
"address": "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c",
Expand Down Expand Up @@ -162,9 +162,9 @@ exports[`getLegacyPool > does not fetch Prime distributions if user is not Prime
{
"apyPercentage": "0.23026397657694986",
"referenceValues": {
"userBorrowBalanceTokens": "110643.61749019365079365079",
"userSupplyBalanceTokens": "1.358795738297682434014619091383216952499549585717162e+31",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "10009.21",
"userSupplyBalanceTokens": "5003.94",
"userXvsStakedTokens": "3731.33",
},
"token": {
"address": "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c",
Expand Down Expand Up @@ -669,9 +669,9 @@ exports[`getLegacyPool > fetches and formats Prime distributions and Prime distr
{
"apyPercentage": "0.20019958435848473",
"referenceValues": {
"userBorrowBalanceTokens": "66012867068.78838627155172413793",
"userSupplyBalanceTokens": "15951129109546755.24488088106947945753",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "2405.43",
"userSupplyBalanceTokens": "13068.75",
"userXvsStakedTokens": "3265.3",
},
"token": {
"address": "0x16227D60f7a0e586C66B005219dfc887D13C9531",
Expand Down Expand Up @@ -721,9 +721,9 @@ exports[`getLegacyPool > fetches and formats Prime distributions and Prime distr
{
"apyPercentage": "0.23026397657694986",
"referenceValues": {
"userBorrowBalanceTokens": "66012867068.78838627155172413793",
"userSupplyBalanceTokens": "15951129109546755.24488088106947945753",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "2405.43",
"userSupplyBalanceTokens": "13068.75",
"userXvsStakedTokens": "3265.3",
},
"token": {
"address": "0x16227D60f7a0e586C66B005219dfc887D13C9531",
Expand Down Expand Up @@ -785,9 +785,9 @@ exports[`getLegacyPool > fetches and formats Prime distributions and Prime distr
{
"apyPercentage": "0.20019958435848473",
"referenceValues": {
"userBorrowBalanceTokens": "110643.61749019365079365079",
"userSupplyBalanceTokens": "1.358795738297682434014619091383216952499549585717162e+31",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "10009.21",
"userSupplyBalanceTokens": "5003.94",
"userXvsStakedTokens": "3731.33",
},
"token": {
"address": "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c",
Expand Down Expand Up @@ -837,9 +837,9 @@ exports[`getLegacyPool > fetches and formats Prime distributions and Prime distr
{
"apyPercentage": "0.23026397657694986",
"referenceValues": {
"userBorrowBalanceTokens": "110643.61749019365079365079",
"userSupplyBalanceTokens": "1.358795738297682434014619091383216952499549585717162e+31",
"userXvsStakedTokens": "1000",
"userBorrowBalanceTokens": "10009.21",
"userSupplyBalanceTokens": "5003.94",
"userXvsStakedTokens": "3731.33",
},
"token": {
"address": "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,27 @@ export interface ResolvePrimeSimulationDistributionsInput {
accountAddress?: string;
}

const supplyAveragesForToken: Record<string, BigNumber> = {
BTCB: new BigNumber('0.71'),
ETH: new BigNumber('9.86'),
USDT: new BigNumber('5003.94'),
USDC: new BigNumber('13068.75'),
};

const borrowAveragesForToken: Record<string, BigNumber> = {
BTCB: new BigNumber('0.04'),
ETH: new BigNumber('0.49'),
USDT: new BigNumber('10009.21'),
USDC: new BigNumber('2405.43'),
};

const xvsStakedAveragesForToken: Record<string, BigNumber> = {
BTCB: new BigNumber('4124.59'),
ETH: new BigNumber('4788.05'),
USDT: new BigNumber('3731.33'),
USDC: new BigNumber('3265.30'),
};

export const appendPrimeSimulationDistributions = async ({
primeContract,
primeVTokenAddresses,
Expand All @@ -43,30 +64,42 @@ export const appendPrimeSimulationDistributions = async ({
}

const promise = async () => {
const averageBorrowBalanceTokens = asset.borrowBalanceTokens.dividedBy(asset.borrowerCount);
const { symbol } = asset.vToken.underlyingToken;
const averageBorrowBalanceTokens =
borrowAveragesForToken[symbol] ||
asset.borrowBalanceTokens.dividedBy(asset.borrowerCount);
const averageBorrowBalanceMantissa = convertTokensToMantissa({
value: averageBorrowBalanceTokens,
token: asset.vToken.underlyingToken,
});

const averageSupplyBalanceTokens = asset.supplyBalanceTokens.dividedBy(asset.supplierCount);
const averageSupplyBalanceTokens =
supplyAveragesForToken[symbol] ||
asset.supplyBalanceTokens.dividedBy(asset.supplierCount);
const averageSupplyBalanceMantissa = convertTokensToMantissa({
value: averageSupplyBalanceTokens,
token: asset.vToken.underlyingToken,
});

const averageXvsStakedTokens =
xvsStakedAveragesForToken[symbol] || primeMinimumXvsToStakeTokens;
const averageXvsStakedMantissa = convertTokensToMantissa({
value: averageXvsStakedTokens,
token: xvs,
});

const simulatedPrimeAprs = await primeContract.estimateAPR(
primeVTokenAddress,
accountAddress || NULL_ADDRESS,
averageBorrowBalanceMantissa.toFixed(),
averageSupplyBalanceMantissa.toFixed(),
primeMinimumXvsToStakeMantissa.toFixed(),
averageXvsStakedMantissa.toFixed(),
);

const referenceValues = {
userSupplyBalanceTokens: averageSupplyBalanceTokens,
userBorrowBalanceTokens: averageBorrowBalanceTokens,
userXvsStakedTokens: primeMinimumXvsToStakeTokens,
userXvsStakedTokens: averageXvsStakedTokens,
};

const borrowSimulatedPrimeApy = convertAprToApy({
Expand Down
2 changes: 1 addition & 1 deletion src/packages/translations/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@
},
"primeSimulationBoost": {
"label": "{{apyPrimeBoost}} Prime boost",
"tooltip": "Prime boost based on an average user supply of {{supplyBalance}}, borrow of {{borrowBalance}} and vault stake of {{xvsStaked}}. <Link>Learn more about Prime</Link>"
"tooltip": "Prime boost based on the median user supply of {{supplyBalance}}, borrow of {{borrowBalance}} and vault stake of {{xvsStaked}}. <Link>Learn more about Prime</Link>"
}
},
"columnKeys": {
Expand Down

0 comments on commit 5eb68a0

Please sign in to comment.