Skip to content

Commit d98f867

Browse files
Fix 0x interpreter (#176)
1 parent c931ca4 commit d98f867

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

.changeset/plenty-tables-love.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@3loop/transaction-interpreter': patch
3+
---
4+
5+
Update ZeroEx interpreter to filter out fees

packages/transaction-interpreter/interpreters/zeroEx.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@ import type { DecodedTransaction } from '@3loop/transaction-decoder'
44

55
export 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

Comments
 (0)