@@ -7238,7 +7626,7 @@ module.exports = [
rewardAPY: [],
rewardAPR: null,
rewardTokens: [addresses.MATIC.miFARM],
- rewardTokenSymbols: ['miFARM', 'WMATIC'],
+ rewardTokenSymbols: ['miFARM'],
stakeAndDepositHelpMessage: `
Deposit and stake:
@@ -7270,7 +7658,7 @@ module.exports = [
collateralAddress: addresses.V2.sushi_YEL_ETH.NewVault,
rewardAPY: [],
rewardTokens: [addresses.iFARM],
- rewardTokenSymbols: ['iFARM', 'fYEL'],
+ rewardTokenSymbols: ['iFARM'],
stakeAndDepositHelpMessage: `
Deposit and stake:
diff --git a/data/mainnet/tokens.js b/data/mainnet/tokens.js
index 26cfd2b1..2ec3431e 100644
--- a/data/mainnet/tokens.js
+++ b/data/mainnet/tokens.js
@@ -26,7 +26,7 @@ module.exports = {
priceFunction: { type: GET_PRICE_TYPES.COINGECKO_CONTRACT, params: [addresses.FARM] },
},
WETH: {
- chain: CHAINS_ID.INACTIVE,
+ chain: CHAINS_ID.ETH_MAINNET,
inactive: true,
logoUrl: './icons/eth.png',
apyIconUrls: [],
@@ -35,7 +35,7 @@ module.exports = {
tokenAddress: addresses.WETH,
decimals: '18',
vaultAddress: addresses.V2.WETH.NewVault,
- category: VAULT_CATEGORIES_IDS.GENERAL,
+ category: VAULT_CATEGORIES_IDS.INACTIVE,
priceFunction: { type: GET_PRICE_TYPES.COINGECKO_CONTRACT, params: [addresses.WETH] },
estimateApyFunctions: [
{
@@ -46,6 +46,382 @@ module.exports = {
],
cmcRewardTokenSymbols: ['FARM', 'WETH'],
},
+ aura_bbiUSD: {
+ inactive: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: VAULT_CATEGORIES_IDS.INACTIVE,
+ displayName: 'iDAI-iUSDC-iUSDT',
+ subLabel: 'Idle - Aura Finance',
+ apyIconUrls: [],
+ apyTokenSymbols: [],
+ logoUrl: './icons/balancer-bbaUSD.png',
+ tokenAddress: addresses.V2.aura_bbiUSD.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_bbiUSD.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.V2.aura_bbiUSD.Underlying,
+ addresses.V2.aura_bbiUSD.PoolId,
+ CHAINS_ID.ETH_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['bbiUSD', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA'],
+ },
+ aura_auraBAL: {
+ isNew: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: [VAULT_CATEGORIES_IDS.AURA, VAULT_CATEGORIES_IDS.BALANCER],
+ displayName: 'auraBAL',
+ subLabel: 'Aura Finance',
+ apyIconUrls: ['./icons/balancer.png', './icons/aura.png', './icons/bbausd.png'],
+ apyTokenSymbols: ['BAL', 'AURA', 'bbaUSD'],
+ logoUrl: './icons/aura-auraBAL.png',
+ tokenAddress: addresses.V2.aura_auraBAL.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_auraBAL.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['aura-bal'],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['auraBAL', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA', 'bbaUSD'],
+ },
+ aura_auraBAL_lp: {
+ isNew: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: [VAULT_CATEGORIES_IDS.AURA, VAULT_CATEGORIES_IDS.BALANCER],
+ displayName: '80BAL-20WETH - auraBAL',
+ subLabel: 'Aura Finance',
+ apyIconUrls: ['./icons/balancer.png', './icons/aura.png'],
+ apyTokenSymbols: ['BAL', 'AURA'],
+ logoUrl: './icons/balancer-auraBALlp.png',
+ tokenAddress: addresses.V2.aura_auraBAL_lp.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_auraBAL_lp.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.V2.aura_auraBAL_lp.Underlying,
+ addresses.V2.aura_auraBAL_lp.PoolId,
+ CHAINS_ID.ETH_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['auraBAL_lp', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA'],
+ },
+ aura_bbaUSD: {
+ isNew: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: [
+ VAULT_CATEGORIES_IDS.AURA,
+ VAULT_CATEGORIES_IDS.BALANCER,
+ VAULT_CATEGORIES_IDS.STABLECOINS,
+ ],
+ displayName: 'aDAI-aUSDC-aUSDT',
+ subLabel: 'Aura Finance',
+ apyIconUrls: ['./icons/balancer.png', './icons/aura.png'],
+ apyTokenSymbols: ['BAL', 'AURA'],
+ logoUrl: './icons/balancer-bbaUSD.png',
+ tokenAddress: addresses.V2.aura_bbaUSD.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_bbaUSD.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.V2.aura_bbaUSD.Underlying,
+ addresses.V2.aura_bbaUSD.PoolId,
+ CHAINS_ID.ETH_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['bbaUSD', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA'],
+ },
+ aura_rETH: {
+ isNew: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: [
+ VAULT_CATEGORIES_IDS.AURA,
+ VAULT_CATEGORIES_IDS.BALANCER,
+ VAULT_CATEGORIES_IDS.ETH20,
+ ],
+ displayName: 'rETH - WETH',
+ subLabel: 'Aura Finance',
+ apyIconUrls: ['./icons/balancer.png', './icons/aura.png'],
+ apyTokenSymbols: ['BAL', 'AURA'],
+ logoUrl: './icons/balancer-rETH.png',
+ tokenAddress: addresses.V2.aura_rETH.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_rETH.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.V2.aura_rETH.Underlying,
+ addresses.V2.aura_rETH.PoolId,
+ CHAINS_ID.ETH_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['rETH', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA'],
+ },
+ aura_wstETH: {
+ isNew: true,
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: [
+ VAULT_CATEGORIES_IDS.AURA,
+ VAULT_CATEGORIES_IDS.BALANCER,
+ VAULT_CATEGORIES_IDS.ETH20,
+ ],
+ displayName: 'wstETH - WETH',
+ subLabel: 'Aura Finance',
+ apyIconUrls: ['./icons/balancer.png', './icons/aura.png', './icons/ldo.png'],
+ apyTokenSymbols: ['BAL', 'AURA', 'LDO'],
+ logoUrl: './icons/balancer-wstETH.png',
+ tokenAddress: addresses.V2.aura_wstETH.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.aura_wstETH.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.V2.aura_wstETH.Underlying,
+ addresses.V2.aura_wstETH.PoolId,
+ CHAINS_ID.ETH_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.AURA,
+ params: ['wstETH', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['FARM', 'BAL', 'AURA', 'LDO'],
+ },
+ balancer_2EUR_PAR: {
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/2eur_par.png',
+ apyIconUrls: [],
+ apyTokenSymbols: [],
+ displayName: 'jEUR-PAR',
+ subLabel: 'Balancer',
+ tokenAddress: addresses.MATIC.V2.balancer_2EUR_PAR.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.balancer_2EUR_PAR.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.MATIC.V2.balancer_2EUR_PAR.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_PAR.PoolId,
+ CHAINS_ID.MATIC_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
+ params: [
+ 'balancer_2EUR_PAR',
+ addresses.MATIC.V2.balancer_2EUR_PAR.Gauge,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'BAL'],
+ },
+ quickGamma_MATIC_ETH_narrow: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/wmatic_eth.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'MATIC-ETH (Narrow)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.MasterChef,
+ addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
+ quickGamma_MATIC_ETH_wide: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/wmatic_eth.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'MATIC-ETH (Wide)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.MasterChef,
+ addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
+ quickGamma_MATIC_USDC_narrow: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/wmatic_usdc.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'MATIC-USDC (Narrow)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.MasterChef,
+ addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
+ quickGamma_MATIC_USDC_wide: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/wmatic_usdc.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'MATIC-USDC (Wide)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.MasterChef,
+ addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
+ quickGamma_USDC_ETH_narrow: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/usdc_weth.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'USDC-ETH (Narrow)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.MasterChef,
+ addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
+ quickGamma_USDC_ETH_wide: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.QUICKSWAP,
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/usdc_weth.png',
+ apyIconUrls: ['./icons/quick.png', './icons/wmatic.png'],
+ apyTokenSymbols: ['dQUICK', 'WMATIC'],
+ displayName: 'USDC-ETH (Wide)',
+ subLabel: 'Quickswap - Gamma',
+ tokenAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_wide.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_wide.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.QUICKSWAP_GAMMA,
+ params: [addresses.MATIC.V2.quickGamma_USDC_ETH_wide.Underlying],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.QUICKSWAP_GAMMA,
+ params: [
+ addresses.MATIC.V2.quickGamma_USDC_ETH_wide.MasterChef,
+ addresses.MATIC.V2.quickGamma_USDC_ETH_wide.Underlying,
+ profitSharingCut8Percent,
+ ],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'dQUICK', 'WMATIC'],
+ },
amDAI: {
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: '',
@@ -157,38 +533,6 @@ module.exports = {
],
},
},
- balancer_bbamusd: {
- isNew: true,
- category: VAULT_CATEGORIES_IDS.BALANCER,
- chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/bb-am-usd.png',
- apyIconUrls: ['./icons/balancer.png'],
- apyTokenSymbols: ['BAL'],
- displayName: 'amDAI-amUSDC-amUSDT',
- subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.balancer_bbamusd.Underlying,
- decimals: '18',
- vaultAddress: addresses.MATIC.V2.balancer_bbamusd.NewVault,
- priceFunction: {
- type: GET_PRICE_TYPES.BALANCER,
- params: [
- addresses.MATIC.V2.balancer_bbamusd.Underlying,
- addresses.MATIC.V2.balancer_bbamusd.PoolId,
- CHAINS_ID.MATIC_MAINNET,
- ],
- },
- estimateApyFunctions: [
- {
- type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
- params: [
- 'balancer_bbamusd',
- addresses.MATIC.V2.balancer_bbamusd.Gauge,
- profitSharingCut8Percent,
- ],
- },
- ],
- cmcRewardTokenSymbols: ['iFARM', 'BAL'],
- },
'80BAL-20WETH': {
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: '',
@@ -221,7 +565,7 @@ module.exports = {
},
balancer_tetuBal: {
isNew: true,
- category: VAULT_CATEGORIES_IDS.BALANCER,
+ category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/bal-tetubal.png',
apyIconUrls: ['./icons/balancer.png'],
@@ -251,160 +595,171 @@ module.exports = {
],
cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
- balancer_2BRLUSD: {
+ bal_MaticX: {
isNew: true,
category: VAULT_CATEGORIES_IDS.BALANCER,
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/2brl-usd.png',
- apyIconUrls: ['./icons/balancer.png'],
- apyTokenSymbols: ['BAL'],
- displayName: '2BRL - bb-amUSD',
+ logoUrl: './icons/balancer-maticx.png',
+ apyIconUrls: ['./icons/balancer.png', './icons/sd.png'],
+ apyTokenSymbols: ['BAL', 'SD'],
+ displayName: 'MaticX - wMATIC',
subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.balancer_2BRLUSD.Underlying,
+ tokenAddress: addresses.MATIC.V2.bal_MaticX.Underlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.balancer_2BRLUSD.NewVault,
+ vaultAddress: addresses.MATIC.V2.bal_MaticX.NewVault,
priceFunction: {
type: GET_PRICE_TYPES.BALANCER,
params: [
- addresses.MATIC.V2.balancer_2BRLUSD.Underlying,
- addresses.MATIC.V2.balancer_2BRLUSD.PoolId,
+ addresses.MATIC.V2.bal_MaticX.Underlying,
+ addresses.MATIC.V2.bal_MaticX.PoolId,
CHAINS_ID.MATIC_MAINNET,
],
},
estimateApyFunctions: [
{
type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
- params: [
- 'balancer_2BRLUSD',
- addresses.MATIC.V2.balancer_2BRLUSD.Gauge,
- profitSharingCut8Percent,
- ],
+ params: ['bal_MaticX', addresses.MATIC.V2.bal_MaticX.Gauge, profitSharingCut8Percent],
},
],
cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
- jBRL: {
+ bal_stMatic: {
+ isNew: true,
+ category: VAULT_CATEGORIES_IDS.BALANCER,
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: '',
- tokenAddress: addresses.MATIC.jBRL,
- decimals: '18',
- vaultAddress: null,
- priceFunction: {
- type: GET_PRICE_TYPES.COINGECKO_ID,
- params: ['brz'],
- },
- },
- BRZ: {
- chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: '',
- tokenAddress: addresses.MATIC.BRZ,
- decimals: '4',
- vaultAddress: null,
+ logoUrl: './icons/balancer-stmatic.png',
+ apyIconUrls: ['./icons/balancer.png', './icons/ldo.png'],
+ apyTokenSymbols: ['BAL', 'LDO'],
+ displayName: 'stMATIC - wMATIC',
+ subLabel: 'Balancer',
+ tokenAddress: addresses.MATIC.V2.bal_stMatic.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.bal_stMatic.NewVault,
priceFunction: {
- type: GET_PRICE_TYPES.COINGECKO_ID,
- params: ['brz'],
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.MATIC.V2.bal_stMatic.Underlying,
+ addresses.MATIC.V2.bal_stMatic.PoolId,
+ CHAINS_ID.MATIC_MAINNET,
+ ],
},
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
+ params: ['bal_stMatic', addresses.MATIC.V2.bal_stMatic.Gauge, profitSharingCut8Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'BAL', 'LDO'],
},
- balancer_2BRL: {
- isNew: true,
+ bal_POLYBASE: {
category: VAULT_CATEGORIES_IDS.BALANCER,
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/2brl.png',
+ logoUrl: './icons/balancer-polybase.png',
apyIconUrls: ['./icons/balancer.png'],
apyTokenSymbols: ['BAL'],
- displayName: 'jBRL-BRZ',
+ displayName: 'wMATIC-USDC-wETH-BAL',
subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.balancer_2BRL.Underlying,
+ tokenAddress: addresses.MATIC.V2.balancer_POLYBASE.Underlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.balancer_2BRL.NewVault,
+ vaultAddress: addresses.MATIC.V2.balancer_POLYBASE.NewVault,
priceFunction: {
type: GET_PRICE_TYPES.BALANCER,
params: [
- addresses.MATIC.V2.balancer_2BRL.Underlying,
- addresses.MATIC.V2.balancer_2BRL.PoolId,
+ addresses.MATIC.V2.balancer_POLYBASE.Underlying,
+ addresses.MATIC.V2.balancer_POLYBASE.PoolId,
CHAINS_ID.MATIC_MAINNET,
],
},
estimateApyFunctions: [
{
type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
- params: ['balancer_2BRL', addresses.MATIC.V2.balancer_2BRL.Gauge, profitSharingCut8Percent],
+ params: [
+ 'bal_POLYBASE',
+ addresses.MATIC.V2.balancer_POLYBASE.Gauge,
+ profitSharingCut8Percent,
+ ],
},
],
- cmcRewardTokenSymbols: ['iFARM', 'BAL', 'SD'],
+ cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
- bal_MaticX: {
- isNew: true,
+ balancer_bbamusd: {
category: VAULT_CATEGORIES_IDS.BALANCER,
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/balancer-maticx.png',
- apyIconUrls: ['./icons/balancer.png', './icons/sd.png'],
- apyTokenSymbols: ['BAL', 'SD'],
- displayName: 'MaticX - wMATIC',
+ logoUrl: './icons/bb-am-usd.png',
+ apyIconUrls: ['./icons/balancer.png'],
+ apyTokenSymbols: ['BAL'],
+ displayName: 'amDAI-amUSDC-amUSDT',
subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.bal_MaticX.Underlying,
+ tokenAddress: addresses.MATIC.V2.balancer_bbamusd.Underlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.bal_MaticX.NewVault,
+ vaultAddress: addresses.MATIC.V2.balancer_bbamusd.NewVault,
priceFunction: {
type: GET_PRICE_TYPES.BALANCER,
params: [
- addresses.MATIC.V2.bal_MaticX.Underlying,
- addresses.MATIC.V2.bal_MaticX.PoolId,
+ addresses.MATIC.V2.balancer_bbamusd.Underlying,
+ addresses.MATIC.V2.balancer_bbamusd.PoolId,
CHAINS_ID.MATIC_MAINNET,
],
},
estimateApyFunctions: [
{
type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
- params: ['bal_MaticX', addresses.MATIC.V2.bal_MaticX.Gauge, profitSharingCut8Percent],
+ params: [
+ 'balancer_bbamusd',
+ addresses.MATIC.V2.balancer_bbamusd.Gauge,
+ profitSharingCut8Percent,
+ ],
},
],
cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
- bal_stMatic: {
- isNew: true,
- category: VAULT_CATEGORIES_IDS.BALANCER,
+ balancer_2EUR_agEUR: {
+ category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/balancer-stmatic.png',
- apyIconUrls: ['./icons/balancer.png', './icons/ldo.png'],
- apyTokenSymbols: ['BAL', 'LDO'],
- displayName: 'stMATIC - wMATIC',
+ logoUrl: './icons/2eur_ageur.png',
+ apyIconUrls: ['./icons/balancer.png'],
+ apyTokenSymbols: ['BAL'],
+ displayName: 'jEUR-agEUR',
subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.bal_stMatic.Underlying,
+ tokenAddress: addresses.MATIC.V2.balancer_2EUR_agEUR.Underlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.bal_stMatic.NewVault,
+ vaultAddress: addresses.MATIC.V2.balancer_2EUR_agEUR.NewVault,
priceFunction: {
type: GET_PRICE_TYPES.BALANCER,
params: [
- addresses.MATIC.V2.bal_stMatic.Underlying,
- addresses.MATIC.V2.bal_stMatic.PoolId,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.PoolId,
CHAINS_ID.MATIC_MAINNET,
],
},
estimateApyFunctions: [
{
type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
- params: ['bal_stMatic', addresses.MATIC.V2.bal_stMatic.Gauge, profitSharingCut8Percent],
+ params: [
+ 'balancer_2EUR_agEUR',
+ addresses.MATIC.V2.balancer_2EUR_agEUR.Gauge,
+ profitSharingCut8Percent,
+ ],
},
],
- cmcRewardTokenSymbols: ['iFARM', 'BAL', 'LDO'],
+ cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
- bal_POLYBASE: {
- category: VAULT_CATEGORIES_IDS.BALANCER,
+ balancer_2BRLUSD: {
+ category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/balancer-polybase.png',
+ logoUrl: './icons/2brl-usd.png',
apyIconUrls: ['./icons/balancer.png'],
apyTokenSymbols: ['BAL'],
- displayName: 'wMATIC-USDC-wETH-BAL',
+ displayName: '2BRL - bb-amUSD',
subLabel: 'Balancer',
- tokenAddress: addresses.MATIC.V2.balancer_POLYBASE.Underlying,
+ tokenAddress: addresses.MATIC.V2.balancer_2BRLUSD.Underlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.balancer_POLYBASE.NewVault,
+ vaultAddress: addresses.MATIC.V2.balancer_2BRLUSD.NewVault,
priceFunction: {
type: GET_PRICE_TYPES.BALANCER,
params: [
- addresses.MATIC.V2.balancer_POLYBASE.Underlying,
- addresses.MATIC.V2.balancer_POLYBASE.PoolId,
+ addresses.MATIC.V2.balancer_2BRLUSD.Underlying,
+ addresses.MATIC.V2.balancer_2BRLUSD.PoolId,
CHAINS_ID.MATIC_MAINNET,
],
},
@@ -412,14 +767,63 @@ module.exports = {
{
type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
params: [
- 'bal_POLYBASE',
- addresses.MATIC.V2.balancer_POLYBASE.Gauge,
+ 'balancer_2BRLUSD',
+ addresses.MATIC.V2.balancer_2BRLUSD.Gauge,
profitSharingCut8Percent,
],
},
],
cmcRewardTokenSymbols: ['iFARM', 'BAL'],
},
+ jBRL: {
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: '',
+ tokenAddress: addresses.MATIC.jBRL,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['brz'],
+ },
+ },
+ BRZ: {
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: '',
+ tokenAddress: addresses.MATIC.BRZ,
+ decimals: '4',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['brz'],
+ },
+ },
+ balancer_2BRL: {
+ category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: './icons/2brl.png',
+ apyIconUrls: ['./icons/balancer.png'],
+ apyTokenSymbols: ['BAL'],
+ displayName: 'jBRL-BRZ',
+ subLabel: 'Balancer',
+ tokenAddress: addresses.MATIC.V2.balancer_2BRL.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.MATIC.V2.balancer_2BRL.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.BALANCER,
+ params: [
+ addresses.MATIC.V2.balancer_2BRL.Underlying,
+ addresses.MATIC.V2.balancer_2BRL.PoolId,
+ CHAINS_ID.MATIC_MAINNET,
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.BALANCER_GAUGE_POLYGON,
+ params: ['balancer_2BRL', addresses.MATIC.V2.balancer_2BRL.Gauge, profitSharingCut8Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'BAL', 'SD'],
+ },
APE: {
chain: CHAINS_ID.ETH_MAINNET,
logoUrl: './icons/apecoin.png',
@@ -465,8 +869,135 @@ module.exports = {
params: ['usdd'],
},
},
+ DOLA: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ logoUrl: './icons/dola.png',
+ tokenAddress: addresses.DOLA,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['dola-usd'],
+ },
+ },
+ FRAX: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ logoUrl: './icons/frax.png',
+ tokenAddress: addresses.FRAX,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['frax'],
+ },
+ },
+ FRAXBP: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ logoUrl: './icons/fraxbp.png',
+ tokenAddress: addresses.FRAXBP,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.CURVE_POOL,
+ params: [addresses.FRAXBP_Miner, addresses.FRAXBP, '18', ['FRAX', 'USDC']],
+ },
+ },
+ pETH: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ logoUrl: './icons/peth.png',
+ tokenAddress: addresses.pETH,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.COINGECKO_ID,
+ params: ['weth'],
+ },
+ },
+ convex_CVX_ETH: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: VAULT_CATEGORIES_IDS.CONVEX,
+ displayName: 'CVX-ETH',
+ subLabel: 'Convex Finance',
+ apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
+ apyTokenSymbols: ['CRV', 'CVX'],
+ logoUrl: './icons/curve-cvx-eth.png',
+ tokenAddress: addresses.V2.convex_CVX_ETH.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.convex_CVX_ETH.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.CURVE_POOL,
+ params: [
+ addresses.V2.convex_CVX_ETH.Miner,
+ addresses.V2.convex_CVX_ETH.Underlying,
+ '18',
+ ['CVX', 'ETH'],
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.CONVEX,
+ params: ['cvxeth', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
+ },
+ crvCRVETH: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: VAULT_CATEGORIES_IDS.CONVEX,
+ displayName: 'CRV-ETH',
+ subLabel: 'Convex Finance',
+ apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
+ apyTokenSymbols: ['CRV', 'CVX'],
+ logoUrl: './icons/curve-crveth.png',
+ tokenAddress: addresses.V2.crv_CRV_ETH.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.crv_CRV_ETH.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.CURVE_POOL,
+ params: [
+ addresses.V2.crv_CRV_ETH.Miner,
+ addresses.V2.crv_CRV_ETH.Underlying,
+ '18',
+ ['CRV', 'ETH'],
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.CONVEX,
+ params: ['crv-eth', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
+ },
+ convex_pETH: {
+ chain: CHAINS_ID.ETH_MAINNET,
+ category: VAULT_CATEGORIES_IDS.CONVEX,
+ displayName: 'pETH-ETH',
+ subLabel: 'Convex Finance',
+ apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
+ apyTokenSymbols: ['CRV', 'CVX'],
+ logoUrl: './icons/curve-peth.png',
+ tokenAddress: addresses.V2.convex_pETH.Underlying,
+ decimals: '18',
+ vaultAddress: addresses.V2.convex_pETH.NewVault,
+ priceFunction: {
+ type: GET_PRICE_TYPES.CURVE_POOL,
+ params: [
+ addresses.V2.convex_pETH.Underlying,
+ addresses.V2.convex_pETH.Underlying,
+ '18',
+ ['pETH', 'ETH'],
+ ],
+ },
+ estimateApyFunctions: [
+ {
+ type: ESTIMATED_APY_TYPES.CONVEX,
+ params: ['peth', profitSharingCut15Percent],
+ },
+ ],
+ cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
+ },
convex_USDD: {
- isNew: true,
chain: CHAINS_ID.ETH_MAINNET,
category: [VAULT_CATEGORIES_IDS.CONVEX, VAULT_CATEGORIES_IDS.STABLECOINS],
displayName: 'USDD-3Crv',
@@ -494,41 +1025,7 @@ module.exports = {
],
cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
},
- DOLA: {
- chain: CHAINS_ID.ETH_MAINNET,
- logoUrl: './icons/dola.png',
- tokenAddress: addresses.DOLA,
- decimals: '18',
- vaultAddress: null,
- priceFunction: {
- type: GET_PRICE_TYPES.COINGECKO_ID,
- params: ['dola-usd'],
- },
- },
- FRAX: {
- chain: CHAINS_ID.ETH_MAINNET,
- logoUrl: './icons/frax.png',
- tokenAddress: addresses.FRAX,
- decimals: '18',
- vaultAddress: null,
- priceFunction: {
- type: GET_PRICE_TYPES.COINGECKO_ID,
- params: ['frax'],
- },
- },
- FRAXBP: {
- chain: CHAINS_ID.ETH_MAINNET,
- logoUrl: './icons/fraxbp.png',
- tokenAddress: addresses.FRAXBP,
- decimals: '18',
- vaultAddress: null,
- priceFunction: {
- type: GET_PRICE_TYPES.CURVE_POOL,
- params: [addresses.FRAXBP_Miner, addresses.FRAXBP, '18', ['FRAX', 'USDC']],
- },
- },
convex_DOLA_FRAXBP: {
- isNew: true,
chain: CHAINS_ID.ETH_MAINNET,
category: [VAULT_CATEGORIES_IDS.CONVEX, VAULT_CATEGORIES_IDS.STABLECOINS],
displayName: 'DOLA-FRAXBP',
@@ -556,46 +1053,6 @@ module.exports = {
],
cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
},
- pETH: {
- chain: CHAINS_ID.ETH_MAINNET,
- logoUrl: './icons/peth.png',
- tokenAddress: addresses.pETH,
- decimals: '18',
- vaultAddress: null,
- priceFunction: {
- type: GET_PRICE_TYPES.COINGECKO_ID,
- params: ['weth'],
- },
- },
- convex_pETH: {
- isNew: true,
- chain: CHAINS_ID.ETH_MAINNET,
- category: VAULT_CATEGORIES_IDS.CONVEX,
- displayName: 'pETH-ETH',
- subLabel: 'Convex Finance',
- apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
- apyTokenSymbols: ['CRV', 'CVX'],
- logoUrl: './icons/curve-peth.png',
- tokenAddress: addresses.V2.convex_pETH.Underlying,
- decimals: '18',
- vaultAddress: addresses.V2.convex_pETH.NewVault,
- priceFunction: {
- type: GET_PRICE_TYPES.CURVE_POOL,
- params: [
- addresses.V2.convex_pETH.Underlying,
- addresses.V2.convex_pETH.Underlying,
- '18',
- ['pETH', 'ETH'],
- ],
- },
- estimateApyFunctions: [
- {
- type: ESTIMATED_APY_TYPES.CONVEX,
- params: ['peth', profitSharingCut15Percent],
- },
- ],
- cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
- },
pBTC: {
chain: CHAINS_ID.ETH_MAINNET,
logoUrl: './icons/pbtc.png',
@@ -669,64 +1126,6 @@ module.exports = {
params: ['convex-finance'],
},
},
- convex_CVX_ETH: {
- isNew: true,
- chain: CHAINS_ID.ETH_MAINNET,
- category: VAULT_CATEGORIES_IDS.CONVEX,
- displayName: 'CVX-ETH',
- subLabel: 'Convex Finance',
- apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
- apyTokenSymbols: ['CRV', 'CVX'],
- logoUrl: './icons/curve-cvx-eth.png',
- tokenAddress: addresses.V2.convex_CVX_ETH.Underlying,
- decimals: '18',
- vaultAddress: addresses.V2.convex_CVX_ETH.NewVault,
- priceFunction: {
- type: GET_PRICE_TYPES.CURVE_POOL,
- params: [
- addresses.V2.convex_CVX_ETH.Miner,
- addresses.V2.convex_CVX_ETH.Underlying,
- '18',
- ['CVX', 'ETH'],
- ],
- },
- estimateApyFunctions: [
- {
- type: ESTIMATED_APY_TYPES.CONVEX,
- params: ['cvxeth', profitSharingCut15Percent],
- },
- ],
- cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
- },
- crvCRVETH: {
- isNew: true,
- chain: CHAINS_ID.ETH_MAINNET,
- category: VAULT_CATEGORIES_IDS.CONVEX,
- displayName: 'CRV-ETH',
- subLabel: 'Convex Finance',
- apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
- apyTokenSymbols: ['CRV', 'CVX'],
- logoUrl: './icons/curve-crveth.png',
- tokenAddress: addresses.V2.crv_CRV_ETH.Underlying,
- decimals: '18',
- vaultAddress: addresses.V2.crv_CRV_ETH.NewVault,
- priceFunction: {
- type: GET_PRICE_TYPES.CURVE_POOL,
- params: [
- addresses.V2.crv_CRV_ETH.Miner,
- addresses.V2.crv_CRV_ETH.Underlying,
- '18',
- ['CRV', 'ETH'],
- ],
- },
- estimateApyFunctions: [
- {
- type: ESTIMATED_APY_TYPES.CONVEX,
- params: ['crv-eth', profitSharingCut15Percent],
- },
- ],
- cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'],
- },
stETH: {
chain: CHAINS_ID.ETH_MAINNET,
logoUrl: './icons/steth.png',
@@ -778,12 +1177,13 @@ module.exports = {
},
},
crvUSDN: {
+ inactive: true,
chain: CHAINS_ID.ETH_MAINNET,
- category: [VAULT_CATEGORIES_IDS.CONVEX, VAULT_CATEGORIES_IDS.STABLECOINS],
+ category: VAULT_CATEGORIES_IDS.INACTIVE,
displayName: 'USDN-3Crv',
subLabel: 'Convex Finance',
- apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
- apyTokenSymbols: ['CRV', 'CVX'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
logoUrl: './icons/curve-usdn.png',
tokenAddress: addresses.crvUSDN,
decimals: '18',
@@ -800,13 +1200,14 @@ module.exports = {
],
cmcRewardTokenSymbols: ['FARM', 'CVX', 'CRV'],
},
- crvTriCrypto: {
+ crvThreeCrypto: {
+ inactive: true,
chain: CHAINS_ID.ETH_MAINNET,
- category: VAULT_CATEGORIES_IDS.CONVEX,
+ category: VAULT_CATEGORIES_IDS.INACTIVE,
displayName: 'USDT-WBTC-ETH',
subLabel: 'Convex Finance',
- apyIconUrls: ['./icons/curve.png', './icons/cvx.png'],
- apyTokenSymbols: ['CRV', 'CVX'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
logoUrl: './icons/curve-tricrypto.png',
tokenAddress: addresses.V2.crvThreeCrypto.Underlying,
decimals: '18',
@@ -884,11 +1285,12 @@ module.exports = {
},
},
meshswap_MESH_oMOOI: {
- category: VAULT_CATEGORIES_IDS.MESHSWAP,
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/mesh-mesh-omooi.png',
- apyIconUrls: ['./icons/omooi.png'],
- apyTokenSymbols: ['oMOOI'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
displayName: 'MESH-oMOOI',
subLabel: 'MeshSwap',
tokenAddress: addresses.MATIC.V2.meshswap_MESH_oMOOI.Underlying,
@@ -907,11 +1309,12 @@ module.exports = {
cmcRewardTokenSymbols: ['iFARM', 'oMOOI'],
},
meshswap_MESH_oZEMIT: {
- category: VAULT_CATEGORIES_IDS.MESHSWAP,
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/mesh-mesh-ozemit.png',
- apyIconUrls: ['./icons/ozemit.png'],
- apyTokenSymbols: ['oZEMIT'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
displayName: 'MESH-oZEMIT',
subLabel: 'MeshSwap',
tokenAddress: addresses.MATIC.V2.meshswap_MESH_oZEMIT.Underlying,
@@ -930,11 +1333,12 @@ module.exports = {
cmcRewardTokenSymbols: ['iFARM', 'oZEMIT'],
},
meshswap_USDC_oUSDC: {
- category: [VAULT_CATEGORIES_IDS.MESHSWAP, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/mesh-usdc-ousdc.png',
- apyIconUrls: ['./icons/mesh.png'],
- apyTokenSymbols: ['MESH'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
displayName: 'USDC-oUSDC',
subLabel: 'MeshSwap',
tokenAddress: addresses.MATIC.V2.meshswap_USDC_oUSDC.Underlying,
@@ -953,11 +1357,12 @@ module.exports = {
cmcRewardTokenSymbols: ['iFARM', 'MESH'],
},
meshswap_USDT_oUSDT: {
- category: [VAULT_CATEGORIES_IDS.MESHSWAP, VAULT_CATEGORIES_IDS.STABLE_POLYGON],
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/mesh-usdt-ousdt.png',
- apyIconUrls: ['./icons/mesh.png'],
- apyTokenSymbols: ['MESH'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
displayName: 'USDT-oUSDT',
subLabel: 'MeshSwap',
tokenAddress: addresses.MATIC.V2.meshswap_USDT_oUSDT.Underlying,
@@ -976,11 +1381,12 @@ module.exports = {
cmcRewardTokenSymbols: ['iFARM', 'MESH'],
},
meshswap_WMATIC_MESH: {
- category: VAULT_CATEGORIES_IDS.MESHSWAP,
+ inactive: true,
+ category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
logoUrl: './icons/mesh-wmatic-mesh.png',
- apyIconUrls: ['./icons/mesh.png'],
- apyTokenSymbols: ['MESH'],
+ apyIconUrls: [],
+ apyTokenSymbols: [],
displayName: 'MATIC-MESH',
subLabel: 'MeshSwap',
tokenAddress: addresses.MATIC.V2.meshswap_WMATIC_MESH.Underlying,
@@ -1175,51 +1581,11 @@ module.exports = {
type: GET_PRICE_TYPES.KYBER_PAIR,
params: [
addresses.MATIC.JRT_ANGLE_NOV22,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
addresses.MATIC.V2.jarvis_JRTANGLENOV22_2EURagEUR.Underlying,
],
},
},
- jarvis_2EUR_agEUR_HODL: {
- inactive: true,
- category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
- chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/2eur_ageur.png',
- apyIconUrls: [],
- apyTokenSymbols: [],
- displayName: 'Jarvis: 2EUR (agEUR)',
- subLabel: 'HODL',
- tokenAddress: addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
- decimals: '18',
- vaultAddress: addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.NewVault,
- priceFunction: {
- type: GET_PRICE_TYPES.CURVE_POOL,
- params: [
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
- 18,
- ['JEUR', 'agEUR'],
- CHAINS_ID.MATIC_MAINNET,
- ],
- },
- estimateApyFunctions: [
- {
- type: 'JARVIS_HODL_V2',
- params: [
- 0,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.RewardPool,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
- 'jarvis_JRTANGLENOV22_2EURagEUR',
- profitSharingCut8Percent,
- ],
- extraDailyCompound: false,
- },
- ],
- apyDescriptionOverride: [
- 'Auto harvested JRT_ANGLE_NOV22 deposited into JRT_ANGLE_NOV22-2EUR_agEUR for more APY',
- ],
- cmcRewardTokenSymbols: ['iFARM', 'JRT_ANGLE_NOV22'],
- },
jarvis_JRTANGLENOV22_2EURagEUR: {
inactive: true,
category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
@@ -1278,50 +1644,44 @@ module.exports = {
type: GET_PRICE_TYPES.KYBER_PAIR,
params: [
addresses.MATIC.JRT_MIMO_NOV22,
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying,
addresses.MATIC.V2.jarvis_JRTMIMONOV22_2EURPAR.Underlying,
],
},
},
+ jarvis_2EUR_agEUR_HODL: {
+ chain: CHAINS_ID.MATIC_MAINNET,
+ logoUrl: '',
+ tokenAddress: addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
+ decimals: '18',
+ vaultAddress: null,
+ priceFunction: {
+ type: GET_PRICE_TYPES.CURVE_POOL,
+ params: [
+ addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
+ 18,
+ ['JEUR', 'agEUR'],
+ CHAINS_ID.MATIC_MAINNET,
+ ],
+ },
+ },
jarvis_2EUR_PAR_HODL: {
- inactive: true,
- category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON,
chain: CHAINS_ID.MATIC_MAINNET,
- logoUrl: './icons/2eur_par.png',
- apyIconUrls: [],
- apyTokenSymbols: [],
- displayName: 'Jarvis: 2EUR (PAR)',
- subLabel: 'HODL',
- tokenAddress: addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
+ logoUrl: '',
+ tokenAddress: addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying,
decimals: '18',
- vaultAddress: addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.NewVault,
+ vaultAddress: null,
priceFunction: {
type: GET_PRICE_TYPES.CURVE_POOL,
params: [
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying,
+ addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying,
18,
['JEUR', 'PAR'],
CHAINS_ID.MATIC_MAINNET,
],
},
- estimateApyFunctions: [
- {
- type: 'JARVIS_HODL_V2',
- params: [
- 0,
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.RewardPool,
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
- 'jarvis_JRTMIMONOV22_2EURPAR',
- profitSharingCut8Percent,
- ],
- extraDailyCompound: false,
- },
- ],
- apyDescriptionOverride: [
- 'Auto harvested JRT_MIMO_NOV22 deposited into JRT_MIMO_NOV22-2EUR_PAR for more APY',
- ],
- cmcRewardTokenSymbols: ['iFARM', 'JRT_MIMO_NOV22'],
},
jarvis_JRTMIMONOV22_2EURPAR: {
inactive: true,
@@ -1647,7 +2007,7 @@ module.exports = {
type: GET_PRICE_TYPES.KYBER_PAIR,
params: [
addresses.MATIC.JRT_ANGLE_SEP22,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
addresses.MATIC.V2.jarvis_JRTANGLE_2EURagEUR.Underlying,
],
},
@@ -1706,7 +2066,7 @@ module.exports = {
type: GET_PRICE_TYPES.KYBER_PAIR,
params: [
addresses.MATIC.JRT_MIMO_SEP22,
- addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying,
addresses.MATIC.V2.jarvis_JRTMIMO_2EURPAR.Underlying,
],
},
@@ -2432,7 +2792,7 @@ module.exports = {
type: GET_PRICE_TYPES.KYBER_PAIR,
params: [
addresses.MATIC.agDEN_JUL22,
- addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying,
+ addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying,
addresses.MATIC.V2.jarvis_agDENJUL22_2EUR.Underlying,
],
},
@@ -3001,7 +3361,7 @@ module.exports = {
logoUrl: './icons/yel-matic.png',
apyIconUrls: ['./icons/yel.png'],
apyTokenSymbols: ['YEL'],
- displayName: 'YEL: YEL-MATIC',
+ displayName: 'YEL-MATIC',
subLabel: 'Quickswap',
tokenAddress: addresses.MATIC.V2.quick_YEL_MATIC.Underlying,
decimals: '18',
@@ -3258,8 +3618,8 @@ module.exports = {
isSingleAssetWithdrawalAllowed: false,
chain: CHAINS_ID.ETH_MAINNET,
category: VAULT_CATEGORIES_IDS.UNIV3,
- displayName: 'Uniswap V3: ORC-ETH',
- subLabel: 'Orbit Chain',
+ displayName: 'ORC-ETH',
+ subLabel: 'Uniswap V3 - Orbit Chain',
apyIconUrls: ['./icons/univ3.png'],
apyTokenSymbols: ['UNI'],
logoUrl: './icons/univ3-orc-eth.png',
@@ -3450,8 +3810,8 @@ module.exports = {
UniV3_CNG_ETH: {
chain: CHAINS_ID.ETH_MAINNET,
category: VAULT_CATEGORIES_IDS.UNIV3,
- displayName: 'Uniswap V3: CNG-ETH',
- subLabel: 'Changer',
+ displayName: 'CNG-ETH',
+ subLabel: 'Uniswap V3 - Changer',
apyIconUrls: ['./icons/univ3.png'],
apyTokenSymbols: ['UNI'],
logoUrl: './icons/univ3-eth-cng.png',
@@ -3680,7 +4040,7 @@ module.exports = {
logoUrl: './icons/yel-eth.png',
apyIconUrls: ['./icons/yel.png'],
apyTokenSymbols: ['YEL'],
- displayName: 'YEL-ETH (SUSHI)',
+ displayName: 'YEL-ETH',
tokenAddress: addresses.V2.sushi_YEL_ETH.Underlying,
decimals: '18',
vaultAddress: addresses.V2.sushi_YEL_ETH.NewVault,
@@ -3721,10 +4081,10 @@ module.exports = {
},
UniV3_ETH_sETH2: {
zapFrontrunProtection: true,
- subLabel: 'StakeWise',
chain: CHAINS_ID.ETH_MAINNET,
category: [VAULT_CATEGORIES_IDS.UNIV3, VAULT_CATEGORIES_IDS.ETH20],
- displayName: 'Uniswap V3: ETH-sETH2',
+ displayName: 'ETH-sETH2',
+ subLabel: 'Uniswap V3 - StakeWise',
apyIconUrls: ['./icons/univ3.png', './icons/reth2.png', './icons/swise.png'],
apyTokenSymbols: ['UNI', 'rETH2', 'SWISE'],
logoUrl: './icons/univ3-eth-seth2.png',
@@ -4647,7 +5007,8 @@ module.exports = {
isSingleAssetWithdrawalAllowed: true,
chain: CHAINS_ID.ETH_MAINNET,
category: VAULT_CATEGORIES_IDS.UNIV3,
- displayName: 'Uniswap V3: WBTC-ETH',
+ displayName: 'WBTC-ETH',
+ subLabel: 'Uniswap V3',
apyIconUrls: ['./icons/univ3.png'],
apyTokenSymbols: ['UNI'],
logoUrl: './icons/univ3-wbtc-eth.png',
@@ -8035,11 +8396,13 @@ module.exports = {
},
},
UniV3_DPI_ETH: {
+ inactive: true,
disableAutoSwap: true,
testInactive: true,
chain: CHAINS_ID.ETH_MAINNET,
category: VAULT_CATEGORIES_IDS.INACTIVE,
- displayName: 'Uniswap V3: ETH-DPI',
+ displayName: 'ETH-DPI',
+ subLabel: 'Uniswap V3',
apyIconUrls: [],
apyTokenSymbols: [''],
logoUrl: './icons/univ3-dpi-eth.png',
diff --git a/src/lib/constants.js b/src/lib/constants.js
index ac82685b..766b72f0 100644
--- a/src/lib/constants.js
+++ b/src/lib/constants.js
@@ -66,6 +66,7 @@ const ESTIMATED_APY_TYPES = {
MSTABLE: 'MSTABLE',
LOOKSRARE_SINGLE_ASSET: 'LOOKSRARE_SINGLE_ASSET',
STAKEWISE: 'STAKEWISE',
+ AURA: 'AURA',
}
const TRADING_APY_TYPES = {
@@ -188,11 +189,16 @@ const BALANCER_SUBGRAPH_URLS = {
MATIC: 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-v2',
}
+const LIDO_API_URLS = { ETH: 'https://eth-api.lido.fi/v1/protocol/steth/apr/sma' }
+const ROCKETPOOL_API_URLS = { ETH: 'https://api.rocketpool.net/api/apr' }
+
const STAKEWISE_API_URLS = {
LIQUIDITY: 'https://api.stakewise.io/uniswap-pools/',
STAKING: 'https://api.stakewise.io/pool-stats/',
}
+const QUICKSWAP_GAMMA_ENDPOINT = 'https://wire2.gamma.xyz/quickswap/polygon/'
+
const DEBUG_MODE = process.env.DEBUG_MODE
const WEB3_CALL_COUNT_STATS_KEY = 'web3CallCountStats'
@@ -272,6 +278,9 @@ module.exports = {
MATIC_RPC_URL,
TRADING_APY_TYPES,
BALANCER_SUBGRAPH_URLS,
+ LIDO_API_URLS,
+ ROCKETPOOL_API_URLS,
STAKEWISE_API_URLS,
APE_API_URL,
+ QUICKSWAP_GAMMA_ENDPOINT,
}
diff --git a/src/lib/third-party/balancer.js b/src/lib/third-party/balancer.js
index 42ab14c1..af7b3547 100644
--- a/src/lib/third-party/balancer.js
+++ b/src/lib/third-party/balancer.js
@@ -30,7 +30,7 @@ const executeBalancerCall = (type, query, networkId) => {
})
}
-const getPoolInfo = async (poolId, networkId) => {
+const getPoolInfo = (poolId, networkId) => {
if (networkId == CHAIN_TYPES.ETH) {
return getPoolInfoSubgraph(poolId, networkId)
} else if (networkId == CHAIN_TYPES.MATIC) {
@@ -38,12 +38,37 @@ const getPoolInfo = async (poolId, networkId) => {
}
}
-const getPoolInfoSubgraph = (poolId, networkId) => {
- const query = `query {
- pools (where: {id: "${poolId}"}) { swapFee totalLiquidity }
+const getPoolInfoSubgraph = async (poolId, networkId) => {
+ const poolQuery = `query {
+ pools (where: {id: "${poolId}"}) {
+ totalLiquidity tokensList
+ tokens (id: "${poolId}") { balance priceRate }}
}`
- let result = executeBalancerCall('pools[0]', query, networkId)
- return result
+
+ const poolInfo = await executeBalancerCall('pools[0]', poolQuery, networkId)
+
+ const tokensList = poolInfo.tokensList
+ const tokens = poolInfo.tokens
+
+ let tokenValues = {}
+ await Promise.all(
+ tokensList.map(async (token, index) => {
+ const balance = new BigNumber(tokens[index].balance)
+ const rate = new BigNumber(tokens[index].priceRate)
+
+ const tokenQuery = `query {
+ token (id: "${token}") { latestUSDPrice}
+ }`
+
+ const price = new BigNumber(
+ await executeBalancerCall('token.latestUSDPrice', tokenQuery, networkId),
+ )
+
+ tokenValues[token] = balance.times(rate).times(price)
+ }),
+ )
+
+ return { totalLiquidity: poolInfo.totalLiquidity, tokenValues: tokenValues }
}
const getPoolInfoOnChain = async (poolId, networkId) => {
diff --git a/src/lib/third-party/lido.js b/src/lib/third-party/lido.js
new file mode 100644
index 00000000..695c771d
--- /dev/null
+++ b/src/lib/third-party/lido.js
@@ -0,0 +1,28 @@
+const { get } = require('lodash')
+const { cachedAxios } = require('../db/models/cache')
+const { CHAIN_TYPES, LIDO_API_URLS } = require('../constants')
+
+const get7MAAPRs = networkId => {
+ let apiURL
+ if (networkId == CHAIN_TYPES.ETH) {
+ apiURL = LIDO_API_URLS.ETH
+ }
+
+ return cachedAxios
+ .get(apiURL)
+ .then(response => {
+ const data = get(response, `data.data.smaApr`)
+ if (data) {
+ return data
+ } else {
+ console.error(get(response, 'data.errors', response))
+ return null
+ }
+ })
+ .catch(error => {
+ console.error(`Lido APRs api failed:`, error)
+ return null
+ })
+}
+
+module.exports = { get7MAAPRs }
diff --git a/src/lib/third-party/rocket-pool.js b/src/lib/third-party/rocket-pool.js
new file mode 100644
index 00000000..67489e85
--- /dev/null
+++ b/src/lib/third-party/rocket-pool.js
@@ -0,0 +1,28 @@
+const { get } = require('lodash')
+const { cachedAxios } = require('../db/models/cache')
+const { CHAIN_TYPES, ROCKETPOOL_API_URLS } = require('../constants')
+
+const getYearlyAPR = networkId => {
+ let apiURL
+ if (networkId == CHAIN_TYPES.ETH) {
+ apiURL = ROCKETPOOL_API_URLS.ETH
+ }
+
+ return cachedAxios
+ .get(apiURL)
+ .then(response => {
+ const data = get(response, `data.yearlyAPR`)
+ if (data) {
+ return data
+ } else {
+ console.error(get(response, 'data.errors', response))
+ return null
+ }
+ })
+ .catch(error => {
+ console.error(`Rocket Pool APRs api failed:`, error)
+ return null
+ })
+}
+
+module.exports = { getYearlyAPR }
diff --git a/src/prices/implementations/quickswap-gamma.js b/src/prices/implementations/quickswap-gamma.js
new file mode 100644
index 00000000..c62fb560
--- /dev/null
+++ b/src/prices/implementations/quickswap-gamma.js
@@ -0,0 +1,27 @@
+const axios = require('axios')
+const { get } = require('lodash')
+const { QUICKSWAP_GAMMA_ENDPOINT } = require('../../lib/constants')
+const BigNumber = require('bignumber.js')
+
+const getPrice = async poolAddress => {
+ let price = 0,
+ response
+ try {
+ response = await axios.get(`${QUICKSWAP_GAMMA_ENDPOINT}hypervisors/allData`)
+ const tvlUSD = get(response, `data.${poolAddress.toLowerCase()}.poolTvlUSD`, 0)
+ let totalSupply = get(response, `data.${poolAddress.toLowerCase()}.totalSupply`, 0)
+ totalSupply = new BigNumber(totalSupply).dividedBy(new BigNumber(10).pow(18))
+ if (totalSupply && totalSupply > 0) {
+ price = parseFloat(tvlUSD) / totalSupply.toFixed()
+ }
+ } catch (e) {
+ console.error('Gamma API error: ', e)
+ price = 0
+ }
+
+ return price.toString()
+}
+
+module.exports = {
+ getPrice,
+}
diff --git a/src/runtime/pollers.js b/src/runtime/pollers.js
index d5d729b7..33778f05 100644
--- a/src/runtime/pollers.js
+++ b/src/runtime/pollers.js
@@ -521,6 +521,122 @@ const getTotalRevenue = async () => {
console.log('-- Done getting total revenue --\n')
}
+const getNanolyData = async () => {
+ console.log('\n-- Getting Nanoly endpoint data --')
+
+ const vaults = await loadData(Cache, DB_CACHE_IDS.VAULTS)
+ const pools = await loadData(Cache, DB_CACHE_IDS.POOLS)
+ const token_stats = await loadData(Cache, DB_CACHE_IDS.STATS)
+ if (!vaults) {
+ console.log(`Error getting Nanoly endpoint data due to missing data. Vaults: ${vaults}`)
+ return
+ } else if (!pools) {
+ console.log(`Error getting Nanoly endpoint data due to missing data. Pools: ${pools}`)
+ return
+ }
+ let results = [],
+ hasErrors
+ for (let networkId in vaults) {
+ for (let symbol in vaults[networkId]) {
+ const vault = vaults[networkId][symbol]
+ let reward = 0
+ let rewards = {}
+ if (!vault.inactive) {
+ const pool = pools[networkId].find(
+ pool =>
+ pool.id === symbol ||
+ (pool.collateralAddress &&
+ pool.collateralAddress.toLowerCase() === vault.vaultAddress.toLowerCase()),
+ )
+ const address = vault.tokenAddress
+ const tokens = vault.displayName
+ let base
+ if (pool && pool.tradingApy) {
+ base = (Number(vault.estimatedApy) + Number(pool.tradingApy)) / 100
+ } else {
+ base = Number(vault.estimatedApy) / 100
+ }
+ if (pool && vault.id != 'IFARM') {
+ pool.rewardTokenSymbols.forEach((e, i) => {
+ e = e === 'miFARM' ? 'iFARM' : e
+ rewards[e] = Number(pool.rewardAPY[i]) / 100
+ reward = reward + Number(pool.rewardAPY[i]) / 100
+ })
+ } else {
+ reward = Number(token_stats.tokenStats['historicalAverageProfitSharingAPY']) / 100
+ rewards = {
+ FARM: reward,
+ }
+ }
+ const tvl = Number(vault.totalValueLocked).toFixed(2)
+
+ let result = {
+ chain: networkId,
+ tokens,
+ address,
+ base,
+ reward,
+ rewards,
+ url: 'https://app.harvest.finance/',
+ tvl,
+ active: true,
+ }
+ results.push(result)
+ }
+ }
+ }
+
+ //For special vaults
+ const farmWethPool = pools.eth.find(pool => pool.id === 'farm-weth')
+ if (farmWethPool) {
+ const reward = Number(farmWethPool.rewardAPY[0]) / 100
+ const rewards = {
+ FARM: reward,
+ }
+ const tvl = Number(farmWethPool.totalValueLocked).toFixed(2)
+ results.push({
+ chain: 'eth',
+ tokens: 'FARM-ETH',
+ address: farmWethPool.contractAddress,
+ base: Number(farmWethPool.tradingApy) / 100,
+ reward,
+ rewards,
+ url: 'https://app.harvest.finance/',
+ tvl,
+ active: true,
+ })
+ }
+
+ const farmGrainPool = pools.eth.find(pool => pool.id === 'farm-grain')
+ if (farmGrainPool) {
+ const reward = Number(farmGrainPool.rewardAPY[0]) / 100
+ const rewards = {
+ FARM: reward,
+ }
+ const tvl = Number(farmGrainPool.totalValueLocked).toFixed(2)
+ results.push({
+ chain: 'eth',
+ tokens: 'FARM-GRAIN',
+ address: farmGrainPool.contractAddress,
+ base: Number(farmGrainPool.tradingApy) / 100,
+ reward,
+ rewards,
+ url: 'https://app.harvest.finance/',
+ tvl,
+ active: true,
+ })
+ }
+ await storeData(
+ Cache,
+ DB_CACHE_IDS.STATS,
+ {
+ nanolyEndPointData: results,
+ },
+ hasErrors,
+ )
+ console.log('-- Done getting Nanoly endpoint data --\n')
+}
+
const getCmc = async () => {
console.log('\n-- Getting CMC data --')
const pools = await loadData(Cache, DB_CACHE_IDS.POOLS)
@@ -784,6 +900,12 @@ const runUpdateLoop = async () => {
updateCallCountCache('cmc')
resetCallCount()
}
+
+ await getNanolyData()
+ if (DEBUG_MODE) {
+ updateCallCountCache('cmc')
+ resetCallCount()
+ }
}
if (DEBUG_MODE) {
diff --git a/src/runtime/router/index.js b/src/runtime/router/index.js
index f1ace8ac..036ef216 100644
--- a/src/runtime/router/index.js
+++ b/src/runtime/router/index.js
@@ -195,6 +195,16 @@ const initRouter = app => {
})
}),
)
+
+ app.get(
+ '/nanoly',
+ asyncWrap(async (req, res) => {
+ const dbField = 'data.nanolyEndPointData'
+ const queryResponse = await Cache.findOne({ type: DB_CACHE_IDS.STATS }, { [dbField]: 1 })
+
+ res.send(get(queryResponse, dbField, {}))
+ }),
+ )
}
if (ACTIVE_ENDPOINTS === ENDPOINT_TYPES.ALL || ACTIVE_ENDPOINTS === ENDPOINT_TYPES.INTERNAL) {
diff --git a/src/vaults/apys/implementations/aura-pools.json b/src/vaults/apys/implementations/aura-pools.json
new file mode 100644
index 00000000..b44658ad
--- /dev/null
+++ b/src/vaults/apys/implementations/aura-pools.json
@@ -0,0 +1,72 @@
+[
+ {
+ "id": 0,
+ "lptoken": "0x616e8BfA43F920657B3497DBf40D6b1A02D4608d",
+ "rewardPool": "0x00a7ba8ae7bca0b10a32ea1f8e2a1da980c6cad2",
+ "balancerPoolId": "0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014",
+ "name": "auraBAL",
+ "extras": [
+ {
+ "contract": "0x62D7d772b2d909A0779d15299F4FC87e34513c6d",
+ "token": "0xA13a9247ea42D743238089903570127DdA72fE44",
+ "name": "bbaUSD"
+ }
+ ]
+ },
+ {
+ "id": 1,
+ "lptoken": "0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd",
+ "rewardPool": "0xacada51c320947e7ed1a0d0f6b939b0ff465e4c2",
+ "balancerPoolId": "0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249",
+ "name": "auraBAL_lp",
+ "extras": [
+ {
+ "contract": "0xb1BCdf4bce3d5786eb10533D07E4595D1f1BC9c8",
+ "token": "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF",
+ "name": "AURA"
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "lptoken": "0xa13a9247ea42d743238089903570127dda72fe44",
+ "rewardPool": "0xfb6b1c1a1ea5618b3cfc20f81a11a97e930fa46b",
+ "balancerPoolId": "0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d",
+ "name": "bbaUSD"
+ },
+ {
+ "id": 3,
+ "lptoken": "0x1e19cf2d73a72ef1332c882f20534b6519be0276",
+ "rewardPool": "0x001b78cec62dcfdc660e06a91eb1bc966541d758",
+ "balancerPoolId": "0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112",
+ "name": "rETH"
+ },
+ {
+ "id": 4,
+ "lptoken": "0x32296969ef14eb0c6d29669c550d4a0449130230",
+ "rewardPool": "0xe4683fe8f53da14ca5dac4251eadfb3aa614d528",
+ "balancerPoolId": "0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080",
+ "name": "wstETH",
+ "extras": [
+ {
+ "contract": "0x00F54653e66Baf7ddCD09f6e59206F8906Bfa6eA",
+ "token": "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32",
+ "name": "LDO"
+ }
+ ]
+ },
+ {
+ "id": 5,
+ "lptoken": "0x25accb7943fd73dda5e23ba6329085a3c24bfb6a",
+ "rewardPool": "0x8c9e4a04adb0d543b33cab644135bfca523c40c8",
+ "balancerPoolId": "0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387",
+ "name": "wstETH_bbaUSD"
+ },
+ {
+ "id": 72,
+ "lptoken": "0x60683B05e9a39E3509D8fdb9C959f23170f8A0fa",
+ "rewardPool": "0x4d585a29dF0a8E18c26f662C6586ded6703062a8",
+ "balancerPoolId": "0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489",
+ "name": "bbiUSD"
+ }
+]
diff --git a/src/vaults/apys/implementations/aura.js b/src/vaults/apys/implementations/aura.js
new file mode 100644
index 00000000..3146b660
--- /dev/null
+++ b/src/vaults/apys/implementations/aura.js
@@ -0,0 +1,19 @@
+const BigNumber = require('bignumber.js')
+const { auraAPR } = require('./aura.utils.js')
+
+const getApy = async (poolName, profitSharingFactor, networkId = '1') => {
+ let apy
+
+ try {
+ apy = new BigNumber(await auraAPR(poolName, networkId)).times(profitSharingFactor)
+ } catch (err) {
+ console.error('aura API error: ', err)
+ apy = new BigNumber(0)
+ }
+
+ return apy.isNaN() ? '0' : apy.toFixed(2, 1)
+}
+
+module.exports = {
+ getApy,
+}
diff --git a/src/vaults/apys/implementations/aura.utils.js b/src/vaults/apys/implementations/aura.utils.js
new file mode 100644
index 00000000..5eab235c
--- /dev/null
+++ b/src/vaults/apys/implementations/aura.utils.js
@@ -0,0 +1,157 @@
+const pools = require('./aura-pools.json')
+
+const BigNumber = require('bignumber.js')
+
+const { web3 } = require('../../../lib/web3')
+const { token, pool } = require('../../../lib/web3/contracts')
+const { getTokenPrice } = require('../../../prices/index')
+//const getBalancerTokenPrice = require('../../../prices/implementations/balancer.js').getPrice
+
+//** Constants */
+const BAL_ADDRESS = '0xba100000625a3754423978a60c9317c58a424e3D'
+const AURA_ADDRESS = '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF'
+
+//// ----------- APRs ----------- ////
+
+/** APRs */
+
+/**
+ * Calculate APR of each pools
+ * @param {string} poolName
+ * @param {string} networkId
+ * @returns {number}
+ */
+const auraAPR = (poolName, networkId) => auraAPRWithPrice(poolName, networkId, -1, -1)
+
+/**
+ * Calculate APR with token price
+ * @param {string} poolName
+ * @param {string} networkId
+ * @param {number} balPrice
+ * @param {number} auraPrice
+ * @returns {number}
+ */
+const auraAPRWithPrice = async (poolName, networkId, balPrice, auraPrice) => {
+ const pool = pools.find(pool => pool.name == poolName)
+ const stakeContract = pool.rewardPool
+
+ // Get Reward Rate.
+ // The ratio between accumulated reward amount and the elapsed time since the last update.
+ // uint256 rewardRate = reward.div(duration)
+ const rate = await rewardRate(stakeContract)
+
+ // Get Virtual Price.
+ // The current price of the pool LP token relative to the underlying pool assets.
+ const virtualPrice = await getTokenPrice(pool.lptoken, pool.currency)
+
+ // Get Supply of Underlying Tokens(BPT).
+ // The supply of all underlying tokens from corresponding Aura Pool.
+ const supply = await supplyOf(stakeContract)
+
+ // Calculate Pool Total Value Locked.
+ // The total value locked of a pool.
+ // Total Supply of Pool Underlying Tokens * Price of Underlying Tokens(BPT).
+ const tvl = supply * virtualPrice
+
+ // BAL per underlying per second.
+ const balPerUnderlying = rate / tvl
+
+ // BAL per year.
+ const balPerYear = balPerUnderlying * 86400 * 365
+ if (balPrice <= 0) balPrice = await getTokenPrice(BAL_ADDRESS)
+
+ // AURA per year.
+ const auraPerYear = await getAuraMintAmount(balPerYear)
+ if (auraPrice <= 0) auraPrice = await getTokenPrice(AURA_ADDRESS)
+
+ let apr = balPerYear * balPrice
+ apr += auraPerYear * auraPrice
+
+ if (pool.extras != undefined && pool.extras.length > 0) {
+ for (const i in pool.extras) {
+ const ex = pool.extras[i]
+ const exRate = await rewardRate(ex.contract)
+ const perUnderlying = exRate / tvl
+ const perYear = perUnderlying * 86400 * 365
+ let price = await getTokenPrice(ex.token)
+ apr += perYear * price
+ }
+ }
+
+ return apr * 100
+}
+
+/** Util */
+
+/**
+ * Fetch the reward rate of the Aura reward pool
+ * @param {string} contract
+ * @returns {number}
+ */
+const rewardRate = async contract => {
+ const poolInstance = new web3.eth.Contract(pool.contract.abi, contract)
+ const fetchedRewardRate = await pool.methods.rewardRate(poolInstance)
+
+ return new BigNumber(fetchedRewardRate).dividedBy(new BigNumber(10).pow(18)).toNumber()
+}
+
+/**
+ * Fetch the total supply of a token
+ * @param {string} contract
+ * @returns {number}
+ */
+const supplyOf = async contract => {
+ const tokenInstance = new web3.eth.Contract(token.contract.abi, contract)
+
+ const fetchedTotalSupply = await token.methods.getTotalSupply(tokenInstance)
+ const totalSupply = new BigNumber(fetchedTotalSupply)
+ .dividedBy(new BigNumber(10).pow(18))
+ .toNumber()
+
+ return totalSupply
+}
+
+/**
+ * Calculate the mint amount of Aura
+ * @param {number} balEarned
+ * @returns {number}
+ */
+const getAuraMintAmount = async balEarned => {
+ const reductionPerCliff = 100000
+ const totalCliffs = 500
+ const initMintSupply = 50000000
+ const emissionMaxSupply = 50000000
+ const minterMinted = 0
+ const totalSupply = await supplyOf(AURA_ADDRESS)
+
+ // e.g. emissionsMinted = 6e25 - 5e25 - 0 = 1e25
+ const emissionsMinted = totalSupply - initMintSupply - minterMinted
+
+ // e.g. reductionPerCliff = 5e25 / 500 = 1e23
+ // e.g. cliff = 1e25 / 1e23 = 100
+ const cliff = emissionsMinted / reductionPerCliff
+
+ // e.g. 100 < 500
+ if (cliff < totalCliffs) {
+ // e.g. (new) reduction = (500 - 100) * 2.5 + 700 = 1700
+ // e.g. (new) reduction = (500 - 250) * 2.5 + 700 = 1325
+ // e.g. (new) reduction = (500 - 400) * 2.5 + 700 = 950
+ const reduction = (totalCliffs - cliff) * 2.5 + 700
+ // e.g. (new) amount = 1e19 * 1700 / 500 = 34e18
+ // e.g. (new) amount = 1e19 * 1325 / 500 = 26.5e18
+ // e.g. (new) amount = 1e19 * 950 / 500 = 19e17
+ let amount = (balEarned * reduction) / totalCliffs
+
+ // e.g. amtTillMax = 5e25 - 1e25 = 4e25
+ const amtTillMax = emissionMaxSupply - emissionsMinted
+ if (amount > amtTillMax) {
+ amount = amtTillMax
+ }
+
+ return amount
+ }
+
+ return 0
+}
+
+module.exports = { auraAPR }
diff --git a/src/vaults/apys/implementations/quickswap-gamma.js b/src/vaults/apys/implementations/quickswap-gamma.js
new file mode 100644
index 00000000..b8731b2b
--- /dev/null
+++ b/src/vaults/apys/implementations/quickswap-gamma.js
@@ -0,0 +1,26 @@
+const axios = require('axios')
+const { get } = require('lodash')
+const { QUICKSWAP_GAMMA_ENDPOINT } = require('../../../lib/constants')
+
+const getApy = async (masterchef, poolAddress, reduction) => {
+ let response, apy
+
+ try {
+ response = await axios.get(`${QUICKSWAP_GAMMA_ENDPOINT}allRewards2`)
+ apy = get(
+ response,
+ `data.${masterchef.toLowerCase()}.pools.${poolAddress.toLowerCase()}.apr`,
+ 0,
+ )
+ apy = parseFloat(apy) * parseFloat(reduction) * 100
+ } catch (err) {
+ console.error('Gamma API error: ', err)
+ apy = 0
+ }
+
+ return apy
+}
+
+module.exports = {
+ getApy,
+}
diff --git a/src/vaults/trading-apys/implementations/balancer-boost-info.json b/src/vaults/trading-apys/implementations/balancer-boost-info.json
index 62a8626c..1a1c64a9 100644
--- a/src/vaults/trading-apys/implementations/balancer-boost-info.json
+++ b/src/vaults/trading-apys/implementations/balancer-boost-info.json
@@ -1,60 +1,78 @@
{
- "0x48e6B98ef6329f8f0A30eBB8c7C960330d648085":{
- "boostedUnderlyings":[
- "0x178E029173417b1F9C8bC16DCeC6f697bC323746",
- "0xF93579002DBE8046c43FEfE86ec78b1112247BB8",
- "0xFf4ce5AAAb5a627bf82f4A571AB1cE94Aa365eA6"
- ],
- "boostTypes":[
- "Aave",
- "Aave",
- "Aave"
- ],
- "aaveTags":[
- "AMDAI",
- "AMUSDC",
- "AMUSDT"
- ],
- "poolId": "0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b"
- },
- "0xB797AdfB7b268faeaA90CAdBfEd464C76ee599Cd":{
- "boostedUnderlyings":[
- "0x3d468AB2329F296e1b9d8476Bb54Dd77D8c2320f",
- "0x7fC9E0Aa043787BFad28e29632AdA302C790Ce33"
- ],
- "boostTypes":[
- "balLP",
- "balLP"
- ],
- "poolId": "0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba"
- },
- "0x4A0b73f0D13fF6d43e304a174697e3d5CFd310a4":{
- "boostedUnderlyings":[
- "0x48e6B98ef6329f8f0A30eBB8c7C960330d648085",
- "0xE22483774bd8611bE2Ad2F4194078DaC9159F4bA"
- ],
- "boostTypes":[
- "balLP",
- "balLP"
- ],
- "poolId": "0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c"
- },
- "0x8159462d255C1D24915CB51ec361F700174cD994":{
- "boostedUnderlyings":[
- "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4"
- ],
- "boostTypes":[
- "stakedMatic"
- ],
- "poolId": "0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d"
- },
- "0xb20fC01D21A50d2C734C4a1262B4404d41fA7BF0":{
- "boostedUnderlyings":[
- "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6"
- ],
- "boostTypes":[
- "stakedMatic"
- ],
- "poolId": "0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"
- }
+ "0x48e6B98ef6329f8f0A30eBB8c7C960330d648085": {
+ "boostedUnderlyings": [
+ "0x178E029173417b1F9C8bC16DCeC6f697bC323746",
+ "0xF93579002DBE8046c43FEfE86ec78b1112247BB8",
+ "0xFf4ce5AAAb5a627bf82f4A571AB1cE94Aa365eA6"
+ ],
+ "boostTypes": ["Aave", "Aave", "Aave"],
+ "aaveTags": ["AMDAI", "AMUSDC", "AMUSDT"],
+ "poolId": "0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b"
+ },
+ "0xB797AdfB7b268faeaA90CAdBfEd464C76ee599Cd": {
+ "boostedUnderlyings": [
+ "0x3d468AB2329F296e1b9d8476Bb54Dd77D8c2320f",
+ "0x7fC9E0Aa043787BFad28e29632AdA302C790Ce33"
+ ],
+ "boostTypes": ["balLP", "balLP"],
+ "poolId": "0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba"
+ },
+ "0x4A0b73f0D13fF6d43e304a174697e3d5CFd310a4": {
+ "boostedUnderlyings": [
+ "0x48e6B98ef6329f8f0A30eBB8c7C960330d648085",
+ "0xE22483774bd8611bE2Ad2F4194078DaC9159F4bA"
+ ],
+ "boostTypes": ["balLP", "balLP"],
+ "poolId": "0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c"
+ },
+ "0x8159462d255C1D24915CB51ec361F700174cD994": {
+ "boostedUnderlyings": ["0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4"],
+ "boostTypes": ["stakedMatic"],
+ "poolId": "0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d"
+ },
+ "0xb20fC01D21A50d2C734C4a1262B4404d41fA7BF0": {
+ "boostedUnderlyings": ["0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6"],
+ "boostTypes": ["stakedMatic"],
+ "poolId": "0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"
+ },
+ "0x3dd0843A028C86e0b760b1A76929d1C5Ef93a2dd": {
+ "boostedUnderlyings": ["0x616e8BfA43F920657B3497DBf40D6b1A02D4608d"],
+ "boostTypes": ["balLP"],
+ "poolId": "0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249"
+ },
+ "0xA13a9247ea42D743238089903570127DdA72fE44": {
+ "boostedUnderlyings": [
+ "0x2F4eb100552ef93840d5aDC30560E5513DFfFACb",
+ "0x82698aeCc9E28e9Bb27608Bd52cF57f704BD1B83",
+ "0xae37D54Ae477268B9997d4161B96b8200755935c"
+ ],
+ "boostTypes": ["Aave", "Aave", "Aave"],
+ "aaveTags": ["AUSDT", "AUSDC", "ADAI"],
+ "poolId": "0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"
+ },
+ "0x1E19CF2D73a72Ef1332C882F20534B6519Be0276": {
+ "boostedUnderlyings": ["0xae78736Cd615f374D3085123A210448E74Fc6393"],
+ "boostTypes": ["stakedEth"],
+ "poolId": "0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112"
+ },
+ "0x32296969Ef14EB0c6d29669C550D4a0449130230": {
+ "boostedUnderlyings": ["0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"],
+ "boostTypes": ["stakedEth"],
+ "poolId": "0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080"
+ },
+ "0x60683B05e9a39E3509D8fdb9C959f23170f8A0fa": {
+ "boostedUnderlyings": [
+ "0x2FF1A9Dbdacd55297452cFD8a4d94724Bc22a5F7",
+ "0xbc0F2372008005471874e426e86CCFae7B4De79d",
+ "0xDbA274B4D04097b90A72b62467d828cEFD708037"
+ ],
+ "boostTypes": ["Idle", "Idle", "Idle"],
+ "symbols": ["USDT", "USDC", "DAI"],
+ "idleTokens": [
+ "0xF34842d05A1c888Ca02769A633DF37177415C2f8",
+ "0x5274891bEC421B39D23760c04A6755eCB444797C",
+ "0x3fe7940616e5bc47b0775a0dccf6237893353bb4"
+ ],
+ "poolId": "0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489"
+ }
}
diff --git a/src/vaults/trading-apys/implementations/balancer-boost.js b/src/vaults/trading-apys/implementations/balancer-boost.js
index b8be9d65..183e6611 100644
--- a/src/vaults/trading-apys/implementations/balancer-boost.js
+++ b/src/vaults/trading-apys/implementations/balancer-boost.js
@@ -3,6 +3,9 @@ const { getPoolInfo } = require('../../../lib/third-party/balancer')
const { getAaveV2Market } = require('../../../lib/third-party/aave')
const boostInfo = require('./balancer-boost-info.json')
const { executeTradingApyFunction } = require('../index.js')
+const { get7MAAPRs } = require('../../../lib/third-party/lido')
+const { getYearlyAPR } = require('../../../lib/third-party/rocket-pool')
+const { getApy: getIdleApy } = require('../../apys/implementations/idle-finance')
const getBoostAPY = async (poolAddress, networkId) => {
const poolBoostInfo = boostInfo[poolAddress]
@@ -17,15 +20,21 @@ const getBoostAPY = async (poolAddress, networkId) => {
let apy = new BigNumber(0)
for (let i = 0; i < tokens.length; i++) {
const token = tokens[i]
- const tokenWeight = tokenValues[token].div(tvl)
+ const tokenWeight = tokenValues[token]
+ ? tokenValues[token].div(tvl)
+ : tokenValues[token.toLowerCase()].div(tvl)
let partApy
if (types[i] == 'Aave') {
partApy = await getAaveApy(poolBoostInfo.aaveTags[i])
+ } else if (types[i] == 'Idle') {
+ partApy = await getIdleApy(poolBoostInfo.symbols[i], poolBoostInfo.idleTokens[i], 1)
} else if (types[i] == 'balLP') {
partApy = await getLPApy(token, networkId)
} else if (types[i] == 'stakedMatic') {
partApy = await getStakedMaticApy(token)
+ } else if (types[i] == 'stakedEth') {
+ partApy = (await getStakedEthApy(token, networkId)) / 2
} else {
console.error(`Balancer boost type: ${types[i]} not recognized`)
continue
@@ -57,6 +66,14 @@ const getAaveApy = async tokenId => {
return new BigNumber(aavePool[0].liquidityRate).times(100)
}
+const getStakedEthApy = async (token, networkId) => {
+ if (token == '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0') {
+ return await get7MAAPRs(networkId)
+ } else if (token == '0xae78736Cd615f374D3085123A210448E74Fc6393') {
+ return await getYearlyAPR(networkId)
+ }
+}
+
const getStakedMaticApy = async token => {
if (token == '0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6') {
return 5.76
diff --git a/src/vaults/trading-apys/implementations/quickswap-gamma.js b/src/vaults/trading-apys/implementations/quickswap-gamma.js
new file mode 100644
index 00000000..8446f56a
--- /dev/null
+++ b/src/vaults/trading-apys/implementations/quickswap-gamma.js
@@ -0,0 +1,22 @@
+const axios = require('axios')
+const { get } = require('lodash')
+const { QUICKSWAP_GAMMA_ENDPOINT } = require('../../../lib/constants')
+
+const getTradingApy = async poolAddress => {
+ let response, apy
+
+ try {
+ response = await axios.get(`${QUICKSWAP_GAMMA_ENDPOINT}hypervisors/allData`)
+ apy = get(response, `data.${poolAddress.toLowerCase()}.returns.daily.feeApr`, 0)
+ apy = parseFloat(apy) * 100
+ } catch (err) {
+ console.error('Gamma API error: ', err)
+ apy = 0
+ }
+
+ return apy.toFixed(2)
+}
+
+module.exports = {
+ getTradingApy,
+}
diff --git a/test/integration/happy-path.js b/test/integration/happy-path.js
index a42bd707..cb1b50b6 100644
--- a/test/integration/happy-path.js
+++ b/test/integration/happy-path.js
@@ -88,6 +88,16 @@ describe('Happy Paths', function () {
})
describe('External ACTIVE_ENDPOINTS', () => {
+ it('queries /nanoly', () => {
+ return request(`http://localhost:${testPort}`)
+ .get(`/nanoly?key=${harvestKey}`)
+ .expect('Content-Type', /json/)
+ .expect(200)
+ .then(res => {
+ assert.equal(Object.keys(res.body).length, activeVaultsJsonArray.length + 3) // response must contain all active vaults + 3 special pools: iFARM, FARM/ETH, FARM/GRAIN
+ })
+ })
+
it('queries /token-stats', () => {
return request(`http://localhost:${testPort}`)
.get(`/token-stats?key=${harvestKey}`)