import { Address } from '@btc-vision/transaction';
import { CallResult } from '../../../../contracts/CallResult.js';
import { OPNetEvent } from '../../../../contracts/OPNetEvent.js';
import { IOP_20Contract } from '../opnet/IOP_20Contract.js';
export type Reserves = {
    readonly reserve0: bigint;
    readonly reserve1: bigint;
    readonly blockTimestampLast: bigint;
};
export type PoolBurnEvent = {
    readonly sender: Address;
    readonly amount0: bigint;
    readonly amount1: bigint;
};
export type PoolMintEvent = {
    readonly sender: Address;
    readonly amount0: bigint;
    readonly amount1: bigint;
};
export type SwapEvent = {
    readonly sender: Address;
    readonly amount0In: bigint;
    readonly amount1In: bigint;
    readonly amount0Out: bigint;
    readonly amount1Out: bigint;
    readonly to: Address;
};
export interface IMotoswapPoolContract extends Omit<IOP_20Contract, 'burn' | 'mint'> {
    token0(): Promise<CallResult<{
        token0: Address;
    }>>;
    token1(): Promise<CallResult<{
        token1: Address;
    }>>;
    getReserves(): Promise<CallResult<Reserves>>;
    swap(amount0Out: bigint, amount1Out: bigint, to: string, data: Uint8Array): Promise<CallResult<{
        success: boolean;
    }, [
        OPNetEvent<SwapEvent>
    ]>>;
    skim(): Promise<CallResult<{
        success: boolean;
    }>>;
    kLast(): Promise<CallResult<{
        kLast: bigint;
    }>>;
    burn(to: Address): Promise<CallResult<{
        amount0: bigint;
        amount1: bigint;
    }, [OPNetEvent<PoolBurnEvent>]>>;
    blockTimestampLast(): Promise<CallResult<{
        blockTimestampLast: bigint;
    }>>;
    sync(): Promise<CallResult<{
        success: boolean;
    }>>;
    price0CumulativeLast(): Promise<CallResult<{
        price0CumulativeLast: bigint;
    }>>;
    price1CumulativeLast(): Promise<CallResult<{
        price1CumulativeLast: bigint;
    }>>;
    MINIMUM_LIQUIDITY(): Promise<CallResult<{
        MINIMUM_LIQUIDITY: bigint;
    }>>;
    mint(to: Address): Promise<CallResult<{
        liquidity: bigint;
    }, [OPNetEvent<PoolMintEvent>]>>;
    initialize(token0: Address, token1: Address): Promise<CallResult<{
        success: boolean;
    }>>;
}
