Skip to content

Commit 9a367af

Browse files
committed
Fix getting minted and burned assets logic in interpreter
1 parent 6a0d1bb commit 9a367af

File tree

2 files changed

+36
-10
lines changed

2 files changed

+36
-10
lines changed

.changeset/tricky-squids-speak.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+
Fix getting minted and burned assets in standart interpreter logic

packages/transaction-interpreter/interpreters/std.ts

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,43 @@ export function toAssetTransfer(transfer: Asset): AssetTransfer {
6969
}
7070
}
7171

72-
export function assetsSent(transfers: Asset[], address: string): AssetTransfer[] {
72+
export function assetsSent(transfers: Asset[], fromAddress: string): AssetTransfer[] {
7373
const filtered = filterTransfers(transfers, {
7474
excludeZero: true,
75-
excludeNull: address !== NULL_ADDRESS,
75+
excludeNull: fromAddress !== NULL_ADDRESS,
7676
})
7777

78-
return filtered.filter((t) => t.from.toLowerCase() === address.toLowerCase()).map(toAssetTransfer)
78+
return filtered.filter((t) => t.from.toLowerCase() === fromAddress.toLowerCase()).map(toAssetTransfer)
7979
}
8080

81-
export function assetsReceived(transfers: Asset[], address: string): AssetTransfer[] {
81+
export function assetsReceived(transfers: Asset[], toAddress: string): AssetTransfer[] {
8282
const filtered = filterTransfers(transfers, {
8383
excludeZero: true,
84-
excludeNull: address !== NULL_ADDRESS,
8584
})
8685

87-
return filtered.filter((t) => t.to.toLowerCase() === address.toLowerCase()).map(toAssetTransfer)
86+
return filtered.filter((t) => t.to.toLowerCase() === toAddress.toLowerCase()).map(toAssetTransfer)
87+
}
88+
89+
function assetsMinted(transfers: Asset[], toAddress: string): AssetTransfer[] {
90+
const filtered = filterTransfers(transfers, {
91+
excludeZero: true,
92+
})
93+
94+
return filtered
95+
.filter((t) => t.from.toLowerCase() === NULL_ADDRESS)
96+
.filter((t) => t.to.toLowerCase() === toAddress.toLowerCase())
97+
.map(toAssetTransfer)
98+
}
99+
100+
function assetsBurned(transfers: Asset[], fromAddress: string): AssetTransfer[] {
101+
const filtered = filterTransfers(transfers, {
102+
excludeZero: true,
103+
})
104+
105+
return filtered
106+
.filter((t) => t.to.toLowerCase() === NULL_ADDRESS)
107+
.filter((t) => t.from.toLowerCase() === fromAddress.toLowerCase())
108+
.map(toAssetTransfer)
88109
}
89110

90111
export function getNetTransfers({
@@ -265,8 +286,8 @@ export function displayAssets(assets: Payment[]) {
265286
export function isSwap(event: DecodedTransaction): boolean {
266287
if (event.transfers.some((t) => t.type !== 'ERC20' && t.type !== 'native')) return false
267288

268-
const minted = assetsSent(event.transfers, NULL_ADDRESS)
269-
const burned = assetsReceived(event.transfers, NULL_ADDRESS)
289+
const minted = assetsMinted(event.transfers, event.fromAddress)
290+
const burned = assetsBurned(event.transfers, event.fromAddress)
270291

271292
if (minted.length > 0 || burned.length > 0) return false
272293

@@ -289,8 +310,8 @@ export function isSwap(event: DecodedTransaction): boolean {
289310
}
290311

291312
export function defaultEvent(event: DecodedTransaction): InterpretedTransaction {
292-
const burned = assetsReceived(event.transfers, NULL_ADDRESS)
293-
const minted = assetsSent(event.transfers, NULL_ADDRESS)
313+
const burned = assetsBurned(event.transfers, event.fromAddress)
314+
const minted = assetsMinted(event.transfers, event.fromAddress)
294315

295316
const newEvent = {
296317
type: 'unknown' as const,

0 commit comments

Comments
 (0)