Query Pool Info

In this simple example, we query the basic information of a pool with given pool tokens and type.

// Solidity
function _getPoolReserves(
    address factory,
    address tokenA,
    address tokenB
) private view returns (
    address pool,
    uint reserveA,
    uint reserveB,
    uint16 poolType
) {
    pool = IFactory(factory).getPool(tokenA, tokenB);

    if (pool.isContract()) { // return empty values if pool not exists
        (uint reserve0, uint reserve1) = IBasePool(pool).getReserves();
        (reserveA, reserveB) = tokenA < tokenB ? (reserve0, reserve1) : (reserve1, reserve0);
        poolType = IBasePool(pool).poolType();
    }
}

function _getRoutePool(
    address factory,
    address tokenA,
    address tokenB
) private view returns (
    RoutePool memory data
) {
    (address contractAddress, uint reserveA, uint reserveB, uint16 poolType) = _getPoolReserves(
        factory, tokenA, tokenB
    );

    if (reserveA != 0) {
        data = Pool({
            pool: contractAddress,
            tokenA: tokenA,
            tokenB: tokenB,
            poolType: poolType,
            reserveA: reserveA,
            reserveB: reserveB,
            swapFee: IFactory(factory).getSwapFee(contractAddress)
        });
    }
}

Last updated