1- import dayjs from 'dayjs'
2- import { findLast } from 'lodash'
3- import { LessThan } from 'typeorm'
4- import { formatEther , formatUnits } from 'viem'
1+ import dayjs from 'dayjs' ;
2+ import { findLast } from 'lodash' ;
3+ import { LessThan } from 'typeorm' ;
4+ import { formatEther , formatUnits } from 'viem' ;
5+
6+
7+
8+ import * as erc20Abi from '@abi/erc20' ;
9+ import * as originOsArmAbi from '@abi/origin-arm' ;
10+ import * as originEthenaArmAbi from '@abi/origin-ethena-arm' ;
11+ import * as originEtherfiArmAbi from '@abi/origin-etherfi-arm' ;
12+ import * as originLidoArmAbi from '@abi/origin-lido-arm' ;
13+ import * as originLidoArmCapManagerAbi from '@abi/origin-lido-arm-cap-manager' ;
14+ import { Arm , ArmDailyStat , ArmState , ArmSwap , ArmWithdrawalRequest , TraderateChanged } from '@model' ;
15+ import { Block , Context , EvmBatchProcessor , Processor , blockFrequencyTracker , calculateAPY , logFilter } from '@originprotocol/squid-utils' ;
16+ import { ensureExchangeRate } from '@shared/post-processors/exchange-rates' ;
17+ import { Currency } from '@shared/post-processors/exchange-rates/mainnetCurrencies' ;
18+ import { createERC20EventTracker } from '@templates/erc20/erc20-event' ;
19+ import { createEventProcessor } from '@templates/events/createEventProcessor' ;
20+ import { traceFilter } from '@utils/traceFilter' ;
521
6- import * as erc20Abi from '@abi/erc20'
7- import * as originOsArmAbi from '@abi/origin-arm'
8- import * as originEtherfiArmAbi from '@abi/origin-etherfi-arm'
9- import * as originLidoArmAbi from '@abi/origin-lido-arm'
10- import * as originEthenaArmAbi from '@abi/origin-ethena-arm'
11- import * as originLidoArmCapManagerAbi from '@abi/origin-lido-arm-cap-manager'
12- import { Arm , ArmDailyStat , ArmState , ArmSwap , ArmWithdrawalRequest , TraderateChanged } from '@model'
13- import {
14- Block ,
15- Context ,
16- EvmBatchProcessor ,
17- Processor ,
18- blockFrequencyTracker ,
19- calculateAPY ,
20- logFilter ,
21- } from '@originprotocol/squid-utils'
22- import { ensureExchangeRate } from '@shared/post-processors/exchange-rates'
23- import { Currency } from '@shared/post-processors/exchange-rates/mainnetCurrencies'
24- import { createERC20EventTracker } from '@templates/erc20/erc20-event'
25- import { createEventProcessor } from '@templates/events/createEventProcessor'
26- import { traceFilter } from '@utils/traceFilter'
2722
2823export const createOriginARMProcessors = ( {
2924 name,
3025 from,
3126 armAddress,
32- underlyingToken,
27+ token0,
28+ token1,
29+ getRate1,
3330 capManagerAddress,
3431 marketFrom,
3532 armType,
3633} : {
3734 name : string
3835 from : number
3936 armAddress : string
40- underlyingToken : Currency
37+ token0 : Currency
38+ token1 : Currency
39+ getRate1 ?: ( ctx : Context , block : Block ) => Promise < bigint >
4140 capManagerAddress : string
4241 marketFrom ?: number
4342 armType : 'lido' | 'etherfi' | 'os' | 'ethena'
@@ -333,14 +332,18 @@ export const createOriginARMProcessors = ({
333332
334333 const transfersOut0 = transfers0 . filter ( ( t ) => t . from . toLowerCase ( ) === armAddress )
335334 const transfersIn1 = transfers1 . filter ( ( t ) => t . to . toLowerCase ( ) === armAddress )
335+
336+ const rate1 = getRate1 ? await getRate1 ( ctx , block ) : 10n ** 18n
337+ const rate1Number = + formatEther ( rate1 )
338+
336339 for ( let i = 0 ; i < transfersOut0 . length ; i ++ ) {
337340 for ( let j = 0 ; j < transfersIn1 . length ; j ++ ) {
338341 const out0 = transfersOut0 [ i ]
339342 const in1 = transfersIn1 [ j ]
340343 if ( out0 . value === 0n || in1 . value === 0n ) continue
341344 const rate = + formatEther ( ( out0 . value * 10n ** 18n ) / in1 . value )
342- if ( Math . abs ( rate - 1 ) <= 0.001 ) {
343- pairs . push ( { assets0 : - out0 . value , assets1 : in1 . value } )
345+ if ( Math . abs ( rate - rate1Number ) <= 0.01 ) {
346+ pairs . push ( { assets0 : - out0 . value , assets1 : ( in1 . value * rate1 ) / 10n ** 18n } )
344347 transfersIn1 . splice ( j , 1 )
345348 break
346349 }
@@ -355,8 +358,8 @@ export const createOriginARMProcessors = ({
355358 const in0 = transfersIn0 [ j ]
356359 if ( out1 . value === 0n || in0 . value === 0n ) continue
357360 const rate = + formatEther ( ( out1 . value * 10n ** 18n ) / in0 . value )
358- if ( Math . abs ( rate - 1 ) <= 0.001 ) {
359- pairs . push ( { assets0 : in0 . value , assets1 : - out1 . value } )
361+ if ( Math . abs ( rate - rate1Number ) <= 0.01 ) {
362+ pairs . push ( { assets0 : in0 . value , assets1 : ( - out1 . value * rate1 ) / 10n ** 18n } )
360363 transfersIn0 . splice ( j , 1 )
361364 break
362365 }
@@ -391,9 +394,9 @@ export const createOriginARMProcessors = ({
391394 const [ state , yesterdayState , rateUSD , rateETH , rateNative ] = await Promise . all ( [
392395 getCurrentState ( block ) ,
393396 getYesterdayState ( block ) ,
394- ensureExchangeRate ( ctx , block , underlyingToken , 'USD' ) ,
395- ensureExchangeRate ( ctx , block , underlyingToken , 'ETH' ) ,
396- ensureExchangeRate ( ctx , block , underlyingToken , ctx . chain . nativeCurrency . symbol as Currency ) ,
397+ ensureExchangeRate ( ctx , block , token0 , 'USD' ) ,
398+ ensureExchangeRate ( ctx , block , token0 , 'ETH' ) ,
399+ ensureExchangeRate ( ctx , block , token0 , ctx . chain . nativeCurrency . symbol as Currency ) ,
397400 ] )
398401
399402 // ArmDailyStat
@@ -461,4 +464,4 @@ export const createOriginARMProcessors = ({
461464 address : armAddress ,
462465 } ) ,
463466 ]
464- }
467+ }
0 commit comments