mirror of
https://github.com/luxfi/uni-v4-subgraph.git
synced 2026-07-27 06:54:48 +00:00
520 lines
14 KiB
GraphQL
520 lines
14 KiB
GraphQL
type PoolManager @entity(immutable: false) {
|
|
# poolManager address
|
|
id: ID!
|
|
# amount of pools created
|
|
poolCount: BigInt!
|
|
# amoutn of transactions all time
|
|
txCount: BigInt!
|
|
# total volume all time in derived USD
|
|
totalVolumeUSD: BigDecimal!
|
|
# total volume all time in derived ETH
|
|
totalVolumeETH: BigDecimal!
|
|
# total swap fees all time in USD
|
|
totalFeesUSD: BigDecimal!
|
|
# total swap fees all time in USD
|
|
totalFeesETH: BigDecimal!
|
|
# all volume even through less reliable USD values
|
|
untrackedVolumeUSD: BigDecimal!
|
|
# TVL derived in USD
|
|
totalValueLockedUSD: BigDecimal!
|
|
# TVL derived in ETH
|
|
totalValueLockedETH: BigDecimal!
|
|
# TVL derived in USD untracked
|
|
totalValueLockedUSDUntracked: BigDecimal!
|
|
# TVL derived in ETH untracked
|
|
totalValueLockedETHUntracked: BigDecimal!
|
|
# current owner of the factory
|
|
owner: ID!
|
|
}
|
|
|
|
# stores for USD calculations
|
|
type Bundle @entity(immutable: false) {
|
|
id: ID!
|
|
# price of ETH in usd
|
|
ethPriceUSD: BigDecimal!
|
|
}
|
|
|
|
type Token @entity(immutable: false) {
|
|
# token address
|
|
id: ID!
|
|
# token symbol
|
|
symbol: String!
|
|
# token name
|
|
name: String!
|
|
# token decimals
|
|
decimals: BigInt!
|
|
# token total supply
|
|
totalSupply: BigInt!
|
|
# volume in token units
|
|
volume: BigDecimal!
|
|
# volume in derived USD
|
|
volumeUSD: BigDecimal!
|
|
# volume in USD even on pools with less reliable USD values
|
|
untrackedVolumeUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# transactions across all pools that include this token
|
|
txCount: BigInt!
|
|
# number of pools containing this token
|
|
poolCount: BigInt!
|
|
# liquidity across all pools in token units
|
|
totalValueLocked: BigDecimal!
|
|
# liquidity across all pools in derived USD
|
|
totalValueLockedUSD: BigDecimal!
|
|
# TVL derived in USD untracked
|
|
totalValueLockedUSDUntracked: BigDecimal!
|
|
# Note: for chains where ETH is not the native token, this will be the derived
|
|
# price of that chain's native token, effectively, this should be renamed
|
|
# derivedNative
|
|
derivedETH: BigDecimal!
|
|
# pools token is in that are white listed for USD pricing
|
|
whitelistPools: [Pool!]!
|
|
# derived fields
|
|
tokenDayData: [TokenDayData!]! @derivedFrom(field: "token")
|
|
}
|
|
|
|
type Pool @entity(immutable: false) {
|
|
# pool address
|
|
id: ID!
|
|
# creation
|
|
createdAtTimestamp: BigInt!
|
|
# block pool was created at
|
|
createdAtBlockNumber: BigInt!
|
|
# token0
|
|
token0: Token!
|
|
# token1
|
|
token1: Token!
|
|
# fee amount
|
|
feeTier: BigInt!
|
|
# in range liquidity
|
|
liquidity: BigInt!
|
|
# current price tracker
|
|
sqrtPrice: BigInt!
|
|
# token0 per token1
|
|
token0Price: BigDecimal!
|
|
# token1 per token0
|
|
token1Price: BigDecimal!
|
|
# current tick
|
|
tick: BigInt
|
|
# tick spacing
|
|
tickSpacing: BigInt!
|
|
# current observation index
|
|
observationIndex: BigInt!
|
|
# all time token0 swapped
|
|
volumeToken0: BigDecimal!
|
|
# all time token1 swapped
|
|
volumeToken1: BigDecimal!
|
|
# all time USD swapped
|
|
volumeUSD: BigDecimal!
|
|
# all time USD swapped, unfiltered for unreliable USD pools
|
|
untrackedVolumeUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# all time number of transactions
|
|
txCount: BigInt!
|
|
# all time fees collected token0
|
|
collectedFeesToken0: BigDecimal!
|
|
# all time fees collected token1
|
|
collectedFeesToken1: BigDecimal!
|
|
# all time fees collected derived USD
|
|
collectedFeesUSD: BigDecimal!
|
|
# total token 0 across all ticks
|
|
totalValueLockedToken0: BigDecimal!
|
|
# total token 1 across all ticks
|
|
totalValueLockedToken1: BigDecimal!
|
|
# tvl derived ETH
|
|
totalValueLockedETH: BigDecimal!
|
|
# tvl USD
|
|
totalValueLockedUSD: BigDecimal!
|
|
# true when TVL is sourced from an external hook rather than derived pricing
|
|
isExternalLiquidity: Boolean!
|
|
# TVL derived in USD untracked
|
|
totalValueLockedUSDUntracked: BigDecimal!
|
|
# Fields used to help derived relationship
|
|
liquidityProviderCount: BigInt! # used to detect new exchanges
|
|
# hourly snapshots of pool data
|
|
poolHourData: [PoolHourData!]! @derivedFrom(field: "pool")
|
|
# daily snapshots of pool data
|
|
poolDayData: [PoolDayData!]! @derivedFrom(field: "pool")
|
|
# hooks address
|
|
hooks: String!
|
|
# derived fields
|
|
modifyLiquiditys: [ModifyLiquidity!]! @derivedFrom(field: "pool")
|
|
swaps: [Swap!]! @derivedFrom(field: "pool")
|
|
ticks: [Tick!]! @derivedFrom(field: "pool")
|
|
}
|
|
|
|
type Tick @entity(immutable: false) {
|
|
# format: <pool address>#<tick index>
|
|
id: ID!
|
|
# pool address
|
|
poolAddress: String
|
|
# tick index
|
|
tickIdx: BigInt!
|
|
# pointer to pool
|
|
pool: Pool!
|
|
# total liquidity pool has as tick lower or upper
|
|
liquidityGross: BigInt!
|
|
# how much liquidity changes when tick crossed
|
|
liquidityNet: BigInt!
|
|
# calculated price of token0 of tick within this pool - constant
|
|
price0: BigDecimal!
|
|
# calculated price of token1 of tick within this pool - constant
|
|
price1: BigDecimal!
|
|
# created time
|
|
createdAtTimestamp: BigInt!
|
|
# created block
|
|
createdAtBlockNumber: BigInt!
|
|
}
|
|
|
|
type Transaction @entity(immutable: true) {
|
|
# txn hash
|
|
id: ID!
|
|
# block txn was included in
|
|
blockNumber: BigInt!
|
|
# timestamp txn was confirmed
|
|
timestamp: BigInt!
|
|
# gas used during txn execution
|
|
gasUsed: BigInt!
|
|
gasPrice: BigInt!
|
|
# derived values
|
|
modifyLiquiditys: [ModifyLiquidity]! @derivedFrom(field: "transaction")
|
|
swaps: [Swap]! @derivedFrom(field: "transaction")
|
|
transfers: [Transfer]! @derivedFrom(field: "transaction")
|
|
subscriptions: [Subscribe]! @derivedFrom(field: "transaction")
|
|
unsubscriptions: [Unsubscribe]! @derivedFrom(field: "transaction")
|
|
}
|
|
|
|
type Swap @entity(immutable: true) {
|
|
# transaction hash + "#" + index in swaps Transaction array
|
|
id: ID!
|
|
# pointer to transaction
|
|
transaction: Transaction!
|
|
# timestamp of transaction
|
|
timestamp: BigInt!
|
|
# pool swap occured within
|
|
pool: Pool!
|
|
# allow indexing by tokens
|
|
token0: Token!
|
|
# allow indexing by tokens
|
|
token1: Token!
|
|
# sender of the swap
|
|
sender: Bytes!
|
|
# recipient of the swap
|
|
# recipient: Bytes
|
|
# txn origin
|
|
origin: Bytes! # the EOA that initiated the txn
|
|
# delta of token0 swapped
|
|
amount0: BigDecimal!
|
|
# delta of token1 swapped
|
|
amount1: BigDecimal!
|
|
# derived info
|
|
amountUSD: BigDecimal!
|
|
# The sqrt(price) of the pool after the swap, as a Q64.96
|
|
sqrtPriceX96: BigInt!
|
|
# the tick after the swap
|
|
tick: BigInt!
|
|
# index within the txn
|
|
logIndex: BigInt
|
|
}
|
|
|
|
type ModifyLiquidity @entity(immutable: true) {
|
|
# transaction hash + "#" + index in mints Transaction array
|
|
id: ID!
|
|
# which txn the ModifyLiquidity was included in
|
|
transaction: Transaction!
|
|
# time of txn
|
|
timestamp: BigInt!
|
|
# pool position is within
|
|
pool: Pool!
|
|
# allow indexing by tokens
|
|
token0: Token!
|
|
# allow indexing by tokens
|
|
token1: Token!
|
|
# owner of position where liquidity modified to
|
|
# owner: Bytes
|
|
# the address that modified the liquidity
|
|
sender: Bytes
|
|
# txn origin
|
|
origin: Bytes! # the EOA that initiated the txn
|
|
# amount of liquidity modified
|
|
amount: BigInt!
|
|
# amount of token 0 modified
|
|
amount0: BigDecimal!
|
|
# amount of token 1 modified
|
|
amount1: BigDecimal!
|
|
# derived amount based on available prices of tokens
|
|
amountUSD: BigDecimal
|
|
# lower tick of the position
|
|
tickLower: BigInt!
|
|
# upper tick of the position
|
|
tickUpper: BigInt!
|
|
# index within the txn
|
|
logIndex: BigInt
|
|
}
|
|
|
|
# Data accumulated and condensed into day stats for all of Uniswap
|
|
type UniswapDayData @entity(immutable: false) {
|
|
# timestamp rounded to current day by dividing by 86400
|
|
id: ID!
|
|
# timestamp rounded to current day by dividing by 86400
|
|
date: Int!
|
|
# total daily volume in Uniswap derived in terms of ETH
|
|
volumeETH: BigDecimal!
|
|
# total daily volume in Uniswap derived in terms of USD
|
|
volumeUSD: BigDecimal!
|
|
# total daily volume in Uniswap derived in terms of USD untracked
|
|
volumeUSDUntracked: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# number of daily transactions
|
|
txCount: BigInt!
|
|
# tvl in terms of USD
|
|
tvlUSD: BigDecimal!
|
|
}
|
|
|
|
# Data accumulated and condensed into day stats for each pool
|
|
type PoolDayData @entity(immutable: false) {
|
|
# timestamp rounded to current day by dividing by 86400
|
|
id: ID!
|
|
# timestamp rounded to current day by dividing by 86400
|
|
date: Int!
|
|
# pointer to pool
|
|
pool: Pool!
|
|
# in range liquidity at end of period
|
|
liquidity: BigInt!
|
|
# current price tracker at end of period
|
|
sqrtPrice: BigInt!
|
|
# price of token0 - derived from sqrtPrice
|
|
token0Price: BigDecimal!
|
|
# price of token1 - derived from sqrtPrice
|
|
token1Price: BigDecimal!
|
|
# current tick at end of period
|
|
tick: BigInt
|
|
# tvl derived in USD at end of period
|
|
tvlUSD: BigDecimal!
|
|
# volume in token0
|
|
volumeToken0: BigDecimal!
|
|
# volume in token1
|
|
volumeToken1: BigDecimal!
|
|
# volume in USD
|
|
volumeUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# numebr of transactions during period
|
|
txCount: BigInt!
|
|
# opening price of token0
|
|
open: BigDecimal!
|
|
# high price of token0
|
|
high: BigDecimal!
|
|
# low price of token0
|
|
low: BigDecimal!
|
|
# close price of token0
|
|
close: BigDecimal!
|
|
}
|
|
|
|
# hourly stats tracker for pool
|
|
type PoolHourData @entity(immutable: false) {
|
|
# format: <pool address>-<timestamp>
|
|
id: ID!
|
|
# unix timestamp for start of hour
|
|
periodStartUnix: Int!
|
|
# pointer to pool
|
|
pool: Pool!
|
|
# in range liquidity at end of period
|
|
liquidity: BigInt!
|
|
# current price tracker at end of period
|
|
sqrtPrice: BigInt!
|
|
# price of token0 - derived from sqrtPrice
|
|
token0Price: BigDecimal!
|
|
# price of token1 - derived from sqrtPrice
|
|
token1Price: BigDecimal!
|
|
# current tick at end of period
|
|
tick: BigInt
|
|
# tvl derived in USD at end of period
|
|
tvlUSD: BigDecimal!
|
|
# volume in token0
|
|
volumeToken0: BigDecimal!
|
|
# volume in token1
|
|
volumeToken1: BigDecimal!
|
|
# volume in USD
|
|
volumeUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# numebr of transactions during period
|
|
txCount: BigInt!
|
|
# opening price of token0
|
|
open: BigDecimal!
|
|
# high price of token0
|
|
high: BigDecimal!
|
|
# low price of token0
|
|
low: BigDecimal!
|
|
# close price of token0
|
|
close: BigDecimal!
|
|
}
|
|
|
|
type TokenDayData @entity(immutable: false) {
|
|
# token address concatendated with date
|
|
id: ID!
|
|
# timestamp rounded to current day by dividing by 86400
|
|
date: Int!
|
|
# pointer to token
|
|
token: Token!
|
|
# volume in token units
|
|
volume: BigDecimal!
|
|
# volume in derived USD
|
|
volumeUSD: BigDecimal!
|
|
# volume in USD even on pools with less reliable USD values
|
|
untrackedVolumeUSD: BigDecimal!
|
|
# liquidity across all pools in token units
|
|
totalValueLocked: BigDecimal!
|
|
# liquidity across all pools in derived USD
|
|
totalValueLockedUSD: BigDecimal!
|
|
# price at end of period in USD
|
|
priceUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# opening price USD
|
|
open: BigDecimal!
|
|
# high price USD
|
|
high: BigDecimal!
|
|
# low price USD
|
|
low: BigDecimal!
|
|
# close price USD
|
|
close: BigDecimal!
|
|
}
|
|
|
|
type TokenHourData @entity(immutable: false) {
|
|
# token address concatendated with date
|
|
id: ID!
|
|
# unix timestamp for start of hour
|
|
periodStartUnix: Int!
|
|
# pointer to token
|
|
token: Token!
|
|
# volume in token units
|
|
volume: BigDecimal!
|
|
# volume in derived USD
|
|
volumeUSD: BigDecimal!
|
|
# volume in USD even on pools with less reliable USD values
|
|
untrackedVolumeUSD: BigDecimal!
|
|
# liquidity across all pools in token units
|
|
totalValueLocked: BigDecimal!
|
|
# liquidity across all pools in derived USD
|
|
totalValueLockedUSD: BigDecimal!
|
|
# price at end of period in USD
|
|
priceUSD: BigDecimal!
|
|
# fees in USD
|
|
feesUSD: BigDecimal!
|
|
# opening price USD
|
|
open: BigDecimal!
|
|
# high price USD
|
|
high: BigDecimal!
|
|
# low price USD
|
|
low: BigDecimal!
|
|
# close price USD
|
|
close: BigDecimal!
|
|
}
|
|
|
|
type Position @entity(immutable: false) {
|
|
# tokenId
|
|
id: ID!
|
|
# tokenId
|
|
tokenId: BigInt!
|
|
# address of current owner
|
|
owner: String!
|
|
# the EOA that minted the position
|
|
origin: String!
|
|
# created time
|
|
createdAtTimestamp: BigInt!
|
|
# subscribe events
|
|
subscriptions: [Subscribe!]! @derivedFrom(field: "position")
|
|
# unsubscription events
|
|
unsubscriptions: [Unsubscribe!]! @derivedFrom(field: "position")
|
|
# transfer events
|
|
transfers: [Transfer!]! @derivedFrom(field: "position")
|
|
}
|
|
|
|
type Subscribe @entity(immutable: true) {
|
|
# transaction hash + '-' + log index
|
|
id: ID!
|
|
# token id of position subscribed to
|
|
tokenId: BigInt!
|
|
# address of subscriber
|
|
address: String!
|
|
# pointer to transaction
|
|
transaction: Transaction!
|
|
# log index
|
|
logIndex: BigInt!
|
|
# time of tx
|
|
timestamp: BigInt!
|
|
# the EOA that initiated the tx
|
|
origin: String!
|
|
# pointer to position
|
|
position: Position!
|
|
}
|
|
|
|
type Unsubscribe @entity(immutable: true) {
|
|
# transaction hash + '-' + log index
|
|
id: ID!
|
|
# token id of position unsubscribed from
|
|
tokenId: BigInt!
|
|
# address of unsubscriber
|
|
address: String!
|
|
# pointer to transaction
|
|
transaction: Transaction!
|
|
# log index
|
|
logIndex: BigInt!
|
|
# time of tx
|
|
timestamp: BigInt!
|
|
# the EOA that initiated the tx
|
|
origin: String!
|
|
# pointer to position
|
|
position: Position!
|
|
}
|
|
|
|
type Transfer @entity(immutable: true) {
|
|
# transaction hash + '-' + log index
|
|
id: ID!
|
|
# token id of position
|
|
tokenId: BigInt!
|
|
# address of previous owner
|
|
from: String!
|
|
# address of new owner
|
|
to: String!
|
|
# pointer to transaction
|
|
transaction: Transaction!
|
|
# log index
|
|
logIndex: BigInt!
|
|
# time of tx
|
|
timestamp: BigInt!
|
|
# the EOA that initiated the tx
|
|
origin: String!
|
|
# pointer to position
|
|
position: Position!
|
|
}
|
|
|
|
type EulerSwapHook @entity(immutable: false) {
|
|
# Composite key = eulerAccount-asset0-asset1
|
|
id: ID!
|
|
# The latest hook address for this key
|
|
hook: String!
|
|
# address of the euler account
|
|
eulerAccount: String!
|
|
# address of asset0
|
|
asset0: String!
|
|
# address of asset1
|
|
asset1: String!
|
|
}
|
|
|
|
type ArrakisHook @entity(immutable: false) {
|
|
# hook address
|
|
id: ID!
|
|
# module address that created this hook
|
|
module: Bytes!
|
|
# salt used in creation
|
|
salt: Bytes!
|
|
# timestamp of creation
|
|
createdAtTimestamp: BigInt!
|
|
# block number of creation
|
|
createdAtBlockNumber: BigInt!
|
|
} |