import { type Abi, type Address, type Hex } from 'viem';
type ContractType = {
    address: Address;
    abi: Abi;
    read?: {
        [functionName: string]: (...args: any[]) => Promise<any>;
    };
    simulate?: {
        [functionName: string]: (...args: any[]) => Promise<any>;
    };
};
export type EncodableContract<TContract extends ContractType, TSimulate extends TContract['simulate'] = TContract['simulate'] extends undefined ? never : TContract['simulate'], TRead extends TContract['read'] = TContract['read'] extends undefined ? never : TContract['read'], TMethods extends TSimulate & TRead = TSimulate & TRead, TFunctionName extends keyof TMethods = keyof TMethods> = TContract & {
    prepare: {
        [K in TFunctionName]: (...args: Parameters<TMethods[K] extends (...args: any[]) => any ? TMethods[K] : never>) => {
            address: TContract['address'];
            abi: TContract['abi'];
            functionName: K;
            args: Parameters<TMethods[K] extends (...args: any[]) => any ? TMethods[K] : never>[0] extends readonly unknown[] ? Parameters<TMethods[K] extends (...args: any[]) => any ? TMethods[K] : never>[0] : undefined;
        };
    };
    encode: {
        [K in TFunctionName]: (...args: Parameters<TMethods[K] extends (...args: any[]) => any ? TMethods[K] : never>) => {
            to: TContract['address'];
            data: Hex;
            value?: bigint;
        };
    };
};
export declare const getEncodableContract: <TContract extends ContractType>(contract: TContract) => EncodableContract<TContract>;
export {};
//# sourceMappingURL=get-encodable-contract.d.ts.map