@@ -4,16 +4,10 @@ import type { DecodedTransaction } from '@3loop/transaction-decoder'
44
55export function transformEvent ( event : DecodedTransaction ) : InterpretedTransaction {
66 const newEvent = categorizedDefaultEvent ( event )
7- const swapEvent = event . interactions . find ( ( i ) => i . event ?. eventName ?. toLowerCase ( ) === 'swap' )
7+ const recipient = event . fromAddress
8+ const contractAddress = event . toAddress
89
9- if ( ! swapEvent || newEvent . type !== 'unknown' ) return newEvent
10-
11- const params = swapEvent . event ?. params as { recipient ?: string } | undefined
12- const recipient = params ?. recipient || event . fromAddress
13-
14- const buyToken = event . methodCall ?. params ?. [ 0 ] ?. components ?. find ( ( c ) => c . name === 'buyToken' ) as
15- | { value : string }
16- | undefined
10+ if ( ! contractAddress ) return newEvent
1711
1812 const netSent = getNetTransfers ( {
1913 transfers : event . transfers ,
@@ -22,17 +16,25 @@ export function transformEvent(event: DecodedTransaction): InterpretedTransactio
2216 } )
2317
2418 const netReceived = getNetTransfers ( {
25- transfers : buyToken ? event . transfers . filter ( ( t ) => t . address === buyToken . value ) : event . transfers ,
19+ transfers : event . transfers ,
2620 toAddresses : [ recipient ] ,
21+ fromAddresses : [ contractAddress ] ,
2722 type : [ 'ERC20' , 'native' ] ,
2823 } )
2924
30- if ( netSent . length === 1 && netReceived . length === 1 ) {
25+ //filter the same tokne from netReceived (to filter out received fees)
26+ const sentTokens = netSent . map ( ( t ) => t . asset . address )
27+ const filteredNetReceived = netReceived . filter ( ( t ) => ! sentTokens . includes ( t . asset . address ) )
28+
29+ if ( netSent . length === 1 && filteredNetReceived . length === 1 ) {
3130 return {
3231 ...newEvent ,
3332 type : 'swap' ,
34- action : 'Swapped ' + displayAsset ( netSent [ 0 ] ) + ' for ' + displayAsset ( netReceived [ 0 ] ) ,
35- assetsReceived : assetsReceived ( event . transfers , recipient ) ,
33+ action : 'Swapped ' + displayAsset ( netSent [ 0 ] ) + ' for ' + displayAsset ( filteredNetReceived [ 0 ] ) ,
34+ assetsReceived : assetsReceived (
35+ event . transfers . filter ( ( t ) => filteredNetReceived . some ( ( r ) => r . asset . address === t . address ) ) ,
36+ recipient ,
37+ ) ,
3638 }
3739 }
3840
0 commit comments