///
///
import Utils from "./utils";
import type Uploader from "./upload";
import type Fund from "./fund";
import type { DataItemCreateOptions } from "arbundles";
import type Api from "./api";
import type BigNumber from "bignumber.js";
import type { BundlrTransaction } from "./types";
import type { Arbundles, BundlrTransactionCreateOptions, BundlrTransactonCtor, CreateAndUploadOptions, Currency, FundResponse, UploadReceipt, UploadReceiptData, UploadResponse, WithdrawalResponse } from "./types";
import type { Signer } from "arbundles";
import type { Readable } from "stream";
export default abstract class Bundlr {
api: Api;
utils: Utils;
uploader: Uploader;
funder: Fund;
address: string | undefined;
currency: string;
currencyConfig: Currency;
protected _readyPromise: Promise | undefined;
url: URL;
arbundles: Arbundles;
bundlrTransaction: BundlrTransactonCtor;
static VERSION: string;
constructor(url: URL, arbundles: Arbundles);
get signer(): Signer;
withdrawBalance(amount: BigNumber.Value): Promise;
/**
* Gets the balance for the loaded wallet
* @returns balance (in winston)
*/
getLoadedBalance(): Promise;
/**
* Gets the balance for the specified address
* @param address address to query for
* @returns the balance (in winston)
*/
getBalance(address: string): Promise;
/**
* Sends amount atomic units to the specified bundler
* @param amount amount to send in atomic units
* @returns details about the fund transaction
*/
fund(amount: BigNumber.Value, multiplier?: number): Promise;
/**
* Calculates the price for [bytes] bytes for the loaded currency and Bundlr node.
* @param bytes
* @returns
*/
getPrice(bytes: number): Promise;
verifyReceipt(receipt: UploadReceiptData): Promise;
/**
* Create a new BundlrTransactions (flex currency arbundles dataItem)
* @param data
* @param opts - dataItemCreateOptions
* @returns - a new BundlrTransaction instance
*/
createTransaction(data: string | Buffer, opts?: BundlrTransactionCreateOptions): BundlrTransaction;
/**
* Returns the signer for the loaded currency
*/
getSigner(): Signer;
upload(data: string | Buffer | Readable, opts?: CreateAndUploadOptions): Promise;
uploadWithReceipt(data: string | Buffer | Readable, opts?: DataItemCreateOptions): Promise;
ready(): Promise;
get transaction(): {
fromRaw(rawTransaction: Uint8Array): BundlrTransaction;
};
}