Created
November 8, 2020 18:21
-
-
Save gregorynicholas/e1afa094c8013b57e61f92d261c99bb0 to your computer and use it in GitHub Desktop.
Get COMP APY for USDT. Uses Node.js with Compound.js. Be sure to fill in your Infura project ID at the top. See comments for run instructions.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Compound = require('@compound-finance/compound-js'); | |
const provider = 'https://mainnet.infura.io/v3/<YOUR INFURA API KEY HERE>'; | |
const cTokenToGetCompApy = Compound.cUSDT; | |
const underlying = cTokenToGetCompApy.slice(1, 10); | |
const underlyingDecimals = Compound.decimals[underlying]; | |
const cTokenDecimals = 8; // always 8 | |
const comptroller = Compound.util.getAddress(Compound.Comptroller); | |
const opf = Compound.util.getAddress(Compound.PriceFeed); | |
const cTokenAddr = Compound.util.getAddress(cTokenToGetCompApy); | |
const apxBlockSpeedInSeconds = 13.15; | |
const compound = new Compound(provider); | |
(async function() { | |
let compSpeed = await Compound.eth.read( | |
comptroller, | |
'function compSpeeds(address cToken) public returns (uint)', | |
[ cTokenAddr ], | |
{ provider } | |
); | |
let compPrice = await compound.getPrice(Compound.COMP, underlying); | |
let totalBorrows = await Compound.eth.read( | |
cTokenAddr, | |
'function totalBorrowsCurrent() returns (uint)', | |
[], | |
{ provider } | |
); | |
let totalSupply = await Compound.eth.read( | |
cTokenAddr, | |
'function totalSupply() returns (uint)', | |
[], | |
{ provider } | |
); | |
let exchangeRate = await Compound.eth.read( | |
cTokenAddr, | |
'function exchangeRateCurrent() returns (uint)', | |
[], | |
{ provider } | |
); | |
// Total supply needs to be converted from cTokens | |
exchangeRate = +exchangeRate.toString() / Math.pow(10, 18); | |
compSpeed = compSpeed / 1e18; // COMP has 18 decimal places | |
compPrice = compPrice; // price feed is USD price with 6 decimal places | |
totalBorrows = +totalBorrows.toString() / (Math.pow(10, underlyingDecimals)); | |
totalSupply = (+totalSupply.toString() * exchangeRate) / (Math.pow(10, underlyingDecimals)); | |
console.log('compSpeed:', compSpeed); | |
console.log('compPrice:', compPrice); | |
console.log('totalBorrows:', totalBorrows); | |
console.log('totalSupply:', totalSupply); | |
console.log('exchangeRate:', exchangeRate); | |
const compPerDay = compSpeed * parseInt((60 * 60 * 24) / apxBlockSpeedInSeconds); | |
const compBorrowApy = +(100 * (Math.pow((1 + (compPrice * compPerDay / totalBorrows)), 365) - 1)).toFixed(2); | |
const compSupplyApy = +(100 * (Math.pow((1 + (compPrice * compPerDay / totalSupply)), 365) - 1)).toFixed(2); | |
console.log('compBorrowApy', compBorrowApy, '%'); | |
console.log('compSupplyApy:', compSupplyApy, '%'); | |
})().catch(console.error); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment