Reading pools and positions
Pool address from token + fee tier
import { Pool, FeeAmount } from '@kumbaya_xyz/v3-sdk'
import { Token, ChainId } from '@kumbaya_xyz/sdk-core'
const A = new Token(ChainId.MEGAETH, '0x...', 18, 'A')
const B = new Token(ChainId.MEGAETH, '0x...', 6, 'B')
const poolAddress = Pool.getAddress(A, B, FeeAmount.MEDIUM) // 0.3%Reading current state via RPC
import { createPublicClient, http, parseAbi } from 'viem'
const RPC = 'https://mainnet.megaeth.com/rpc'
const client = createPublicClient({ transport: http(RPC) })
const poolAbi = parseAbi([
'function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)',
'function liquidity() view returns (uint128)',
'function token0() view returns (address)',
'function token1() view returns (address)',
'function fee() view returns (uint24)',
'function tickSpacing() view returns (int24)',
])
const [slot0, liquidity, token0, token1, fee] = await Promise.all([
client.readContract({ address: poolAddress, abi: poolAbi, functionName: 'slot0' }),
client.readContract({ address: poolAddress, abi: poolAbi, functionName: 'liquidity' }),
client.readContract({ address: poolAddress, abi: poolAbi, functionName: 'token0' }),
client.readContract({ address: poolAddress, abi: poolAbi, functionName: 'token1' }),
client.readContract({ address: poolAddress, abi: poolAbi, functionName: 'fee' }),
])
const [sqrtPriceX96, tick] = slot0
console.log({ tick, sqrtPriceX96, liquidity })Tick liquidity via TickLens
Reading positions
Querying historical state via the indexer
Curated reads via the Exchange API
Picking the right path
Task
Best path
Last updated