Skip to content

Commit 0f52605

Browse files
committed
feat: avoiding position creation for 0 address
1 parent 49843cc commit 0f52605

File tree

2 files changed

+56
-29
lines changed

2 files changed

+56
-29
lines changed

src/mappings/core.ts

+44-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable prefer-const */
2-
import { BigInt, BigDecimal, store, Address } from '@graphprotocol/graph-ts'
2+
import { BigInt, BigDecimal, store, Address, log } from '@graphprotocol/graph-ts'
33
import {
44
Pair,
55
Token,
@@ -8,7 +8,7 @@ import {
88
Mint as MintEvent,
99
Burn as BurnEvent,
1010
Swap as SwapEvent,
11-
Bundle
11+
Bundle, LiquidityPosition
1212
} from '../types/schema'
1313
import { Pair as PairContract, Mint, Burn, Swap, Transfer, Sync } from '../types/templates/Pair/Pair'
1414
import { updatePairDayData, updateTokenDayData, updateUniswapDayData, updatePairHourData } from './dayUpdates'
@@ -197,16 +197,24 @@ export function handleTransfer(event: Transfer): void {
197197

198198
if (from.toHexString() != ADDRESS_ZERO && from.toHexString() != pair.id) {
199199
let fromUserLiquidityPosition = createLiquidityPosition(event.address, from)
200-
fromUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(from), BI_18)
201-
fromUserLiquidityPosition.save()
202-
createLiquiditySnapshot(fromUserLiquidityPosition, event)
200+
if (fromUserLiquidityPosition !== null) {
201+
fromUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(from), BI_18)
202+
fromUserLiquidityPosition.save()
203+
createLiquiditySnapshot(fromUserLiquidityPosition as LiquidityPosition, event)
204+
}
203205
}
204206

205207
if (event.params.to.toHexString() != ADDRESS_ZERO && to.toHexString() != pair.id) {
206-
let toUserLiquidityPosition = createLiquidityPosition(event.address, to)
207-
toUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(to), BI_18)
208-
toUserLiquidityPosition.save()
209-
createLiquiditySnapshot(toUserLiquidityPosition, event)
208+
if (to.toHexString() !== ADDRESS_ZERO) {
209+
let toUserLiquidityPosition = createLiquidityPosition(event.address, to)
210+
if (toUserLiquidityPosition !== null) {
211+
toUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(to), BI_18)
212+
toUserLiquidityPosition.save()
213+
createLiquiditySnapshot(toUserLiquidityPosition as LiquidityPosition, event)
214+
}
215+
} else {
216+
log.warning('Detected 0 address in handleTransfer', [])
217+
}
210218
}
211219

212220
transaction.save()
@@ -320,9 +328,17 @@ export function handleMint(event: Mint): void {
320328
mint.amountUSD = amountTotalUSD as BigDecimal
321329
mint.save()
322330

323-
// update the LP position
324-
let liquidityPosition = createLiquidityPosition(event.address, mint.to as Address)
325-
createLiquiditySnapshot(liquidityPosition, event)
331+
let to = mint.to as Address
332+
if (to.toHexString() !== ADDRESS_ZERO) {
333+
let liquidityPosition = createLiquidityPosition(event.address, to)
334+
if (liquidityPosition !== null) {
335+
createLiquiditySnapshot(liquidityPosition as LiquidityPosition, event)
336+
} else {
337+
log.warning('null position in handleMint', [])
338+
}
339+
} else {
340+
log.warning('Detected 0 address in handleMint', [])
341+
}
326342

327343
// update day entities
328344
updatePairDayData(event)
@@ -383,8 +399,22 @@ export function handleBurn(event: Burn): void {
383399
burn.save()
384400

385401
// update the LP position
386-
let liquidityPosition = createLiquidityPosition(event.address, burn.sender as Address)
387-
createLiquiditySnapshot(liquidityPosition, event)
402+
let to = burn.sender as Address
403+
if (burn.sender.toHexString() != '0x') {
404+
let liquidityPosition = createLiquidityPosition(event.address, to)
405+
if (liquidityPosition !== null) {
406+
createLiquiditySnapshot(liquidityPosition as LiquidityPosition, event)
407+
} else {
408+
log.warning('null position in handleBurn: '
409+
.concat(burn.sender.toHexString()).concat(' ')
410+
.concat(ADDRESS_ZERO)
411+
.concat(', tx_hash: ')
412+
.concat(event.transaction.hash.toHexString()), [])
413+
}
414+
} else {
415+
log.warning('Detected 0x address in handleBurn'.concat(', tx_hash: ')
416+
.concat(event.transaction.hash.toHexString()), [])
417+
}
388418

389419
// update day entities
390420
updatePairDayData(event)

src/mappings/helpers.ts

+12-15
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,18 @@ export function fetchTokenDecimals(tokenAddress: Address): BigInt {
139139
return BigInt.fromI32(decimalValue as i32)
140140
}
141141

142-
export function createLiquidityPosition(exchange: Address, user: Address): LiquidityPosition {
142+
export function createLiquidityPosition(exchange: Address, user: Address): LiquidityPosition | null {
143+
if (User.load(user.toHexString()) === null) {
144+
log.error(
145+
'Null user during snapshot creation. User address: '
146+
.concat(user.toHexString())
147+
.concat(' exchange address: ')
148+
.concat(exchange.toHexString())
149+
.concat(' --> SKIPPING POSITION CREATION'),
150+
[]
151+
)
152+
return null
153+
}
143154
let id = exchange
144155
.toHexString()
145156
.concat('-')
@@ -169,20 +180,6 @@ export function createUser(address: Address): void {
169180
}
170181

171182
export function createLiquiditySnapshot(position: LiquidityPosition, event: EthereumEvent): void {
172-
if (User.load(position.user) === null) {
173-
log.error(
174-
'Null user during snapshot creation. User id: '
175-
.concat(position.user)
176-
.concat(' position id: ')
177-
.concat(position.id)
178-
.concat(' tx hash: ')
179-
.concat(event.transaction.hash.toHexString())
180-
.concat(' --> SKIPPING SNAPSHOT CREATION'),
181-
[]
182-
)
183-
return
184-
}
185-
186183
let bundle = Bundle.load('1')
187184
let pair = Pair.load(position.pair)
188185
let token0 = Token.load(pair.token0)

0 commit comments

Comments
 (0)