diff --git a/schema.graphql b/schema.graphql index df96d2ac..54f6dc4e 100644 --- a/schema.graphql +++ b/schema.graphql @@ -90,8 +90,6 @@ type Pair @entity { liquidityProviderCount: BigInt! # used to detect new exchanges # derived fields pairHourData: [PairHourData!]! @derivedFrom(field: "pair") - liquidityPositions: [LiquidityPosition!]! @derivedFrom(field: "pair") - liquidityPositionSnapshots: [LiquidityPositionSnapshot!]! @derivedFrom(field: "pair") mints: [Mint!]! @derivedFrom(field: "pair") burns: [Burn!]! @derivedFrom(field: "pair") swaps: [Swap!]! @derivedFrom(field: "pair") @@ -99,34 +97,9 @@ type Pair @entity { type User @entity { id: ID! - liquidityPositions: [LiquidityPosition!] @derivedFrom(field: "user") usdSwapped: BigDecimal! } -type LiquidityPosition @entity { - id: ID! - user: User! - pair: Pair! - liquidityTokenBalance: BigDecimal! -} - -# saved over time for return calculations, gets created and never updated -type LiquidityPositionSnapshot @entity { - id: ID! - liquidityPosition: LiquidityPosition! - timestamp: Int! # saved for fast historical lookups - block: Int! # saved for fast historical lookups - user: User! # reference to user - pair: Pair! # reference to pair - token0PriceUSD: BigDecimal! # snapshot of token0 price - token1PriceUSD: BigDecimal! # snapshot of token1 price - reserve0: BigDecimal! # snapshot of pair token0 reserves - reserve1: BigDecimal! # snapshot of pair token1 reserves - reserveUSD: BigDecimal! # snapshot of pair reserves in USD - liquidityTokenTotalSupply: BigDecimal! # snapshot of pool token supply - liquidityTokenBalance: BigDecimal! # snapshot of users pool token balance -} - type Transaction @entity { id: ID! # txn hash blockNumber: BigInt! diff --git a/src/mappings/core.ts b/src/mappings/core.ts index ee91cc1d..90a7905e 100644 --- a/src/mappings/core.ts +++ b/src/mappings/core.ts @@ -8,22 +8,12 @@ import { Mint as MintEvent, Burn as BurnEvent, Swap as SwapEvent, - Bundle + Bundle, } from '../types/schema' import { Pair as PairContract, Mint, Burn, Swap, Transfer, Sync } from '../types/templates/Pair/Pair' import { updatePairDayData, updateTokenDayData, updateUniswapDayData, updatePairHourData } from './dayUpdates' import { getEthPriceInUSD, findEthPerToken, getTrackedVolumeUSD, getTrackedLiquidityUSD } from './pricing' -import { - convertTokenToDecimal, - ADDRESS_ZERO, - FACTORY_ADDRESS, - ONE_BI, - createUser, - createLiquidityPosition, - ZERO_BD, - BI_18, - createLiquiditySnapshot -} from './helpers' +import { convertTokenToDecimal, ADDRESS_ZERO, FACTORY_ADDRESS, ONE_BI, createUser, ZERO_BD, BI_18 } from './helpers' function isCompleteMint(mintId: string): boolean { return MintEvent.load(mintId)!.sender !== null // sufficient checks @@ -79,7 +69,7 @@ export function handleTransfer(event: Transfer): void { event.transaction.hash .toHexString() .concat('-') - .concat(BigInt.fromI32(mints.length).toString()) + .concat(BigInt.fromI32(mints.length).toString()), ) mint.transaction = transaction.id mint.pair = pair.id @@ -108,7 +98,7 @@ export function handleTransfer(event: Transfer): void { event.transaction.hash .toHexString() .concat('-') - .concat(BigInt.fromI32(burns.length).toString()) + .concat(BigInt.fromI32(burns.length).toString()), ) burn.transaction = transaction.id burn.pair = pair.id @@ -147,7 +137,7 @@ export function handleTransfer(event: Transfer): void { event.transaction.hash .toHexString() .concat('-') - .concat(BigInt.fromI32(burns.length).toString()) + .concat(BigInt.fromI32(burns.length).toString()), ) burn.transaction = transaction.id burn.needsComplete = false @@ -161,7 +151,7 @@ export function handleTransfer(event: Transfer): void { event.transaction.hash .toHexString() .concat('-') - .concat(BigInt.fromI32(burns.length).toString()) + .concat(BigInt.fromI32(burns.length).toString()), ) burn.transaction = transaction.id burn.needsComplete = false @@ -209,20 +199,6 @@ export function handleTransfer(event: Transfer): void { transaction.save() } - if (from.toHexString() != ADDRESS_ZERO && from.toHexString() != pair.id) { - let fromUserLiquidityPosition = createLiquidityPosition(event.address, from) - fromUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(from), BI_18) - fromUserLiquidityPosition.save() - createLiquiditySnapshot(fromUserLiquidityPosition, event) - } - - if (event.params.to.toHexString() != ADDRESS_ZERO && to.toHexString() != pair.id) { - let toUserLiquidityPosition = createLiquidityPosition(event.address, to) - toUserLiquidityPosition.liquidityTokenBalance = convertTokenToDecimal(pairContract.balanceOf(to), BI_18) - toUserLiquidityPosition.save() - createLiquiditySnapshot(toUserLiquidityPosition, event) - } - transaction.save() } @@ -266,7 +242,7 @@ export function handleSync(event: Sync): void { let trackedLiquidityETH: BigDecimal if (bundle.ethPrice.notEqual(ZERO_BD)) { trackedLiquidityETH = getTrackedLiquidityUSD(pair.reserve0, token0 as Token, pair.reserve1, token1 as Token).div( - bundle.ethPrice + bundle.ethPrice, ) } else { trackedLiquidityETH = ZERO_BD @@ -350,10 +326,6 @@ export function handleMint(event: Mint): void { mint.amountUSD = amountTotalUSD as BigDecimal mint.save() - // update the LP position - let liquidityPosition = createLiquidityPosition(event.address, Address.fromBytes(mint.to)) - createLiquiditySnapshot(liquidityPosition, event) - // update day entities updatePairDayData(event) updatePairHourData(event) @@ -420,10 +392,6 @@ export function handleBurn(event: Burn): void { burn.amountUSD = amountTotalUSD as BigDecimal burn.save() - // update the LP position - let liquidityPosition = createLiquidityPosition(event.address, event.params.sender) - createLiquiditySnapshot(liquidityPosition, event) - // update day entities updatePairDayData(event) updatePairHourData(event) @@ -517,7 +485,7 @@ export function handleSwap(event: Swap): void { event.transaction.hash .toHexString() .concat('-') - .concat(BigInt.fromI32(swaps.length).toString()) + .concat(BigInt.fromI32(swaps.length).toString()), ) // update swap event @@ -574,7 +542,7 @@ export function handleSwap(event: Swap): void { token0DayData.dailyVolumeToken = token0DayData.dailyVolumeToken.plus(amount0Total) token0DayData.dailyVolumeETH = token0DayData.dailyVolumeETH.plus(amount0Total.times(token0.derivedETH as BigDecimal)) token0DayData.dailyVolumeUSD = token0DayData.dailyVolumeUSD.plus( - amount0Total.times(token0.derivedETH as BigDecimal).times(bundle.ethPrice) + amount0Total.times(token0.derivedETH as BigDecimal).times(bundle.ethPrice), ) token0DayData.save() @@ -582,7 +550,7 @@ export function handleSwap(event: Swap): void { token1DayData.dailyVolumeToken = token1DayData.dailyVolumeToken.plus(amount1Total) token1DayData.dailyVolumeETH = token1DayData.dailyVolumeETH.plus(amount1Total.times(token1.derivedETH as BigDecimal)) token1DayData.dailyVolumeUSD = token1DayData.dailyVolumeUSD.plus( - amount1Total.times(token1.derivedETH as BigDecimal).times(bundle.ethPrice) + amount1Total.times(token1.derivedETH as BigDecimal).times(bundle.ethPrice), ) token1DayData.save() } diff --git a/src/mappings/helpers.ts b/src/mappings/helpers.ts index 18cd6607..3bbe312b 100644 --- a/src/mappings/helpers.ts +++ b/src/mappings/helpers.ts @@ -3,7 +3,7 @@ import { log, BigInt, BigDecimal, Address, ethereum } from '@graphprotocol/graph import { ERC20 } from '../types/Factory/ERC20' import { ERC20SymbolBytes } from '../types/Factory/ERC20SymbolBytes' import { ERC20NameBytes } from '../types/Factory/ERC20NameBytes' -import { User, Bundle, Token, LiquidityPosition, LiquidityPositionSnapshot, Pair } from '../types/schema' +import { User, Bundle, Token, Pair } from '../types/schema' import { Factory as FactoryContract } from '../types/templates/Pair/Factory' import { TokenDefinition } from './tokenDefinition' @@ -147,26 +147,6 @@ export function fetchTokenDecimals(tokenAddress: Address): BigInt | null { return null } -export function createLiquidityPosition(exchange: Address, user: Address): LiquidityPosition { - let id = exchange - .toHexString() - .concat('-') - .concat(user.toHexString()) - let liquidityTokenBalance = LiquidityPosition.load(id) - if (liquidityTokenBalance === null) { - let pair = Pair.load(exchange.toHexString())! - pair.liquidityProviderCount = pair.liquidityProviderCount.plus(ONE_BI) - liquidityTokenBalance = new LiquidityPosition(id) - liquidityTokenBalance.liquidityTokenBalance = ZERO_BD - liquidityTokenBalance.pair = exchange.toHexString() - liquidityTokenBalance.user = user.toHexString() - liquidityTokenBalance.save() - pair.save() - } - if (liquidityTokenBalance === null) log.error('LiquidityTokenBalance is null', [id]) - return liquidityTokenBalance as LiquidityPosition -} - export function createUser(address: Address): void { let user = User.load(address.toHexString()) if (user === null) { @@ -175,29 +155,3 @@ export function createUser(address: Address): void { user.save() } } - -export function createLiquiditySnapshot(position: LiquidityPosition, event: ethereum.Event): void { - let timestamp = event.block.timestamp.toI32() - let bundle = Bundle.load('1')! - let pair = Pair.load(position.pair)! - let token0 = Token.load(pair.token0)! - let token1 = Token.load(pair.token1)! - - // create new snapshot - let snapshot = new LiquidityPositionSnapshot(position.id.concat(timestamp.toString())) - snapshot.liquidityPosition = position.id - snapshot.timestamp = timestamp - snapshot.block = event.block.number.toI32() - snapshot.user = position.user - snapshot.pair = position.pair - snapshot.token0PriceUSD = token0.derivedETH.times(bundle.ethPrice) - snapshot.token1PriceUSD = token1.derivedETH.times(bundle.ethPrice) - snapshot.reserve0 = pair.reserve0 - snapshot.reserve1 = pair.reserve1 - snapshot.reserveUSD = pair.reserveUSD - snapshot.liquidityTokenTotalSupply = pair.totalSupply - snapshot.liquidityTokenBalance = position.liquidityTokenBalance - snapshot.liquidityPosition = position.id - snapshot.save() - position.save() -}