import * as viem_experimental from 'viem/experimental';
import * as viem from 'viem';
import { Address, Hex, Hash, StateOverride, CallParameters, PublicClient, PrivateKeyAccount } from 'viem';
import { PythConfig, AccountConfig, RpcConfig, SdkConfigParams } from './interface/classConfigs.mjs';
import './utils/common.mjs';
import { CoreRepository } from './interface/Core/index.mjs';
import { TransactionData, WriteContractParams, WriteErc7412, OverrideParamsWrite, OverrideParamsRead, WriteReturnType, MarketIdOrName } from './interface/commonTypes.mjs';
import { ABI } from './contracts/v3-contracts/8453/index.mjs';
import { AxiosInstance } from 'axios';
import { EvmPriceServiceConnection, PriceFeed } from '@pythnetwork/pyth-evm-js';
import { MarketData, SpotMarketData, MarketMetadata, MarketSummary, SettlementStrategy, FundingParameters, OrderFees, MaxMarketValue, OrderData, CollateralData, OpenPositionData, OrderQuote, PayDebtAndWithdraw } from './perps/interface.mjs';
import { Call3Value } from './interface/contractTypes.mjs';
import { ModifyCollateral, GetPerpsQuote, CommitOrder, PayDebt, CreateAccountDepositAndCreateOrder, CreateAccountAndDeposit, CreateAccountAndDepositMany, CreateIsolateOrder, GrantPermission, GetPermissions, AccountPermissions } from './interface/Perps/index.mjs';
import { PerpsRepository } from './interface/Perps/repositories.mjs';
import { SpotOrder, SpotSettlementStrategy } from './spot/interface.mjs';
import { GetOrder, GetSettlementStrategy, GetSettlementStrategies, AtomicOrder, Wrap, CommitOrderSpot, SettleOrder, Approve } from './interface/Spot/index.mjs';
import { Logger, ILogObj } from 'tslog';

/**
 * Utility class
 *
 */
declare class Utils {
    sdk: SynthetixSdk;
    constructor(synthetixSdk: SynthetixSdk);
    isOracleCall(data: TransactionData | Address): Promise<boolean>;
    /**
     * Returns the Pyth price ids array
     * @param oracleQueryData
     * @returns Pyth Price IDs array
     */
    getPythPriceIdsFromOracleQuery(oracleQueryData: Hex): Hex[];
    /**
     * Decodes the response from a Smart contract function call
     * @param abi Contract ABI
     * @param functionName Function name to decode
     * @param result Response from function call that needs to be decoded
     * @returns Decoded result
     */
    decodeResponse(abi: unknown, functionName: string, result: Hex): unknown;
    /**
     * Determines the type of Error emitted by ERC7412 contract and prepares signed update data
     * @param data Error data emitted from ERC7412 contract
     * @returns Encoded data for oracle price update transaction
     */
    fetchOracleUpdateData(data: Hex): Promise<Hex>;
    handleOracleDataRequiredError(parsedError: Hash): Promise<Call3Value>;
    /**
     * Handles ERC7412 error by creating a price update tx which is prepended to the existing calls
     * @param error Error thrown by the call function
     * @param calls Multicall call data
     * @returns call array with ERC7412 fulfillOracleQuery transaction
     */
    handleErc7412Error(parsedError: Hash): Promise<Call3Value[]>;
    /**
     * Generates Call3Value tx for Price update data of Oracle
     * @param oracleContract Oracle Contract address
     * @param signedRequiredData Encoded Price Update data
     * @returns Transaction Request for Oracle price update
     */
    generateDataVerificationTx(_oracleContract: Hex, signedRequiredData: string): Call3Value;
    /**
     * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires
     * a price update, ERC7412 price update tx is prepended to the tx.
     * @param contractAddress Target contract address for the call
     * @param abi Contract ABI
     * @param functionName Function to be called on the contract
     * @param args Arguments list for the function call
     * @param calls Array of Call3Value calls for Multicall contract
     * @returns Response from the contract function call
     */
    callErc7412({ contractAddress, abi, args, functionName, calls }: WriteContractParams): Promise<unknown>;
    /**
     * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires
     * a price update, ERC7412 price update tx is prepended to the tx.
     * @param contractAddress Target contract address for the call
     * @param abi Contract ABI
     * @param functionName Function to be called on the contract
     * @param argsList Array of arguments list for the function call
     * @param calls Array of Call3Value calls for Multicall contract
     * @returns Array of responses from the contract function call for the multicalls
     */
    multicallErc7412({ contractAddress, abi, functionName, args: argsList, calls, }: WriteContractParams): Promise<unknown[]>;
    protected isWriteContractParams(data: WriteErc7412): data is WriteContractParams;
    /**
     * Simulates the `functionName` on `contractAddress` target using the Multicall contract and returns the
     * final transaction call with ERC7412 price update data if required
     * @param contractAddress Target contract address for the call
     * @param abi Contract ABI
     * @param functionName Function to be called on the contract
     * @param args Arguments list for the function call
     * @param calls Array of Call3Value calls for Multicall contract
     * @param override Override parameters for the transaction
     * @returns Final transaction call with ERC7412 price update data if required
     */
    writeErc7412(data: WriteErc7412, override?: OverrideParamsWrite): Promise<TransactionData>;
    /**
     * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires
     * a price update, ERC7412 price update tx is prepended to the tx.
     * @param contractAddress Target contract address for the call
     * @param abi Contract ABI
     * @param functionNames Function to be called on the contract
     * @param argsList Array of arguments list for the function call
     * @param calls Array of Call3Value calls for Multicall contract
     * @returns Array of responses from the contract function call for the multicalls
     */
    multicallMultifunctionErc7412({ contractAddress, abi, functionNames, args: argsList, calls, }: Omit<WriteContractParams, 'functionName'> & {
        functionNames: string[];
    }, override?: OverrideParamsRead): Promise<unknown[]>;
    getMissingOracleCalls(calls: Call3Value[], oracleCalls?: Call3Value[], { attemps, account, stateOverride, }?: {
        account?: Address;
        attemps?: number;
        stateOverride?: StateOverride;
    }): Promise<Call3Value[]>;
    _fromCall3ToTransactionData(call: Call3Value): TransactionData;
    _fromTransactionDataToCall3(data: TransactionData, requireSuccess?: boolean): Call3Value;
    _fromCallDataToTransactionData(calls: CallParameters): TransactionData;
    _fromTransactionDataToCallData(data: TransactionData): CallParameters;
    processTransactions(data: Call3Value[], override: OverrideParamsWrite): Promise<WriteReturnType>;
    shouldRetryLogic(error: unknown, attemps?: number): boolean;
    isErc7412Error(parsedError: Hash): boolean;
}

/**
 * Class for interacting with Synthetix V3 core contracts
 * @remarks
 *
 */
