@@ -24,12 +24,6 @@ const apy = async () => {
2424 . assets ;
2525 const assetsArbitrum = ( await superagent . get ( LP_STATS_ARBITRUM_URL ) ) . body
2626 . 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
3327 const coinKeys = assetsEthereum . map (
3428 ( assetData ) => 'ethereum:' + assetData . assetAddress
3529 ) ;
@@ -80,6 +74,26 @@ const apy = async () => {
8074 ] )
8175 )
8276 ) ;
77+ const poolPowerUpModifiersEthereum = new Map (
78+ (
79+ await sdk . api . abi . multiCall ( {
80+ chain : 'ethereum' ,
81+ abi : liquidityMiningV2Abi . find (
82+ ( { name } ) => name === 'getPoolPowerUpModifiers'
83+ ) ,
84+ calls : lpTokenEthereumAddresses . map ( lpTokenEthereumAddress => {
85+ return {
86+ target : LM_ADDRESS_ETHEREUM ,
87+ params : [ lpTokenEthereumAddress ]
88+ } ;
89+ }
90+ ) ,
91+ } )
92+ ) . output . map ( ( response ) => [
93+ response . input . params [ 0 ] . toLowerCase ( ) ,
94+ response . output ,
95+ ] )
96+ ) ;
8397
8498 const globalStatsArbitrum = new Map (
8599 (
@@ -102,6 +116,26 @@ const apy = async () => {
102116 ] )
103117 )
104118 ) ;
119+ const poolPowerUpModifiersArbitrum = new Map (
120+ (
121+ await sdk . api . abi . multiCall ( {
122+ chain : 'arbitrum' ,
123+ abi : liquidityMiningV2Abi . find (
124+ ( { name } ) => name === 'getPoolPowerUpModifiers'
125+ ) ,
126+ calls : lpTokenArbitrumAddresses . map ( lpTokenEthereumAddress => {
127+ return {
128+ target : LM_ADDRESS_ARBITRUM ,
129+ params : [ lpTokenEthereumAddress ]
130+ } ;
131+ }
132+ ) ,
133+ } )
134+ ) . output . map ( ( response ) => [
135+ response . input . params [ 0 ] . toLowerCase ( ) ,
136+ response . output ,
137+ ] )
138+ ) ;
105139
106140 const pools = [ ] ;
107141
@@ -124,11 +158,14 @@ const apy = async () => {
124158 const liquidityMiningGlobalStats = globalStatsEthereum . get (
125159 asset . ipTokenAssetAddress . toLowerCase ( )
126160 ) ;
161+ const vectorOfCurve = poolPowerUpModifiersEthereum . get (
162+ asset . ipTokenAssetAddress . toLowerCase ( )
163+ ) . vectorOfCurve / 1e18
127164 const apyReward =
128165 ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
129166 1e8 /
130167 ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
131- 0.2 * //base powerup
168+ ( 0.2 + vectorOfCurve ) * //base powerup
132169 BLOCKS_PER_YEAR *
133170 iporTokenUsdPrice ) /
134171 lpTokenPrice /
@@ -151,12 +188,6 @@ const apy = async () => {
151188
152189 for ( const asset of assetsArbitrum ) {
153190 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- }
160191 const lpApr = asset . periods . find (
161192 ( { period } ) => period === 'MONTH'
162193 ) . ipTokenReturnValue ;
@@ -175,60 +206,29 @@ const apy = async () => {
175206 const liquidityMiningGlobalStats = globalStatsArbitrum . get (
176207 asset . ipTokenAssetAddress . toLowerCase ( )
177208 ) ;
209+ const vectorOfCurve = poolPowerUpModifiersArbitrum . get (
210+ asset . ipTokenAssetAddress . toLowerCase ( )
211+ ) . vectorOfCurve / 1e18 ;
178212 const apyReward =
179213 ( ( ( liquidityMiningGlobalStats . rewardsPerBlock /
180214 1e8 /
181215 ( liquidityMiningGlobalStats . aggregatedPowerUp / 1e18 ) ) *
182- 0.2 * //base powerup
216+ ( 0.2 + vectorOfCurve ) * //base powerup
183217 BLOCKS_PER_YEAR *
184218 iporTokenUsdPrice ) /
185219 lpTokenPrice /
186220 coinPrice /
187221 2 ) * //50% early withdraw fee
188222 100 ; //percentage
189223
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 ;
223-
224224 pools . push ( {
225225 pool : asset . ipTokenAssetAddress + '-arbitrum' ,
226226 chain : 'Arbitrum' ,
227227 project : 'ipor-derivatives' ,
228228 symbol : asset . asset ,
229229 tvlUsd : lpBalance * coinPrice ,
230230 apyBase : Number ( lpApr ) ,
231- apyReward : Number ( apyReward + apyWstEthAirdrop + apyAirdrop ) ,
231+ apyReward : Number ( apyReward ) ,
232232 underlyingTokens : [ asset . assetAddress ] ,
233233 rewardTokens : rewardsToken ,
234234 } ) ;
0 commit comments