Skip to content

Instantly share code, notes, and snippets.

@mushroomsforest
Last active February 17, 2022 03:12
Show Gist options
  • Save mushroomsforest/ff60ee165c98f2577c3ee759377f4dc5 to your computer and use it in GitHub Desktop.
Save mushroomsforest/ff60ee165c98f2577c3ee759377f4dc5 to your computer and use it in GitHub Desktop.
Javascript sample to fetch mushrooms vaults apys
const axios = require('axios');
const mushrooms_endpoint = 'https://vjeieiw4tf.execute-api.us-east-1.amazonaws.com/apy';
const bsc_chainId = 56;
const ftm_chainId = 250;
const polygon_chainId = 137;
const avalanche_chainId = 43114;
const chainNames = {1: 'ethereum', 56: 'bsc', 250: 'fantom', 137: 'polygon', 43114: 'avalanche'}
async function main() {
let _ethereumVaults = [];
await fetchApys(1, _ethereumVaults);
let _bscVaults = [];
await fetchApys(bsc_chainId, _bscVaults);
let _ftmVaults = [];
await fetchApys(ftm_chainId, _ftmVaults);
let _polygonVaults = [];
await fetchApys(polygon_chainId, _polygonVaults);
let _avalancheVaults = [];
await fetchApys(avalanche_chainId, _avalancheVaults);
let _allVaults = _ethereumVaults.concat(_bscVaults);
_allVaults = _allVaults.concat(_ftmVaults);
_allVaults = _allVaults.concat(_polygonVaults);
_allVaults = _allVaults.concat(_avalancheVaults);
console.log(_allVaults);
for(let i = 0;i < _allVaults.length;i++){
//console.log('vault#' + i + '=' + JSON.stringify(_allVaults[i]));
}
}
async function fetchApys(chainId, _list) {
await queryMushroomsApi(mushrooms_endpoint + '?chainId=' + chainId, chainId, _list);
}
function handleApyRespons(_res, chainId, _list){
let _vaults = _res['result']['vaults'];
let _farms = _res['result']['farms'];
let _farmsApys = {};
for(let i = 0;i < _farms.length;i++){
let _farmLp = _farms[i]['lpToken'];
let _apy = _farms[i]['apy'];
_farmsApys[_farmLp.toLowerCase()] = _apy;
//console.log('farms#' + i + ' on ' + chainNames[chainId] + '={' + _farmLp + ':' + _apy + '}');
}
for(let i = 0;i < _vaults.length;i++){
let _tkName = _vaults[i]['token_name'];
let _vaultAddr = _vaults[i]['vault_address'];
let _apy = _vaults[i]['apy'];
let _tvl = _vaults[i]['liquidity_locked'];
let _type = ifLpToken(_tkName)? 'lp' : 'single';
let _farmApy = (_farmsApys[_vaultAddr.toLowerCase()] === null || _farmsApys[_vaultAddr.toLowerCase()] === undefined)? 0 : _farmsApys[_vaultAddr.toLowerCase()]/100;
let _v = {'chain': chainNames[chainId],'contractAddress': _vaultAddr, 'name': getTokenName(_tkName, _type, chainId), 'kind': _type, 'baseAPY': _apy, 'rewardAPY': _farmApy, 'rewards': { 'MM': _farmApy }, 'tvl': _tvl, 'status': 'active'};
//console.log('vault#' + i + ' on ' + chainNames[chainId] + '=' + JSON.stringify(_v));
_list.push(_v);
}
}
function ifLpToken(_tkName){
let _crvRelated = _tkName.includes('crv') || _tkName.includes('CRV') || _tkName.includes('Crv');
let _lpRelated = _tkName.includes('UNI LP');
let _special = _tkName.includes('yveCRV');
return (_crvRelated || _lpRelated) && !_special;
}
function getTokenName(_name, _type, chainId){
if(_type == 'single'){
return _name;
}else{
if (_name == '3CRV'){
return 'DAI-USDT-USDC';
}else if(_name == 'crvRENWBTC'){
return 'renBTC-wBTC';
}else if(_name == 'USDP3crv'){
return 'USDP-DAI-USDT-USDC';
}else if(_name == 'Crv3Crypto' && chainId == ftm_chainId){
return 'fUSDT-wBTC-ETH';
}else if(_name == 'Crv3Crypto' && chainId == polygon_chainId){
return 'DAI-USDC-USDT-wBTC-WETH';
}else if(_name == 'Crv3Crypto' && chainId == avalanche_chainId){
return 'DAI.e-USDC.e-USDT.e-wBTC.e-WETH';
}else if(_name == 'MIR-UST UNI LP' && chainId == 1){
return 'MIR-UST';
}
}
}
async function queryMushroomsApi(url, chainId, _list){
await axios.get(url).then(function (response) {
//console.log('fetch result=' + JSON.stringify(response.data));
handleApyRespons(response.data, chainId, _list);
}).catch(function (error) {
console.log('queryMushroomsApi error for ' + url + ':' + error);
}).then(function () {
//console.log('fetching from api ' + url);
});
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment