import { ApiTypes, DecorateMethod, SubmittableResultImpl } from "../../api/types";
import { AccountId, Address } from "../../types/interfaces";
import { IKeyringPair } from "../../types/types";
import { ApiObject, ContractABIPre } from '../types';
import BN from 'bn.js';
import { Observable } from 'rxjs';
import { SubmittableResult } from "../../api";
import Abi from '../Abi';
import Blueprint from './Blueprint';
import { BaseWithTx } from './util';
declare type CodePutCodeResultSubscription<ApiType extends ApiTypes> = Observable<CodePutCodeResult<ApiType>>;
export interface CodePutCode<ApiType extends ApiTypes> {
    signAndSend(account: IKeyringPair | string | AccountId | Address): CodePutCodeResultSubscription<ApiType>;
}
declare class CodePutCodeResult<ApiType extends ApiTypes> extends SubmittableResult {
    readonly blueprint?: Blueprint<ApiType>;
    constructor(result: SubmittableResultImpl, blueprint?: Blueprint<ApiType>);
}
export default class Code<ApiType extends ApiTypes> extends BaseWithTx<ApiType> {
    readonly code: Uint8Array;
    constructor(api: ApiObject<ApiType>, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod<ApiType>, wasm: string | Uint8Array);
    createBlueprint: (maxGas: number | BN) => CodePutCode<ApiType>;
    private createResult;
}
export {};
