import { EthAddress } from '@aztec/aztec.js/addresses';
import type { EthCheatCodes } from '@aztec/aztec/testing';
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
/**
 * Mock StateView contract for testing the Uniswap price oracle.
 *
 * Wraps a compiled Solidity contract that mimics the Uniswap V4 StateView's getSlot0 function.
 * The mock allows setting return values dynamically for testing different price scenarios.
 *
 * Solidity source:
 * ```solidity
 * // SPDX-License-Identifier: Apache-2.0
 * pragma solidity >=0.8.27;
 *
 * contract MockStateView {
 *     uint160 public sqrtPriceX96;
 *     int24 public tick;
 *     uint24 public protocolFee;
 *     uint24 public lpFee;
 *
 *     function setReturnValues(
 *         uint160 _sqrtPriceX96,
 *         int24 _tick,
 *         uint24 _protocolFee,
 *         uint24 _lpFee
 *     ) external {
 *         sqrtPriceX96 = _sqrtPriceX96;
 *         tick = _tick;
 *         protocolFee = _protocolFee;
 *         lpFee = _lpFee;
 *     }
 *
 *     function getSlot0(bytes32 poolId) external view returns (uint160, int24, uint24, uint24) {
 *         return (sqrtPriceX96, tick, protocolFee, lpFee);
 *     }
 * }
 * ```
 */
export declare class MockStateView {
    private readonly address;
    private readonly walletClient;
    private readonly log;
    private static readonly BYTECODE;
    private static readonly ABI;
    private constructor();
    /**
     * Deploys the mock StateView contract at the specified address using etch.
     * @param ethCheatCodes - Cheat codes for etching bytecode
     * @param walletClient - Wallet client for sending transactions
     * @param address - Address to deploy the mock at (typically the real StateView address)
     */
    static deploy(ethCheatCodes: EthCheatCodes, walletClient: ExtendedViemWalletClient, address: EthAddress): Promise<MockStateView>;
    /**
     * Sets the price using the ethPerFeeAssetE12 format (same as rollup contract).
     * Computes the corresponding sqrtPriceX96 internally.
     *
     * Math (from fee_asset_price_oracle.ts):
     *   ethPerFeeAssetE12 = 1e12 * 2^192 / sqrtPriceX96^2
     *
     * Inverted:
     *   sqrtPriceX96^2 = 1e12 * 2^192 / ethPerFeeAssetE12
     *   sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
     *
     * @param ethPerFeeAssetE12 - The price in ETH per fee asset, scaled by 1e12
     */
    setEthPerFeeAsset(ethPerFeeAssetE12: bigint): Promise<import("viem").TransactionReceipt>;
    /**
     * Sets the sqrtPriceX96 value directly (Uniswap's price encoding).
     * @param sqrtPriceX96 - The sqrtPriceX96 value
     * @param tick - The tick value (default 10)
     * @param protocolFee - The protocol fee (default 0)
     * @param lpFee - The LP fee (default 500)
     */
    setSqrtPriceX96(sqrtPriceX96: bigint, tick?: number, protocolFee?: number, lpFee?: number): Promise<import("viem").TransactionReceipt>;
    /**
     * Converts ethPerFeeAssetE12 to sqrtPriceX96 (inverse of sqrtPriceX96ToEthPerFeeAssetE12).
     *
     * Math:
     *   sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
     */
    ethPerFeeAssetE12ToSqrtPriceX96(ethPerFeeAssetE12: bigint): bigint;
    /** Integer square root using Newton's method */
    bigintSqrt(n: bigint): bigint;
}
export declare function diffInBps(a: bigint, b: bigint): bigint;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdGF0ZV92aWV3LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL21vY2tfc3RhdGVfdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILHFCQUFhLGFBQWE7SUFxRHRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBdER0QixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ20rRTtJQUNuZ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQStDaEI7SUFFWCxPQUFPLGVBSUg7SUFFSjs7Ozs7T0FLRztJQUNILE9BQWEsTUFBTSxDQUNqQixhQUFhLEVBQUUsYUFBYSxFQUM1QixZQUFZLEVBQUUsd0JBQXdCLEVBQ3RDLE9BQU8sRUFBRSxVQUFVLEdBQ2xCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FHeEI7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDRyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLDhDQUdoRDtJQUVEOzs7Ozs7T0FNRztJQUNHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRSxNQUFXLEVBQUUsV0FBVyxHQUFFLE1BQVUsRUFBRSxLQUFLLEdBQUUsTUFBWSw4Q0FVMUc7SUFFRDs7Ozs7T0FLRztJQUNILCtCQUErQixDQUFDLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxNQUFNLENBT2pFO0lBRUQsZ0RBQWdEO0lBQ2hELFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FjNUI7Q0FDRjtBQUVELHdCQUFnQixTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FFdEQifQ==