@@ -6,16 +6,12 @@ const LP_STATS_ETHEREUM_URL =
66 'https://api.ipor.io/monitor/liquiditypool-statistics-1' ;
77const LP_STATS_ARBITRUM_URL =
88 'https://api.ipor.io/monitor/liquiditypool-statistics-42161' ;
9- const ARB_AIRDROP_URL = 'https://api.ipor.io/monitor/arb-airdrop' ;
10- const WSTETH_AIRDROP_URL = 'https://api.ipor.io/monitor/arb-lido-airdrop' ;
119const COIN_PRICES_URL = 'https://coins.llama.fi/prices/current' ;
1210
1311const LM_ADDRESS_ETHEREUM = '0xCC3Fc4C9Ba7f8b8aA433Bc586D390A70560FF366' ;
1412const LM_ADDRESS_ARBITRUM = '0xdE645aB0560E5A413820234d9DDED5f4a55Ff6dd' ;
1513const IPOR_TOKEN_ETHEREUM = '0x1e4746dc744503b53b4a082cb3607b169a289090' ;
1614const IPOR_TOKEN_ARBITRUM = '0x34229b3f16fbcdfa8d8d9d17c0852f9496f4c7bb' ;
17- const ARB_TOKEN_ARBITRUM = '0x912ce59144191c1204e64559fe8253a0e49e6548' ;
18- const WSTETH_TOKEN_ARBITRUM = '0x5979d7b546e38e414f7e9822514be443a4800529' ;
1915
2016const BLOCKS_PER_YEAR = ( 365 * 24 * 3600 ) / 12 ;
2117
@@ -24,12 +20,6 @@ const apy = async () => {
2420 . assets ;
2521 const assetsArbitrum = ( await superagent . get ( LP_STATS_ARBITRUM_URL ) ) . body
2622 . assets ;
27- const arbAidrdop = ( await superagent . get ( ARB_AIRDROP_URL ) ) . body ;
28- const arbAirdropLastEpochFinished =
29- Date . parse ( arbAidrdop . epochEnd ) < Date . now ( ) ; //epochEnd will be date in past when last airdrop epoch will be finished
30- const wstEthAirdrop = ( await superagent . get ( WSTETH_AIRDROP_URL ) ) . body ;
31- const wstEthAirdropLastEpochFinished =
32- Date . parse ( wstEthAirdrop . epochEnd ) < Date . now ( ) ; //epochEnd will be date in past when last airdrop epoch will be finished
3323 const coinKeys = assetsEthereum . map (
3424 ( assetData ) => 'ethereum:' + assetData . assetAddress
3525 ) ;
@@ -39,17 +29,12 @@ const apy = async () => {
3929
4030 coinKeys . push ( 'ethereum:' + IPOR_TOKEN_ETHEREUM ) ;
4131 coinKeys . push ( ...coinKeysArbitrum ) ;
42- coinKeys . push ( 'arbitrum:' + ARB_TOKEN_ARBITRUM ) ;
43- coinKeys . push ( 'arbitrum:' + WSTETH_TOKEN_ARBITRUM ) ;
4432 const coinPrices = (
4533 await superagent . get (
4634 `${ COIN_PRICES_URL } /${ coinKeys . join ( ',' ) . toLowerCase ( ) } `
4735 )
4836 ) . body . coins ;
4937 const iporTokenUsdPrice = coinPrices [ 'ethereum:' + IPOR_TOKEN_ETHEREUM ] . price ;
50- const arbTokenUsdPrice = coinPrices [ 'arbitrum:' + ARB_TOKEN_ARBITRUM ] . price ;
51- const wstethTokenUsdPrice =
52- coinPrices [ 'arbitrum:' + WSTETH_TOKEN_ARBITRUM ] . price ;
5338
5439 const lpTokenEthereumAddresses = assetsEthereum . map (
5540 ( assetData ) => assetData . ipTokenAssetAddress
@@ -80,6 +65,26 @@ const apy = async () => {
8065 ] )
8166 )
8267 ) ;
68+ const poolPowerUpModifiersEthereum = new Map (
69+ (
70+ await sdk . api . abi . multiCall ( {
71+ chain : 'ethereum' ,
72+ abi : liquidityMiningV2Abi . find (
73+ ( { name } ) => name === 'getPoolPowerUpModifiers'
74+ ) ,
75+ calls : lpTokenEthereumAddresses . map ( lpTokenEthereumAddress => {
76+ return {
77+ target : LM_ADDRESS_ETHEREUM ,
78+ params : [ lpTokenEthereumAddress ]
79+ } ;
80+ }
81+ ) ,
82+ } )
83+ ) . output . map ( ( response ) => [
84+ response . input . params [ 0 ] . toLowerCase ( ) ,
85+ response . output ,
86+ ] )
87+ ) ;
8388
8489 const globalStatsArbitrum = new Map (
8590 (
@@ -102,6 +107,26 @@ const apy = async () => {
102107 ] )
103108 )
104109 ) ;
110+ const poolPowerUpModifiersArbitrum = new Map (
111+ (
112+ await sdk . api . abi . multiCall ( {
113+ chain : 'arbitrum' ,
114+ abi : liquidityMiningV2Abi . find (
115+ ( { name } ) => name === 'getPoolPowerUpModifiers'
116+ ) ,
117+ calls : lpTokenArbitrumAddresses . map ( lpTokenEthereumAddress => {
118+ return {
119+ target : LM_ADDRESS_ARBITRUM ,
120+ params : [ lpTokenEthereumAddress ]
121+ } ;
122+ }
123+ ) ,
124+ } )
125+ ) . output . map ( ( response ) => [
126+ response . input . params [ 0 ] . toLowerCase ( ) ,
127+ response . output ,
128+ ] )
129+ ) ;
105130
106131 const pools = [ ] ;
107132
@@ -124,18 +149,23 @@ const apy = async () => {
124149 const liquidityMiningGlobalStats = globalStatsEthereum . get (
125150 asset . ipTokenAssetAddress . toLowerCase ( )
126151 ) ;
152+ const vectorOfCurve = poolPowerUpModifiersEthereum . get (
153+ asset . ipTokenAssetAddress . toLowerCase ( )
154+ ) . vectorOfCurve / 1e18
127155 const apyReward =
128156 ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
129157 1e8 /
130158 ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
131- 0.2 * //base powerup
159+ ( 0.2 + vectorOfCurve ) * //base powerup
132160 BLOCKS_PER_YEAR *
133161 iporTokenUsdPrice ) /
134162 lpTokenPrice /
135163 coinPrice /
136164 2 ) * //50% early withdraw fee
137165 100 ; //percentage
138166
167+ const url = `https://app.ipor.io/zap/ethereum/${ asset . asset . toLowerCase ( ) } ` ;
168+
139169 pools . push ( {
140170 pool : asset . ipTokenAssetAddress + '-ethereum' ,
141171 chain : 'Ethereum' ,
@@ -146,17 +176,12 @@ const apy = async () => {
146176 apyReward : Number ( apyReward ) ,
147177 underlyingTokens : [ asset . assetAddress ] ,
148178 rewardTokens : [ IPOR_TOKEN_ETHEREUM ] ,
179+ url : url ,
149180 } ) ;
150181 }
151182
152183 for ( const asset of assetsArbitrum ) {
153184 const rewardsToken = [ IPOR_TOKEN_ARBITRUM ] ;
154- if ( asset . asset === 'wstETH' && ! wstEthAirdropLastEpochFinished ) {
155- rewardsToken . push ( WSTETH_TOKEN_ARBITRUM ) ;
156- }
157- if ( ! arbAirdropLastEpochFinished ) {
158- rewardsToken . push ( ARB_TOKEN_ARBITRUM ) ;
159- }
160185 const lpApr = asset . periods . find (
161186 ( { period } ) => period === 'MONTH'
162187 ) . ipTokenReturnValue ;
@@ -175,51 +200,24 @@ const apy = async () => {
175200 const liquidityMiningGlobalStats = globalStatsArbitrum . get (
176201 asset . ipTokenAssetAddress . toLowerCase ( )
177202 ) ;
203+ const vectorOfCurve = poolPowerUpModifiersArbitrum . get (
204+ asset . ipTokenAssetAddress . toLowerCase ( )
205+ ) . vectorOfCurve / 1e18 ;
178206 const apyReward =
179207 ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
180208 1e8 /
181209 ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
182- 0.2 * //base powerup
210+ ( 0.2 + vectorOfCurve ) * //base powerup
183211 BLOCKS_PER_YEAR *
184212 iporTokenUsdPrice ) /
185213 lpTokenPrice /
186214 coinPrice /
187215 2 ) * //50% early withdraw fee
188216 100 ; //percentage
189217
190- let apyWstEthAirdrop = 0 ;
191- if ( asset . asset === 'wstETH' && ! wstEthAirdropLastEpochFinished ) {
192- const rewardsWstEthIporRatio = wstEthAirdrop . pools . find (
193- ( assetData ) => assetData . asset === asset . asset
194- ) . rewardsArbIporRatio ;
195- apyWstEthAirdrop =
196- ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
197- 1e8 /
198- ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
199- 0.2 * //base powerup
200- BLOCKS_PER_YEAR *
201- wstethTokenUsdPrice *
202- rewardsWstEthIporRatio ) /
203- lpTokenPrice /
204- coinPrice ) *
205- 100 ; //percentage
206- }
207-
208- const rewardsArbIporRatio = arbAidrdop . pools . find (
209- ( assetData ) => assetData . asset === asset . asset
210- ) . rewardsArbIporRatio ;
211- const apyAirdrop = ! arbAirdropLastEpochFinished
212- ? ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
213- 1e8 /
214- ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
215- 0.2 * //base powerup
216- BLOCKS_PER_YEAR *
217- arbTokenUsdPrice *
218- rewardsArbIporRatio ) /
219- lpTokenPrice /
220- coinPrice ) *
221- 100 //percentage
222- : 0 ;
218+ const url = asset . asset === 'USDM'
219+ ? `https://app.ipor.io/deposit/arbitrum/${ asset . asset . toLowerCase ( ) } `
220+ : `https://app.ipor.io/zap/arbitrum/${ asset . asset . toLowerCase ( ) } ` ;
223221
224222 pools . push ( {
225223 pool : asset . ipTokenAssetAddress + '-arbitrum' ,
@@ -228,9 +226,10 @@ const apy = async () => {
228226 symbol : asset . asset ,
229227 tvlUsd : lpBalance * coinPrice ,
230228 apyBase : Number ( lpApr ) ,
231- apyReward : Number ( apyReward + apyWstEthAirdrop + apyAirdrop ) ,
229+ apyReward : Number ( apyReward ) ,
232230 underlyingTokens : [ asset . assetAddress ] ,
233231 rewardTokens : rewardsToken ,
232+ url : url ,
234233 } ) ;
235234 }
236235
@@ -239,6 +238,5 @@ const apy = async () => {
239238
240239module . exports = {
241240 timetravel : false ,
242- apy : apy ,
243- url : 'https://app.ipor.io/pools' ,
241+ apy : apy
244242} ;
0 commit comments