From dfd6b28bb86650d24198e2628e7b810cad66d8aa Mon Sep 17 00:00:00 2001 From: Ian Lapham Date: Mon, 11 Dec 2023 12:51:40 -0500 Subject: [PATCH 1/3] add latest fix --- src/mappings/factory.ts | 9 ++++++++- src/mappings/helpers.ts | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/mappings/factory.ts b/src/mappings/factory.ts index ef5fe7f6..200b440d 100644 --- a/src/mappings/factory.ts +++ b/src/mappings/factory.ts @@ -1,5 +1,5 @@ /* eslint-disable prefer-const */ -import { log } from '@graphprotocol/graph-ts' +import { BigInt, log } from '@graphprotocol/graph-ts' import { PairCreated } from '../types/Factory/Factory' import { Bundle, Pair, Token, UniswapFactory } from '../types/schema' import { Pair as PairTemplate } from '../types/templates' @@ -13,6 +13,8 @@ import { ZERO_BI } from './helpers' +const CRASHING_BLOCK = 17308596 + export function handleNewPair(event: PairCreated): void { // load factory (create if first exchange) let factory = UniswapFactory.load(FACTORY_ADDRESS) @@ -38,6 +40,11 @@ export function handleNewPair(event: PairCreated): void { let token0 = Token.load(event.params.token0.toHexString()) let token1 = Token.load(event.params.token1.toHexString()) + // hot fix for overflow error - need better solution for this but urgent as subgraph is down + if ( event.block.number == BigInt.fromI32(CRASHING_BLOCK)) { + return + } + // fetch info if null if (token0 === null) { token0 = new Token(event.params.token0.toHexString()) diff --git a/src/mappings/helpers.ts b/src/mappings/helpers.ts index b5fd836a..e25d05fc 100644 --- a/src/mappings/helpers.ts +++ b/src/mappings/helpers.ts @@ -134,6 +134,12 @@ export function fetchTokenTotalSupply(tokenAddress: Address): BigInt { } export function fetchTokenDecimals(tokenAddress: Address): BigInt { + + if (SKIP_TOTAL_SUPPLY.includes(tokenAddress.toHexString())) { + return BigInt.fromI32(0) + } + + // static definitions overrides let staticDefinition = TokenDefinition.fromAddress(tokenAddress) if (staticDefinition != null) { From fe962c37deb31fe477c86c8c264a01afe1c26e37 Mon Sep 17 00:00:00 2001 From: Ian Lapham Date: Mon, 11 Dec 2023 14:07:22 -0500 Subject: [PATCH 2/3] add another catch for this case) --- src/mappings/factory.ts | 10 +++++++--- src/mappings/helpers.ts | 4 +++- subgraph.yaml | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mappings/factory.ts b/src/mappings/factory.ts index 200b440d..efd9c87b 100644 --- a/src/mappings/factory.ts +++ b/src/mappings/factory.ts @@ -13,7 +13,8 @@ import { ZERO_BI } from './helpers' -const CRASHING_BLOCK = 17308596 + +let SKIP_BLOCKS: string[] = ["17308596", "18746374"] export function handleNewPair(event: PairCreated): void { // load factory (create if first exchange) @@ -41,8 +42,11 @@ export function handleNewPair(event: PairCreated): void { let token1 = Token.load(event.params.token1.toHexString()) // hot fix for overflow error - need better solution for this but urgent as subgraph is down - if ( event.block.number == BigInt.fromI32(CRASHING_BLOCK)) { - return + for (let i = 0; i < SKIP_BLOCKS.length; ++i) { + let skipBlock = BigInt.fromI32(parseInt(SKIP_BLOCKS[i]) as i32) + if (event.block.number == skipBlock) { + return + } } // fetch info if null diff --git a/src/mappings/helpers.ts b/src/mappings/helpers.ts index e25d05fc..16d1f0bf 100644 --- a/src/mappings/helpers.ts +++ b/src/mappings/helpers.ts @@ -116,7 +116,9 @@ export function fetchTokenName(tokenAddress: Address): string { // HOT FIX: we cant implement try catch for overflow catching so skip total supply parsing on these tokens that overflow // TODO: find better way to handle overflow let SKIP_TOTAL_SUPPLY: string[] = [ - "0x0000000000bf2686748e1c0255036e7617e7e8a5" + "0x0000000000bf2686748e1c0255036e7617e7e8a5", + "0x000000000000b91b6956fead1dda24c66aa6b972", + "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" ] export function fetchTokenTotalSupply(tokenAddress: Address): BigInt { diff --git a/subgraph.yaml b/subgraph.yaml index 770d2f58..8fb0d263 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -4,8 +4,8 @@ repository: https://github.com/Uniswap/uniswap-v2-subgraph schema: file: ./schema.graphql graft: - base: Qmc7K8dKoadu1VcHfAV45pN4sPnwZcU2okV6cuU4B7qQp1 - block: 17308000 + base: QmXYAmabbEmnSDNR5GWJhmm2NQKXnPkSJEBC3EsMwjXr4e + block: 18746370 dataSources: - kind: ethereum/contract name: Factory From af24ee46364731a8d73c6f50322f2a8931cbee2d Mon Sep 17 00:00:00 2001 From: Ian Lapham Date: Mon, 18 Dec 2023 11:44:47 -0500 Subject: [PATCH 3/3] update for invalid pairs --- src/mappings/core.ts | 19 +++++++++++++++++++ subgraph.yaml | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mappings/core.ts b/src/mappings/core.ts index 6af395b8..5cb498c8 100644 --- a/src/mappings/core.ts +++ b/src/mappings/core.ts @@ -212,8 +212,14 @@ export function handleTransfer(event: Transfer): void { export function handleSync(event: Sync): void { let pair = Pair.load(event.address.toHex()) + + if (!pair) return + let token0 = Token.load(pair.token0) let token1 = Token.load(pair.token1) + + if (!token0 || !token1) return + let uniswap = UniswapFactory.load(FACTORY_ADDRESS) // reset factory liquidity by subtracting onluy tarcked liquidity @@ -281,11 +287,15 @@ export function handleMint(event: Mint): void { let mint = MintEvent.load(mints[mints.length - 1]) let pair = Pair.load(event.address.toHex()) + if (!pair) return + let uniswap = UniswapFactory.load(FACTORY_ADDRESS) let token0 = Token.load(pair.token0) let token1 = Token.load(pair.token1) + if (!token0 || !token1) return + // update exchange info (except balances, sync will cover that) let token0Amount = convertTokenToDecimal(event.params.amount0, token0.decimals) let token1Amount = convertTokenToDecimal(event.params.amount1, token1.decimals) @@ -342,11 +352,16 @@ export function handleBurn(event: Burn): void { let burn = BurnEvent.load(burns[burns.length - 1]) let pair = Pair.load(event.address.toHex()) + if (!pair) return + let uniswap = UniswapFactory.load(FACTORY_ADDRESS) //update token info let token0 = Token.load(pair.token0) let token1 = Token.load(pair.token1) + + if (!token0 || !token1) return + let token0Amount = convertTokenToDecimal(event.params.amount0, token0.decimals) let token1Amount = convertTokenToDecimal(event.params.amount1, token1.decimals) @@ -394,8 +409,12 @@ export function handleBurn(event: Burn): void { export function handleSwap(event: Swap): void { let pair = Pair.load(event.address.toHexString()) + if (!pair) return + let token0 = Token.load(pair.token0) let token1 = Token.load(pair.token1) + if (!token0 || !token1) return + let amount0In = convertTokenToDecimal(event.params.amount0In, token0.decimals) let amount1In = convertTokenToDecimal(event.params.amount1In, token1.decimals) let amount0Out = convertTokenToDecimal(event.params.amount0Out, token0.decimals) diff --git a/subgraph.yaml b/subgraph.yaml index 8fb0d263..8dc3fc29 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -5,7 +5,7 @@ schema: file: ./schema.graphql graft: base: QmXYAmabbEmnSDNR5GWJhmm2NQKXnPkSJEBC3EsMwjXr4e - block: 18746370 + block: 18746198 dataSources: - kind: ethereum/contract name: Factory