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 type ZContextStruct = {
    origin: BytesLike;
    sender: AddressLike;
    chainID: BigNumberish;
};
export type ZContextStructOutput = [
    origin: string,
    sender: string,
    chainID: bigint
] & {
    origin: string;
    sender: string;
    chainID: bigint;
};
export interface SystemContractInterface extends Interface {
    getFunction(nameOrSignature: "FUNGIBLE_MODULE_ADDRESS" | "depositAndCall" | "gasCoinZRC20ByChainId" | "gasPriceByChainId" | "gasZetaPoolByChainId" | "setConnectorZEVMAddress" | "setGasCoinZRC20" | "setGasPrice" | "setGasZetaPool" | "setWZETAContractAddress" | "uniswapv2FactoryAddress" | "uniswapv2PairFor" | "uniswapv2Router02Address" | "wZetaContractAddress" | "zetaConnectorZEVMAddress"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "SetConnectorZEVM" | "SetGasCoin" | "SetGasPrice" | "SetGasZetaPool" | "SetWZeta" | "SystemContractDeployed"): EventFragment;
    encodeFunctionData(functionFragment: "FUNGIBLE_MODULE_ADDRESS", values?: undefined): string;
    encodeFunctionData(functionFragment: "depositAndCall", values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike]): string;
    encodeFunctionData(functionFragment: "gasCoinZRC20ByChainId", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "gasPriceByChainId", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "gasZetaPoolByChainId", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "setConnectorZEVMAddress", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "setGasCoinZRC20", values: [BigNumberish, AddressLike]): string;
    encodeFunctionData(functionFragment: "setGasPrice", values: [BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "setGasZetaPool", values: [BigNumberish, AddressLike]): string;
    encodeFunctionData(functionFragment: "setWZETAContractAddress", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "uniswapv2FactoryAddress", values?: undefined): string;
    encodeFunctionData(functionFragment: "uniswapv2PairFor", values: [AddressLike, AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "uniswapv2Router02Address", values?: undefined): string;
    encodeFunctionData(functionFragment: "wZetaContractAddress", values?: undefined): string;
    encodeFunctionData(functionFragment: "zetaConnectorZEVMAddress", values?: undefined): string;
    decodeFunctionResult(functionFragment: "FUNGIBLE_MODULE_ADDRESS", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "depositAndCall", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "gasCoinZRC20ByChainId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "gasPriceByChainId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "gasZetaPoolByChainId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setConnectorZEVMAddress", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setGasCoinZRC20", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setGasPrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setGasZetaPool", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setWZETAContractAddress", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "uniswapv2FactoryAddress", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "uniswapv2PairFor", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "uniswapv2Router02Address", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "wZetaContractAddress", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "zetaConnectorZEVMAddress", data: BytesLike): Result;
}
export declare namespace SetConnectorZEVMEvent {
    type InputTuple = [arg0: AddressLike];
    type OutputTuple = [arg0: string];
    interface OutputObject {
        arg0: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SetGasCoinEvent {
    type InputTuple = [arg0: BigNumberish, arg1: AddressLike];
    type OutputTuple = [arg0: bigint, arg1: string];
    interface OutputObject {
        arg0: bigint;
        arg1: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SetGasPriceEvent {
    type InputTuple = [arg0: BigNumberish, arg1: BigNumberish];
    type OutputTuple = [arg0: bigint, arg1: bigint];
    interface OutputObject {
        arg0: bigint;
        arg1: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SetGasZetaPoolEvent {
    type InputTuple = [arg0: BigNumberish, arg1: AddressLike];
    type OutputTuple = [arg0: bigint, arg1: string];
    interface OutputObject {
        arg0: bigint;
        arg1: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SetWZetaEvent {
    type InputTuple = [arg0: AddressLike];
    type OutputTuple = [arg0: string];
    interface OutputObject {
        arg0: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SystemContractDeployedEvent {
    type InputTuple = [];
    type OutputTuple = [];
    interface OutputObject {
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface SystemContract extends BaseContract {
    connect(runner?: ContractRunner | null): SystemContract;
    waitForDeployment(): Promise<this>;
    interface: SystemContractInterface;
    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>;
    FUNGIBLE_MODULE_ADDRESS: TypedContractMethod<[], [string], "view">;
    depositAndCall: TypedContractMethod<[
        context: ZContextStruct,
        zrc20: AddressLike,
        amount: BigNumberish,
        target: AddressLike,
        message: BytesLike
    ], [
        void
    ], "nonpayable">;
    gasCoinZRC20ByChainId: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        string
    ], "view">;
    gasPriceByChainId: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        bigint
    ], "view">;
    gasZetaPoolByChainId: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        string
    ], "view">;
    setConnectorZEVMAddress: TypedContractMethod<[
        addr: AddressLike
    ], [
        void
    ], "nonpayable">;
    setGasCoinZRC20: TypedContractMethod<[
        chainID: BigNumberish,
        zrc20: AddressLike
    ], [
        void
    ], "nonpayable">;
    setGasPrice: TypedContractMethod<[
        chainID: BigNumberish,
        price: BigNumberish
    ], [
        void
    ], "nonpayable">;
    setGasZetaPool: TypedContractMethod<[
        chainID: BigNumberish,
        erc20: AddressLike
    ], [
        void
    ], "nonpayable">;
    setWZETAContractAddress: TypedContractMethod<[
        addr: AddressLike
    ], [
        void
    ], "nonpayable">;
    uniswapv2FactoryAddress: TypedContractMethod<[], [string], "view">;
    uniswapv2PairFor: TypedContractMethod<[
        factory: AddressLike,
        tokenA: AddressLike,
        tokenB: AddressLike
    ], [
        string
    ], "view">;
    uniswapv2Router02Address: TypedContractMethod<[], [string], "view">;
    wZetaContractAddress: TypedContractMethod<[], [string], "view">;
    zetaConnectorZEVMAddress: TypedContractMethod<[], [string], "view">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "FUNGIBLE_MODULE_ADDRESS"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "depositAndCall"): TypedContractMethod<[
        context: ZContextStruct,
        zrc20: AddressLike,
        amount: BigNumberish,
        target: AddressLike,
        message: BytesLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "gasCoinZRC20ByChainId"): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
    getFunction(nameOrSignature: "gasPriceByChainId"): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "gasZetaPoolByChainId"): TypedContractMethod<[arg0: BigNumberish], [string], "view">;
    getFunction(nameOrSignature: "setConnectorZEVMAddress"): TypedContractMethod<[addr: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "setGasCoinZRC20"): TypedContractMethod<[
        chainID: BigNumberish,
        zrc20: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "setGasPrice"): TypedContractMethod<[
        chainID: BigNumberish,
        price: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "setGasZetaPool"): TypedContractMethod<[
        chainID: BigNumberish,
        erc20: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "setWZETAContractAddress"): TypedContractMethod<[addr: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "uniswapv2FactoryAddress"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "uniswapv2PairFor"): TypedContractMethod<[
        factory: AddressLike,
        tokenA: AddressLike,
        tokenB: AddressLike
    ], [
        string
    ], "view">;
    getFunction(nameOrSignature: "uniswapv2Router02Address"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "wZetaContractAddress"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "zetaConnectorZEVMAddress"): TypedContractMethod<[], [string], "view">;
    getEvent(key: "SetConnectorZEVM"): TypedContractEvent<SetConnectorZEVMEvent.InputTuple, SetConnectorZEVMEvent.OutputTuple, SetConnectorZEVMEvent.OutputObject>;
    getEvent(key: "SetGasCoin"): TypedContractEvent<SetGasCoinEvent.InputTuple, SetGasCoinEvent.OutputTuple, SetGasCoinEvent.OutputObject>;
    getEvent(key: "SetGasPrice"): TypedContractEvent<SetGasPriceEvent.InputTuple, SetGasPriceEvent.OutputTuple, SetGasPriceEvent.OutputObject>;
    getEvent(key: "SetGasZetaPool"): TypedContractEvent<SetGasZetaPoolEvent.InputTuple, SetGasZetaPoolEvent.OutputTuple, SetGasZetaPoolEvent.OutputObject>;
    getEvent(key: "SetWZeta"): TypedContractEvent<SetWZetaEvent.InputTuple, SetWZetaEvent.OutputTuple, SetWZetaEvent.OutputObject>;
    getEvent(key: "SystemContractDeployed"): TypedContractEvent<SystemContractDeployedEvent.InputTuple, SystemContractDeployedEvent.OutputTuple, SystemContractDeployedEvent.OutputObject>;
    filters: {
        "SetConnectorZEVM(address)": TypedContractEvent<SetConnectorZEVMEvent.InputTuple, SetConnectorZEVMEvent.OutputTuple, SetConnectorZEVMEvent.OutputObject>;
        SetConnectorZEVM: TypedContractEvent<SetConnectorZEVMEvent.InputTuple, SetConnectorZEVMEvent.OutputTuple, SetConnectorZEVMEvent.OutputObject>;
        "SetGasCoin(uint256,address)": TypedContractEvent<SetGasCoinEvent.InputTuple, SetGasCoinEvent.OutputTuple, SetGasCoinEvent.OutputObject>;
        SetGasCoin: TypedContractEvent<SetGasCoinEvent.InputTuple, SetGasCoinEvent.OutputTuple, SetGasCoinEvent.OutputObject>;
        "SetGasPrice(uint256,uint256)": TypedContractEvent<SetGasPriceEvent.InputTuple, SetGasPriceEvent.OutputTuple, SetGasPriceEvent.OutputObject>;
        SetGasPrice: TypedContractEvent<SetGasPriceEvent.InputTuple, SetGasPriceEvent.OutputTuple, SetGasPriceEvent.OutputObject>;
        "SetGasZetaPool(uint256,address)": TypedContractEvent<SetGasZetaPoolEvent.InputTuple, SetGasZetaPoolEvent.OutputTuple, SetGasZetaPoolEvent.OutputObject>;
        SetGasZetaPool: TypedContractEvent<SetGasZetaPoolEvent.InputTuple, SetGasZetaPoolEvent.OutputTuple, SetGasZetaPoolEvent.OutputObject>;
        "SetWZeta(address)": TypedContractEvent<SetWZetaEvent.InputTuple, SetWZetaEvent.OutputTuple, SetWZetaEvent.OutputObject>;
        SetWZeta: TypedContractEvent<SetWZetaEvent.InputTuple, SetWZetaEvent.OutputTuple, SetWZetaEvent.OutputObject>;
        "SystemContractDeployed()": TypedContractEvent<SystemContractDeployedEvent.InputTuple, SystemContractDeployedEvent.OutputTuple, SystemContractDeployedEvent.OutputObject>;
        SystemContractDeployed: TypedContractEvent<SystemContractDeployedEvent.InputTuple, SystemContractDeployedEvent.OutputTuple, SystemContractDeployedEvent.OutputObject>;
    };
}
