diff --git a/data/constants.js b/data/constants.js index ed5f768..6c888a2 100644 --- a/data/constants.js +++ b/data/constants.js @@ -115,6 +115,7 @@ const GET_PRICE_TYPES = { NOTIONAL: 'NOTIONAL', MESHSWAP_PAIR: 'MESHSWAP_PAIR', WRAPPED_TOKEN: 'WRAPPED_TOKEN', + QUICKSWAP_GAMMA: 'QUICKSWAP_GAMMA', } const ESTIMATED_APY_TYPES = { @@ -158,6 +159,7 @@ const ESTIMATED_APY_TYPES = { APE: 'APE', MESHSWAP: 'MESHSWAP', APE_STAKE: 'APE_STAKE', + QUICKSWAP_GAMMA: 'QUICKSWAP_GAMMA', } const COLLATERAL_TYPE = { @@ -196,6 +198,7 @@ const TRADING_APY_TYPES = { MSTABLE: 'MSTABLE', LOOKS: 'LOOKS', APE: 'APE', + QUICKSWAP_GAMMA: 'QUICKSWAP_GAMMA', } const POOL_TYPES = { diff --git a/data/icons/dquick.png b/data/icons/dquick.png new file mode 100644 index 0000000..05691e1 Binary files /dev/null and b/data/icons/dquick.png differ diff --git a/data/icons/usdc_weth.png b/data/icons/usdc_weth.png new file mode 100644 index 0000000..9b303ff Binary files /dev/null and b/data/icons/usdc_weth.png differ diff --git a/data/icons/wmatic_eth.png b/data/icons/wmatic_eth.png new file mode 100644 index 0000000..33e9782 Binary files /dev/null and b/data/icons/wmatic_eth.png differ diff --git a/data/icons/wmatic_usdc.png b/data/icons/wmatic_usdc.png new file mode 100644 index 0000000..7d16c59 Binary files /dev/null and b/data/icons/wmatic_usdc.png differ diff --git a/data/mainnet/addresses.json b/data/mainnet/addresses.json index 490cb86..a2fac82 100644 --- a/data/mainnet/addresses.json +++ b/data/mainnet/addresses.json @@ -370,8 +370,7 @@ "NewVault": "0x683E683fBE6Cf9b635539712c999f3B3EdCB8664", "NewStrategy": "0x50f3cfb398A25A5918B27c77465e9C3EdE7888B7", "NewPool": "0xef4Da1CE3f487DA2Ed0BE23173F76274E0D47579", - "Miner": "0x0f9cb53Ebe405d49A0bbdBD291A65Ff571bC83e1", - "doHardwork": false + "Miner": "0x0f9cb53Ebe405d49A0bbdBD291A65Ff571bC83e1" }, "crvBUSD": { "NewVault": "0x4b1cBD6F6D8676AcE5E412C78B7a59b4A1bbb68a", @@ -734,8 +733,7 @@ "Underlying": "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff", "NewVault": "0x33ED34dD7C40EF807356316B484d595dDDA832ab", "NewPool": "0xfbFBE380489882831DAD5258cFD2e29307E23B82", - "Miner": "0xD51a44d3FaE010294C616388b506AcdA1bfAAE46", - "doHardwork": false + "Miner": "0xD51a44d3FaE010294C616388b506AcdA1bfAAE46" }, "crvCVXCRV": { "Underlying": "0x9D0464996170c6B9e75eED71c68B99dDEDf279e8", @@ -866,7 +864,8 @@ "0xFe2e637202056d30016725477c5da089Ab0A043A" ], "NewVault": "0x65383Abd40f9f831018dF243287F7AE3612c62AC", - "NewPool": "0x11301B7C82Cd953734440aaF0D5Dd0B36E2aB1d8" + "NewPool": "0x11301B7C82Cd953734440aaF0D5Dd0B36E2aB1d8", + "doHardwork": "onlyProfit" }, "UniV3_UST_USDT": { "Underlying": [ @@ -910,7 +909,8 @@ "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" ], "NewVault": "0x2357685B07469eE80A389819C7A41edCD70cd88C", - "NewPool": "0xd18F256b380b30d7Aa24c504b39f7320dF1b2dbE" + "NewPool": "0xd18F256b380b30d7Aa24c504b39f7320dF1b2dbE", + "doHardwork": "onlyProfit" }, "UniV3_ETH_USDT": { "Underlying": [ @@ -1368,8 +1368,7 @@ "Underlying": "0xC9467E453620f16b57a34a770C6bceBECe002587", "NewVault": "0xc7fc2E6fd1d28fA86993F2d8707898c609535A4f", "NewStrategy": "0x223f134f63723f366e6355Fa3FfbC02E6580E216", - "NewPool": "0xcEb6985B78D0f2d69274f1c37e192E82bA81CDad", - "doHardwork": false + "NewPool": "0xcEb6985B78D0f2d69274f1c37e192E82bA81CDad" }, "convex_CVX_ETH": { "Underlying": "0x3A283D9c08E8b55966afb64C515f5143cf907611", @@ -1794,6 +1793,9 @@ "amWETH": "0x28424507fefb6f7f8E9D3860F56504E4e5f5f390", "am3CRVToken": "0xE7a24EF0C5e95Ffb0f6684b813A78F2a3AD7D171", "am3CRVPool": "0x445FE580eF8d70FF569aB36e80c647af338db351", + "amDAI": "0x27F8D03b3a2196956ED754baDc28D73be8830A6e", + "amUSDC": "0x1a13F4Ca1d028320A707D99520AbFefca3998b7F", + "amUSDT": "0x60D55F02A771d515e077c9C2403a1ef324885CeC", "JRT_MAY22": "0xF5f480Edc68589B51F4217E6aA82Ef7Df5cf789e", "JSGD": "0xa926db7a4CC0cb1736D5ac60495ca8Eb7214B503", "XSGD": "0x769434dcA303597C8fc4997Bf3DAB233e961Eda2", @@ -2183,6 +2185,14 @@ "RewardPool": "0x834579150Cc521e0afAB15568930e3BEc67B865A", "useMsigProfitCalculation": true }, + "jarvis_2EUR_agEUR_HODL": { + "Underlying": "0x2fFbCE9099cBed86984286A54e5932414aF4B717", + "NewVault": "0xE4E6055A7eB29F2Fa507ba7f8c4FAcc0C5ef9a2A", + "NewStrategy": "0x76341494eeA3bfC9de420d1C02C3398833f45343", + "NewPool": "0x9c55488f8AdC23544B8571757169AE17865ABFC8", + "RewardPool": "0x7349Cc23B3A3E104ec2FA5A0BB29c8b022508779", + "useMsigProfitCalculation": true + }, "jarvis_JRTJUL22_USDC": { "Underlying": "0x707C7f22d5E3C0234bCc53aeE51420d6cdD988f9", "NewVault": "0xcFD80B11fefD581Fc45868ABD0d61e8437C050b1", @@ -2324,6 +2334,14 @@ "RewardPool": "0x2BC39d179FAfC32B7796DDA3b936e491C87D245b", "useMsigProfitCalculation": true }, + "jarvis_2EUR_PAR_HODL": { + "Underlying": "0x0f110c55EfE62c16D553A3d3464B77e1853d0e97", + "NewVault": "0x023E85B8415b460C56377525ED159aF9935E3370", + "NewStrategy": "0x3f34b360ccd52e22BFc2Caaa72Eb32c1b2Ea1196", + "NewPool": "0x2892FA6e9D7Fc9bc8C8e62BBe79AdDff41314d03", + "RewardPool": "0xeA9871A9451c281cc1180100FC074D7F28402288", + "useMsigProfitCalculation": true + }, "jarvis_JRTNOV22_USDC": { "Underlying": "0x68Fd822a2Bda3dB31fFfA68089696ea4e55A9D36", "NewVault": "0xE17e6EfbD0064992D1E4e9a4641f30e40be208a0", @@ -2430,6 +2448,48 @@ "Gauge": "0xAA59736b80cf77d1E7D56B7bbA5A8050805F5064", "PoolId": "0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba" }, + "quickGamma_MATIC_ETH_narrow": { + "Underlying": "0x02203f2351E7aC6aB5051205172D3f772db7D814", + "NewVault": "0x506337cc631726A21788B9fDFb6BE6292bA7A835", + "NewStrategy": "0x20D5A2a81a2b23EE3D4ac94EB356f962f037e65A", + "NewPool": "0x55740C3a15394EBb635bdAfcbD7Fa8E285122606", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, + "quickGamma_MATIC_ETH_wide": { + "Underlying": "0x81Cec323BF8C4164c66ec066F53cc053A535f03D", + "NewVault": "0x2eD9699441CE48F2AA9C03Af66510D6d72750591", + "NewStrategy": "0xC17581fd31140313e634d47c4b001E9926a06087", + "NewPool": "0xdC331E735f820a306ae74ED10F6FFDdC210D0497", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, + "quickGamma_MATIC_USDC_narrow": { + "Underlying": "0x04d521E2c414E6d898c6F2599FdD863Edf49e247", + "NewVault": "0xa5422F737F24b10A0928D5E7f6cf404D077e1CD1", + "NewStrategy": "0x713613550CA9dbE91fAc20fB0e8fa33F1fb5822e", + "NewPool": "0xe0F5000e14367930A4781d2cEDa450888C7de163", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, + "quickGamma_MATIC_USDC_wide": { + "Underlying": "0x4A83253e88e77E8d518638974530d0cBbbF3b675", + "NewVault": "0xd76BC58b95acAC968Fe0Cf9fa210Bf4bE95cd249", + "NewStrategy": "0x20EB0769422c932ad34800A0211Fa136274c4B45", + "NewPool": "0x291e6768aA66Aa2c91D6aeaA917b1E79999D92f9", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, + "quickGamma_USDC_ETH_narrow": { + "Underlying": "0x3Cc20A6795c4b57d9817399F68E83e71C8626580", + "NewVault": "0x548E84517b2891E0316f604f4f5326a306F1830e", + "NewStrategy": "0xD5F0e427aeD0eB51077BA4b078e6431058526Dcb", + "NewPool": "0xD94c25aD1C9F6E39a20E7Ec598B4a88062bCa268", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, + "quickGamma_USDC_ETH_wide": { + "Underlying": "0x6077177d4c41E114780D9901C9b5c784841C523f", + "NewVault": "0x0eFe7d1E2C286833e592e887aA48a6A65F21Ee7B", + "NewStrategy": "0x84f6AA524c74D565d5A01E0e6ad388E4246E0378", + "NewPool": "0xFcC9682E08E3B001e9516683cbAAf573aFFc6415", + "MasterChef": "0x20ec0d06f447d550fc6edee42121bc8c1817b97d" + }, "balancer_2EUR_agEUR": { "OldUnderlying": "0x2fFbCE9099cBed86984286A54e5932414aF4B717", "Underlying": "0xa48D164F6eB0EDC68bd03B56fa59E12F24499aD1", @@ -2449,7 +2509,7 @@ "NewPool": "0x2892FA6e9D7Fc9bc8C8e62BBe79AdDff41314d03", "Gauge": "0xD14875e2C65A46d15501C9296A9bCC0E17510978", "PoolId": "0x7d60a4cb5ca92e2da965637025122296ea6854f900000000000000000000085e" - } + } } } } diff --git a/data/mainnet/pools.js b/data/mainnet/pools.js index 5d6875c..69df2c7 100644 --- a/data/mainnet/pools.js +++ b/data/mainnet/pools.js @@ -4,6 +4,204 @@ const addresses = require('./addresses.json') const strat30PercentFactor = '0.7' module.exports = [ + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_MATIC_ETH_narrow', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_narrow.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest WMATIC and/or WETH +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_MATIC_ETH_wide', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_MATIC_ETH_wide.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest WMATIC and/or WETH +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_MATIC_USDC_narrow', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_narrow.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest WMATIC and/or USDC +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_MATIC_USDC_wide', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_MATIC_USDC_wide.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest WMATIC and/or USDC +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_USDC_ETH_narrow', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_narrow.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest USDC and/or WETH +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, + { + chain: CHAINS_ID.MATIC_MAINNET, + id: 'quickGamma_USDC_ETH_wide', + type: POOL_TYPES.INCENTIVE, + tradingApyFunction: { + type: TRADING_APY_TYPES.QUICKSWAP_GAMMA, + params: [addresses.MATIC.V2.quickGamma_USDC_ETH_wide.Underlying], + }, + contractAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_wide.NewPool, + collateralAddress: addresses.MATIC.V2.quickGamma_USDC_ETH_wide.NewVault, + rewardAPY: [], + rewardAPR: null, + rewardTokens: [addresses.MATIC.miFARM], + rewardTokenSymbols: ['miFARM'], + stakeAndDepositHelpMessage: ` +
+ Deposit and stake: +
    +
  1. + Go to  + + gamma + + and invest USDC and/or WETH +
  2. +
  3. + Go back to this vault, hit "MAX" and then "Deposit". Leave + "Stake for rewards" checked for staking +
  4. +
+
+ `, + }, { chain: CHAINS_ID.MATIC_MAINNET, id: 'balancer_bbamusd', diff --git a/data/mainnet/tokens.js b/data/mainnet/tokens.js index ab6344b..70c99fb 100644 --- a/data/mainnet/tokens.js +++ b/data/mainnet/tokens.js @@ -109,6 +109,174 @@ module.exports = { ], 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: '', @@ -222,7 +390,7 @@ module.exports = { }, balancer_bbamusd: { isNew: true, - category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON], + category: VAULT_CATEGORIES_IDS.BALANCER, chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/bb-am-usd.png', apyIconUrls: ['./icons/balancer.png'], @@ -316,7 +484,7 @@ module.exports = { }, balancer_2BRLUSD: { isNew: true, - category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON], + category: VAULT_CATEGORIES_IDS.BALANCER, chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/2brl-usd.png', apyIconUrls: ['./icons/balancer.png'], @@ -370,7 +538,7 @@ module.exports = { }, balancer_2BRL: { isNew: true, - category: [VAULT_CATEGORIES_IDS.BALANCER, VAULT_CATEGORIES_IDS.STABLE_POLYGON], + category: VAULT_CATEGORIES_IDS.BALANCER, chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/2brl.png', apyIconUrls: ['./icons/balancer.png'], @@ -761,7 +929,7 @@ module.exports = { ], cmcRewardTokenSymbols: ['iFARM', 'CVX', 'CRV'], }, - crv_CRV_ETH: { + crvCRVETH: { isNew: true, chain: CHAINS_ID.ETH_MAINNET, category: VAULT_CATEGORIES_IDS.CONVEX, @@ -841,13 +1009,12 @@ module.exports = { }, }, crvUSDN: { - inactive: true, chain: CHAINS_ID.ETH_MAINNET, - category: VAULT_CATEGORIES_IDS.INACTIVE, + category: [VAULT_CATEGORIES_IDS.CONVEX, VAULT_CATEGORIES_IDS.STABLECOINS], displayName: 'USDN-3Crv', subLabel: 'Convex Finance', - apyIconUrls: [], - apyTokenSymbols: [], + apyIconUrls: ['./icons/curve.png', './icons/cvx.png'], + apyTokenSymbols: ['CRV', 'CVX'], logoUrl: './icons/curve-usdn.png', tokenAddress: addresses.crvUSDN, decimals: '18', @@ -864,14 +1031,13 @@ module.exports = { ], cmcRewardTokenSymbols: ['FARM', 'CVX', 'CRV'], }, - crvThreeCrypto: { - inactive: true, + crvTriCrypto: { chain: CHAINS_ID.ETH_MAINNET, - category: VAULT_CATEGORIES_IDS.INACTIVE, + category: VAULT_CATEGORIES_IDS.CONVEX, displayName: 'USDT-WBTC-ETH', subLabel: 'Convex Finance', - apyIconUrls: [], - apyTokenSymbols: [], + apyIconUrls: ['./icons/curve.png', './icons/cvx.png'], + apyTokenSymbols: ['CRV', 'CVX'], logoUrl: './icons/curve-tricrypto.png', tokenAddress: addresses.V2.crvThreeCrypto.Underlying, decimals: '18', @@ -972,12 +1138,11 @@ module.exports = { cmcRewardTokenSymbols: ['iFARM', 'oMOOI'], }, meshswap_MESH_oZEMIT: { - inactive: true, - category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON, + category: VAULT_CATEGORIES_IDS.MESHSWAP, chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/mesh-mesh-ozemit.png', - apyIconUrls: [], - apyTokenSymbols: [], + apyIconUrls: ['./icons/ozemit.png'], + apyTokenSymbols: ['oZEMIT'], displayName: 'MESH-oZEMIT', subLabel: 'MeshSwap', tokenAddress: addresses.MATIC.V2.meshswap_MESH_oZEMIT.Underlying, @@ -996,12 +1161,11 @@ module.exports = { cmcRewardTokenSymbols: ['iFARM', 'oZEMIT'], }, meshswap_USDC_oUSDC: { - inactive: true, - category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON, + category: [VAULT_CATEGORIES_IDS.MESHSWAP, VAULT_CATEGORIES_IDS.STABLE_POLYGON], chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/mesh-usdc-ousdc.png', - apyIconUrls: [], - apyTokenSymbols: [], + apyIconUrls: ['./icons/mesh.png'], + apyTokenSymbols: ['MESH'], displayName: 'USDC-oUSDC', subLabel: 'MeshSwap', tokenAddress: addresses.MATIC.V2.meshswap_USDC_oUSDC.Underlying, @@ -1043,12 +1207,11 @@ module.exports = { cmcRewardTokenSymbols: ['iFARM', 'MESH'], }, meshswap_WMATIC_MESH: { - inactive: true, - category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON, + category: VAULT_CATEGORIES_IDS.MESHSWAP, chain: CHAINS_ID.MATIC_MAINNET, logoUrl: './icons/mesh-wmatic-mesh.png', - apyIconUrls: [], - apyTokenSymbols: [], + apyIconUrls: ['./icons/mesh.png'], + apyTokenSymbols: ['MESH'], displayName: 'MATIC-MESH', subLabel: 'MeshSwap', tokenAddress: addresses.MATIC.V2.meshswap_WMATIC_MESH.Underlying, @@ -1243,11 +1406,51 @@ module.exports = { type: GET_PRICE_TYPES.KYBER_PAIR, params: [ addresses.MATIC.JRT_ANGLE_NOV22, - addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying, + addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying, 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, @@ -1306,11 +1509,51 @@ module.exports = { type: GET_PRICE_TYPES.KYBER_PAIR, params: [ addresses.MATIC.JRT_MIMO_NOV22, - addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying, + addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying, addresses.MATIC.V2.jarvis_JRTMIMONOV22_2EURPAR.Underlying, ], }, }, + 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, + decimals: '18', + vaultAddress: addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.NewVault, + priceFunction: { + type: GET_PRICE_TYPES.CURVE_POOL, + params: [ + addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying, + addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying, + 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, category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON, @@ -1635,45 +1878,11 @@ module.exports = { type: GET_PRICE_TYPES.KYBER_PAIR, params: [ addresses.MATIC.JRT_ANGLE_SEP22, - addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying, + addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying, addresses.MATIC.V2.jarvis_JRTANGLE_2EURagEUR.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: { - chain: CHAINS_ID.MATIC_MAINNET, - logoUrl: '', - tokenAddress: addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying, - decimals: '18', - vaultAddress: null, - priceFunction: { - type: GET_PRICE_TYPES.CURVE_POOL, - params: [ - addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying, - addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying, - 18, - ['JEUR', 'PAR'], - CHAINS_ID.MATIC_MAINNET, - ], - }, - }, jarvis_JRTANGLE_2EURagEUR: { inactive: true, category: VAULT_CATEGORIES_IDS.INACTIVE_POLYGON, @@ -1728,7 +1937,7 @@ module.exports = { type: GET_PRICE_TYPES.KYBER_PAIR, params: [ addresses.MATIC.JRT_MIMO_SEP22, - addresses.MATIC.V2.balancer_2EUR_PAR.OldUnderlying, + addresses.MATIC.V2.jarvis_2EUR_PAR_HODL.Underlying, addresses.MATIC.V2.jarvis_JRTMIMO_2EURPAR.Underlying, ], }, @@ -2451,7 +2660,7 @@ module.exports = { type: GET_PRICE_TYPES.KYBER_PAIR, params: [ addresses.MATIC.agDEN_JUL22, - addresses.MATIC.V2.balancer_2EUR_agEUR.OldUnderlying, + addresses.MATIC.V2.jarvis_2EUR_agEUR_HODL.Underlying, addresses.MATIC.V2.jarvis_agDENJUL22_2EUR.Underlying, ], }, @@ -3020,7 +3229,7 @@ module.exports = { logoUrl: './icons/yel-matic.png', apyIconUrls: ['./icons/yel.png'], apyTokenSymbols: ['YEL'], - displayName: 'YEL-MATIC', + displayName: 'YEL: YEL-MATIC', subLabel: 'Quickswap', tokenAddress: addresses.MATIC.V2.quick_YEL_MATIC.Underlying, decimals: '18', @@ -3277,8 +3486,8 @@ module.exports = { isSingleAssetWithdrawalAllowed: false, chain: CHAINS_ID.ETH_MAINNET, category: VAULT_CATEGORIES_IDS.UNIV3, - displayName: 'ORC-ETH', - subLabel: 'Uniswap V3 - Orbit Chain', + displayName: 'Uniswap V3: ORC-ETH', + subLabel: 'Orbit Chain', apyIconUrls: ['./icons/univ3.png'], apyTokenSymbols: ['UNI'], logoUrl: './icons/univ3-orc-eth.png', @@ -3469,8 +3678,8 @@ module.exports = { UniV3_CNG_ETH: { chain: CHAINS_ID.ETH_MAINNET, category: VAULT_CATEGORIES_IDS.UNIV3, - displayName: 'CNG-ETH', - subLabel: 'Uniswap V3 - Changer', + displayName: 'Uniswap V3: CNG-ETH', + subLabel: 'Changer', apyIconUrls: ['./icons/univ3.png'], apyTokenSymbols: ['UNI'], logoUrl: './icons/univ3-eth-cng.png', @@ -3699,7 +3908,7 @@ module.exports = { logoUrl: './icons/yel-eth.png', apyIconUrls: ['./icons/yel.png'], apyTokenSymbols: ['YEL'], - displayName: 'YEL-ETH', + displayName: 'YEL-ETH (SUSHI)', tokenAddress: addresses.V2.sushi_YEL_ETH.Underlying, decimals: '18', vaultAddress: addresses.V2.sushi_YEL_ETH.NewVault, @@ -3740,10 +3949,10 @@ module.exports = { }, UniV3_ETH_sETH2: { zapFrontrunProtection: true, - subLabel: 'Uniswap V3 - StakeWise', + subLabel: 'StakeWise', chain: CHAINS_ID.ETH_MAINNET, category: [VAULT_CATEGORIES_IDS.UNIV3, VAULT_CATEGORIES_IDS.ETH20], - displayName: 'ETH-sETH2', + displayName: 'Uniswap V3: ETH-sETH2', apyIconUrls: ['./icons/univ3.png', './icons/reth2.png', './icons/swise.png'], apyTokenSymbols: ['UNI', 'rETH2', 'SWISE'], logoUrl: './icons/univ3-eth-seth2.png', @@ -4666,8 +4875,7 @@ module.exports = { isSingleAssetWithdrawalAllowed: true, chain: CHAINS_ID.ETH_MAINNET, category: VAULT_CATEGORIES_IDS.UNIV3, - displayName: 'WBTC-ETH', - subLabel: 'Uniswap V3', + displayName: 'Uniswap V3: WBTC-ETH', apyIconUrls: ['./icons/univ3.png'], apyTokenSymbols: ['UNI'], logoUrl: './icons/univ3-wbtc-eth.png', @@ -8055,13 +8263,11 @@ module.exports = { }, }, UniV3_DPI_ETH: { - inactive: true, disableAutoSwap: true, testInactive: true, chain: CHAINS_ID.ETH_MAINNET, category: VAULT_CATEGORIES_IDS.INACTIVE, - displayName: 'ETH-DPI', - subLabel: 'Uniswap V3', + displayName: 'Uniswap V3: ETH-DPI', apyIconUrls: [], apyTokenSymbols: [''], logoUrl: './icons/univ3-dpi-eth.png', diff --git a/src/lib/constants.js b/src/lib/constants.js index ac82685..1e99076 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -193,6 +193,8 @@ const STAKEWISE_API_URLS = { 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' @@ -274,4 +276,5 @@ module.exports = { BALANCER_SUBGRAPH_URLS, STAKEWISE_API_URLS, APE_API_URL, + QUICKSWAP_GAMMA_ENDPOINT, } diff --git a/src/prices/implementations/quickswap-gamma.js b/src/prices/implementations/quickswap-gamma.js new file mode 100644 index 0000000..fecd9c1 --- /dev/null +++ b/src/prices/implementations/quickswap-gamma.js @@ -0,0 +1,28 @@ +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`) + console.log('response: ', response) + 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/vaults/apys/implementations/quickswap-gamma.js b/src/vaults/apys/implementations/quickswap-gamma.js new file mode 100644 index 0000000..b8731b2 --- /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/quickswap-gamma.js b/src/vaults/trading-apys/implementations/quickswap-gamma.js new file mode 100644 index 0000000..8446f56 --- /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, +}