declare class Core implements CoreRepository {
    sdk: SynthetixSdk;
    defaultAccountId?: bigint;
    accountIds: bigint[];
    constructor(synthetixSdk: SynthetixSdk);
    initCore(): Promise<void>;
    /**
     * Returns the Owner wallet address for an account ID
     * @param accountId - Account ID
     * @returns string - Address of the account owning the accountId
     */
    getAccountOwner(accountId: bigint): Promise<Hex>;
    /**
     * Get the address of the USD stablecoin token
     *
     * @returns Address of the USD stablecoin token
     */
    getUsdToken(): Promise<Hex>;
    /**
     *  Get the core account IDs owned by an address.
     *  Fetches the account IDs for the given address by checking the balance of
     *  the AccountProxy contract, which is an NFT owned by the address.
     *  If no address is provided, uses the connected wallet address.
     * @param address The address to get accounts for. Uses connected address if not provided.
     * @param defaultAccountId The default account ID to set after fetching.
     * @returns A list of account IDs owned by the address
     */
    getAccountIds({ address: accountAddress, accountId: defaultAccountId, }?: {
        address?: string;
        accountId?: bigint;
    }): Promise<bigint[]>;
    /**
     * Get the available collateral for an account for a specified collateral type
     * of ``token_address``
     * Fetches the amount of undelegated collateral available for withdrawal
     * for a given token and account.
     * @param tokenAddress The address of the collateral token
     * @param accountId The ID of the account to check. Uses default if not provided.
     * @returns The available collateral as an ether value.
     */
    getAvailableCollateral({ tokenAddress, accountId, }: {
        tokenAddress: Address;
        accountId?: bigint;
    }): Promise<string>;
    /**
     * Retrieves the unique system preferred pool
     * @returns poolId The id of the pool that is currently set as preferred in the system.
     */
    getPreferredPool(): Promise<bigint>;
    createAccount(accountId?: bigint, override?: Omit<OverrideParamsWrite, 'useOracleCalls'>): Promise<WriteReturnType>;
    deposit({ tokenAddress, amount, decimals, accountId, }: {
        tokenAddress: string;
        amount: number;
        decimals: number;
        accountId?: bigint;
    }, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    withdraw({ tokenAddress, amount, decimals, accountId, }: {
        tokenAddress: string;
        amount: number;
        decimals: number;
        accountId?: bigint;
    }, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    delegateCollateral({ tokenAddress, amount, poolId, leverage, accountId, }: {
        tokenAddress: string;
        amount: number;
        poolId: bigint;
        leverage: number;
        accountId?: bigint;
    }, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    mintUsd({ tokenAddress, amount, poolId, accountId, }: {
        tokenAddress: Address;
        amount: number;
        poolId: bigint;
        accountId?: bigint;
    }, override?: OverrideParamsWrite): Promise<WriteReturnType>;
}

declare class Contracts {
    sdk: SynthetixSdk;
    constructor(synthetixSdk: SynthetixSdk);
    /**
     * The function returns an instance of the Core Proxy smart contract
     * @returns Contract - Instance of Core Proxy smart contract
     */
    getMulticallInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the Core Proxy smart contract
     * @returns Contract - Instance of Core Proxy smart contract
     */
    getCoreProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the Account Proxy smart contract
     * @returns Contract - Instance of Account Proxy smart contract
     */
    getAccountProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the PerpsMarketProxy smart contract
     * @returns Contract - Instance of PerpsMarketProxy smart contract
     */
    getPerpsMarketProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the PerpsAccount Proxy smart contract
     * @returns Contract - Instance of PerpsAccount Proxy smart contract
     */
    getPerpsAccountProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the PythERC7412Wrapper smart contract
     * @returns Contract - Instance of PythERC7412Wrapper smart contract
     */
    getPythErc7412WrapperInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the SpotMarket Proxy smart contract
     * @returns Contract - Instance of SpotMarket Proxy smart contract
     */
    getSpotMarketProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    /**
     * The function returns an instance of the USD Proxy smart contract
     * @returns Contract - Instance of USD Proxy smart contract
     */
    getUSDProxyInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    getZapInstance(): Promise<{
        read: {
            [x: string]: (...parameters: [options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined] | [args: readonly unknown[], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<ABI, string, readonly unknown[]>, "address" | "functionName" | "args" | "abi">> | undefined]) => Promise<viem.ReadContractReturnType>;
        };
        estimateGas: {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            [x: string]: (...parameters: [options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>] | [args: readonly unknown[], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<ABI, string, readonly unknown[], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>]) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            [x: string]: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(...parameters: [options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined] | [args: readonly unknown[], options?: Omit<viem.SimulateContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined]) => Promise<viem.SimulateContractReturnType>;
        };
        createEventFilter: {
            [x: string]: <strict extends boolean | undefined = undefined>(...parameters: [options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                strict?: undefined;
                toBlock?: undefined;
                args?: undefined;
            }, options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined]) => Promise<viem.CreateContractEventFilterReturnType>;
        };
        getEvents: {
            [x: string]: (...parameters: [options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined] | [args?: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined]) => Promise<viem.GetContractEventsReturnType<ABI, string>>;
        };
        watchEvent: {
            [x: string]: (...parameters: [options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined] | [args: readonly unknown[] | {
                [x: string]: unknown;
                address?: undefined;
                abi?: undefined;
                args?: undefined;
                eventName?: undefined;
                fromBlock?: undefined;
                onError?: undefined;
                onLogs?: undefined;
                strict?: undefined;
                poll?: undefined;
                batch?: undefined;
                pollingInterval?: undefined;
            }, options?: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<ABI, string, undefined>;
                poll?: true | undefined;
            } | undefined]) => viem.WatchContractEventReturnType;
        };
        write: {
            [x: string]: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<ABI, string, readonly unknown[], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never, Rest extends unknown[] = [options: options]>(...parameters: Rest | [args: readonly unknown[], ...parameters: Rest]) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: ABI;
    }>;
    getCollateralInstance(symbol: string): Promise<{
        read: {
            symbol: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "symbol", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<string>;
            name: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "name", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<string>;
            balanceOf: (args: readonly [`0x${string}`], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "balanceOf", readonly [`0x${string}`]>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
            decimals: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "decimals", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<number>;
            allowance: (args: readonly [`0x${string}`, `0x${string}`], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "allowance", readonly [`0x${string}`, `0x${string}`]>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
            totalSupply: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "totalSupply", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
        };
        estimateGas: {
            approve: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transfer: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transferFrom: (args: readonly [`0x${string}`, `0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            approve: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transfer: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transferFrom: (args: readonly [`0x${string}`, `0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            approve: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(args: readonly [`0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
            transfer: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(args: readonly [`0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
            transferFrom: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(args: readonly [`0x${string}`, `0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
        };
        createEventFilter: {
            Approval: <const args extends {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, strict extends boolean | undefined = undefined>(args: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | ({
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } extends infer T ? T extends {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } ? T extends args ? Readonly<args> : never : never : never), options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined) => Promise<viem.CreateContractEventFilterReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Approval", args, strict>>;
            Transfer: <const args extends {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, strict extends boolean | undefined = undefined>(args: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | ({
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } extends infer T ? T extends {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } ? T extends args ? Readonly<args> : never : never : never), options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined) => Promise<viem.CreateContractEventFilterReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Transfer", args, strict>>;
        };
        getEvents: {
            Approval: (args?: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined) => Promise<viem.GetContractEventsReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Approval">>;
            Transfer: (args?: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined) => Promise<viem.GetContractEventsReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Transfer">>;
        };
        watchEvent: {
            Approval: (args: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            }, options: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<readonly [{
                    readonly type: "event";
                    readonly name: "Approval";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "event";
                    readonly name: "Transfer";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "from";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "to";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "allowance";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly name: "spender";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "approve";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "balanceOf";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "account";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "decimals";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint8";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "name";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "symbol";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "totalSupply";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transfer";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transferFrom";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "sender";
                        readonly type: "address";
                    }, {
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }], "Approval", undefined>;
                poll?: true | undefined;
            }) => viem.WatchContractEventReturnType;
            Transfer: (args: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            }, options: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<readonly [{
                    readonly type: "event";
                    readonly name: "Approval";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "event";
                    readonly name: "Transfer";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "from";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "to";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "allowance";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly name: "spender";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "approve";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "balanceOf";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "account";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "decimals";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint8";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "name";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "symbol";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "totalSupply";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transfer";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transferFrom";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "sender";
                        readonly type: "address";
                    }, {
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }], "Transfer", undefined>;
                poll?: true | undefined;
            }) => viem.WatchContractEventReturnType;
        };
        write: {
            approve: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
            transfer: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
            transferFrom: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, `0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: readonly [{
            readonly type: "event";
            readonly name: "Approval";
            readonly inputs: readonly [{
                readonly indexed: true;
                readonly name: "owner";
                readonly type: "address";
            }, {
                readonly indexed: true;
                readonly name: "spender";
                readonly type: "address";
            }, {
                readonly indexed: false;
                readonly name: "value";
                readonly type: "uint256";
            }];
        }, {
            readonly type: "event";
            readonly name: "Transfer";
            readonly inputs: readonly [{
                readonly indexed: true;
                readonly name: "from";
                readonly type: "address";
            }, {
                readonly indexed: true;
                readonly name: "to";
                readonly type: "address";
            }, {
                readonly indexed: false;
                readonly name: "value";
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "allowance";
            readonly stateMutability: "view";
            readonly inputs: readonly [{
                readonly name: "owner";
                readonly type: "address";
            }, {
                readonly name: "spender";
                readonly type: "address";
            }];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "approve";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "spender";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }, {
            readonly type: "function";
            readonly name: "balanceOf";
            readonly stateMutability: "view";
            readonly inputs: readonly [{
                readonly name: "account";
                readonly type: "address";
            }];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "decimals";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "uint8";
            }];
        }, {
            readonly type: "function";
            readonly name: "name";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "string";
            }];
        }, {
            readonly type: "function";
            readonly name: "symbol";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "string";
            }];
        }, {
            readonly type: "function";
            readonly name: "totalSupply";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "transfer";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "recipient";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }, {
            readonly type: "function";
            readonly name: "transferFrom";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "sender";
                readonly type: "address";
            }, {
                readonly name: "recipient";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }];
    }>;
}

/**
 * Pyth class for interacting with the Pyth price service. The price service is
 * connected to the endpoint specified as ``pythEndpoint`` when initializing
 * the ``Synthetix`` class
 * If an endpoint isn't specified, the default endpoint is used.
 * The default endpoint should be considered unreliable for production applications.
 * The ``Pyth`` class is used to fetch the latest price update data for a list
 * of tokens or feed ids
 */
declare class Pyth {
    sdk: SynthetixSdk;
    pythConnection: EvmPriceServiceConnection;
    pythConfig?: PythConfig;
    pythClient: AxiosInstance;
    priceFeedIds: Map<string, string>;
    constructor(synthetixSdk: SynthetixSdk, pythConfig?: PythConfig);
    initPyth(): Promise<void>;
    /**
     * Get Pyth client instance
     * @returns Pyth client object based on the params provided
     */
    getPythClient(): Promise<AxiosInstance>;
    /**
     * The function accepts an array of priceIds and publish Timestamp and
     * returns the priceUpdateData from Pyth for price ids array
     * @param priceIds Pyth Price IDs array
     * @param publishTime Publish time for benchmark data
     * @returns Encoded Pyth price update data
     */
    getVaaPriceUpdateData: (priceIds: string[], publishTime: number) => Promise<Hex[]>;
    /**
     * Update the price feed IDs for the Pyth price service.
     * Additionally sets a lookup for feedId to symbol.
     * @param updatedPriceFeeds Dictionary of feed IDs to update
     */
    updatePriceFeedIds(updatedPriceFeeds: {
        symbol: string;
        feedId: string;
    }[]): void;
    /**
     * Fetch the latest Pyth price data for a list of feed ids. This is the most reliable way to
     * specify the exact feed you want to fetch data for.
     * @param feedIds An array of price feed ids to fetch the data for
     */
    getPriceFromIds(feedIds: Hex[]): Promise<PriceFeed[] | undefined>;
    /**
     * Fetch the latest Pyth price data for a list of market symbols. This
     * function is the same as ``getPriceFromIds`` but uses the symbol
     * to fetch the feed id from the lookup table.
     * @param symbols Array of token symbols to get the price details
     */
    getPriceFromSymbols(symbols: string[]): Promise<PriceFeed[] | undefined>;
    /**
     * Gets price update data which then can be submitted to Pyth contract to update the prices.
     * This will throw an axios error if there is a network problem or the price service returns
     * a non-ok response (e.g: Invalid price ids)
     * @param priceIds Array of hex-encoded price ids.
     * @returns Array of price update data.
     */
    getPriceFeedsUpdateData(feedIds: Hex[]): Promise<Hex[]>;
    /**
     *
     * @param priceId Pyth price id of the token symbol to fetch the price for
     * @param publishTime Publish time for benchmark data
     * @returns
     */
    getFormattedPrice(priceId: Hex, publishTime?: number): Promise<number>;
    /**
     *
     * @param priceId Pyth price id of the token symbol to fetch the price for
     * @param publishTime Publish time for benchmark data
     * @returns
     */
    getFormattedPriceSymbol(symbol: string, publishTime?: number): Promise<number>;
    /**
     * Returns a mapping of token symbol to price ids from constants
     * @returns A map of Token symbol to price id
     */
    getPriceIdsFromConstants(): Map<string, string>;
}

declare abstract class Market<T extends MarketData | SpotMarketData> {
    sdk: SynthetixSdk;
    marketsById: Map<number, T>;
    marketsByName: Map<string, T>;
    marketsBySymbol: Map<string, T>;
    disabledMarkets: number[];
    constructor(synthetixSdk: SynthetixSdk);
    /**
     * Look up the market_id and market_name for a market. If only one is provided,
     * the other is resolved. If both are provided, they are checked for consistency.
     * @param marketIdOrName Id or name of the market to resolve
     */
    resolveMarket(marketIdOrName: MarketIdOrName): Promise<{
        resolvedMarketId: number;
        resolvedMarketName: string;
    }>;
    /**
     * Format the size of a synth for an order. This is used for synths whose base asset
     * does not use 18 decimals. For example, USDC uses 6 decimals, so we need to handle size
     * differently from other assets.
     * @param size The size as an ether value (e.g. 100).
     * @param marketId The id of the market.
     * @returns The formatted size in wei. (e.g. 100 = 100000000000000000000)
     */
    formatSize(size: number, marketId: MarketIdOrName): Promise<bigint>;
    prepareOracleCallsWithPriceId(priceFeedIds: string[]): Promise<Call3Value[]>;
    /**
     *   Prepare a call to the external node with oracle updates for the specified market names.
     * The result can be passed as the first argument to a multicall function to improve performance
     * of ERC-7412 calls. If no market names are provided, all markets are fetched. This is useful for
     * read functions since the user does not pay gas for those oracle calls, and reduces RPC calls and
     * runtime.
     * @param {number[]} marketIds An array of market ids to fetch prices for. If not provided, all markets are fetched
     * @returns {Promise<Call3Value[]>} objects representing the target contract, call data, value, requireSuccess flag and other necessary details for executing the function in the blockchain.
     */
    prepareOracleCall(marketIds?: number[]): Promise<Call3Value[]>;
    getMarket(marketIdOrName: MarketIdOrName): Promise<T>;
}

/**
 * Class for interacting with Synthetix Perps V3 contracts
 * Provides methods for creating and managing accounts, depositing and withdrawing
 * collateral, committing and settling orders, and liquidating accounts.
 *
 * Use ``get`` methods to fetch information about accounts, markets, and orders::
 *    const markets = await sdk.perps.getMarkets()
 *    const openPositions = await sdk.perps.getOpenPositions()
 * Other methods prepare transactions, and submit them to your RPC::
 *    const createTxHash = await sdk.perps.createAccount(submit=True)
 *    const collateralTxHash = await sdk.perps.modifyCollateral(amount=1000, market_name='sUSD', submit=True)
 *    const orderTxHash = await sdk.perps.commitOrder(size=10, market_name='ETH', desired_fill_price=2000, submit=True)
 * An instance of this module is available as ``sdk.perps``. If you are using a network without
 * perps deployed, the contracts will be unavailable and the methods will raise an error.
 * The following contracts are required:
 * - PerpsMarketProxy
 * - PerpsAccountProxy
 * - PythERC7412Wrapper
 * @param synthetixSdk An instance of the Synthetix class
 */
declare class Perps extends Market<MarketData> implements PerpsRepository {
    sdk: SynthetixSdk;
    defaultAccountId?: bigint;
    accountIds: bigint[];
    marketMetadata: Map<number, MarketMetadata>;
    isErc7412Enabled: boolean;
    isMulticollateralEnabled: boolean;
    disabledMarkets: number[];
    isInitialized: boolean;
    constructor(synthetixSdk: SynthetixSdk);
    initPerps(): Promise<void>;
    /**
     * Fetch a list of perps ``account_id`` owned by an address. Perps accounts
     * are minted as an NFT to the owner's address. The ``account_id`` is the
     * token id of the NFTs held by the address.
     * @param {string} address The address to get accounts for. Uses connected address if not provided.
     * @param {bigint} defaultAccountId The default account ID to set after fetching.
     * @returns A list of account IDs owned by the address
     */
    getAccountIds(accountAddress?: `0x${string}`, defaultAccountId?: bigint): Promise<bigint[]>;
    getMarkets(): Promise<MarketData[]>;
    getMarket(marketIdOrName: MarketIdOrName): Promise<MarketData>;
    /**
     * Fetch the market summaries for an array of marketIds
     * @param marketIds Array of market ids to fetch
     * @returns Summary of market ids data fetched from the contract
     */
    getMarketSummaries(marketIds: number[]): Promise<MarketSummary[]>;
    /**
     * @name getMarketSummary
     * @description Fetches the summary of a given market. This includes information like skew, size, max open interest, current funding rate, and more.
     * @param {string|number} marketIdOrName - The identifier or name of the market to fetch the summary for.
     * @returns {MarketSummary} - An object containing the summary data for the specified market.
     */
    getMarketSummary(marketIdOrName: MarketIdOrName): Promise<MarketSummary>;
    /**
     * @name getSettlementStrategy
     * @description This function retrieves the settlement strategy for a given market by its ID and either Market ID or Name.
     * @param {number} settlementStrategyId - The ID of the settlement strategy to retrieve.
     * @param {MarketIdOrName} marketIdOrName - The unique identifier (ID or Name) of the market this settlement strategy belongs to.
     * @returns {SettlementStrategy} - An object containing the details of the retrieved settlement strategy, including its strategy type, delay times, associated contract addresses, feed ID, settlement reward, and whether it is disabled or not.
     */
    getSettlementStrategy(settlementStrategyId: number, marketIdOrName: MarketIdOrName): Promise<SettlementStrategy>;
    /**
     * Fetch the settlement strategies for an array of market ids. Settlement strategies describe the
     * conditions under which an order can be settled.
     * @param marketIds Array of marketIds to fetch settlement strategy
     * @returns Settlement strategy array for markets
     */
    getSettlementStrategies(marketIds: number[]): Promise<SettlementStrategy[]>;
    /**
     * Fetch funding parameters for an array of market ids.
     * @param marketIds Array of marketIds to fetch settlement strategy
     * @returns Funding Parameters array for markets
     */
    getFundingParameters(marketIds: number[]): Promise<FundingParameters[]>;
    /**
     * Gets the order fees of a market.
     * @param marketIds Array of market ids.
     * @return Order fees array for markets
     */
    getOrderFees(marketIds: number[]): Promise<OrderFees[]>;
    /**
     * Gets the max size (in value) of an array of marketIds.
     * @param marketIds Array of market ids.
     * @return Max market size in market USD value for each market
     */
    getMaxMarketValues(marketIds: number[]): Promise<MaxMarketValue[]>;
    /**
     *   Fetches the open order for an account. Optionally fetches the settlement strategy,
     * which can be useful for order settlement and debugging.
     * @param {bigint} accountId The id of the account. If not provided, the default account is used
     * @param {boolean} fetchSettlementStrategy Flag to indicate whether to fetch the settlement strategy
     * @returns {OrderData} The order data for the account
     */
    getOrder(accountId?: bigint | undefined, fetchSettlementStrategy?: boolean): Promise<OrderData>;
    /**
     * Fetch information about an account's margin requirements and balances.
     * Accounts must maintain an ``available_margin`` above the ``maintenance_margin_requirement``
     * to avoid liquidation. Accounts with ``available_margin`` below the ``initial_margin_requirement``
     * can not interact with their position unless they deposit more collateral.
     * @param {bigint} accountId  The id of the account to fetch the margin info for. If not provided, the default account is used
     * @returns {CollateralData} The margin information for the account
     */
    getMarginInfo(accountId?: bigint | undefined): Promise<CollateralData>;
    /**
     * @name buildModifyCollateral
     * @description This function builds the call to modify collateral in a perp market. It takes an amount, market ID or name, account ID, and collateral ID as parameters and returns an array of Call3Value objects.
     * @param {string | number} data.amount - The amount of the underlying asset to modify collateral for.
     * @param {string | number} data.marketIdOrName - The ID or name of the perp market where the collateral will be modified.
     * @param {string} data.accountId - The ID of the account whose collateral is being modified.
     * @param {string} data.collateralId - The ID of the collateral being modified.
     * @returns {Call3Value[]} - An array of Call3Value objects containing the target contract address, call data, value, requireSuccess flag, and other relevant information for executing the 'modifyCollateral' function on the market proxy contract.
     */
    buildModifyCollateral({ amount, collateralMarketIdOrName, accountId }: ModifyCollateral): Promise<Call3Value>;
    /**
     * Fetch the balance of each collateral type for an account.
     * @param {bigint} accountId The id of the account to fetch the collateral balances for. If not provided, the default account is used.
     * @returns {Promise<number>} The balance of the account's collateral.
     */
    getCollateralBalances(accountId?: bigint): Promise<number>;
    /**
     * Check if an `accountId` is eligible for liquidation.
     * @param accountId The id of the account to check. If not provided, the default account is used.
     * @returns {Promise<boolean>} A boolean indicating whether the account can be liquidated.
     */
    getCanLiquidate(accountId?: bigint | undefined): Promise<boolean>;
    /**
     * Check if a batch of `accountId`'s are eligible for liquidation.
     * @param {string[]} accountIds An array of account ids
     * @returns {Promise<{ accountId: bigint; canLiquidate: boolean }[]>} An array of objects containing the account id and whether the account can be liquidated.
     */
    getCanLiquidates(accountIds?: bigint[] | undefined): Promise<{
        accountId: bigint;
        canLiquidate: boolean;
    }[]>;
    /**
     * Fetch the position for a specified account and market. The result includes the unrealized
     * pnl since the last interaction with this position, any accrued funding, and the position size.
     * Provide either a ``marketId`` or a ``marketName``::
     * @param {string | number} marketIdOrName - The identifier or name of the market for which the collateral is being modified
     * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.
     * @returns {OpenPositionData} An object containing the open position data for the specified market.
     */
    getOpenPosition(marketIdOrName: MarketIdOrName, accountId?: bigint | undefined): Promise<OpenPositionData>;
    /**
     * Fetch positions for an array of specified markets. The result includes the unrealized
     * pnl since the last interaction with this position, any accrued funding, and the position size.
     * Provide either an array of ``marketIds`` or a ``marketNames``::
     * @param {MarketIdOrName} marketIdsOrNames - The ID or name of the Perpetual market to get a quote for.
     * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.
     * @returns {OpenPositionData[]} An array of objects containing the open position data for the specified markets.
     */
    getOpenPositions(marketIdsOrNames?: MarketIdOrName[], accountId?: bigint | undefined): Promise<OpenPositionData[]>;
    /**
     * Retrieves open positions for multiple accounts and markets using a multicall.
     * @param positions - An array of objects representing the positions,
     * where each object contains:
     * - accountId: {bigint} The id of the account to fetch the position for .
     * - marketIdOrName: {MarketIdOrName} The market ID or name.
     * @returns An array of OpenPositionData objects. */
    getOpenPositionsMulticall(positions: {
        accountId: bigint;
        marketIdOrName: MarketIdOrName;
    }[]): Promise<OpenPositionData[]>;
    /**
     * @name getQuote
     * @description Fetches a quote for a Perpetual market, calculating the fees, fill price and required margin.
     * @param {number} data.size - The size of the order in base asset units
     * @param {number} data.price - The price of the order in quote asset units. If not provided, it will be fetched from Pyth Oracle.
     * @param {MarketIdOrName} data.marketIdOrName - The ID or name of the Perpetual market to get a quote for.
     * @param {number} [data.accountId=this.defaultAccountId] - The account ID of the user requesting the quote. Defaults to the default account ID.
     * @param {number} [data.settlementStrategyId=0] - The settlement strategy ID of the market. Defaults to 0 (no leverage).
     * @param {boolean} [data.includeRequiredMargin=true] - Whether to include the required margin in the quote. Defaults to true.
     * @returns {OrderQuote} An object containing the order size, index price, order fees, settlement reward cost, fill price and required margin (if provided).
     */
    getQuote({ size, price, marketIdOrName, accountId, settlementStrategyId, includeRequiredMargin, }: GetPerpsQuote): Promise<OrderQuote>;
    /**
     * Returns the debt of the account id
     * @param accountId The id of the account to get the debt for. If not provided, the default account is used.
     * @returns debt Account debt in ether
     */
    getDebt(accountId?: bigint | undefined): Promise<number>;
    /**
     * Fetch Position and related margin details from contracts
     * @param accountId The id of the account to get the debt for
     * @param marketIdOrName Market
     * @param override override params for the call
     * @returns Formatted values in decimal numbers for position and margin data
     */
    protected _getPositionData(accountId: bigint, marketIdOrName: MarketIdOrName, override?: OverrideParamsRead): Promise<{
        availableMargin: number;
        requiredMaintenanceMargin: number;
        requiredInitialMargin: number;
        positionSize: number;
        indexPrice: number;
    }>;
    /**
     * Calculate the approximate liquidation price for an account with single position
     * Provide either a ``marketId`` or a ``marketName``
     * @param {string | number} marketIdOrName - The identifier or name of the market for which the collateral is being modified
     * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.
     * @returns {healthFactor: bigint, liquidationPrice: bigint}
     * liquidation price = ((maintenance margin -  available margin) / position size) + index price
     */
    getApproxLiquidationPrice(marketIdOrName: MarketIdOrName, accountId?: bigint | undefined, override?: OverrideParamsRead): Promise<{
        healthFactor: number;
        liquidationPrice: number;
    }>;
    /**
     * Calculate the health factor for an account
     * @param {bigint} accountId The id of the account to calculate health factor.
     * If not provided, the default account is used.
     * @returns healthFactor percentage;
     * @returns availableMargin Formatted available margin in USD;
     * @returns requiredMaintenanceMargin Formatted required maintenance margin in USD
     * healthFactor = (available margin * 100) / maintenance margin
     */
    getHealthFactor(accountId?: bigint | undefined, override?: OverrideParamsRead): Promise<{
        healthFactor: number;
        availableMargin: number;
        requiredMaintenanceMargin: number;
    }>;
    /**
     * Returns an array of supported collaterals for perps
     * @returns Array of supported collateral ids;
     */
    getSupportedCollaterals(): Promise<SpotMarketData[]>;
    /**
     * @name buildCommitOrder
     * @description Builds a commit order for a given size, settlement strategy ID, market ID or name, account ID (default to the defaultAccountId), desired fill price, and max price impact.
     * @param {number} size - The size of the order in the base asset unit.
     * @param {string|number} data.settlementStrategyId - The ID of the settlement strategy for the market.
     * @param {string|number} data.marketIdOrName - The ID or name of the market to trade on.
     * @param {string|undefined} data.accountId - The ID of the account for which the order is being built (default to defaultAccountId).
     * @param {number|undefined} data.desiredFillPrice - The desired fill price for the order in the base asset unit.
     * @param {number|undefined} data.maxPriceImpact - The maximum price impact for the order as a percentage of the market index price.
     * @returns {Call3Value[]} An array containing the details of the transaction to be executed on the contract, including the target contract address, call data, value, and requireSuccess flag.
     */
    buildCommitOrder({ size, settlementStrategyId, marketIdOrName, accountId, desiredFillPrice, maxPriceImpact, }: CommitOrder): Promise<Call3Value>;
    /**
     * @name commitOrder
     * @description This function commits an order by building the necessary transactions and either executing them or returning them for later submission.
     * @param {CommitOrder} data - The details of the order to be committed.
     * @param {OverrideParamsWrite} [override] - Optional parameters to override default write settings, specifically whether to submit the transaction immediately (when `submit` is true). If not provided, the function will return the transaction object.
     * @returns {WriteReturnType} - Returns either a transaction hash if `submit` is true, or the transaction object for later submission when `submit` is false.
     */
    commitOrder(data: CommitOrder, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * @name modifyCollateral
     * @description This function modifies the collateral for a given market and account. It builds the necessary transaction, then writes it to the ERC7412 contract. If submit is not provided in the override object, it returns the built transaction object. Otherwise, it executes the transaction and logs the transaction hash.
     * @param {string} data.amount - The amount of collateral to modify
     * @param {string | number} data.marketIdOrName - The identifier or name of the market for which the collateral is being modified
     * @param {string} data.accountId - The ID of the account (default is the defaultAccountId)
     * @param {OverrideParamsWrite} [override] - An optional object that overrides the function behavior. If provided, submit must be truthy to execute the transaction and log the transaction hash.
     * @returns {WriteReturnType} The built transaction object if override.submit is falsy, otherwise the transaction hash.
     */
    modifyCollateral({ amount, collateralMarketIdOrName, accountId }: ModifyCollateral, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * @name payDebt
     * @description This function is used to repay a debt on Perps market using the SDK. It takes an amount and accountId as parameters, and optionally accepts an override for write operations. If no amount is provided, it will first fetch the current debt of the given accountId.
     * @param {number} data.amount - The amount to be repaid in Ether. Defaults to 0 if not provided.
     * @param {string} data.accountId - The ID of the account whose debt is being repaid. If not provided, it defaults to the defaultAccountId of the SDK instance.
     * @param {OverrideParamsWrite} override - An optional object for overriding parameters for write operations.
     * @returns {Promise<ReturnWriteCall>} A promise that resolves to a transaction hash when the debt is successfully repaid.
     */
    payDebt({ amount, accountId }?: PayDebt, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * Submit a liquidation for an account, or static call the liquidation function to fetch
     * the liquidation reward. The static call is important for accounts which have been
     * partially liquidated. Due to the throughput limit on liquidated value, the static call
     * returning a nonzero value means more value can be liquidated (and rewards collected).
     * This function can not be called if ``submit`` and ``staticCall`` are true.
     * @param {bigint} accountId The id of the account to liquidate. If not provided, the default account is used.
     * @param {OverrideParamsWrite} override - An optional object for overriding parameters for write operations.
     */
    liquidate(accountId?: bigint | undefined, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * @name settleOrderperps
     * @description Settles an open order by executing the 'settleOrder' function on Perps Market Proxy contract.
     * @param {bigint} accountId - The ID of the account associated with the order. Defaults to `this.defaultAccountId`.
     * @param {OverrideParamsWrite} override - Optional override parameters for writing transactions (defaults to default values).
     * @returns The transaction receipt if the order is successfully settled, otherwise throws an error.
     */
    settleOrder(accountId?: bigint | undefined, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * @name buildCreateAccount
     * @description This function builds the data for creating an account in the PerpsMarketProxy contract using the given accountId.
     * @param {bigint} accountId - The optional accountId to be created. If not provided, a new account will be generated.
     * @returns {Call3Value[]} - An array of Call3Value objects representing the target contract, call data, value, requireSuccess flag and other necessary details for executing the function in the blockchain.
     */
    buildCreateAccount(accountId?: bigint): Promise<Call3Value>;
    /**
     * @ame createAccount
     * @description Creates a new account and returns either the transaction hash or the transaction parameters. If `submit` is provided in `override`, the transaction will be submitted and the transaction hash will be returned. Otherwise, the transaction parameters will be returned.
     * @param {bigint | undefined} accountId - The ID of the account to create (optional)
     * @param {OverrideParamsWrite} override - Options for submitting or returning the transaction parameters
     * @returns {WriteReturnType} - If `submit` is provided in `override`, a string representing the transaction hash. Otherwise, an object containing the transaction parameters as defined by the CallParameters type.
     */
    createAccount(accountId?: bigint, override?: Omit<OverrideParamsWrite, 'useOracleCalls'>): Promise<WriteReturnType>;
    protected _createAccountAndDeposit({ amount, collateralMarketIdOrName, accountId: _accountId, }: ModifyCollateral): Promise<{
        target: `0x${string}`;
        callData: `0x${string}`;
        value: bigint;
        requireSuccess: boolean;
    }[]>;
    protected _createAccountDepositAndCommit({ amount, collateralMarketIdOrName, accountId: _accountId, order: rawOrder, }: CreateAccountDepositAndCreateOrder): Promise<{
        target: `0x${string}`;
        callData: `0x${string}`;
        value: bigint;
        requireSuccess: boolean;
    }[]>;
    createAccountAndDeposit(data: CreateAccountAndDeposit, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    protected _createAccountAndDepositMany({ tokens, sTokens, amounts, collateralIds, accountId: _accountId, }: {
        tokens: string[];
        sTokens: string[];
        amounts: bigint[];
        collateralIds: MarketIdOrName[];
        accountId?: bigint;
    }): Promise<{
        target: `0x${string}`;
        callData: `0x${string}`;
        value: bigint;
        requireSuccess: boolean;
    }[]>;
    createAccountAndDepositMany(data: CreateAccountAndDepositMany, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * @name createIsolatedAccountOrder
     * @description Creates an isolated account order for a given market, adding the specified collateral and creating the order.
     * @param {CreateIsolateOrder} params - The parameters to create an isolated account order.
     * @param {OverrideParamsWrite} override - Optional override parameters for writing transactions (defaults to default values).
     * @returns An array of CallParameters if multi-call is not used, or the transaction hash if it is submitted.
     */
    createIsolatedAccountOrder({ collateralAmount, size, marketIdOrName, settlementStrategyId, accountId, desiredFillPrice, maxPriceImpact, collateralMarketId, }: CreateIsolateOrder, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    buildGrantPermission({ accountId, permission, user }: GrantPermission): Promise<Call3Value>;
    grantPermission({ accountId, permission, user }: GrantPermission, override?: Omit<OverrideParamsWrite, 'useOracleCalls'>): Promise<WriteReturnType>;
    revokePermission({ accountId, permission, user }: GrantPermission, override?: Omit<OverrideParamsWrite, 'useOracleCalls'>): Promise<WriteReturnType>;
    getAccountPermissions({ accountId }: GetPermissions): Promise<AccountPermissions[]>;
    payDebtAndWithdraw(params: PayDebtAndWithdraw, override: OverrideParamsWrite): Promise<WriteReturnType>;
}

/**
 * Class for interacting with Synthetix V3 spot market contracts.
 * Provider methods for wrapping and unwrapping assets, approvals, atomic orders, and async orders.
 * Use ``get`` methods to fetch information about balances, allowances, and markets
 * const { marketsById, marketsByName } = await sdk.perps.getMarkets();
 *
 * Other methods prepare transactions, and submit them to your RPC.
 * An instance of this module is available as ``sdk.spot``. If you are using a network without
 * spot contracts deployed, the contracts will be unavailable and the methods will raise an error.
 * The following contracts are required:
 * - SpotMarketProxy
 */
declare class Spot extends Market<SpotMarketData> {
    sdk: SynthetixSdk;
    defaultAccountId?: bigint;
    accountIds: bigint[];
    asyncOrderEnabled: boolean;
    disabledMarkets: number[];
    constructor(synthetixSdk: SynthetixSdk);
    initSpot(): Promise<void>;
    getMarket(marketIdOrName: MarketIdOrName): Promise<SpotMarketData>;
    /**
     * Fetches contracts and metadata about all spot markets on the network. This includes
     * the market id, synth name, contract address, and the underlying synth contract. Each
     * synth is an ERC20 token, so these contracts can be used for transfers and allowances.
     * The metadata is also used to simplify interactions in the SDK by mapping market ids
     * and names to their metadata
     * For example:
     *    sdk.spot.wrap(100, market_name='sUSDC', submit=True)
     * This will look up the market id for the sUSDC market and use that to wrap 100 USDC into sUSDC.
     * The market metadata is returned from the method as a mapping object of two dictionaries/records.
     * The first is keyed by ``marketsById`` and the second is keyed by ``marketsByName``
     * For example: sdk.spot.marketsByName
     * Response: {
        'sUSD' => {
          marketId: 0,
          marketName: 'sUSD',
          contractAddress: '0x682f0d17feDC62b2a0B91f8992243Bf44cAfeaaE'
        },
  
     * Example:  sdk.spot.marketsById
     * Response: {
        0 => {
          marketId: 0,
          marketName: 'sUSD',
          contractAddress: '0x682f0d17feDC62b2a0B91f8992243Bf44cAfeaaE'
        },...
     */
    getMarkets(): Promise<{
        marketsById: Map<number, SpotMarketData>;
        marketsByName: Map<string, SpotMarketData>;
    }>;
    /**
     * @name getSynthContract
     * @description This function retrieves the Synth contract for a given market based on its ID or name. It returns the Synth contract instance.
     * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.
     * @returns {Contract<Synth>} - An instance of the Synth contract associated with the provided market.
     */
    getSynthContract(marketIdOrName: MarketIdOrName): Promise<{
        read: {
            symbol: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "symbol", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<string>;
            name: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "name", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<string>;
            balanceOf: (args: readonly [`0x${string}`], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "balanceOf", readonly [`0x${string}`]>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
            decimals: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "decimals", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<number>;
            allowance: (args: readonly [`0x${string}`, `0x${string}`], options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "allowance", readonly [`0x${string}`, `0x${string}`]>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
            totalSupply: (options?: viem.Prettify<viem.UnionOmit<viem.ReadContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "totalSupply", readonly []>, "address" | "functionName" | "args" | "abi">> | undefined) => Promise<bigint>;
        };
        estimateGas: {
            approve: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transfer: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transferFrom: (args: readonly [`0x${string}`, `0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
        } & {
            approve: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transfer: (args: readonly [`0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
            transferFrom: (args: readonly [`0x${string}`, `0x${string}`, bigint], options: viem.Prettify<viem.UnionOmit<viem.EstimateContractGasParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined>, "address" | "functionName" | "args" | "abi">>) => Promise<viem.EstimateContractGasReturnType>;
        };
        simulate: {
            approve: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: readonly [`0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
            transfer: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: readonly [`0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
            transferFrom: <chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: readonly [`0x${string}`, `0x${string}`, bigint], options?: Omit<viem.SimulateContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, chainOverride, accountOverride>, "address" | "functionName" | "args" | "abi"> | undefined) => Promise<viem.SimulateContractReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride, accountOverride>>;
        };
        createEventFilter: {
            Approval: <const args extends {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, strict extends boolean | undefined = undefined>(args: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | ({
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } extends infer T ? T extends {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } ? T extends args ? Readonly<args> : never : never : never), options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined) => Promise<viem.CreateContractEventFilterReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Approval", args, strict>>;
            Transfer: <const args extends {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, strict extends boolean | undefined = undefined>(args: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | ({
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } extends infer T ? T extends {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } ? T extends args ? Readonly<args> : never : never : never), options?: ({
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } & {
                strict?: strict | undefined;
            }) | undefined) => Promise<viem.CreateContractEventFilterReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Transfer", args, strict>>;
        };
        getEvents: {
            Approval: (args?: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined) => Promise<viem.GetContractEventsReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Approval">>;
            Transfer: (args?: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            } | undefined, options?: {
                blockHash?: viem.Hash | undefined;
                strict?: boolean | undefined;
                fromBlock?: bigint | viem.BlockTag | undefined;
                toBlock?: bigint | viem.BlockTag | undefined;
            } | undefined) => Promise<viem.GetContractEventsReturnType<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "Transfer">>;
        };
        watchEvent: {
            Approval: (args: {
                owner?: `0x${string}` | `0x${string}`[] | null | undefined;
                spender?: `0x${string}` | `0x${string}`[] | null | undefined;
            }, options: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<readonly [{
                    readonly type: "event";
                    readonly name: "Approval";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "event";
                    readonly name: "Transfer";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "from";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "to";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "allowance";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly name: "spender";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "approve";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "balanceOf";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "account";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "decimals";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint8";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "name";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "symbol";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "totalSupply";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transfer";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transferFrom";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "sender";
                        readonly type: "address";
                    }, {
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }], "Approval", undefined>;
                poll?: true | undefined;
            }) => viem.WatchContractEventReturnType;
            Transfer: (args: {
                from?: `0x${string}` | `0x${string}`[] | null | undefined;
                to?: `0x${string}` | `0x${string}`[] | null | undefined;
            }, options: {
                batch?: boolean | undefined;
                pollingInterval?: number | undefined;
                strict?: boolean | undefined;
                fromBlock?: viem.BlockNumber<bigint> | undefined;
                onError?: ((error: Error) => void) | undefined;
                onLogs: viem.WatchContractEventOnLogsFn<readonly [{
                    readonly type: "event";
                    readonly name: "Approval";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "event";
                    readonly name: "Transfer";
                    readonly inputs: readonly [{
                        readonly indexed: true;
                        readonly name: "from";
                        readonly type: "address";
                    }, {
                        readonly indexed: true;
                        readonly name: "to";
                        readonly type: "address";
                    }, {
                        readonly indexed: false;
                        readonly name: "value";
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "allowance";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "owner";
                        readonly type: "address";
                    }, {
                        readonly name: "spender";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "approve";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "spender";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "balanceOf";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [{
                        readonly name: "account";
                        readonly type: "address";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "decimals";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint8";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "name";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "symbol";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "string";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "totalSupply";
                    readonly stateMutability: "view";
                    readonly inputs: readonly [];
                    readonly outputs: readonly [{
                        readonly type: "uint256";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transfer";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }, {
                    readonly type: "function";
                    readonly name: "transferFrom";
                    readonly stateMutability: "nonpayable";
                    readonly inputs: readonly [{
                        readonly name: "sender";
                        readonly type: "address";
                    }, {
                        readonly name: "recipient";
                        readonly type: "address";
                    }, {
                        readonly name: "amount";
                        readonly type: "uint256";
                    }];
                    readonly outputs: readonly [{
                        readonly type: "bool";
                    }];
                }], "Transfer", undefined>;
                poll?: true | undefined;
            }) => viem.WatchContractEventReturnType;
        };
        write: {
            approve: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "approve", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
            transfer: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transfer", readonly [`0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
            transferFrom: <chainOverride extends viem.Chain | undefined, options extends viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi"> extends infer T ? { [K in keyof T]: viem.UnionOmit<viem.WriteContractParameters<readonly [{
                readonly type: "event";
                readonly name: "Approval";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "event";
                readonly name: "Transfer";
                readonly inputs: readonly [{
                    readonly indexed: true;
                    readonly name: "from";
                    readonly type: "address";
                }, {
                    readonly indexed: true;
                    readonly name: "to";
                    readonly type: "address";
                }, {
                    readonly indexed: false;
                    readonly name: "value";
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "allowance";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "owner";
                    readonly type: "address";
                }, {
                    readonly name: "spender";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "approve";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "spender";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "balanceOf";
                readonly stateMutability: "view";
                readonly inputs: readonly [{
                    readonly name: "account";
                    readonly type: "address";
                }];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "decimals";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint8";
                }];
            }, {
                readonly type: "function";
                readonly name: "name";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "symbol";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "string";
                }];
            }, {
                readonly type: "function";
                readonly name: "totalSupply";
                readonly stateMutability: "view";
                readonly inputs: readonly [];
                readonly outputs: readonly [{
                    readonly type: "uint256";
                }];
            }, {
                readonly type: "function";
                readonly name: "transfer";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }, {
                readonly type: "function";
                readonly name: "transferFrom";
                readonly stateMutability: "nonpayable";
                readonly inputs: readonly [{
                    readonly name: "sender";
                    readonly type: "address";
                }, {
                    readonly name: "recipient";
                    readonly type: "address";
                }, {
                    readonly name: "amount";
                    readonly type: "uint256";
                }];
                readonly outputs: readonly [{
                    readonly type: "bool";
                }];
            }], "transferFrom", readonly [`0x${string}`, `0x${string}`, bigint], viem.Chain | undefined, undefined, chainOverride>, "address" | "functionName" | "args" | "abi">[K]; } : never>(args: readonly [`0x${string}`, `0x${string}`, bigint], options: options) => Promise<viem.WriteContractReturnType>;
        };
        address: `0x${string}`;
        abi: readonly [{
            readonly type: "event";
            readonly name: "Approval";
            readonly inputs: readonly [{
                readonly indexed: true;
                readonly name: "owner";
                readonly type: "address";
            }, {
                readonly indexed: true;
                readonly name: "spender";
                readonly type: "address";
            }, {
                readonly indexed: false;
                readonly name: "value";
                readonly type: "uint256";
            }];
        }, {
            readonly type: "event";
            readonly name: "Transfer";
            readonly inputs: readonly [{
                readonly indexed: true;
                readonly name: "from";
                readonly type: "address";
            }, {
                readonly indexed: true;
                readonly name: "to";
                readonly type: "address";
            }, {
                readonly indexed: false;
                readonly name: "value";
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "allowance";
            readonly stateMutability: "view";
            readonly inputs: readonly [{
                readonly name: "owner";
                readonly type: "address";
            }, {
                readonly name: "spender";
                readonly type: "address";
            }];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "approve";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "spender";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }, {
            readonly type: "function";
            readonly name: "balanceOf";
            readonly stateMutability: "view";
            readonly inputs: readonly [{
                readonly name: "account";
                readonly type: "address";
            }];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "decimals";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "uint8";
            }];
        }, {
            readonly type: "function";
            readonly name: "name";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "string";
            }];
        }, {
            readonly type: "function";
            readonly name: "symbol";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "string";
            }];
        }, {
            readonly type: "function";
            readonly name: "totalSupply";
            readonly stateMutability: "view";
            readonly inputs: readonly [];
            readonly outputs: readonly [{
                readonly type: "uint256";
            }];
        }, {
            readonly type: "function";
            readonly name: "transfer";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "recipient";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }, {
            readonly type: "function";
            readonly name: "transferFrom";
            readonly stateMutability: "nonpayable";
            readonly inputs: readonly [{
                readonly name: "sender";
                readonly type: "address";
            }, {
                readonly name: "recipient";
                readonly type: "address";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
            readonly outputs: readonly [{
                readonly type: "bool";
            }];
        }];
    }>;
    /**
     * Get the balance of a spot synth. Provide either a ``marketId`` or ``marketName``
     * to choose the synth.
     * @param {string} address The address to check the balance of. If not provided, the
     * current account will be used.
     * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.
     * @returns {number} The balance of the synth in ether.
     */
    getBalance(address: string | undefined, marketIdOrName: MarketIdOrName): Promise<number>;
    /**
     * Get the allowance for a ``target_address`` to transfer from ``address``. Provide either
     * a ``marketId`` or ``marketName`` to choose the synth.
     * @param {string} targetAddress The address for which to check allowance.
     * @param {string} address The owner address to check allowance for.
     * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.
     * @returns The allowance in ether.
     */
    getAllowance(targetAddress: string, address: string | undefined, marketIdOrName: MarketIdOrName): Promise<number>;
    /**
     * Get details about an async order by its ID.
     * Retrieves order details like owner, amount escrowed, settlement strategy, etc.
     * Can also fetch the full settlement strategy parameters if ``fetchSettlementStrategy``
     * is ``true``.
     * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.
     * @param {string} data.asyncOrderId The ID of the async order to retrieve.
     * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.
     * @param {boolean} data.fetchSettlementStrategy Whether to fetch the full settlement strategy parameters. Default is true.
     * @returns {SpotOrder} The order details.
     */
    getOrder({ asyncOrderId, marketIdOrName, fetchSettlementStrategy, }: GetOrder): Promise<SpotOrder>;
    /**
     * Fetch the settlement strategy for a spot market.
     * @param {GetSettlementStrategy} data The data for fetching the settlement strategy.
     * @param {number} data.settlementStrategyId The id of the settlement strategy to retrieve.
     * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.
     * @returns {SpotSettlementStrategy} The settlement strategy for the market.
     */
    getSettlementStrategy({ settlementStrategyId, marketIdOrName, }: GetSettlementStrategy): Promise<SpotSettlementStrategy>;
    /**
     * Fetch the settlement strategies for all spot markets.
     * @param {GetSettlementStrategies} data The data for fetching the settlement strategies.
     * @param {number} data.stragegyId The id of the settlement strategy to retrieve.
     * @param {number[]} data.marketIds Array of marketIds to fetch settlement strategy
     * @returns {SpotSettlementStrategy[]} The settlement strategies for the markets.
     */
    getSettlementStrategies({ settlementStrategyId: stragegyId, marketIds, }: GetSettlementStrategies): Promise<SpotSettlementStrategy[]>;
    buildAtomicOrder({ side, size, slippageTolerance, minAmountReceived, marketIdOrName, }: AtomicOrder): Promise<Call3Value>;
    /**
     * Execute an atomic order on the spot market.
     * Atomically executes a buy or sell order for the given size.
     * Amounts are transferred directly, no need to settle later. This function
     * is useful for swapping sUSDC with sUSD on Base Andromeda contracts. The default
     * slippage is set to zero, since sUSDC and sUSD can be swapped 1:1
     * For example:
     *    const tx = await atomicOrder(Side.BUY, 100, 0, undefined, undefined, "sUSDC");
     * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.
     * @param {AtomicOrder} data The data for the atomic order.
     * @param {Side} data.side The side of the order (buy/sell).
     * @param {number} data.size The order size in ether.
     * @param {number} data.slippageTolerance The slippage tolerance for the order as a percentage (0.01 = 1%). Default is 0.
     * @param {number} data.minAmountReceived The minimum amount to receive in ether units. This will override the slippage_tolerance.
     * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.
     * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.
     * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.
     */
    atomicOrder({ side, size, slippageTolerance, minAmountReceived, marketIdOrName }: AtomicOrder, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    buildWrap({ size, marketIdOrName }: Wrap): Promise<Call3Value>;
    /**
     * Wrap an underlying asset into a synth or unwrap back to the asset.
     * Wraps an asset into a synth if size > 0, unwraps if size < 0.
     * The default slippage is set to zero, since the synth and asset can be swapped 1:1.
     * For example:
     *    const tx = wrap(100, undefined, "sUSDC")  # wrap 100 USDC into sUSDC
     *    const tx = wrap(-100, undefined, "sUSDC") # unwrap 100 sUSDC into USDC
     * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.
     * @param {Wrap} data The data for the wrap/unwrap transaction.
     * @param data.size The amount of the asset to wrap/unwrap.
     * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.
     * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.
     * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.
     */
    wrap({ size, marketIdOrName }: Wrap, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    buildCommitOrder({ side, size, slippageTolerance, minAmountReceived, settlementStrategyId, marketIdOrName, }: CommitOrderSpot): Promise<Call3Value>;
    /**
     * Commit an async order to the spot market.
     * Commits a buy or sell order of the given size. The order will be settled
     * according to the settlement strategy.
     * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.
     * @param {CommitOrderSpot} data The data for the async order.
     * @param {Side} data.side The side of the order (buy/sell).
     * @param {number} data.size The order size in ether. If ``side`` is "buy", this is the amount
     * of the synth to buy. If ``side`` is "sell", this is the amount of the synth to sell.
     * @param {number} data.slippageTolerance The slippage tolerance for the order as a percentage (0.01 = 1%). Default is 0.
     * @param {number} data.minAmountReceived The minimum amount to receive in ether units. This will override the slippage_tolerance.
     * @param {number} data.settlementStrategyId The settlement strategy ID. Default 2.
     * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.
     * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.
     */
    commitOrder({ side, size, slippageTolerance, minAmountReceived, settlementStrategyId, marketIdOrName }: CommitOrderSpot, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    /**
     * Settle an async Pyth order after price data is available.
     * Fetches the price for the order from Pyth and settles the order.
     * Retries up to ``maxTxTries`` times on failure with a delay of ``txDelay`` seconds.
     * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.
     * @param {SettleOrder} data The data for the async order.
     * @param {string} asyncOrderId The ID of the async order to settle.
     * @param {MarketIdOrName} marketIdOrName The unique identifier or name of the market.
     * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.
     * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.
     */
    settleOrder({ asyncOrderId, marketIdOrName }: SettleOrder, override?: OverrideParamsWrite): Promise<WriteReturnType>;
    buildApprove({ spender, amount, token, }: {
        spender: Address;
        amount: number;
        token: Address;
    }): Promise<Call3Value>;
    /**
     * Approve an address to transfer a specified synth from the connected address.
     * Approves the ``targetAddress`` to transfer up to the ``amount`` from your account.
     * If ``amount`` is ``undefined``, approves the maximum possible amount.
     * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.
     * @param {string} data.targetAddress The address to approve.
     * @param {number} data.amount The amount in ether to approve. Default is max uint256.
     * @param {MarketIdOrName} dart.marketIdOrName - The unique identifier or name of the market.
     * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.
     * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.
     */
    approve({ targetAddress, amount, marketIdOrName }: Approve, override?: Omit<OverrideParamsWrite, 'useOracleCalls'>): Promise<WriteReturnType>;
}

/**
 * The main class for interacting with the Synthetix protocol. The class
 * requires a provider RPC endpoint and a wallet address (or a private key which is used from .env.PRIVATE_KEY)
 *    const sdk = new SynthetixSdk({accountConfig, partnerConfig, pythConfig, rpcConfig});
 *    await sdk.init();
 *
 * The only required parameters for the SDK to initialize are the `chainId` and (`address` or `env.PRIVATE_KEY`).
 * All other parameters are optional and are set to default values if uninitialized.
 *    const accountConfig = { address: '0x' }
 *    const rpcConfig = { chainId: 8453, rpcEndpoint: 'https://https://base-sepolia.g.alchemy.com/v2/ALCHEMY_KEY', preset: 'andromeda'}
 *    const sdk = new SynthetixSdk({accountConfig, rpcConfig })
 *    const markets = await sdk.perps.getMarkets()
 */
declare class SynthetixSdk {
    accountConfig: AccountConfig;
    rpcConfig: RpcConfig;
    accountAddress: Address;
    publicClient: PublicClient;
    privateKeyAccount?: PrivateKeyAccount;
    trackingCode: string;
    referrer: string;
    resolveMarketNames: boolean;
    maxPriceImpact: number;
    logger: Logger<ILogObj>;
    core: Core;
    contracts: Contracts;
    utils: Utils;
    pyth: Pyth;
    perps: Perps;
    spot: Spot;
    initialized: boolean;
    constructor({ accountConfig, partnerConfig, pythConfig, rpcConfig, defaultConfig }: SdkConfigParams);
    init(): Promise<void>;
    getPublicClient(): PublicClient;
    /**
     * Executes a transaction from the user wallet.
     * Checks if privateKeyAccount is initialized in the SDK. If uninitialized,
     * it checks process.env PRIVATE_KEY if available. If both are unavailable, the SDK
     * will throw an error
     * @param tx Call parameters for the tx
     * @returns txHash Transaction hash after tx execution
     */
    executeTransaction(tx: CallParameters): Promise<Hash>;
    /**
     * Gets current sUSD balance in wallet. Supports only V3 sUSD.
     * @param address Address to check balances for
     */
    getSusdBalance(address?: string): Promise<number>;
    /**
     * Gets current ETH balance for the address
     * @param address Address to check balances for
     */
    getEthBalance(address?: string): Promise<number>;
    /**
     *   Approve an address to spend a specified ERC20 token. This is a general
     * implementation that can be used for any ERC20 token. Specify the amount
     * as an ether value, otherwise it will default to the maximum amount
     * For example:
     * const tx = await sdk.approve(tokenAddress,marketProxyAddress,1000)
     * @param tokenAddress address of the token to approve
     * @param targetAddress address to approve to spend the token
     * @param amount amount of the token to approve
     * @param submit submit the transaction if true and return txHash, else return encoded txData
     * @returns If ``submit``, returns a transaction hash. Otherwise, returns the transaction data.
     */
    approve(tokenAddress: string, targetAddress: string, amount?: number, submit?: boolean): Promise<`0x${string}` | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "legacy" | undefined;
        value?: bigint | undefined;
        gasPrice?: bigint | undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: undefined;
        maxPriorityFeePerGas?: undefined;
        accessList?: undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: bigint | undefined;
        blockTag?: undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "legacy" | undefined;
        value?: bigint | undefined;
        gasPrice?: bigint | undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: undefined;
        maxPriorityFeePerGas?: undefined;
        accessList?: undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: undefined;
        blockTag?: viem.BlockTag | undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip2930" | undefined;
        value?: bigint | undefined;
        gasPrice?: bigint | undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: undefined;
        maxPriorityFeePerGas?: undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: bigint | undefined;
        blockTag?: undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip2930" | undefined;
        value?: bigint | undefined;
        gasPrice?: bigint | undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: undefined;
        maxPriorityFeePerGas?: undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: undefined;
        blockTag?: viem.BlockTag | undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip1559" | undefined;
        value?: bigint | undefined;
        gasPrice?: undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: bigint | undefined;
        maxPriorityFeePerGas?: bigint | undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: bigint | undefined;
        blockTag?: undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip1559" | undefined;
        value?: bigint | undefined;
        gasPrice?: undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: bigint | undefined;
        maxPriorityFeePerGas?: bigint | undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: undefined;
        blockTag?: viem.BlockTag | undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip7702" | undefined;
        value?: bigint | undefined;
        gasPrice?: undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: bigint | undefined;
        maxPriorityFeePerGas?: bigint | undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: viem_experimental.AuthorizationList<number, boolean> | undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: bigint | undefined;
        blockTag?: undefined;
    }) | (viem.Omit<{
        data?: Hex | undefined;
        from?: Address | undefined;
        gas?: bigint | undefined;
        nonce?: number | undefined;
        to?: Address | null | undefined;
        type?: "eip7702" | undefined;
        value?: bigint | undefined;
        gasPrice?: undefined;
        maxFeePerBlobGas?: undefined;
        maxFeePerGas?: bigint | undefined;
        maxPriorityFeePerGas?: bigint | undefined;
        accessList?: viem.AccessList | undefined;
        authorizationList?: viem_experimental.AuthorizationList<number, boolean> | undefined;
        blobVersionedHashes?: undefined;
        blobs?: undefined;
        kzg?: undefined;
        sidecars?: undefined;
    }, "from"> & {
        account?: viem.Account | Address | undefined;
        batch?: boolean | undefined;
        code?: Hex | undefined;
        factory?: Address | undefined;
        factoryData?: Hex | undefined;
        stateOverride?: viem.StateOverride | undefined;
    } & {
        blockNumber?: undefined;
        blockTag?: viem.BlockTag | undefined;
    })>;
    /**
     * Get the allowance for a target address to spend a specified ERC20 token for an owner.
     * This is a general implementation that can be used for any ERC20 token.
     * @param tokenAddress address of the token to check allowance for
     * @param spenderAddress  address to spender of the token
     * @param ownerAddress  address of the token owner. If not specified,
     * the default address is used.
     * @returns The formatted allowance for the target address to spend the token of the owner
     */
    getAllowance(tokenAddress: string, spenderAddress: string, ownerAddress?: string): Promise<number>;
}

export { Core as C, Market as M, Pyth as P, Spot as S, Utils as U, Contracts as a, Perps as b, SynthetixSdk as c };
