mirror of
https://github.com/cerc-io/watcher-ts
synced 2024-11-20 04:46:20 +00:00
7f5229bf2f
* Remove test scripts, moved to vulcanize/uniswap-v3-core#watcher-ts. * Move uniswap analysis docs. * Watch pool burn and swap events.
595 lines
13 KiB
Markdown
595 lines
13 KiB
Markdown
# Frontend (Info App) Queries
|
|
|
|
- uniswap-v3 endpoint (https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-alt)
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/pools/chartData.ts
|
|
```
|
|
query poolDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) {
|
|
poolDayDatas(
|
|
first: 1000
|
|
skip: $skip
|
|
where: { pool: $address, date_gt: $startTime }
|
|
orderBy: date
|
|
orderDirection: asc
|
|
) {
|
|
date
|
|
volumeUSD
|
|
tvlUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/pools/poolData.ts
|
|
```
|
|
query pools {
|
|
pools(where: {id_in: $poolString}, block: {number: $block}, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
feeTier
|
|
liquidity
|
|
sqrtPrice
|
|
tick
|
|
token0 {
|
|
id
|
|
symbol
|
|
name
|
|
decimals
|
|
derivedETH
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
name
|
|
decimals
|
|
derivedETH
|
|
}
|
|
token0Price
|
|
token1Price
|
|
volumeUSD
|
|
txCount
|
|
totalValueLockedToken0
|
|
totalValueLockedToken1
|
|
totalValueLockedUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/pools/tickData.ts
|
|
```
|
|
query surroundingTicks(
|
|
$poolAddress: String!
|
|
$tickIdxLowerBound: BigInt!
|
|
$tickIdxUpperBound: BigInt!
|
|
$skip: Int!
|
|
) {
|
|
ticks(
|
|
first: 1000
|
|
skip: $skip
|
|
where: { poolAddress: $poolAddress, tickIdx_lte: $tickIdxUpperBound, tickIdx_gte: $tickIdxLowerBound }
|
|
) {
|
|
tickIdx
|
|
liquidityGross
|
|
liquidityNet
|
|
price0
|
|
price1
|
|
}
|
|
}
|
|
|
|
query pool($poolAddress: String!) {
|
|
pool(id: $poolAddress) {
|
|
tick
|
|
token0 {
|
|
symbol
|
|
id
|
|
decimals
|
|
}
|
|
token1 {
|
|
symbol
|
|
id
|
|
decimals
|
|
}
|
|
feeTier
|
|
sqrtPrice
|
|
liquidity
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/pools/topPools.ts
|
|
```
|
|
query topPools {
|
|
pools(first: 50, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/pools/transactions.ts
|
|
```
|
|
query transactions($address: Bytes!) {
|
|
mints(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
sender
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
swaps(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
burns(first: 100, orderBy: timestamp, orderDirection: desc, where: { pool: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/protocol/chart.ts
|
|
```
|
|
query uniswapDayDatas($startTime: Int!, $skip: Int!) {
|
|
uniswapDayDatas(first: 1000, skip: $skip, where: { date_gt: $startTime }, orderBy: date, orderDirection: asc) {
|
|
id
|
|
date
|
|
volumeUSD
|
|
tvlUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/protocol/overview.ts
|
|
```
|
|
query uniswapFactories {
|
|
factories(
|
|
block: { number: $block }
|
|
first: 1) {
|
|
txCount
|
|
totalVolumeUSD
|
|
totalFeesUSD
|
|
totalValueLockedUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/protocol/transactions.ts
|
|
```
|
|
query transactions {
|
|
transactions(first: 500, orderBy: timestamp, orderDirection: desc) {
|
|
id
|
|
timestamp
|
|
mints {
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
sender
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
swaps {
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
burns {
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/search/index.ts
|
|
```
|
|
query tokens($value: String, $id: String) {
|
|
asSymbol: tokens(where: { symbol_contains: $value }, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
symbol
|
|
name
|
|
totalValueLockedUSD
|
|
}
|
|
asName: tokens(where: { name_contains: $value }, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
symbol
|
|
name
|
|
totalValueLockedUSD
|
|
}
|
|
asAddress: tokens(where: { id: $id }, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
symbol
|
|
name
|
|
totalValueLockedUSD
|
|
}
|
|
}
|
|
|
|
query pools($tokens: [Bytes]!, $id: String) {
|
|
as0: pools(where: { token0_in: $tokens }) {
|
|
id
|
|
feeTier
|
|
token0 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
}
|
|
as1: pools(where: { token1_in: $tokens }) {
|
|
id
|
|
feeTier
|
|
token0 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
}
|
|
asAddress: pools(where: { id: $id }) {
|
|
id
|
|
feeTier
|
|
token0 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
name
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/chartData.ts
|
|
```
|
|
query tokenDayDatas($startTime: Int!, $skip: Int!, $address: Bytes!) {
|
|
tokenDayDatas(
|
|
first: 1000
|
|
skip: $skip
|
|
where: { token: $address, date_gt: $startTime }
|
|
orderBy: date
|
|
orderDirection: asc
|
|
) {
|
|
date
|
|
volumeUSD
|
|
totalValueLockedUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/poolsForToken.ts
|
|
```
|
|
query topPools($address: Bytes!) {
|
|
asToken0: pools(first: 200, orderBy: totalValueLockedUSD, orderDirection: desc, where: { token0: $address }) {
|
|
id
|
|
}
|
|
asToken1: pools(first: 200, orderBy: totalValueLockedUSD, orderDirection: desc, where: { token1: $address }) {
|
|
id
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/priceData.ts
|
|
```
|
|
query blocks {
|
|
tBlockTimestamp:token(id:$tokenAddress, block: { number: $blockNumber }) {
|
|
derivedETH
|
|
},
|
|
bBlockTimestamp: bundle(id:"1", block: { number: $blockNumber }) {
|
|
ethPriceUSD
|
|
}
|
|
}
|
|
|
|
query tokenHourDatas($startTime: Int!, $skip: Int!, $address: Bytes!) {
|
|
tokenHourDatas(
|
|
first: 100
|
|
skip: $skip
|
|
where: { token: $address, periodStartUnix_gt: $startTime }
|
|
orderBy: periodStartUnix
|
|
orderDirection: asc
|
|
) {
|
|
periodStartUnix
|
|
high
|
|
low
|
|
open
|
|
close
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/tokenData.ts
|
|
```
|
|
query tokens {
|
|
tokens(where: {id_in: $tokenString}, block: {number: $block}), orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
symbol
|
|
name
|
|
derivedETH
|
|
volumeUSD
|
|
volume
|
|
txCount
|
|
totalValueLocked
|
|
feesUSD
|
|
totalValueLockedUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/topTokens.ts
|
|
```
|
|
query topPools {
|
|
tokens(first: 50, orderBy: totalValueLockedUSD, orderDirection: desc) {
|
|
id
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/tokens/transactions.ts
|
|
```
|
|
query transactions($address: Bytes!) {
|
|
mintsAs0: mints(first: 500, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
sender
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
mintsAs1: mints(first: 500, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
sender
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
swapsAs0: swaps(first: 500, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
swapsAs1: swaps(first: 500, orderBy: timestamp, orderDirection: desc, where: { token1: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
origin
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
burnsAs0: burns(first: 500, orderBy: timestamp, orderDirection: desc, where: { token0: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
burnsAs1: burns(first: 500, orderBy: timestamp, orderDirection: desc, where: { token1: $address }) {
|
|
timestamp
|
|
transaction {
|
|
id
|
|
}
|
|
pool {
|
|
token0 {
|
|
id
|
|
symbol
|
|
}
|
|
token1 {
|
|
id
|
|
symbol
|
|
}
|
|
}
|
|
owner
|
|
amount0
|
|
amount1
|
|
amountUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
* https://github.com/Uniswap/uniswap-v3-info/blob/master/src/hooks/useEthPrices.ts
|
|
```
|
|
query prices($block24: Int!, $block48: Int!, $blockWeek: Int!) {
|
|
current: bundles(first: 1) {
|
|
ethPriceUSD
|
|
}
|
|
oneDay: bundles(first: 1, block: { number: $block24 }) {
|
|
ethPriceUSD
|
|
}
|
|
twoDay: bundles(first: 1, block: { number: $block48 }) {
|
|
ethPriceUSD
|
|
}
|
|
oneWeek: bundles(first: 1, block: { number: $blockWeek }) {
|
|
ethPriceUSD
|
|
}
|
|
}
|
|
```
|
|
|
|
- ethereum-blocks endpoint (https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks)
|
|
|
|
https://github.com/Uniswap/uniswap-v3-info/blob/master/src/hooks/useBlocksFromTimestamps.ts
|
|
```
|
|
query blocks {
|
|
tTimestamp1:blocks(first: 1, orderBy: timestamp, orderDirection: desc, where: { timestamp_gt: $timestamp1, timestamp_lt: $timestamp1Plus600 }) {
|
|
number
|
|
}
|
|
|
|
tTimestamp2:blocks(first: 1, orderBy: timestamp, orderDirection: desc, where: { timestamp_gt: $timestamp2, timestamp_lt: $timestamp2Plus600 }) {
|
|
number
|
|
}
|
|
}
|
|
```
|
|
|
|
- Checking subgraph health (https://thegraph.com/docs/deploy-a-subgraph#checking-subgraph-health)
|
|
|
|
https://github.com/Uniswap/uniswap-v3-info/blob/master/src/data/application/index.ts
|
|
```
|
|
query health {
|
|
indexingStatusForCurrentVersion(subgraphName: "uniswap/uniswap-v2") {
|
|
synced
|
|
health
|
|
chains {
|
|
chainHeadBlock {
|
|
number
|
|
}
|
|
latestBlock {
|
|
number
|
|
}
|
|
}
|
|
}
|
|
}
|
|
``` |