import { Address, Hash, Hex, Log } from 'viem';
import { BaseClientMixin, BaseGasEstimatesMixin, BaseTransactions } from './base';
import type { CallData, CreateDiversifierConfig, CreateRecoupConfig, SplitsClientConfig, TransactionConfig, TransactionFormat } from '../types';
declare class TemplatesTransactions extends BaseTransactions {
    constructor(transactionClientArgs: SplitsClientConfig & TransactionConfig);
    protected _createRecoupTransaction({ token, tranches, nonWaterfallRecipientAddress, nonWaterfallRecipientTrancheIndex, chainId, transactionOverrides, }: CreateRecoupConfig): Promise<TransactionFormat>;
    protected _createDiversifierTransaction({ owner, paused, oracleParams, recipients, chainId, transactionOverrides, }: CreateDiversifierConfig): Promise<TransactionFormat>;
}
export declare class TemplatesClient extends TemplatesTransactions {
    readonly eventTopics: {
        [key: string]: Hex[];
    };
    readonly callData: TemplatesCallData;
    readonly estimateGas: TemplatesGasEstimates;
    constructor(clientArgs: SplitsClientConfig);
    _submitCreateRecoupTransaction(createRecoupArgs: CreateRecoupConfig): Promise<{
        txHash: Hash;
    }>;
    createRecoup(createRecoupArgs: CreateRecoupConfig): Promise<{
        waterfallModuleAddress: Address;
        event: Log;
    }>;
    _submitCreateDiversifierTransaction(createDiversifierArgs: CreateDiversifierConfig): Promise<{
        txHash: Hash;
    }>;
    createDiversifier(createDiversifierArgs: CreateDiversifierConfig): Promise<{
        passThroughWalletAddress: Address;
        event: Log;
    }>;
}
export interface TemplatesClient extends BaseClientMixin {
}
declare class TemplatesGasEstimates extends TemplatesTransactions {
    constructor(clientArgs: SplitsClientConfig);
    createRecoup(createRecoupArgs: CreateRecoupConfig): Promise<bigint>;
    createDiversifier(createDiversifierArgs: CreateDiversifierConfig): Promise<bigint>;
}
interface TemplatesGasEstimates extends BaseGasEstimatesMixin {
}
declare class TemplatesCallData extends TemplatesTransactions {
    constructor(clientArgs: SplitsClientConfig);
    createRecoup(createRecoupArgs: CreateRecoupConfig): Promise<CallData>;
    createDiversifier(createDiversifierArgs: CreateDiversifierConfig): Promise<CallData>;
}
export {};
