302 lines
7.2 KiB
GraphQL
302 lines
7.2 KiB
GraphQL
type UniswapFactory @entity {
|
|
# factory address
|
|
id: ID!
|
|
|
|
# pair info
|
|
pairCount: Int!
|
|
|
|
# total volume
|
|
totalVolumeUSD: BigDecimal!
|
|
totalVolumeETH: BigDecimal!
|
|
|
|
# untracked values - less confident USD scores
|
|
untrackedVolumeUSD: BigDecimal!
|
|
|
|
# total liquidity
|
|
totalLiquidityUSD: BigDecimal!
|
|
totalLiquidityETH: BigDecimal!
|
|
|
|
# transactions
|
|
txCount: BigInt!
|
|
}
|
|
|
|
type Token @entity {
|
|
# token address
|
|
id: ID!
|
|
|
|
# mirrored from the smart contract
|
|
symbol: String!
|
|
name: String!
|
|
decimals: BigInt!
|
|
|
|
# used for other stats like marketcap
|
|
totalSupply: BigInt!
|
|
|
|
# token specific volume
|
|
tradeVolume: BigDecimal!
|
|
tradeVolumeUSD: BigDecimal!
|
|
untrackedVolumeUSD: BigDecimal!
|
|
|
|
# transactions across all pairs
|
|
txCount: BigInt!
|
|
|
|
# liquidity across all pairs
|
|
totalLiquidity: BigDecimal!
|
|
|
|
# derived prices
|
|
derivedETH: BigDecimal!
|
|
|
|
# derived fields
|
|
tokenDayData: [TokenDayData!]! @derivedFrom(field: "token")
|
|
pairDayDataBase: [PairDayData!]! @derivedFrom(field: "token0")
|
|
pairDayDataQuote: [PairDayData!]! @derivedFrom(field: "token1")
|
|
pairBase: [Pair!]! @derivedFrom(field: "token0")
|
|
pairQuote: [Pair!]! @derivedFrom(field: "token1")
|
|
}
|
|
|
|
type Pair @entity {
|
|
# pair address
|
|
id: ID!
|
|
|
|
# mirrored from the smart contract
|
|
token0: Token!
|
|
token1: Token!
|
|
reserve0: BigDecimal!
|
|
reserve1: BigDecimal!
|
|
totalSupply: BigDecimal!
|
|
|
|
# derived liquidity
|
|
reserveETH: BigDecimal!
|
|
reserveUSD: BigDecimal!
|
|
# used for separating per pair reserves and global
|
|
trackedReserveETH: BigDecimal!
|
|
|
|
# Price in terms of the asset pair
|
|
token0Price: BigDecimal!
|
|
token1Price: BigDecimal!
|
|
|
|
# lifetime volume stats
|
|
volumeToken0: BigDecimal!
|
|
volumeToken1: BigDecimal!
|
|
volumeUSD: BigDecimal!
|
|
untrackedVolumeUSD: BigDecimal!
|
|
txCount: BigInt!
|
|
|
|
# creation stats
|
|
createdAtTimestamp: BigInt!
|
|
createdAtBlockNumber: BigInt!
|
|
|
|
# Fields used to help derived relationship
|
|
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!
|
|
timestamp: BigInt!
|
|
# This is not the reverse of Mint.transaction; it is only used to
|
|
# track incomplete mints (similar for burns and swaps)
|
|
mints: [Mint!]!
|
|
burns: [Burn!]!
|
|
swaps: [Swap!]!
|
|
}
|
|
|
|
type Mint @entity {
|
|
# transaction hash + "-" + index in mints Transaction array
|
|
id: ID!
|
|
transaction: Transaction!
|
|
timestamp: BigInt! # need this to pull recent txns for specific token or pair
|
|
pair: Pair!
|
|
|
|
# populated from the primary Transfer event
|
|
to: Bytes!
|
|
liquidity: BigDecimal!
|
|
|
|
# populated from the Mint event
|
|
sender: Bytes
|
|
amount0: BigDecimal
|
|
amount1: BigDecimal
|
|
logIndex: BigInt
|
|
# derived amount based on available prices of tokens
|
|
amountUSD: BigDecimal
|
|
|
|
# optional fee fields, if a Transfer event is fired in _mintFee
|
|
feeTo: Bytes
|
|
feeLiquidity: BigDecimal
|
|
}
|
|
|
|
type Burn @entity {
|
|
# transaction hash + "-" + index in mints Transaction array
|
|
id: ID!
|
|
transaction: Transaction!
|
|
timestamp: BigInt! # need this to pull recent txns for specific token or pair
|
|
pair: Pair!
|
|
|
|
# populated from the primary Transfer event
|
|
liquidity: BigDecimal!
|
|
|
|
# populated from the Burn event
|
|
sender: Bytes
|
|
amount0: BigDecimal
|
|
amount1: BigDecimal
|
|
to: Bytes
|
|
logIndex: BigInt
|
|
# derived amount based on available prices of tokens
|
|
amountUSD: BigDecimal
|
|
|
|
# mark uncomplete in ETH case
|
|
needsComplete: Boolean!
|
|
|
|
# optional fee fields, if a Transfer event is fired in _mintFee
|
|
feeTo: Bytes
|
|
feeLiquidity: BigDecimal
|
|
}
|
|
|
|
type Swap @entity {
|
|
# transaction hash + "-" + index in swaps Transaction array
|
|
id: ID!
|
|
transaction: Transaction!
|
|
timestamp: BigInt! # need this to pull recent txns for specific token or pair
|
|
pair: Pair!
|
|
|
|
# populated from the Swap event
|
|
sender: Bytes!
|
|
from: Bytes! # the EOA that initiated the txn
|
|
amount0In: BigDecimal!
|
|
amount1In: BigDecimal!
|
|
amount0Out: BigDecimal!
|
|
amount1Out: BigDecimal!
|
|
to: Bytes!
|
|
logIndex: BigInt
|
|
|
|
# derived info
|
|
amountUSD: BigDecimal!
|
|
}
|
|
|
|
# stores for USD calculations
|
|
type Bundle @entity {
|
|
id: ID!
|
|
ethPrice: BigDecimal! # price of ETH usd
|
|
}
|
|
|
|
# Data accumulated and condensed into day stats for all of Uniswap
|
|
type UniswapDayData @entity {
|
|
id: ID! # timestamp rounded to current day by dividing by 86400
|
|
date: Int!
|
|
|
|
dailyVolumeETH: BigDecimal!
|
|
dailyVolumeUSD: BigDecimal!
|
|
dailyVolumeUntracked: BigDecimal!
|
|
|
|
totalVolumeETH: BigDecimal!
|
|
totalLiquidityETH: BigDecimal!
|
|
totalVolumeUSD: BigDecimal! # Accumulate at each trade, not just calculated off whatever totalVolume is. making it more accurate as it is a live conversion
|
|
totalLiquidityUSD: BigDecimal!
|
|
|
|
txCount: BigInt!
|
|
}
|
|
|
|
type PairHourData @entity {
|
|
id: ID!
|
|
hourStartUnix: Int! # unix timestamp for start of hour
|
|
pair: Pair!
|
|
|
|
# reserves
|
|
reserve0: BigDecimal!
|
|
reserve1: BigDecimal!
|
|
|
|
# total supply for LP historical returns
|
|
totalSupply: BigDecimal
|
|
|
|
# derived liquidity
|
|
reserveUSD: BigDecimal!
|
|
|
|
# volume stats
|
|
hourlyVolumeToken0: BigDecimal!
|
|
hourlyVolumeToken1: BigDecimal!
|
|
hourlyVolumeUSD: BigDecimal!
|
|
hourlyTxns: BigInt!
|
|
}
|
|
|
|
# Data accumulated and condensed into day stats for each exchange
|
|
type PairDayData @entity {
|
|
id: ID!
|
|
date: Int!
|
|
pairAddress: Bytes!
|
|
token0: Token!
|
|
token1: Token!
|
|
|
|
# reserves
|
|
reserve0: BigDecimal!
|
|
reserve1: BigDecimal!
|
|
|
|
# total supply for LP historical returns
|
|
totalSupply: BigDecimal
|
|
|
|
# derived liquidity
|
|
reserveUSD: BigDecimal!
|
|
|
|
# volume stats
|
|
dailyVolumeToken0: BigDecimal!
|
|
dailyVolumeToken1: BigDecimal!
|
|
dailyVolumeUSD: BigDecimal!
|
|
dailyTxns: BigInt!
|
|
}
|
|
|
|
type TokenDayData @entity {
|
|
id: ID!
|
|
date: Int!
|
|
token: Token!
|
|
|
|
# volume stats
|
|
dailyVolumeToken: BigDecimal!
|
|
dailyVolumeETH: BigDecimal!
|
|
dailyVolumeUSD: BigDecimal!
|
|
dailyTxns: BigInt!
|
|
|
|
# liquidity stats
|
|
totalLiquidityToken: BigDecimal!
|
|
totalLiquidityETH: BigDecimal!
|
|
totalLiquidityUSD: BigDecimal!
|
|
|
|
# price stats
|
|
priceUSD: BigDecimal!
|
|
}
|