Last active
June 23, 2021 19:31
-
-
Save wafflemakr/6fe2a9d810c4e7179b85038a72b9aa75 to your computer and use it in GitHub Desktop.
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
/*! | |
* YieldFarming | |
* Boilerplate for a Static website using EJS and SASS | |
* https://yieldfarming.info | |
* @author Jongseung Lim -- https://yieldfarming.info | |
* Copyright 2021. MIT Licensed. | |
*/ | |
$(function() { | |
consoleInit(); | |
start(main); | |
}); | |
const MATIC_STAKING_ABI = [{"inputs":[{"internalType":"address","name":"_rewardsDistribution","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"stakeWithPermit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] | |
async function main() { | |
const App = await init_ethers(); | |
_print(`Initialized ${App.YOUR_ADDRESS}\n`); | |
_print("Reading smart contracts...\n"); | |
const tokens = {}; | |
const prices = await getMaticPrices(); | |
const pools = QuickStakingContracts.map(c => { return { | |
address: c.stakingRewardAddress, | |
abi: MATIC_STAKING_ABI, | |
stakeTokenFunction: "stakingToken", | |
rewardTokenFunction: "rewardsToken" | |
}}) | |
let p = await loadMultipleMaticSynthetixPools(App, tokens, prices, pools) | |
_print_bold(`Total staked: $${formatMoney(p.staked_tvl)}`); | |
if (p.totalUserStaked > 0) { | |
_print(`You are staking a total of $${formatMoney(p.totalUserStaked)} at an APR of ${(p.totalAPR * 100).toFixed(2)}%\n`); | |
} | |
hideLoading(); | |
} | |
const QuickStakingContracts =[ | |
{ | |
//tokens: [MATIC,QUICK], | |
stakingRewardAddress: '0x7Ca29F0DB5Db8b88B332Aa1d67a2e89DfeC85E7E', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 90 | |
}, | |
{ | |
//tokens: [ETHER,MATIC], | |
stakingRewardAddress: '0x8FF56b5325446aAe6EfBf006a4C1D88e4935a914', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 75 | |
}, | |
{ | |
//tokens: [GHST,QUICK], | |
stakingRewardAddress: '0xa132faD61EDe08f1f288a35ff4c10dcD1cB9E107', | |
ended: false, | |
name: 'StkGHST-QUICK', | |
lp: '0xA02d547512Bb90002807499F05495Fe9C4C3943f', | |
//baseToken: QUICK, | |
rate: 60 | |
}, | |
{ | |
//tokens: [WBTC,ETHER], | |
stakingRewardAddress: '0x070D182EB7E9C3972664C959CE58C5fC6219A7ad', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 60 | |
}, | |
{ | |
//tokens: [USDC,QUICK], | |
stakingRewardAddress: '0x8cFad56Eb742BA8CAEA813e47779E9C38f27cA6E', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 50 | |
}, | |
{ | |
//tokens: [GHST,USDC], | |
stakingRewardAddress: '0xfDC02Dc768a587514b992b03Fb713F74061764a2', | |
ended: false, | |
name: 'stkGHST-USDC', | |
lp: '0x04439eC4ba8b09acfae0E9b5D75A82cC63b19f09', | |
//baseToken: USDC, | |
rate: 38 | |
}, | |
{ | |
//tokens: [ETHER,WISE], | |
stakingRewardAddress: '0xb11856d3Aea0203e50B8520479C6332daBcF3f82', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 35 | |
}, | |
{ | |
//tokens: [ETHER,USDC], | |
stakingRewardAddress: '0x4A73218eF2e820987c59F838906A82455F42D98b', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 34 | |
}, | |
{ | |
//tokens: [LINK,ETHER], | |
stakingRewardAddress: '0x97D69E23DF7BBB01F9eA78b5651cb6ad125D6d9a', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 33 | |
}, | |
{ | |
//tokens: [AGA,AGAr], | |
stakingRewardAddress: '0x855b8dCA0Dfe3A1AC474f5A25792d4326580E06A', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: AGA, | |
rate: 30 | |
}, | |
{ | |
//tokens: [ETHER,QUICK], | |
stakingRewardAddress: '0xD1C762861AAe85dF2e586a668A793AAfF820932b', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 30 | |
}, | |
{ | |
//tokens: [QUICK,WISE], | |
stakingRewardAddress: '0x3CB338519AD8AE7cbaCb4A1035052BE6DA7e0b59', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 25 | |
}, | |
{ | |
//tokens: [SX,ETHER], | |
stakingRewardAddress: '0x225d8F0f5FB5D66cA7C0a27da85F462689c47C23', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 25 | |
}, | |
{ | |
//tokens: [CEL,ETHER], | |
stakingRewardAddress: '0x8917692e0Bdb47AF1D36837805E141Ed79065dFC', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 23 | |
}, | |
{ | |
//tokens: [MAUSDC,USDC], | |
stakingRewardAddress: '0x9Aac6390103C1Af774220aaB85bEB49Ae2DF11d6', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 20 | |
}, | |
{ | |
//tokens: [DAI,ETHER], | |
stakingRewardAddress: '0x785AaCd49c1Aa3ca573F2a32Bb90030A205b8147', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: DAI, | |
rate: 20 | |
}, | |
{ | |
//tokens: [AAVE,ETHER], | |
stakingRewardAddress: '0x573bb5CCC26222d8108EdaCFcC7F7cb9e388Af10', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 20 | |
}, | |
{ | |
//tokens: [FRAX,QUICK], | |
stakingRewardAddress: '0xa859D2C37A49bbd5992E39FCC37a7dD56aE130E7', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 16 | |
}, | |
{ | |
//tokens: [FRAX,FXS], | |
stakingRewardAddress: '0x2f5c21A2084fE66E3CEDe1dfd048Ea00b3dcf1f4', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: FRAX, | |
rate: 16 | |
}, | |
{ | |
//tokens: [ETHER,DEFI5], | |
stakingRewardAddress: '0xf563fAe71bDAcDD370098CeCff14dbe2c9518a6b', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 15 | |
}, | |
{ | |
//tokens: [USDC,USDT], | |
stakingRewardAddress: '0x251d9837a13F38F3Fe629ce2304fa00710176222', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 15 | |
}, | |
{ | |
//tokens: [WBTC,USDC], | |
stakingRewardAddress: '0x8f2ac4EC8982bF1699a6EeD696e204FA2ccD5D91', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 15 | |
}, | |
{ | |
//tokens: [QUICK,DEFI5], | |
stakingRewardAddress: '0xDdB4E83F0977CAf315f5A4d71930FD72DA00d8d9', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 14 | |
}, | |
{ | |
//tokens: [LINK,QUICK], | |
stakingRewardAddress: '0xfEc1E86786841FF699588DD1e88178AB2BB6DAbC', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 14 | |
}, | |
{ | |
//tokens: [WOLF,MATIC], | |
stakingRewardAddress: '0x3139523e1507cF6B0700Be2EABea6D5e919C6369', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 13 | |
}, | |
{ | |
//tokens: [SWAP,QUICK], | |
stakingRewardAddress: '0x219ab685344518c60eFb399a039EBC73cC4f1471', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 12.5 | |
}, | |
{ | |
//tokens: [DG,ETHER], | |
stakingRewardAddress: '0x0C7395bc2b25603941a67e4DaF327362dB8f7D54', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 12 | |
}, | |
{ | |
//tokens: [DG,QUICK], | |
stakingRewardAddress: '0x4aC2D949D9E7e2c47e0FB6c7e2316BAE58d27599', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 12 | |
}, | |
{ | |
//tokens: [DEGEN,QUICK], | |
stakingRewardAddress: '0x65Bb31f4ad1D9958Cd808d4337eaaB6F40CFaD2e', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 12 | |
}, | |
{ | |
//tokens: [GAME,QUICK], | |
stakingRewardAddress: '0x8FC0a8dE57d15dF22238FCd165Cd5d6658ac4788', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 11 | |
}, | |
{ | |
//tokens: [ETHER,DEGEN], | |
stakingRewardAddress: '0x729970954a0c26cdBe765A93020efC787283dfcA', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 10 | |
}, | |
{ | |
//tokens: [DAI,USDC], | |
stakingRewardAddress: '0xEd8413eCEC87c3d4664975743c02DB3b574012a7', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 10 | |
}, | |
{ | |
//tokens: [ARIA20,ETHER], | |
stakingRewardAddress: '0x5Afc79ce4481a4565B88074393F2DbFc19CbCDdC', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 9 | |
}, | |
{ | |
//tokens: [UBT,ETHER], | |
stakingRewardAddress: '0x219670F92CC0e0ef1C16BDB0aE266F0472930906', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 9 | |
}, | |
{ | |
//tokens: [UNITOKEN,QUICK], | |
stakingRewardAddress: '0x72ed24d2b2D98D3c4b5297ce244f623B9357F798', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 9 | |
}, | |
{ | |
//tokens: [MAAAVE,QUICK], | |
stakingRewardAddress: '0x994c2f4b860B9DC412502a57a60473d7b5AB20e5', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 8 | |
}, | |
{ | |
//tokens: [QUICK,CEL], | |
stakingRewardAddress: '0x0BA297E04008070E3075Fa08a920bB3CeC2ed45b', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 8 | |
}, | |
{ | |
//tokens: [QUICK,CC10], | |
stakingRewardAddress: '0xab1d645fe5148322D4991fCB3bceF6848a5e8123', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 7 | |
}, | |
{ | |
//tokens: [ETHER,HH], | |
stakingRewardAddress: '0xfc4a45f220EaB0a740635eBb3B3b391abbae4e07', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 7 | |
}, | |
{ | |
//tokens: [IFARM,QUICK], | |
stakingRewardAddress: '0xEa2EC0713D3B48234Ad4b2f14EDb4978D1228aE5', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 7 | |
}, | |
{ | |
//tokens: [CC10,ETHER], | |
stakingRewardAddress: '0x7cc64850E4c65e753247A1Ed2c8DF63DCF7d002d', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 6 | |
}, | |
{ | |
//tokens: [IFARM,MATIC], | |
stakingRewardAddress: '0xD26C29d8B22105d0f4dBBf5c421B228B74722C86', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 6 | |
}, | |
{ | |
//tokens: [UBT,QUICK], | |
stakingRewardAddress: '0x24830905906b53F737cDc8a227C9475C52795C5C', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 6 | |
}, | |
{ | |
//tokens: [NFTP,QUICK], | |
stakingRewardAddress: '0xB771f27de915529DcbBCeFd3b73f2537B94Ab3Fa', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 5 | |
}, | |
{ | |
//tokens: [SUPER,QUICK], | |
stakingRewardAddress: '0xe818cbeE29477e6C6915Df1e9757dd663f10106d', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 5 | |
}, | |
{ | |
//tokens: [EASY,QUICK], | |
stakingRewardAddress: '0x12bebB96E738159CB68c2be8ED775950e2CfFb50', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 5 | |
}, | |
{ | |
//tokens: [SX,QUICK], | |
stakingRewardAddress: '0x78A8Ef79CB397FeDD933922b3A3Ced03dAcE52d4', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 5 | |
}, | |
{ | |
//tokens: [VISION,ETHER], | |
stakingRewardAddress: '0x34D4257C4935673Fb5059f29602B9AAe9Dea0296', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 5 | |
}, | |
{ | |
//tokens: [QUICK,XMARK], | |
stakingRewardAddress: '0xFd20CfF4eBD6EaD961E86A1264eEa4B64F847150', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4.5 | |
}, | |
{ | |
//tokens: [SX,DAI], | |
stakingRewardAddress: '0xefF782c32385B5eBd196fFD860629a5c69216c25', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: DAI, | |
rate: 4.5 | |
}, | |
{ | |
//tokens: [GFARM2,ETHER], | |
stakingRewardAddress: '0x145bB9b8ebD72Ce915D1DDF6bcf3082027A38C9a', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 4 | |
}, | |
{ | |
//tokens: [MAYFI,MAUSDC], | |
stakingRewardAddress: '0xe13876aAFb5cd2e162ec253499Eb414083a96Af2', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 4 | |
}, | |
{ | |
//tokens: [MAUSDC,QUICK], | |
stakingRewardAddress: '0x8df5AdD0eB677d12EA86C5f83DdB7e184b750116', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [WOLF,QUICK], | |
stakingRewardAddress: '0x8732f213E8F82c6580e2579Dc2E3310aFF90E972', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [IGG,QUICK], | |
stakingRewardAddress: '0x0aC274597134209b640A18Fc70FaE075D33D1d87', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [MATIC,MOCEAN], | |
stakingRewardAddress: '0xEEc558404E179dEb5561fB043D8fd0567227FDE7', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 4 | |
}, | |
{ | |
//tokens: [SWAP,ETHER], | |
stakingRewardAddress: '0x897Bc9871F1D1c520F7c200480b556f87D6638e7', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 4 | |
}, | |
{ | |
//tokens: [SUPER,ETHER], | |
stakingRewardAddress: '0x214249a7bd9a6C10AdfF8fAd70749ebf8108494a', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 4 | |
}, | |
{ | |
//tokens: [ARIA20,QUICK], | |
stakingRewardAddress: '0xc74dAA25035577E20db7C1cDEb01bcfFfe4927Ac', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [GFARM2,QUICK], | |
stakingRewardAddress: '0x395c81AcB66aEfb84CAcc501Bd581f0B261e4Fc1', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [AGAr,QUICK], | |
stakingRewardAddress: '0xa6b85D97853248973d11B9c806492D405D1B50e5', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 4 | |
}, | |
{ | |
//tokens: [MATIC,USDC], | |
stakingRewardAddress: '0x6C6920aD61867B86580Ff4AfB517bEc7a499A7Bb', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 4 | |
}, | |
{ | |
//tokens: [AGA,QUICK], | |
stakingRewardAddress: '0x4D637F2d946b4028705BEb436e66Bf1Ffb85C22D', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3.5 | |
}, | |
{ | |
//tokens: [MAUNI,MAUSDC], | |
stakingRewardAddress: '0x3e9951ba9ea39FF1ACDCA838E1A294c7C8675b23', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 3 | |
}, | |
{ | |
//tokens: [QUICK,HH], | |
stakingRewardAddress: '0xDdAFf21FC862dc1ecf805ca1CEBbfEae95b16E6D', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [QUICK,MOCEAN], | |
stakingRewardAddress: '0xC29996f70BC8D7052287Ada2B7B7765360A69a32', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [QUICK,DMT], | |
stakingRewardAddress: '0xcb099768c2eB727f5380c9E7AF93153E8d0e3766', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [HEX,QUICK], | |
stakingRewardAddress: '0x4E5317608D854104ffcC02F9741b52d1f07225Ac', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [BTU,QUICK], | |
stakingRewardAddress: '0x6065BAD6E8d8760b0cA729fCE35A98641CE1060C', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [FSN,QUICK], | |
stakingRewardAddress: '0x631F21B329C958e6A522c7b857F22c0C5E013368', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [ANY,QUICK], | |
stakingRewardAddress: '0xD6E9C2576FEa298c5C9FA9F2cBC5f124c5f97625', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [PLOT,QUICK], | |
stakingRewardAddress: '0x74A7fdA76A008276705c39B0599916ee8513965c', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 3 | |
}, | |
{ | |
//tokens: [PLOT,USDC], | |
stakingRewardAddress: '0xB0755c5b3594A9C8845EB383e6E05E7F49460141', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 3 | |
}, | |
{ | |
//tokens: [ELET,QUICK], | |
stakingRewardAddress: '0x0E5a923524fC0A14fA4ab108145e4a019D2f2C6a', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 2.5 | |
}, | |
{ | |
//tokens: [VISION,QUICK], | |
stakingRewardAddress: '0x859f1E2490B4F62C5D32cf9409e2bBF43dfA3B61', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 2.5 | |
}, | |
{ | |
//tokens: [GAME,ETHER], | |
stakingRewardAddress: '0x5554281f7e473d93779722e5aa4c2f62C11283fd', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 2.5 | |
}, | |
{ | |
//tokens: [MADAI,MAUSDC], | |
stakingRewardAddress: '0x7131eBbC3e08E8e0D8938DFd36D3E76B874Fc75e', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 2 | |
}, | |
{ | |
//tokens: [MAWETH,MAUSDC], | |
stakingRewardAddress: '0x2Ee1eaE8fB3F5F56ABB882D48E2d767DA0211D8E', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 2 | |
}, | |
{ | |
//tokens: [CTSI,QUICK], | |
stakingRewardAddress: '0x4AB627237c2ce3719Ca42940c641Cd3dDbC83C0A', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 2 | |
}, | |
{ | |
//tokens: [CTSI,MATIC], | |
stakingRewardAddress: '0x2d0D7FD1bFcbF01947fdc40B507BD73B0863f2D5', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 2 | |
}, | |
{ | |
//tokens: [IGG,ETHER], | |
stakingRewardAddress: '0x88D6E84D7220A001F031fA5C8b44E77F957Fe1cD', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 2 | |
}, | |
{ | |
//tokens: [QUICK,OM], | |
stakingRewardAddress: '0xe1fE89651932D84e7880651187547869CA524976', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 2 | |
}, | |
{ | |
//tokens: [BTU,MATIC], | |
stakingRewardAddress: '0xe46E640b9E47080aE2cDe82B30500445C857d6d1', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 2 | |
}, | |
{ | |
//tokens: [MATUSD,MAUSDC], | |
stakingRewardAddress: '0xD854f08373a97237C7a830e1e34475535CB1eaDE', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 1.5 | |
}, | |
{ | |
//tokens: [MAAAVE,MAUSDC], | |
stakingRewardAddress: '0xe985c9416D05B3b3872d9e640C9590FaC37705Bd', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 1.5 | |
}, | |
{ | |
//tokens: [MAUSDT,MAUSDC], | |
stakingRewardAddress: '0xA694345b2f208DA59ebF3fc6b66E97c0CA18C3E1', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 1.5 | |
}, | |
{ | |
//tokens: [DB,ETHER], | |
stakingRewardAddress: '0xd437c3c9Ca21D634878BDDBf973bCFB23D280E86', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 1 | |
}, | |
{ | |
//tokens: [DSLA,QUICK], | |
stakingRewardAddress: '0xB9Ce318ac54EC8b3aa17d18dFfb0EC3c46E88fef', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 1 | |
}, | |
{ | |
//tokens: [DB,MATIC], | |
stakingRewardAddress: '0x35CEADEd1457aE4AaD028ff996DC5A889Ea8d7C1', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 1 | |
}, | |
{ | |
//tokens: [ETHER,DMT], | |
stakingRewardAddress: '0x255Df2Ae958aCe49eC9E24B59d5327c6D918C81b', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 1 | |
}, | |
{ | |
//tokens: [ELET,MATIC], | |
stakingRewardAddress: '0xDa534f1282F832BAc82Ec4502dA6fAd7a60e63A3', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MATIC, | |
rate: 1 | |
}, | |
{ | |
//tokens: [MALINK,MAUSDC], | |
stakingRewardAddress: '0x211B1312Bb797Ee7c7193AE87481E0B5f259c0a5', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: MAUSDC, | |
rate: 1 | |
}, | |
{ | |
//tokens: [QUICK,AZUKI], | |
stakingRewardAddress: '0xfBCf532DeE2A6d2f45bD89419adaA07457d50CF9', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 1 | |
}, | |
{ | |
//tokens: [HEX,ETHER], | |
stakingRewardAddress: '0x9Be3481DD287345Bb9C8B8DDC836e1D0054Edd46', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 1 | |
}, | |
{ | |
//tokens: [CFI,QUICK], | |
stakingRewardAddress: '0x04cda3ed6750AAb11e2A50029460543E914dD81D', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.8 | |
}, | |
{ | |
//tokens: [DSLA,ETHER], | |
stakingRewardAddress: '0x4A47Ea19241058b1F960331c3f1a1B4BD7D4A584', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 0.5 | |
}, | |
{ | |
//tokens: [QUICK,ZUZ], | |
stakingRewardAddress: '0xC1B0A3f47f05A58a7D83855B9F9e8C5f4042dc8c', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.4 | |
}, | |
{ | |
//tokens: [ETHER,OM], | |
stakingRewardAddress: '0xA0218a57CC1D595aF0b79Af450f37fc4207dE94C', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 0.25 | |
}, | |
{ | |
//tokens: [PPDEX,QUICK], | |
stakingRewardAddress: '0xC6a6B2d95B99CA9c3149f8dF8f22E1e34fb75ccc', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.25 | |
}, | |
{ | |
//tokens: [ZUT,QUICK], | |
stakingRewardAddress: '0x06c0b1461740a8570f755cf26e7B418862c3998B', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.2 | |
}, | |
{ | |
//tokens: [QUICK,MDEF], | |
stakingRewardAddress: '0xdE1140Ff770F83a59e91c3a04c6628D86e8414f2', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.2 | |
}, | |
{ | |
//tokens: [DRC,QUICK], | |
stakingRewardAddress: '0x86806771672fb51a04be7BcdC4546fC111BBbA57', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: QUICK, | |
rate: 0.2 | |
}, | |
{ | |
//tokens: [ETHER,AZUKI], | |
stakingRewardAddress: '0x8d8fDaEcCC776c8E76B8320e8BC29dcC8BC07907', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: ETHER, | |
rate: 0.1 | |
}, | |
{ | |
//tokens: [CFI,USDC], | |
stakingRewardAddress: '0x579eabaED8cdA62D502c219392d9C07B142e0af6', | |
ended: false, | |
lp: '', | |
name: '', | |
//baseToken: USDC, | |
rate: 0.1 | |
} | |
] | |
/*! | |
* YieldFarming | |
* Boilerplate for a Static website using EJS and SASS | |
* https://yieldfarming.info | |
* @author Jongseung Lim -- https://yieldfarming.info | |
* Copyright 2021. MIT Licensed. | |
*/ | |
async function getMaticUniPool(App, pool, poolAddress, stakingAddress) { | |
let q0, q1; | |
const reserves = await pool.getReserves(); | |
q0 = reserves._reserve0; | |
q1 = reserves._reserve1; | |
const decimals = await pool.decimals(); | |
const token0 = await pool.token0(); | |
const token1 = await pool.token1(); | |
return { | |
symbol : await pool.symbol(), | |
name : await pool.name(), | |
address: poolAddress, | |
token0, | |
q0, | |
token1, | |
q1, | |
totalSupply: await pool.totalSupply() / 10 ** decimals, | |
stakingAddress: stakingAddress, | |
staked: await pool.balanceOf(stakingAddress) / 10 ** decimals, | |
decimals: decimals, | |
unstaked: await pool.balanceOf(App.YOUR_ADDRESS) / 10 ** decimals, | |
contract: pool, | |
tokens : [token0, token1], | |
is1inch : false | |
}; | |
} | |
async function getMatic20(App, token, address, stakingAddress) { | |
if (address == "0x0000000000000000000000000000000000000000") { | |
return { | |
address, | |
name : "Matic", | |
symbol : "MATIC", | |
totalSupply: 1e8, | |
decimals: 18, | |
staked: 0, | |
unstaked: 0, | |
contract: null, | |
tokens:[address] | |
} | |
} | |
const decimals = await token.decimals() | |
return { | |
address, | |
name : await token.name(), | |
symbol : await token.symbol(), | |
totalSupply : await token.totalSupply(), | |
decimals : decimals, | |
staked: await token.balanceOf(stakingAddress) / 10 ** decimals, | |
unstaked: await token.balanceOf(App.YOUR_ADDRESS) / 10 ** decimals, | |
contract: token, | |
tokens : [address] | |
}; | |
} | |
async function getMaticStoredToken(App, tokenAddress, stakingAddress, type) { | |
switch (type) { | |
case "uniswap": | |
const pool = new ethers.Contract(tokenAddress, UNI_ABI, App.provider); | |
return await getMaticUniPool(App, pool, tokenAddress, stakingAddress); | |
case "matic20": | |
const matic20 = new ethers.Contract(tokenAddress, ERC20_ABI, App.provider); | |
return await getMatic20(App, matic20, tokenAddress, stakingAddress); | |
} | |
} | |
async function getMaticToken(App, tokenAddress, stakingAddress) { | |
if (tokenAddress == "0x0000000000000000000000000000000000000000") { | |
return getMatic20(App, null, tokenAddress, "") | |
} | |
const type = window.localStorage.getItem(tokenAddress); | |
if (type) return getMaticStoredToken(App, tokenAddress, stakingAddress, type); | |
try { | |
const pool = new ethers.Contract(tokenAddress, UNI_ABI, App.provider); | |
const _token0 = await pool.token0(); | |
const uniPool = await getMaticUniPool(App, pool, tokenAddress, stakingAddress); | |
window.localStorage.setItem(tokenAddress, "uniswap"); | |
return uniPool; | |
} | |
catch(err) { | |
} | |
try { | |
const matic20 = new ethers.Contract(tokenAddress, ERC20_ABI, App.provider); | |
const _name = await matic20.name(); | |
const matic20tok = await getMatic20(App, matic20, tokenAddress, stakingAddress); | |
window.localStorage.setItem(tokenAddress, "matic20"); | |
return matic20tok; | |
} | |
catch(err) { | |
console.log(err); | |
console.log(`Couldn't match ${tokenAddress} to any known token type.`); | |
} | |
} | |
async function loadMaticSynthetixPoolInfo(App, tokens, prices, stakingAbi, stakingAddress, | |
rewardTokenFunction, stakeTokenFunction) { | |
const STAKING_POOL = new ethers.Contract(stakingAddress, stakingAbi, App.provider); | |
if (!STAKING_POOL.callStatic[stakeTokenFunction]) { | |
console.log("Couldn't find stake function ", stakeTokenFunction); | |
} | |
const stakeTokenAddress = await STAKING_POOL.callStatic[stakeTokenFunction](); | |
const rewardTokenAddress = await STAKING_POOL.callStatic[rewardTokenFunction](); | |
var stakeToken = await getMaticToken(App, stakeTokenAddress, stakingAddress); | |
if (stakeTokenAddress.toLowerCase() === rewardTokenAddress.toLowerCase()) { | |
stakeToken.staked = await STAKING_POOL.totalSupply() / 10 ** stakeToken.decimals; | |
} | |
var newTokenAddresses = stakeToken.tokens.filter(x => | |
!getParameterCaseInsensitive(tokens,x)); | |
for (const address of newTokenAddresses) { | |
tokens[address] = await getMaticToken(App, address, stakingAddress); | |
} | |
if (!getParameterCaseInsensitive(tokens, rewardTokenAddress)) { | |
tokens[rewardTokenAddress] = await getMaticToken(App, rewardTokenAddress, stakingAddress); | |
} | |
const rewardToken = getParameterCaseInsensitive(tokens, rewardTokenAddress); | |
const rewardTokenTicker = rewardToken.symbol; | |
const poolPrices = getPoolPrices(tokens, prices, stakeToken, "matic"); | |
if (!poolPrices) | |
{ | |
console.log(`Couldn't calculate prices for pool ${stakeTokenAddress}`); | |
return null; | |
} | |
const stakeTokenTicker = poolPrices.stakeTokenTicker; | |
const stakeTokenPrice = | |
prices[stakeTokenAddress]?.usd ?? getParameterCaseInsensitive(prices, stakeTokenAddress)?.usd; | |
const rewardTokenPrice = getParameterCaseInsensitive(prices, rewardTokenAddress)?.usd; | |
const periodFinish = await STAKING_POOL.periodFinish(); | |
const rewardRate = await STAKING_POOL.rewardRate(); | |
const weeklyRewards = (Date.now() / 1000 > periodFinish) ? 0 : rewardRate / 1e18 * 604800; | |
const usdPerWeek = weeklyRewards * rewardTokenPrice; | |
const staked_tvl = poolPrices.staked_tvl; | |
const userStaked = await STAKING_POOL.balanceOf(App.YOUR_ADDRESS) / 10 ** stakeToken.decimals; | |
const userUnstaked = stakeToken.unstaked; | |
const earned = await STAKING_POOL.earned(App.YOUR_ADDRESS) / 10 ** rewardToken.decimals; | |
return { | |
stakingAddress, | |
poolPrices, | |
stakeTokenAddress, | |
rewardTokenAddress, | |
stakeTokenTicker, | |
rewardTokenTicker, | |
stakeTokenPrice, | |
rewardTokenPrice, | |
weeklyRewards, | |
usdPerWeek, | |
staked_tvl, | |
userStaked, | |
userUnstaked, | |
earned | |
} | |
} | |
async function loadMaticSynthetixPool(App, tokens, prices, abi, address, rewardTokenFunction, stakeTokenFunction) { | |
const info = await loadMaticSynthetixPoolInfo(App, tokens, prices, abi, address, rewardTokenFunction, stakeTokenFunction); | |
if (!info) return null; | |
return await printSynthetixPool(App, info, "matic"); | |
} | |
async function loadMaticBasisFork(data) { | |
const App = await init_ethers(); | |
_print(`Initialized ${App.YOUR_ADDRESS}`); | |
_print("Reading smart contracts...\n"); | |
var tokens = {}; | |
var prices = {}; | |
var totalStaked = 0; | |
let p1 = await loadMaticSynthetixPool(App, tokens, prices, data.PoolABI, | |
data.SharePool.address, data.SharePool.rewardToken, data.SharePool.stakeToken); | |
totalStaked += p1.staked_tvl; | |
if (data.SharePool2) { | |
let p3 = await loadMaticSynthetixPool(App, tokens, prices, data.PoolABI, | |
data.SharePool2.address, data.SharePool2.rewardToken, data.SharePool2.stakeToken); | |
totalStaked += p3.staked_tvl; | |
} | |
let p2 = await loadMaticSynthetixPool(App, tokens, prices, data.PoolABI, | |
data.CashPool.address, data.CashPool.rewardToken, data.CashPool.stakeToken); | |
totalStaked += p2.staked_tvl; | |
if (data.SeedBanks) { | |
let p = await loadMultipleMaticSynthetixPools(App, tokens, prices, data.SeedBanks) | |
totalStaked += p.staked_tvl; | |
if (p.totalUserStaked > 0) { | |
_print(`You are staking a total of $${formatMoney(p.totalUserStaked)} at an APR of ${(p.totalAPR * 100).toFixed(2)}%\n`); | |
} | |
} | |
if (!data.SeedBanks) | |
{ | |
if (data.Boardrooms) { | |
for (const boardroom of data.Boardrooms) { | |
let br = await loadBoardroom(App, prices, boardroom.address, data.Oracle, data.UniswapLP, data.Cash, | |
data.ShareTicker, data.CashTicker, data.ExpansionsPerDay, data.MaximumExpansion, | |
data.Decimals, boardroom.ratio, data.TargetMantissa); | |
totalStaked += br.staked_tvl; | |
} | |
} | |
else { | |
let br = await loadBoardroom(App, prices, data.Boardroom, data.Oracle, data.UniswapLP, data.Cash, | |
data.ShareTicker, data.CashTicker, data.ExpansionsPerDay, data.MaximumExpansion, | |
data.Decimals, 1, data.TargetMantissa); | |
totalStaked += br.staked_tvl; | |
} | |
} | |
_print_bold(`Total staked: $${formatMoney(totalStaked)}`) | |
hideLoading(); | |
} | |
async function getMaticPoolInfo(app, chefContract, chefAddress, poolIndex, pendingRewardsFunction) { | |
const poolInfo = await chefContract.poolInfo(poolIndex); | |
if (poolInfo.allocPoint == 0) { | |
return { | |
address: poolInfo.lpToken, | |
allocPoints: poolInfo.allocPoint ?? 1, | |
poolToken: null, | |
userStaked : 0, | |
pendingRewardTokens : 0, | |
}; | |
} | |
const poolToken = await getMaticToken(app, poolInfo.lpToken, chefAddress); | |
const userInfo = await chefContract.userInfo(poolIndex, app.YOUR_ADDRESS); | |
const pendingRewardTokens = await chefContract.callStatic[pendingRewardsFunction](poolIndex, app.YOUR_ADDRESS); | |
const staked = userInfo.amount / 10 ** poolToken.decimals; | |
return { | |
address: poolInfo.lpToken, | |
allocPoints: poolInfo.allocPoint ?? 1, | |
poolToken: poolToken, | |
userStaked : staked, | |
pendingRewardTokens : pendingRewardTokens / 10 ** 18, | |
}; | |
} | |
async function loadMaticChefContract(App, tokens, prices, chef, chefAddress, chefAbi, rewardTokenTicker, | |
rewardTokenFunction, rewardsPerBlockFunction, rewardsPerWeekFixed, pendingRewardsFunction, | |
deathPoolIndices) { | |
const chefContract = chef ?? new ethers.Contract(chefAddress, chefAbi, App.provider); | |
const poolCount = parseInt(await chefContract.poolLength(), 10); | |
const totalAllocPoints = await chefContract.totalAllocPoint(); | |
_print(`Found ${poolCount} pools.\n`) | |
_print(`Showing incentivized pools only.\n`); | |
var tokens = {}; | |
const rewardTokenAddress = await chefContract.callStatic[rewardTokenFunction](); | |
const rewardToken = await getMaticToken(App, rewardTokenAddress, chefAddress); | |
const rewardsPerWeek = rewardsPerWeekFixed ?? | |
await chefContract.callStatic[rewardsPerBlockFunction]() | |
/ 10 ** rewardToken.decimals * 604800 / 3 | |
const poolInfos = await Promise.all([...Array(poolCount).keys()].map(async (x) => | |
await getMaticPoolInfo(App, chefContract, chefAddress, x, pendingRewardsFunction))); | |
var tokenAddresses = [].concat.apply([], poolInfos.filter(x => x.poolToken).map(x => x.poolToken.tokens)); | |
await Promise.all(tokenAddresses.map(async (address) => { | |
tokens[address] = await getMaticToken(App, address, chefAddress); | |
})); | |
if (deathPoolIndices) { //load prices for the deathpool assets | |
deathPoolIndices.map(i => poolInfos[i]) | |
.map(poolInfo => | |
poolInfo.poolToken ? getPoolPrices(tokens, prices, poolInfo.poolToken, "matic") : undefined); | |
} | |
const poolPrices = poolInfos.map(poolInfo => poolInfo.poolToken ? getPoolPrices(tokens, prices, poolInfo.poolToken, "matic") : undefined); | |
_print("Finished reading smart contracts.\n"); | |
for (i = 0; i < poolCount; i++) { | |
if (poolPrices[i]) { | |
printChefPool(App, chefAbi, chefAddress, prices, tokens, poolInfos[i], i, poolPrices[i], | |
totalAllocPoints, rewardsPerWeek, rewardTokenTicker, rewardTokenAddress, | |
pendingRewardsFunction, "matic"); | |
} | |
} | |
} | |
const maticTokens = [ | |
{ "id": "matic","symbol": "MATIC","contract": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" }, | |
{ "id": "tether","symbol": "USDT", "contract": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F" }, | |
{ "id": "bitcoin","symbol": "WBTC", "contract": "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6" }, | |
{ "id": "ethereum", "symbol": "WETH", "contract": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619" }, | |
{ "id": "usd-coin","symbol": "USDC", "contract": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" }, | |
{ "id": "dai","symbol": "DAI", "contract": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063" }, | |
{ "id": "quick","symbol": "QUICK", "contract": "0x831753DD7087CaC61aB5644b308642cc1c33Dc13" }, | |
{ "id": "stake-dao", "symbol": "SDT", "contract": "0x361A5a4993493cE00f61C32d4EcCA5512b82CE90" }, | |
] | |
async function getMaticPrices() { | |
const idPrices = await lookUpPrices(maticTokens.map(x => x.id)); | |
const prices = {} | |
for (const bt of maticTokens) | |
if (idPrices[bt.id]) | |
prices[bt.contract] = idPrices[bt.id]; | |
return prices; | |
} | |
async function loadMultipleMaticSynthetixPools(App, tokens, prices, pools) { | |
let totalStaked = 0, totalUserStaked = 0, individualAPRs = []; | |
const infos = await Promise.all(pools.map(p => | |
loadMaticSynthetixPoolInfo(App, tokens, prices, p.abi, p.address, p.rewardTokenFunction, p.stakeTokenFunction))); | |
for (const i of infos.filter(i => i?.poolPrices)) { | |
let p = await printSynthetixPool(App, i, "matic"); | |
totalStaked += p.staked_tvl || 0; | |
totalUserStaked += p.userStaked || 0; | |
if (p.userStaked > 0) { | |
individualAPRs.push(p.userStaked * p.apr / 100); | |
} | |
} | |
let totalAPR = totalUserStaked == 0 ? 0 : individualAPRs.reduce((x,y)=>x+y, 0) / totalUserStaked; | |
return { staked_tvl : totalStaked, totalUserStaked, totalAPR }; | |
} | |
async function loadMultipleMaticSynthetixPoolsSequential(App, tokens, prices, pools) { | |
let totalStaked = 0, totalUserStaked = 0, individualAPRs = []; | |
for (const p of pools) { | |
let res = await loadMaticSynthetixPool(App, tokens, prices, p.abi, p.address, p.rewardTokenFunction, p.stakeTokenFunction); | |
if (!res) continue; | |
totalStaked += res.staked_tvl || 0; | |
totalUserStaked += res.userStaked || 0; | |
if (res.userStaked > 0) { | |
individualAPRs.push(res.userStaked * res.apr / 100); | |
} | |
} | |
let totalAPR = totalUserStaked == 0 ? 0 : individualAPRs.reduce((x,y)=>x+y, 0) / totalUserStaked; | |
return { staked_tvl : totalStaked, totalUserStaked, totalAPR }; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment