import { EnhancedExecute, MelonTransaction } from './transactionFactory';
import { OptionsOrCallback } from './prepareTransaction';
import { Environment } from '../environment/Environment';
declare type WithAddressQuerySendFunction<Args> = (environment: Environment, signedTransactionData: string, params: Args, options?: OptionsOrCallback) => Promise<any>;
declare type WithAddressQueryPrepareFunction<Args> = (environment: Environment, params?: Args, options?: OptionsOrCallback) => Promise<MelonTransaction<Args>>;
export declare type WithAddressQueryExecuteFunction<Args, Result> = (environment: Environment, params?: Args, options?: OptionsOrCallback) => Promise<Result>;
export interface WithAddressQueryExecuteMixin<Args> {
    prepare: WithAddressQueryPrepareFunction<Args>;
    send: WithAddressQuerySendFunction<Args>;
}
export declare type WithAddressQueryExecute<Args, Result> = WithAddressQueryExecuteFunction<Args, Result> & WithAddressQueryExecuteMixin<Args>;
export declare type WithContractAddressQuery = <Args, Result>(contractAddressQuery: string[], transaction: EnhancedExecute<Args, Result>) => WithAddressQueryExecute<Args, Result>;
/**
 * Wraps the result of the transaction factory (EnhancedExecute) in helper
 * functions that do not require to provide contractAddress, but derive this
 * from the params with the contractAddressQuery
 *
 * @param contractAddressQuery
 * @param transaction
 */
declare const withContractAddressQuery: WithContractAddressQuery;
export { withContractAddressQuery };
