Last active
February 17, 2022 03:12
-
-
Save mushroomsforest/ff60ee165c98f2577c3ee759377f4dc5 to your computer and use it in GitHub Desktop.
Javascript sample to fetch mushrooms vaults apys
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 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