import { Address, GetContractReturnType, Hash, Hex, Log } from 'viem';
import { BaseClientMixin, BaseGasEstimatesMixin, BaseTransactions } from './base';
import { vestingFactoryAbi } from '../constants/abi/vestingFactory';
import { vestingAbi } from '../constants/abi/vesting';
import type { CallData, CreateVestingConfig, ReadContractArgs, ReleaseVestedFundsConfig, SplitsClientConfig, StartVestConfig, TransactionConfig, TransactionFormat, SplitsPublicClient } from '../types';
type VestingAbi = typeof vestingAbi;
type VestingFactoryAbi = typeof vestingFactoryAbi;
declare class VestingTransactions extends BaseTransactions {
    constructor(transactionClientArgs: SplitsClientConfig & TransactionConfig);
    protected _createVestingModuleTransaction({ beneficiary, vestingPeriodSeconds, chainId, transactionOverrides, }: CreateVestingConfig): Promise<TransactionFormat>;
    protected _startVestTransaction({ vestingModuleAddress, tokens, transactionOverrides, }: StartVestConfig): Promise<TransactionFormat>;
    protected _releaseVestedFundsTransaction({ vestingModuleAddress, streamIds, transactionOverrides, }: ReleaseVestedFundsConfig): Promise<TransactionFormat>;
    protected _getVestingContract(vestingModule: string, chainId: number): GetContractReturnType<VestingAbi, SplitsPublicClient>;
    protected _getVestingFactoryContract(chainId: number): GetContractReturnType<VestingFactoryAbi, SplitsPublicClient>;
}
export declare class VestingClient extends VestingTransactions {
    readonly eventTopics: {
        [key: string]: Hex[];
    };
    readonly callData: VestingCallData;
    readonly estimateGas: VestingGasEstimates;
    constructor(clientArgs: SplitsClientConfig);
    _submitCreateVestingModuleTransaction(createVestingArgs: CreateVestingConfig): Promise<{
        txHash: Hash;
    }>;
    createVestingModule(createVestingArgs: CreateVestingConfig): Promise<{
        vestingModuleAddress: string;
        event: Log;
    }>;
    _submitStartVestTransaction(startVestArgs: StartVestConfig): Promise<{
        txHash: Hash;
    }>;
    startVest(startVestArgs: StartVestConfig): Promise<{
        events: Log[];
    }>;
    _submitReleaseVestedFundsTransaction(releaseFundsArgs: ReleaseVestedFundsConfig): Promise<{
        txHash: Hash;
    }>;
    releaseVestedFunds(releaseFundsArgs: ReleaseVestedFundsConfig): Promise<{
        events: Log[];
    }>;
    predictVestingModuleAddress({ beneficiary, vestingPeriodSeconds, chainId, }: CreateVestingConfig): Promise<{
        address: Address;
        exists: boolean;
    }>;
    getBeneficiary({ vestingModuleAddress, chainId, }: ReadContractArgs & {
        vestingModuleAddress: string;
    }): Promise<{
        beneficiary: Address;
    }>;
    getVestingPeriod({ vestingModuleAddress, chainId, }: ReadContractArgs & {
        vestingModuleAddress: string;
    }): Promise<{
        vestingPeriod: bigint;
    }>;
    getVestedAmount({ vestingModuleAddress, streamId, chainId, }: ReadContractArgs & {
        vestingModuleAddress: string;
        streamId: string;
    }): Promise<{
        amount: bigint;
    }>;
    getVestedAndUnreleasedAmount({ vestingModuleAddress, streamId, chainId, }: ReadContractArgs & {
        vestingModuleAddress: string;
        streamId: string;
    }): Promise<{
        amount: bigint;
    }>;
}
export interface VestingClient extends BaseClientMixin {
}
declare class VestingGasEstimates extends VestingTransactions {
    constructor(clientArgs: SplitsClientConfig);
    createVestingModule(createVestingArgs: CreateVestingConfig): Promise<bigint>;
    startVest(startVestArgs: StartVestConfig): Promise<bigint>;
    releaseVestedFunds(releaseFundsArgs: ReleaseVestedFundsConfig): Promise<bigint>;
}
interface VestingGasEstimates extends BaseGasEstimatesMixin {
}
declare class VestingCallData extends VestingTransactions {
    constructor(clientArgs: SplitsClientConfig);
    createVestingModule(createVestingArgs: CreateVestingConfig): Promise<CallData>;
    startVest(startVestArgs: StartVestConfig): Promise<CallData>;
    releaseVestedFunds(releaseFundsArgs: ReleaseVestedFundsConfig): Promise<CallData>;
}
export {};
