import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../../common";
export interface IPMarketInterface extends Interface {
    getFunction(nameOrSignature: "_storage" | "allowance" | "approve" | "balanceOf" | "burn" | "decimals" | "expiry" | "getRewardTokens" | "increaseObservationsCardinalityNext" | "isExpired" | "mint" | "name" | "observations" | "observe" | "readTokens" | "redeemRewards" | "swapExactPtForSy" | "swapSyForExactPt" | "symbol" | "totalSupply" | "transfer" | "transferFrom"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "Approval" | "Burn" | "IncreaseObservationCardinalityNext" | "Mint" | "Swap" | "Transfer" | "UpdateImpliedRate"): EventFragment;
    encodeFunctionData(functionFragment: "_storage", values?: undefined): string;
    encodeFunctionData(functionFragment: "allowance", values: [AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "approve", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "balanceOf", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "burn", values: [AddressLike, AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
    encodeFunctionData(functionFragment: "expiry", values?: undefined): string;
    encodeFunctionData(functionFragment: "getRewardTokens", values?: undefined): string;
    encodeFunctionData(functionFragment: "increaseObservationsCardinalityNext", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "isExpired", values?: undefined): string;
    encodeFunctionData(functionFragment: "mint", values: [AddressLike, BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "name", values?: undefined): string;
    encodeFunctionData(functionFragment: "observations", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "observe", values: [BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "readTokens", values?: undefined): string;
    encodeFunctionData(functionFragment: "redeemRewards", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "swapExactPtForSy", values: [AddressLike, BigNumberish, BytesLike]): string;
    encodeFunctionData(functionFragment: "swapSyForExactPt", values: [AddressLike, BigNumberish, BytesLike]): string;
    encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
    encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string;
    encodeFunctionData(functionFragment: "transfer", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "transferFrom", values: [AddressLike, AddressLike, BigNumberish]): string;
    decodeFunctionResult(functionFragment: "_storage", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "expiry", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRewardTokens", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "increaseObservationsCardinalityNext", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "isExpired", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "observations", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "observe", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "readTokens", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "redeemRewards", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swapExactPtForSy", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swapSyForExactPt", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result;
}
export declare namespace ApprovalEvent {
    type InputTuple = [
        owner: AddressLike,
        spender: AddressLike,
        value: BigNumberish
    ];
    type OutputTuple = [owner: string, spender: string, value: bigint];
    interface OutputObject {
        owner: string;
        spender: string;
        value: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace BurnEvent {
    type InputTuple = [
        receiverSy: AddressLike,
        receiverPt: AddressLike,
        netLpBurned: BigNumberish,
        netSyOut: BigNumberish,
        netPtOut: BigNumberish
    ];
    type OutputTuple = [
        receiverSy: string,
        receiverPt: string,
        netLpBurned: bigint,
        netSyOut: bigint,
        netPtOut: bigint
    ];
    interface OutputObject {
        receiverSy: string;
        receiverPt: string;
        netLpBurned: bigint;
        netSyOut: bigint;
        netPtOut: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace IncreaseObservationCardinalityNextEvent {
    type InputTuple = [
        observationCardinalityNextOld: BigNumberish,
        observationCardinalityNextNew: BigNumberish
    ];
    type OutputTuple = [
        observationCardinalityNextOld: bigint,
        observationCardinalityNextNew: bigint
    ];
    interface OutputObject {
        observationCardinalityNextOld: bigint;
        observationCardinalityNextNew: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace MintEvent {
    type InputTuple = [
        receiver: AddressLike,
        netLpMinted: BigNumberish,
        netSyUsed: BigNumberish,
        netPtUsed: BigNumberish
    ];
    type OutputTuple = [
        receiver: string,
        netLpMinted: bigint,
        netSyUsed: bigint,
        netPtUsed: bigint
    ];
    interface OutputObject {
        receiver: string;
        netLpMinted: bigint;
        netSyUsed: bigint;
        netPtUsed: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SwapEvent {
    type InputTuple = [
        caller: AddressLike,
        receiver: AddressLike,
        netPtOut: BigNumberish,
        netSyOut: BigNumberish,
        netSyFee: BigNumberish,
        netSyToReserve: BigNumberish
    ];
    type OutputTuple = [
        caller: string,
        receiver: string,
        netPtOut: bigint,
        netSyOut: bigint,
        netSyFee: bigint,
        netSyToReserve: bigint
    ];
    interface OutputObject {
        caller: string;
        receiver: string;
        netPtOut: bigint;
        netSyOut: bigint;
        netSyFee: bigint;
        netSyToReserve: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace TransferEvent {
    type InputTuple = [
        from: AddressLike,
        to: AddressLike,
        value: BigNumberish
    ];
    type OutputTuple = [from: string, to: string, value: bigint];
    interface OutputObject {
        from: string;
        to: string;
        value: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace UpdateImpliedRateEvent {
    type InputTuple = [
        timestamp: BigNumberish,
        lnLastImpliedRate: BigNumberish
    ];
    type OutputTuple = [timestamp: bigint, lnLastImpliedRate: bigint];
    interface OutputObject {
        timestamp: bigint;
        lnLastImpliedRate: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface IPMarket extends BaseContract {
    connect(runner?: ContractRunner | null): IPMarket;
    waitForDeployment(): Promise<this>;
    interface: IPMarketInterface;
    queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
    listeners(eventName?: string): Promise<Array<Listener>>;
    removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
    _storage: TypedContractMethod<[
    ], [
        [
            bigint,
            bigint,
            bigint,
            bigint,
            bigint,
            bigint
        ] & {
            totalPt: bigint;
            totalSy: bigint;
            lastLnImpliedRate: bigint;
            observationIndex: bigint;
            observationCardinality: bigint;
            observationCardinalityNext: bigint;
        }
    ], "view">;
    allowance: TypedContractMethod<[
        owner: AddressLike,
        spender: AddressLike
    ], [
        bigint
    ], "view">;
    approve: TypedContractMethod<[
        spender: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    balanceOf: TypedContractMethod<[account: AddressLike], [bigint], "view">;
    burn: TypedContractMethod<[
        receiverSy: AddressLike,
        receiverPt: AddressLike,
        netLpToBurn: BigNumberish
    ], [
        [bigint, bigint] & {
            netSyOut: bigint;
            netPtOut: bigint;
        }
    ], "nonpayable">;
    decimals: TypedContractMethod<[], [bigint], "view">;
    expiry: TypedContractMethod<[], [bigint], "view">;
    getRewardTokens: TypedContractMethod<[], [string[]], "view">;
    increaseObservationsCardinalityNext: TypedContractMethod<[
        cardinalityNext: BigNumberish
    ], [
        void
    ], "nonpayable">;
    isExpired: TypedContractMethod<[], [boolean], "view">;
    mint: TypedContractMethod<[
        receiver: AddressLike,
        netSyDesired: BigNumberish,
        netPtDesired: BigNumberish
    ], [
        [
            bigint,
            bigint,
            bigint
        ] & {
            netLpOut: bigint;
            netSyUsed: bigint;
            netPtUsed: bigint;
        }
    ], "nonpayable">;
    name: TypedContractMethod<[], [string], "view">;
    observations: TypedContractMethod<[
        index: BigNumberish
    ], [
        [
            bigint,
            bigint,
            boolean
        ] & {
            blockTimestamp: bigint;
            lnImpliedRateCumulative: bigint;
            initialized: boolean;
        }
    ], "view">;
    observe: TypedContractMethod<[
        secondsAgos: BigNumberish[]
    ], [
        bigint[]
    ], "view">;
    readTokens: TypedContractMethod<[
    ], [
        [string, string, string] & {
            _SY: string;
            _PT: string;
            _YT: string;
        }
    ], "view">;
    redeemRewards: TypedContractMethod<[
        user: AddressLike
    ], [
        bigint[]
    ], "nonpayable">;
    swapExactPtForSy: TypedContractMethod<[
        receiver: AddressLike,
        exactPtIn: BigNumberish,
        data: BytesLike
    ], [
        [bigint, bigint] & {
            netSyOut: bigint;
            netSyFee: bigint;
        }
    ], "nonpayable">;
    swapSyForExactPt: TypedContractMethod<[
        receiver: AddressLike,
        exactPtOut: BigNumberish,
        data: BytesLike
    ], [
        [bigint, bigint] & {
            netSyIn: bigint;
            netSyFee: bigint;
        }
    ], "nonpayable">;
    symbol: TypedContractMethod<[], [string], "view">;
    totalSupply: TypedContractMethod<[], [bigint], "view">;
    transfer: TypedContractMethod<[
        to: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    transferFrom: TypedContractMethod<[
        from: AddressLike,
        to: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "_storage"): TypedContractMethod<[
    ], [
        [
            bigint,
            bigint,
            bigint,
            bigint,
            bigint,
            bigint
        ] & {
            totalPt: bigint;
            totalSy: bigint;
            lastLnImpliedRate: bigint;
            observationIndex: bigint;
            observationCardinality: bigint;
            observationCardinalityNext: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "allowance"): TypedContractMethod<[
        owner: AddressLike,
        spender: AddressLike
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "approve"): TypedContractMethod<[
        spender: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    getFunction(nameOrSignature: "balanceOf"): TypedContractMethod<[account: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "burn"): TypedContractMethod<[
        receiverSy: AddressLike,
        receiverPt: AddressLike,
        netLpToBurn: BigNumberish
    ], [
        [bigint, bigint] & {
            netSyOut: bigint;
            netPtOut: bigint;
        }
    ], "nonpayable">;
    getFunction(nameOrSignature: "decimals"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "expiry"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "getRewardTokens"): TypedContractMethod<[], [string[]], "view">;
    getFunction(nameOrSignature: "increaseObservationsCardinalityNext"): TypedContractMethod<[cardinalityNext: BigNumberish], [void], "nonpayable">;
    getFunction(nameOrSignature: "isExpired"): TypedContractMethod<[], [boolean], "view">;
    getFunction(nameOrSignature: "mint"): TypedContractMethod<[
        receiver: AddressLike,
        netSyDesired: BigNumberish,
        netPtDesired: BigNumberish
    ], [
        [
            bigint,
            bigint,
            bigint
        ] & {
            netLpOut: bigint;
            netSyUsed: bigint;
            netPtUsed: bigint;
        }
    ], "nonpayable">;
    getFunction(nameOrSignature: "name"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "observations"): TypedContractMethod<[
        index: BigNumberish
    ], [
        [
            bigint,
            bigint,
            boolean
        ] & {
            blockTimestamp: bigint;
            lnImpliedRateCumulative: bigint;
            initialized: boolean;
        }
    ], "view">;
    getFunction(nameOrSignature: "observe"): TypedContractMethod<[secondsAgos: BigNumberish[]], [bigint[]], "view">;
    getFunction(nameOrSignature: "readTokens"): TypedContractMethod<[
    ], [
        [string, string, string] & {
            _SY: string;
            _PT: string;
            _YT: string;
        }
    ], "view">;
    getFunction(nameOrSignature: "redeemRewards"): TypedContractMethod<[user: AddressLike], [bigint[]], "nonpayable">;
    getFunction(nameOrSignature: "swapExactPtForSy"): TypedContractMethod<[
        receiver: AddressLike,
        exactPtIn: BigNumberish,
        data: BytesLike
    ], [
        [bigint, bigint] & {
            netSyOut: bigint;
            netSyFee: bigint;
        }
    ], "nonpayable">;
    getFunction(nameOrSignature: "swapSyForExactPt"): TypedContractMethod<[
        receiver: AddressLike,
        exactPtOut: BigNumberish,
        data: BytesLike
    ], [
        [bigint, bigint] & {
            netSyIn: bigint;
            netSyFee: bigint;
        }
    ], "nonpayable">;
    getFunction(nameOrSignature: "symbol"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "totalSupply"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "transfer"): TypedContractMethod<[
        to: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    getFunction(nameOrSignature: "transferFrom"): TypedContractMethod<[
        from: AddressLike,
        to: AddressLike,
        amount: BigNumberish
    ], [
        boolean
    ], "nonpayable">;
    getEvent(key: "Approval"): TypedContractEvent<ApprovalEvent.InputTuple, ApprovalEvent.OutputTuple, ApprovalEvent.OutputObject>;
    getEvent(key: "Burn"): TypedContractEvent<BurnEvent.InputTuple, BurnEvent.OutputTuple, BurnEvent.OutputObject>;
    getEvent(key: "IncreaseObservationCardinalityNext"): TypedContractEvent<IncreaseObservationCardinalityNextEvent.InputTuple, IncreaseObservationCardinalityNextEvent.OutputTuple, IncreaseObservationCardinalityNextEvent.OutputObject>;
    getEvent(key: "Mint"): TypedContractEvent<MintEvent.InputTuple, MintEvent.OutputTuple, MintEvent.OutputObject>;
    getEvent(key: "Swap"): TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
    getEvent(key: "Transfer"): TypedContractEvent<TransferEvent.InputTuple, TransferEvent.OutputTuple, TransferEvent.OutputObject>;
    getEvent(key: "UpdateImpliedRate"): TypedContractEvent<UpdateImpliedRateEvent.InputTuple, UpdateImpliedRateEvent.OutputTuple, UpdateImpliedRateEvent.OutputObject>;
    filters: {
        "Approval(address,address,uint256)": TypedContractEvent<ApprovalEvent.InputTuple, ApprovalEvent.OutputTuple, ApprovalEvent.OutputObject>;
        Approval: TypedContractEvent<ApprovalEvent.InputTuple, ApprovalEvent.OutputTuple, ApprovalEvent.OutputObject>;
        "Burn(address,address,uint256,uint256,uint256)": TypedContractEvent<BurnEvent.InputTuple, BurnEvent.OutputTuple, BurnEvent.OutputObject>;
        Burn: TypedContractEvent<BurnEvent.InputTuple, BurnEvent.OutputTuple, BurnEvent.OutputObject>;
        "IncreaseObservationCardinalityNext(uint16,uint16)": TypedContractEvent<IncreaseObservationCardinalityNextEvent.InputTuple, IncreaseObservationCardinalityNextEvent.OutputTuple, IncreaseObservationCardinalityNextEvent.OutputObject>;
        IncreaseObservationCardinalityNext: TypedContractEvent<IncreaseObservationCardinalityNextEvent.InputTuple, IncreaseObservationCardinalityNextEvent.OutputTuple, IncreaseObservationCardinalityNextEvent.OutputObject>;
        "Mint(address,uint256,uint256,uint256)": TypedContractEvent<MintEvent.InputTuple, MintEvent.OutputTuple, MintEvent.OutputObject>;
        Mint: TypedContractEvent<MintEvent.InputTuple, MintEvent.OutputTuple, MintEvent.OutputObject>;
        "Swap(address,address,int256,int256,uint256,uint256)": TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
        Swap: TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
        "Transfer(address,address,uint256)": TypedContractEvent<TransferEvent.InputTuple, TransferEvent.OutputTuple, TransferEvent.OutputObject>;
        Transfer: TypedContractEvent<TransferEvent.InputTuple, TransferEvent.OutputTuple, TransferEvent.OutputObject>;
        "UpdateImpliedRate(uint256,uint256)": TypedContractEvent<UpdateImpliedRateEvent.InputTuple, UpdateImpliedRateEvent.OutputTuple, UpdateImpliedRateEvent.OutputObject>;
        UpdateImpliedRate: TypedContractEvent<UpdateImpliedRateEvent.InputTuple, UpdateImpliedRateEvent.OutputTuple, UpdateImpliedRateEvent.OutputObject>;
    };
}
