import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers"; import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../common"; export declare namespace IPermit2 { type PackedAllowanceStruct = { amount: BigNumberish; expiration: BigNumberish; nonce: BigNumberish; }; type PackedAllowanceStructOutput = [ amount: bigint, expiration: bigint, nonce: bigint ] & { amount: bigint; expiration: bigint; nonce: bigint; }; type PermitDetailsStruct = { token: AddressLike; amount: BigNumberish; expiration: BigNumberish; nonce: BigNumberish; }; type PermitDetailsStructOutput = [ token: string, amount: bigint, expiration: bigint, nonce: bigint ] & { token: string; amount: bigint; expiration: bigint; nonce: bigint; }; type PermitSingleStruct = { details: IPermit2.PermitDetailsStruct; spender: AddressLike; sigDeadline: BigNumberish; }; type PermitSingleStructOutput = [ details: IPermit2.PermitDetailsStructOutput, spender: string, sigDeadline: bigint ] & { details: IPermit2.PermitDetailsStructOutput; spender: string; sigDeadline: bigint; }; } export interface IPermit2Interface extends Interface { getFunction(nameOrSignature: "allowance" | "approve" | "permit" | "transferFrom"): FunctionFragment; encodeFunctionData(functionFragment: "allowance", values: [AddressLike, AddressLike, AddressLike]): string; encodeFunctionData(functionFragment: "approve", values: [AddressLike, AddressLike, BigNumberish, BigNumberish]): string; encodeFunctionData(functionFragment: "permit", values: [AddressLike, IPermit2.PermitSingleStruct, BytesLike]): string; encodeFunctionData(functionFragment: "transferFrom", values: [AddressLike, AddressLike, BigNumberish, AddressLike]): string; decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; } export interface IPermit2 extends BaseContract { connect(runner?: ContractRunner | null): IPermit2; waitForDeployment(): Promise; interface: IPermit2Interface; queryFilter(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>>; queryFilter(filter: TypedDeferredTopicFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>>; on(event: TCEvent, listener: TypedListener): Promise; on(filter: TypedDeferredTopicFilter, listener: TypedListener): Promise; once(event: TCEvent, listener: TypedListener): Promise; once(filter: TypedDeferredTopicFilter, listener: TypedListener): Promise; listeners(event: TCEvent): Promise>>; listeners(eventName?: string): Promise>; removeAllListeners(event?: TCEvent): Promise; allowance: TypedContractMethod<[ user: AddressLike, token: AddressLike, spender: AddressLike ], [ IPermit2.PackedAllowanceStructOutput ], "view">; approve: TypedContractMethod<[ token: AddressLike, spender: AddressLike, amount: BigNumberish, expiration: BigNumberish ], [ void ], "nonpayable">; permit: TypedContractMethod<[ owner: AddressLike, permitSingle: IPermit2.PermitSingleStruct, signature: BytesLike ], [ void ], "nonpayable">; transferFrom: TypedContractMethod<[ user: AddressLike, spender: AddressLike, amount: BigNumberish, token: AddressLike ], [ void ], "nonpayable">; getFunction(key: string | FunctionFragment): T; getFunction(nameOrSignature: "allowance"): TypedContractMethod<[ user: AddressLike, token: AddressLike, spender: AddressLike ], [ IPermit2.PackedAllowanceStructOutput ], "view">; getFunction(nameOrSignature: "approve"): TypedContractMethod<[ token: AddressLike, spender: AddressLike, amount: BigNumberish, expiration: BigNumberish ], [ void ], "nonpayable">; getFunction(nameOrSignature: "permit"): TypedContractMethod<[ owner: AddressLike, permitSingle: IPermit2.PermitSingleStruct, signature: BytesLike ], [ void ], "nonpayable">; getFunction(nameOrSignature: "transferFrom"): TypedContractMethod<[ user: AddressLike, spender: AddressLike, amount: BigNumberish, token: AddressLike ], [ void ], "nonpayable">; filters: {}; }