import { ApiTypes, DecorateMethod, SubmittableResultImpl } from "../../api/types";
import { AccountId, Address, Hash } from "../../types/interfaces";
import { IKeyringPair } from "../../types/types";
import { ApiObject, ContractABIPre } from '../types';
import { Observable } from 'rxjs';
import { SubmittableResult } from "../../api";
import Abi from '../Abi';
import Contract from './Contract';
import { BaseWithTx } from './util';
declare type BlueprintCreateResultSubscription<ApiType extends ApiTypes> = Observable<BlueprintCreateResult<ApiType>>;
export interface BlueprintCreate<ApiType extends ApiTypes> {
    signAndSend(account: IKeyringPair | string | AccountId | Address): BlueprintCreateResultSubscription<ApiType>;
}
declare class BlueprintCreateResult<ApiType extends ApiTypes> extends SubmittableResult {
    readonly contract?: Contract<ApiType>;
    constructor(result: SubmittableResultImpl, contract?: Contract<ApiType>);
}
export default class Blueprint<ApiType extends ApiTypes> extends BaseWithTx<ApiType> {
    readonly codeHash: Hash;
    constructor(api: ApiObject<ApiType>, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod<ApiType>, codeHash: string | Hash);
}
export {};
