mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-07-28 11:02:07 +00:00
Smoke test for entities after BurnEvent (#189)
* Test for entities after BurnEvent. * Fix event value types in uni-info-watcher. Co-authored-by: prathamesh0 <prathamesh.musale0@gmail.com>
This commit is contained in:
parent
95f830178d
commit
63620f0a0a
@ -12,78 +12,78 @@ export interface PoolCreatedEvent {
|
|||||||
__typename: 'PoolCreatedEvent';
|
__typename: 'PoolCreatedEvent';
|
||||||
token0: string;
|
token0: string;
|
||||||
token1: string;
|
token1: string;
|
||||||
fee: bigint;
|
fee: string;
|
||||||
tickSpacing: bigint;
|
tickSpacing: string;
|
||||||
pool: string;
|
pool: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InitializeEvent {
|
export interface InitializeEvent {
|
||||||
__typename: 'InitializeEvent';
|
__typename: 'InitializeEvent';
|
||||||
sqrtPriceX96: bigint;
|
sqrtPriceX96: string;
|
||||||
tick: bigint;
|
tick: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MintEvent {
|
export interface MintEvent {
|
||||||
__typename: 'MintEvent';
|
__typename: 'MintEvent';
|
||||||
sender: string;
|
sender: string;
|
||||||
owner: string;
|
owner: string;
|
||||||
tickLower: bigint;
|
tickLower: string;
|
||||||
tickUpper: bigint;
|
tickUpper: string;
|
||||||
amount: bigint;
|
amount: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BurnEvent {
|
export interface BurnEvent {
|
||||||
__typename: 'BurnEvent';
|
__typename: 'BurnEvent';
|
||||||
owner: string;
|
owner: string;
|
||||||
tickLower: bigint;
|
tickLower: string;
|
||||||
tickUpper: bigint;
|
tickUpper: string;
|
||||||
amount: bigint;
|
amount: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SwapEvent {
|
export interface SwapEvent {
|
||||||
__typename: 'SwapEvent';
|
__typename: 'SwapEvent';
|
||||||
sender: string;
|
sender: string;
|
||||||
recipient: string;
|
recipient: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
sqrtPriceX96: bigint;
|
sqrtPriceX96: string;
|
||||||
liquidity: bigint;
|
liquidity: string;
|
||||||
tick: bigint;
|
tick: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IncreaseLiquidityEvent {
|
export interface IncreaseLiquidityEvent {
|
||||||
__typename: 'IncreaseLiquidityEvent';
|
__typename: 'IncreaseLiquidityEvent';
|
||||||
tokenId: bigint;
|
tokenId: string;
|
||||||
liquidity: bigint;
|
liquidity: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DecreaseLiquidityEvent {
|
export interface DecreaseLiquidityEvent {
|
||||||
__typename: 'DecreaseLiquidityEvent';
|
__typename: 'DecreaseLiquidityEvent';
|
||||||
tokenId: bigint;
|
tokenId: string;
|
||||||
liquidity: bigint;
|
liquidity: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CollectEvent {
|
export interface CollectEvent {
|
||||||
__typename: 'CollectEvent';
|
__typename: 'CollectEvent';
|
||||||
tokenId: bigint;
|
tokenId: string;
|
||||||
recipient: string;
|
recipient: string;
|
||||||
amount0: bigint;
|
amount0: string;
|
||||||
amount1: bigint;
|
amount1: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TransferEvent {
|
export interface TransferEvent {
|
||||||
__typename: 'TransferEvent';
|
__typename: 'TransferEvent';
|
||||||
from: string;
|
from: string;
|
||||||
to: string;
|
to: string;
|
||||||
tokenId: bigint;
|
tokenId: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Block {
|
export interface Block {
|
||||||
|
@ -472,8 +472,8 @@ export class Indexer {
|
|||||||
|
|
||||||
const token0 = pool.token0;
|
const token0 = pool.token0;
|
||||||
const token1 = pool.token1;
|
const token1 = pool.token1;
|
||||||
const amount0 = convertTokenToDecimal(mintEvent.amount0, BigInt(token0.decimals));
|
const amount0 = convertTokenToDecimal(BigInt(mintEvent.amount0), BigInt(token0.decimals));
|
||||||
const amount1 = convertTokenToDecimal(mintEvent.amount1, BigInt(token1.decimals));
|
const amount1 = convertTokenToDecimal(BigInt(mintEvent.amount1), BigInt(token1.decimals));
|
||||||
|
|
||||||
const amountUSD = amount0
|
const amountUSD = amount0
|
||||||
.times(token0.derivedETH.times(bundle.ethPriceUSD))
|
.times(token0.derivedETH.times(bundle.ethPriceUSD))
|
||||||
@ -533,12 +533,12 @@ export class Indexer {
|
|||||||
mint.owner = mintEvent.owner;
|
mint.owner = mintEvent.owner;
|
||||||
mint.sender = mintEvent.sender;
|
mint.sender = mintEvent.sender;
|
||||||
mint.origin = tx.from;
|
mint.origin = tx.from;
|
||||||
mint.amount = mintEvent.amount;
|
mint.amount = BigInt(mintEvent.amount);
|
||||||
mint.amount0 = amount0;
|
mint.amount0 = amount0;
|
||||||
mint.amount1 = amount1;
|
mint.amount1 = amount1;
|
||||||
mint.amountUSD = amountUSD;
|
mint.amountUSD = amountUSD;
|
||||||
mint.tickLower = mintEvent.tickLower;
|
mint.tickLower = BigInt(mintEvent.tickLower);
|
||||||
mint.tickUpper = mintEvent.tickUpper;
|
mint.tickUpper = BigInt(mintEvent.tickUpper);
|
||||||
|
|
||||||
// Tick entities.
|
// Tick entities.
|
||||||
const lowerTickIdx = mintEvent.tickLower;
|
const lowerTickIdx = mintEvent.tickLower;
|
||||||
@ -617,8 +617,8 @@ export class Indexer {
|
|||||||
|
|
||||||
const token0 = pool.token0;
|
const token0 = pool.token0;
|
||||||
const token1 = pool.token1;
|
const token1 = pool.token1;
|
||||||
const amount0 = convertTokenToDecimal(burnEvent.amount0, BigInt(token0.decimals));
|
const amount0 = convertTokenToDecimal(BigInt(burnEvent.amount0), BigInt(token0.decimals));
|
||||||
const amount1 = convertTokenToDecimal(burnEvent.amount1, BigInt(token1.decimals));
|
const amount1 = convertTokenToDecimal(BigInt(burnEvent.amount1), BigInt(token1.decimals));
|
||||||
|
|
||||||
const amountUSD = amount0
|
const amountUSD = amount0
|
||||||
.times(token0.derivedETH.times(bundle.ethPriceUSD))
|
.times(token0.derivedETH.times(bundle.ethPriceUSD))
|
||||||
@ -645,12 +645,13 @@ export class Indexer {
|
|||||||
|
|
||||||
// Pools liquidity tracks the currently active liquidity given pools current tick.
|
// Pools liquidity tracks the currently active liquidity given pools current tick.
|
||||||
// We only want to update it on burn if the position being burnt includes the current tick.
|
// We only want to update it on burn if the position being burnt includes the current tick.
|
||||||
if (
|
if (pool.tick !== null) {
|
||||||
pool.tick !== null &&
|
if (
|
||||||
burnEvent.tickLower <= pool.tick &&
|
BigInt(burnEvent.tickLower) <= BigInt(pool.tick) &&
|
||||||
burnEvent.tickUpper > pool.tick
|
BigInt(burnEvent.tickUpper) > BigInt(pool.tick)
|
||||||
) {
|
) {
|
||||||
pool.liquidity = pool.liquidity - burnEvent.amount;
|
pool.liquidity = BigInt(pool.liquidity) - BigInt(burnEvent.amount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pool.totalValueLockedToken0 = pool.totalValueLockedToken0.minus(amount0);
|
pool.totalValueLockedToken0 = pool.totalValueLockedToken0.minus(amount0);
|
||||||
@ -678,12 +679,12 @@ export class Indexer {
|
|||||||
burn.token1 = pool.token1;
|
burn.token1 = pool.token1;
|
||||||
burn.owner = burnEvent.owner;
|
burn.owner = burnEvent.owner;
|
||||||
burn.origin = tx.from;
|
burn.origin = tx.from;
|
||||||
burn.amount = burnEvent.amount;
|
burn.amount = BigInt(burnEvent.amount);
|
||||||
burn.amount0 = amount0;
|
burn.amount0 = amount0;
|
||||||
burn.amount1 = amount1;
|
burn.amount1 = amount1;
|
||||||
burn.amountUSD = amountUSD;
|
burn.amountUSD = amountUSD;
|
||||||
burn.tickLower = burnEvent.tickLower;
|
burn.tickLower = BigInt(burnEvent.tickLower);
|
||||||
burn.tickUpper = burnEvent.tickUpper;
|
burn.tickUpper = BigInt(burnEvent.tickUpper);
|
||||||
|
|
||||||
// Tick entities.
|
// Tick entities.
|
||||||
const lowerTickId = poolAddress + '#' + (burnEvent.tickLower).toString();
|
const lowerTickId = poolAddress + '#' + (burnEvent.tickLower).toString();
|
||||||
@ -757,8 +758,8 @@ export class Indexer {
|
|||||||
assert(token0 && token1, 'Pool tokens not found.');
|
assert(token0 && token1, 'Pool tokens not found.');
|
||||||
|
|
||||||
// Amounts - 0/1 are token deltas. Can be positive or negative.
|
// Amounts - 0/1 are token deltas. Can be positive or negative.
|
||||||
const amount0 = convertTokenToDecimal(swapEvent.amount0, BigInt(token0.decimals));
|
const amount0 = convertTokenToDecimal(BigInt(swapEvent.amount0), BigInt(token0.decimals));
|
||||||
const amount1 = convertTokenToDecimal(swapEvent.amount1, BigInt(token1.decimals));
|
const amount1 = convertTokenToDecimal(BigInt(swapEvent.amount1), BigInt(token1.decimals));
|
||||||
|
|
||||||
// Need absolute amounts for volume.
|
// Need absolute amounts for volume.
|
||||||
let amount0Abs = amount0;
|
let amount0Abs = amount0;
|
||||||
@ -807,9 +808,9 @@ export class Indexer {
|
|||||||
pool.txCount = BigInt(pool.txCount) + BigInt(1);
|
pool.txCount = BigInt(pool.txCount) + BigInt(1);
|
||||||
|
|
||||||
// Update the pool with the new active liquidity, price, and tick.
|
// Update the pool with the new active liquidity, price, and tick.
|
||||||
pool.liquidity = swapEvent.liquidity;
|
pool.liquidity = BigInt(swapEvent.liquidity);
|
||||||
pool.tick = BigInt(swapEvent.tick);
|
pool.tick = BigInt(swapEvent.tick);
|
||||||
pool.sqrtPrice = swapEvent.sqrtPriceX96;
|
pool.sqrtPrice = BigInt(swapEvent.sqrtPriceX96);
|
||||||
pool.totalValueLockedToken0 = pool.totalValueLockedToken0.plus(amount0);
|
pool.totalValueLockedToken0 = pool.totalValueLockedToken0.plus(amount0);
|
||||||
pool.totalValueLockedToken1 = pool.totalValueLockedToken1.plus(amount1);
|
pool.totalValueLockedToken1 = pool.totalValueLockedToken1.plus(amount1);
|
||||||
|
|
||||||
@ -871,7 +872,7 @@ export class Indexer {
|
|||||||
swap.amount1 = amount1;
|
swap.amount1 = amount1;
|
||||||
swap.amountUSD = amountTotalUSDTracked;
|
swap.amountUSD = amountTotalUSDTracked;
|
||||||
swap.tick = BigInt(swapEvent.tick);
|
swap.tick = BigInt(swapEvent.tick);
|
||||||
swap.sqrtPriceX96 = swapEvent.sqrtPriceX96;
|
swap.sqrtPriceX96 = BigInt(swapEvent.sqrtPriceX96);
|
||||||
|
|
||||||
// Skipping update pool fee growth as they are not queried.
|
// Skipping update pool fee growth as they are not queried.
|
||||||
|
|
||||||
|
@ -33,7 +33,8 @@ import {
|
|||||||
queryPoolsByTokens,
|
queryPoolsByTokens,
|
||||||
queryPoolById,
|
queryPoolById,
|
||||||
queryMints,
|
queryMints,
|
||||||
queryTicks
|
queryTicks,
|
||||||
|
queryBurns
|
||||||
} from '../test/queries';
|
} from '../test/queries';
|
||||||
import {
|
import {
|
||||||
checkUniswapDayData,
|
checkUniswapDayData,
|
||||||
@ -52,6 +53,8 @@ describe('uni-info-watcher', () => {
|
|||||||
let token0Address: string;
|
let token0Address: string;
|
||||||
let token1Address: string;
|
let token1Address: string;
|
||||||
|
|
||||||
|
let tickLower: number;
|
||||||
|
let tickUpper: number;
|
||||||
let signer: Signer;
|
let signer: Signer;
|
||||||
let recipient: string;
|
let recipient: string;
|
||||||
let config: Config;
|
let config: Config;
|
||||||
@ -126,7 +129,7 @@ describe('uni-info-watcher', () => {
|
|||||||
const eventType = 'PoolCreatedEvent';
|
const eventType = 'PoolCreatedEvent';
|
||||||
await watchEvent(uniClient, eventType);
|
await watchEvent(uniClient, eventType);
|
||||||
|
|
||||||
// Sleeping for 5 sec for the entities to be processed.
|
// Sleeping for 10 sec for the entities to be processed.
|
||||||
await wait(10000);
|
await wait(10000);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -196,8 +199,6 @@ describe('uni-info-watcher', () => {
|
|||||||
const amount = 10;
|
const amount = 10;
|
||||||
const approveAmount = BigInt(1000000000000000000000000);
|
const approveAmount = BigInt(1000000000000000000000000);
|
||||||
let poolCallee: Contract;
|
let poolCallee: Contract;
|
||||||
let tickLower: number;
|
|
||||||
let tickUpper: number;
|
|
||||||
|
|
||||||
// Initial entity values
|
// Initial entity values
|
||||||
let oldFactory: any;
|
let oldFactory: any;
|
||||||
@ -348,4 +349,157 @@ describe('uni-info-watcher', () => {
|
|||||||
checkTokenHourData(endpoint, token1.address);
|
checkTokenHourData(endpoint, token1.address);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('BurnEvent', () => {
|
||||||
|
const amount = 10;
|
||||||
|
|
||||||
|
// Initial entity values
|
||||||
|
let oldFactory: any;
|
||||||
|
let oldToken0: any;
|
||||||
|
let oldToken1: any;
|
||||||
|
let oldPool: any;
|
||||||
|
let oldLowerTick: any;
|
||||||
|
let oldUpperTick: any;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
// Get initial entity values.
|
||||||
|
let data: any;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryFactory);
|
||||||
|
oldFactory = data.factories[0];
|
||||||
|
|
||||||
|
data = await request(endpoint, queryToken, { id: token0.address });
|
||||||
|
oldToken0 = data.token;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryToken, { id: token1.address });
|
||||||
|
oldToken1 = data.token;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryPoolById, { id: pool.address });
|
||||||
|
oldPool = data.pool;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryTicks, { pool: pool.address });
|
||||||
|
expect(data.ticks).to.not.be.empty;
|
||||||
|
|
||||||
|
oldLowerTick = _.filter(data.ticks, { tickIdx: tickLower.toString() })[0];
|
||||||
|
oldUpperTick = _.filter(data.ticks, { tickIdx: tickUpper.toString() })[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should trigger BurnEvent', async () => {
|
||||||
|
// Pool burn.
|
||||||
|
pool.burn(BigInt(tickLower), BigInt(tickUpper), BigInt(amount));
|
||||||
|
|
||||||
|
// Wait for BurnEvent.
|
||||||
|
const eventType = 'BurnEvent';
|
||||||
|
await watchEvent(uniClient, eventType);
|
||||||
|
|
||||||
|
// Sleeping for 15 sec for the entities to be processed.
|
||||||
|
await wait(15000);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update Token entities', async () => {
|
||||||
|
// Check txCount.
|
||||||
|
let data: any;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryToken, { id: token0.address });
|
||||||
|
const newToken0 = data.token;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryToken, { id: token1.address });
|
||||||
|
const newToken1 = data.token;
|
||||||
|
|
||||||
|
expect(newToken0.txCount).to.be.equal((BigInt(oldToken0.txCount) + BigInt(1)).toString());
|
||||||
|
expect(newToken1.txCount).to.be.equal((BigInt(oldToken1.txCount) + BigInt(1)).toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update Factory entity', async () => {
|
||||||
|
// Check txCount.
|
||||||
|
const data = await request(endpoint, queryFactory);
|
||||||
|
const newFactory = data.factories[0];
|
||||||
|
expect(newFactory.txCount).to.be.equal((BigInt(oldFactory.txCount) + BigInt(1)).toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update Pool entity', async () => {
|
||||||
|
// Check txCount, liquidity.
|
||||||
|
let expectedLiquidity = BigInt(oldPool.liquidity);
|
||||||
|
if (oldPool.tick !== null) {
|
||||||
|
if (
|
||||||
|
BigInt(tickLower) <= BigInt(oldPool.tick) &&
|
||||||
|
BigInt(tickUpper) > BigInt(oldPool.tick)
|
||||||
|
) {
|
||||||
|
expectedLiquidity = BigInt(oldPool.liquidity) - BigInt(amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await request(endpoint, queryPoolById, { id: pool.address });
|
||||||
|
const newPool = data.pool;
|
||||||
|
|
||||||
|
expect(newPool.txCount).to.be.equal((BigInt(oldPool.txCount) + BigInt(1)).toString());
|
||||||
|
expect(BigInt(newPool.liquidity)).to.be.equal(expectedLiquidity);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create a Burn entity', async () => {
|
||||||
|
// Check id, owner, sender.
|
||||||
|
// Get the latest Burn.
|
||||||
|
let data: any;
|
||||||
|
const variables = {
|
||||||
|
first: 1,
|
||||||
|
orderBy: 'timestamp',
|
||||||
|
orderDirection: 'desc',
|
||||||
|
pool: pool.address
|
||||||
|
};
|
||||||
|
|
||||||
|
data = await request(endpoint, queryBurns, variables);
|
||||||
|
expect(data.burns).to.not.be.empty;
|
||||||
|
|
||||||
|
const id: string = data.burns[0].id;
|
||||||
|
const txCountID = id.split('#')[1];
|
||||||
|
const origin = data.burns[0].origin;
|
||||||
|
const owner = data.burns[0].owner;
|
||||||
|
|
||||||
|
data = await request(endpoint, queryPoolById, { id: pool.address });
|
||||||
|
const poolTxCount = data.pool.txCount;
|
||||||
|
const expectedOrigin = recipient;
|
||||||
|
const expectedOwner = recipient;
|
||||||
|
|
||||||
|
expect(txCountID).to.be.equal(poolTxCount);
|
||||||
|
expect(origin).to.be.equal(expectedOrigin);
|
||||||
|
expect(owner).to.be.equal(expectedOwner);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update Tick entities', async () => {
|
||||||
|
// Check liquidityGross, liquidityNet.
|
||||||
|
const data = await request(endpoint, queryTicks, { pool: pool.address });
|
||||||
|
expect(data.ticks).to.not.be.empty;
|
||||||
|
|
||||||
|
const newLowerTick: any = _.filter(data.ticks, { tickIdx: tickLower.toString() })[0];
|
||||||
|
const newUpperTick: any = _.filter(data.ticks, { tickIdx: tickUpper.toString() })[0];
|
||||||
|
|
||||||
|
const expectedLLG = BigInt(oldLowerTick.liquidityGross) - BigInt(amount);
|
||||||
|
const expectedLN = BigInt(oldLowerTick.liquidityNet) - BigInt(amount);
|
||||||
|
const expectedULG = BigInt(oldUpperTick.liquidityGross) - BigInt(amount);
|
||||||
|
const expectedUN = BigInt(oldUpperTick.liquidityNet) + BigInt(amount);
|
||||||
|
|
||||||
|
expect(newLowerTick.liquidityGross).to.be.equal(expectedLLG.toString());
|
||||||
|
expect(newLowerTick.liquidityNet).to.be.equal(expectedLN.toString());
|
||||||
|
expect(newUpperTick.liquidityGross).to.be.equal(expectedULG.toString());
|
||||||
|
expect(newUpperTick.liquidityNet).to.be.equal(expectedUN.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update UniswapDayData entity', async () => {
|
||||||
|
checkUniswapDayData(endpoint);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update PoolDayData entity', async () => {
|
||||||
|
checkPoolDayData(endpoint, pool.address);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update TokenDayData entities', async () => {
|
||||||
|
checkTokenDayData(endpoint, token0.address);
|
||||||
|
checkTokenDayData(endpoint, token1.address);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update TokenHourData entities', async () => {
|
||||||
|
checkTokenHourData(endpoint, token0.address);
|
||||||
|
checkTokenHourData(endpoint, token1.address);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -137,6 +137,34 @@ query queryMints(
|
|||||||
}
|
}
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
|
// Getting burns(s) filtered by pool, tokens and ordered by timestamp.
|
||||||
|
export const queryBurns = gql`
|
||||||
|
query queryBurns(
|
||||||
|
$first: Int,
|
||||||
|
$orderBy: Burn_orderBy,
|
||||||
|
$orderDirection: OrderDirection,
|
||||||
|
$pool: String,
|
||||||
|
$token0: String,
|
||||||
|
$token1: String) {
|
||||||
|
burns(
|
||||||
|
first: $first,
|
||||||
|
orderBy: $orderBy,
|
||||||
|
orderDirection: $orderDirection,
|
||||||
|
where: {
|
||||||
|
pool: $pool,
|
||||||
|
token0: $token0,
|
||||||
|
token1: $token1
|
||||||
|
}) {
|
||||||
|
amount0
|
||||||
|
amount1
|
||||||
|
amountUSD
|
||||||
|
id
|
||||||
|
origin
|
||||||
|
owner
|
||||||
|
timestamp
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
// Getting Tick(s) filtered by pool.
|
// Getting Tick(s) filtered by pool.
|
||||||
export const queryTicks = gql`
|
export const queryTicks = gql`
|
||||||
query queryTicksByPool($pool: String) {
|
query queryTicksByPool($pool: String) {
|
||||||
|
Loading…
Reference in New Issue
Block a user