import type { BaseContract, BigNumber, BigNumberish, Signer, utils } from "ethers";
import type { EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "../../common";
export interface IUnirepInterface extends utils.Interface {
    functions: {};
    events: {
        "Attestation(uint48,uint256,uint160,uint256,uint256)": EventFragment;
        "AttesterSignedUp(uint160,uint48,uint48)": EventFragment;
        "EpochEnded(uint48,uint160)": EventFragment;
        "EpochTreeLeaf(uint48,uint160,uint256,uint256)": EventFragment;
        "HistoryTreeLeaf(uint160,uint256)": EventFragment;
        "StateTreeLeaf(uint48,uint160,uint256,uint256)": EventFragment;
        "UserSignedUp(uint48,uint256,uint160,uint256)": EventFragment;
        "UserStateTransitioned(uint48,uint160,uint256,uint256,uint256)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "Attestation"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "AttesterSignedUp"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "EpochEnded"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "EpochTreeLeaf"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "HistoryTreeLeaf"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "StateTreeLeaf"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "UserSignedUp"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "UserStateTransitioned"): EventFragment;
}
export interface AttestationEventObject {
    epoch: number;
    epochKey: BigNumber;
    attesterId: BigNumber;
    fieldIndex: BigNumber;
    change: BigNumber;
}
export type AttestationEvent = TypedEvent<[
    number,
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber
], AttestationEventObject>;
export type AttestationEventFilter = TypedEventFilter<AttestationEvent>;
export interface AttesterSignedUpEventObject {
    attesterId: BigNumber;
    epochLength: number;
    timestamp: number;
}
export type AttesterSignedUpEvent = TypedEvent<[
    BigNumber,
    number,
    number
], AttesterSignedUpEventObject>;
export type AttesterSignedUpEventFilter = TypedEventFilter<AttesterSignedUpEvent>;
export interface EpochEndedEventObject {
    epoch: number;
    attesterId: BigNumber;
}
export type EpochEndedEvent = TypedEvent<[
    number,
    BigNumber
], EpochEndedEventObject>;
export type EpochEndedEventFilter = TypedEventFilter<EpochEndedEvent>;
export interface EpochTreeLeafEventObject {
    epoch: number;
    attesterId: BigNumber;
    index: BigNumber;
    leaf: BigNumber;
}
export type EpochTreeLeafEvent = TypedEvent<[
    number,
    BigNumber,
    BigNumber,
    BigNumber
], EpochTreeLeafEventObject>;
export type EpochTreeLeafEventFilter = TypedEventFilter<EpochTreeLeafEvent>;
export interface HistoryTreeLeafEventObject {
    attesterId: BigNumber;
    leaf: BigNumber;
}
export type HistoryTreeLeafEvent = TypedEvent<[
    BigNumber,
    BigNumber
], HistoryTreeLeafEventObject>;
export type HistoryTreeLeafEventFilter = TypedEventFilter<HistoryTreeLeafEvent>;
export interface StateTreeLeafEventObject {
    epoch: number;
    attesterId: BigNumber;
    index: BigNumber;
    leaf: BigNumber;
}
export type StateTreeLeafEvent = TypedEvent<[
    number,
    BigNumber,
    BigNumber,
    BigNumber
], StateTreeLeafEventObject>;
export type StateTreeLeafEventFilter = TypedEventFilter<StateTreeLeafEvent>;
export interface UserSignedUpEventObject {
    epoch: number;
    identityCommitment: BigNumber;
    attesterId: BigNumber;
    leafIndex: BigNumber;
}
export type UserSignedUpEvent = TypedEvent<[
    number,
    BigNumber,
    BigNumber,
    BigNumber
], UserSignedUpEventObject>;
export type UserSignedUpEventFilter = TypedEventFilter<UserSignedUpEvent>;
export interface UserStateTransitionedEventObject {
    epoch: number;
    attesterId: BigNumber;
    leafIndex: BigNumber;
    hashedLeaf: BigNumber;
    nullifier: BigNumber;
}
export type UserStateTransitionedEvent = TypedEvent<[
    number,
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber
], UserStateTransitionedEventObject>;
export type UserStateTransitionedEventFilter = TypedEventFilter<UserStateTransitionedEvent>;
export interface IUnirep extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: IUnirepInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {};
    callStatic: {};
    filters: {
        "Attestation(uint48,uint256,uint160,uint256,uint256)"(epoch?: BigNumberish | null, epochKey?: BigNumberish | null, attesterId?: BigNumberish | null, fieldIndex?: null, change?: null): AttestationEventFilter;
        Attestation(epoch?: BigNumberish | null, epochKey?: BigNumberish | null, attesterId?: BigNumberish | null, fieldIndex?: null, change?: null): AttestationEventFilter;
        "AttesterSignedUp(uint160,uint48,uint48)"(attesterId?: BigNumberish | null, epochLength?: null, timestamp?: null): AttesterSignedUpEventFilter;
        AttesterSignedUp(attesterId?: BigNumberish | null, epochLength?: null, timestamp?: null): AttesterSignedUpEventFilter;
        "EpochEnded(uint48,uint160)"(epoch?: BigNumberish | null, attesterId?: BigNumberish | null): EpochEndedEventFilter;
        EpochEnded(epoch?: BigNumberish | null, attesterId?: BigNumberish | null): EpochEndedEventFilter;
        "EpochTreeLeaf(uint48,uint160,uint256,uint256)"(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, index?: BigNumberish | null, leaf?: null): EpochTreeLeafEventFilter;
        EpochTreeLeaf(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, index?: BigNumberish | null, leaf?: null): EpochTreeLeafEventFilter;
        "HistoryTreeLeaf(uint160,uint256)"(attesterId?: BigNumberish | null, leaf?: null): HistoryTreeLeafEventFilter;
        HistoryTreeLeaf(attesterId?: BigNumberish | null, leaf?: null): HistoryTreeLeafEventFilter;
        "StateTreeLeaf(uint48,uint160,uint256,uint256)"(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, index?: BigNumberish | null, leaf?: null): StateTreeLeafEventFilter;
        StateTreeLeaf(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, index?: BigNumberish | null, leaf?: null): StateTreeLeafEventFilter;
        "UserSignedUp(uint48,uint256,uint160,uint256)"(epoch?: BigNumberish | null, identityCommitment?: BigNumberish | null, attesterId?: BigNumberish | null, leafIndex?: null): UserSignedUpEventFilter;
        UserSignedUp(epoch?: BigNumberish | null, identityCommitment?: BigNumberish | null, attesterId?: BigNumberish | null, leafIndex?: null): UserSignedUpEventFilter;
        "UserStateTransitioned(uint48,uint160,uint256,uint256,uint256)"(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, leafIndex?: BigNumberish | null, hashedLeaf?: null, nullifier?: null): UserStateTransitionedEventFilter;
        UserStateTransitioned(epoch?: BigNumberish | null, attesterId?: BigNumberish | null, leafIndex?: BigNumberish | null, hashedLeaf?: null, nullifier?: null): UserStateTransitionedEventFilter;
    };
    estimateGas: {};
    populateTransaction: {};
}
