Skip to content

Commit

Permalink
Merge pull request #152 from Uniswap/remove-positions
Browse files Browse the repository at this point in the history
remove positions
  • Loading branch information
mzywang authored Apr 23, 2024
2 parents 6f3c29f + 19e04d5 commit 5245085
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 116 deletions.
27 changes: 0 additions & 27 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -90,43 +90,16 @@ 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")
}

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!
Expand Down
52 changes: 10 additions & 42 deletions src/mappings/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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()
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -574,15 +542,15 @@ 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()

// swap specific updating
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()
}
48 changes: 1 addition & 47 deletions src/mappings/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down Expand Up @@ -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) {
Expand All @@ -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()
}

0 comments on commit 5245085

Please sign in to comment.