import { WalletClient, Address, Abi, Hash, Log, Hex } from 'viem';
import { TransactionType } from '../constants';
import type { ApiConfig, BaseClientConfig, CallData, MulticallConfig, SplitsPublicClient, TransactionConfig, TransactionFormat, TransactionOverrides } from '../types';
import { DataClient } from './data';
declare class BaseClient {
    readonly _chainId: number | undefined;
    readonly _ensPublicClient: SplitsPublicClient | undefined;
    readonly _walletClient: WalletClient | undefined;
    readonly _publicClient: SplitsPublicClient | undefined;
    readonly _publicClients: {
        [chainId: number]: SplitsPublicClient;
    } | undefined;
    readonly _apiConfig: ApiConfig | undefined;
    readonly _includeEnsNames: boolean;
    readonly _dataClient: DataClient | undefined;
    readonly _supportedChainIds: number[];
    constructor({ chainId, publicClient, publicClients, ensPublicClient, walletClient, apiConfig, supportedChainIds, includeEnsNames, }: BaseClientConfig);
    protected _requireDataClient(): void;
    protected _requirePublicClient(chainId: number): void;
    protected _requireWalletClient(): void;
    _getPublicClient(chainId: number): SplitsPublicClient;
}
export declare class BaseTransactions extends BaseClient {
    protected readonly _transactionType: TransactionType;
    protected readonly _shouldRequireWalletClient: boolean;
    constructor({ transactionType, ...baseClientArgs }: BaseClientConfig & TransactionConfig);
    protected _executeContractFunction({ contractAddress, contractAbi, functionName, functionArgs, transactionOverrides, value, }: {
        contractAddress: Address;
        contractAbi: Abi;
        functionName: string;
        functionArgs?: unknown[];
        transactionOverrides: TransactionOverrides;
        value?: bigint;
    }): Promise<bigint | `0x${string}` | {
        address: `0x${string}`;
        data: `0x${string}`;
        value: bigint | undefined;
    }>;
    protected _isContractTransaction(txHash: TransactionFormat): txHash is Hash;
    protected _isBigInt(gasEstimate: TransactionFormat): gasEstimate is bigint;
    protected _isCallData(callData: TransactionFormat): callData is CallData;
    protected _getFunctionChainId(argumentChainId?: number): number;
    protected _getReadOnlyFunctionChainId(argumentChainId?: number): number;
    _multicallTransaction({ calls, transactionOverrides, }: MulticallConfig): Promise<TransactionFormat>;
}
export declare class BaseClientMixin extends BaseTransactions {
    getTransactionEvents({ txHash, eventTopics, includeAll, }: {
        txHash: Hash;
        eventTopics: Hex[];
        includeAll?: boolean;
    }): Promise<Log[]>;
    _submitMulticallTransaction(multicallArgs: MulticallConfig): Promise<{
        txHash: Hash;
    }>;
    multicall(multicallArgs: MulticallConfig): Promise<{
        events: Log[];
    }>;
}
export declare class BaseGasEstimatesMixin extends BaseTransactions {
    multicall(multicallArgs: MulticallConfig): Promise<bigint>;
}
export {};
