import { Address } from '@melonproject/token-math';
import { Contracts } from '../../Contracts';
import { TransactionArgs, UnsignedRawTransaction } from './transactionFactory';
import { Environment } from '../environment/Environment';
interface PrepareDeployReturn {
    unsignedTransaction: UnsignedRawTransaction;
    txIdentifier?: string;
}
interface SendDeployArgs {
    signedTransaction?: string;
    unsignedTransaction?: UnsignedRawTransaction;
    txIdentifier?: string;
}
declare type PrepareDeployFunction = {
    (environment: Environment, pathToSolidityFile: string, args?: TransactionArgs): Promise<PrepareDeployReturn>;
    (environment: Environment, contract: Contracts, args: TransactionArgs): Promise<PrepareDeployReturn>;
};
declare type SendDeployFunction = (environment: any, args: SendDeployArgs) => Promise<Address>;
declare type DeployContract = {
    (environment: Environment, pathToSolidityFile: string, args?: TransactionArgs): Promise<Address>;
    (environment: Environment, contract: Contracts, args: TransactionArgs): Promise<Address>;
};
interface DeployContractMixin {
    prepare: PrepareDeployFunction;
    send: SendDeployFunction;
}
declare type EnhancedDeploy = DeployContract & DeployContractMixin;
declare const deployContract: EnhancedDeploy;
export { deployContract };
