import { ContractLoader, Description, EventHub, Executor, Logger, LoggerOptions, NameResolver } from '@evan.network/dbcp';
export interface WalletOptions extends LoggerOptions {
    contractLoader: ContractLoader;
    description: Description;
    eventHub: EventHub;
    executor: Executor;
    nameResolver: NameResolver;
}
/**
 * Wallet helper. Used to create and manage wallets
 *
 * @class      Sharing (name)
 */
export declare class Wallet extends Logger {
    options: WalletOptions;
    defaultDescription: any;
    receipts: {};
    walletContract: any;
    constructor(options: WalletOptions);
    /**
     * add an owner to a wallet contract
     *
     * @param      {string}         accountId  account with management permissions on wallet
     * @param      {string}         toAdd      account to add as an owner
     * @return     {Promise<void>}  resolved when done
     */
    addOwner(accountId: string, toAdd: string): Promise<void>;
    /**
     * create a new wallet contract and uses it as its wallet contract
     *
     * @param      {string}         accountId  account id, that creates the wallet
     * @param      {string}         manager    account, that will be able to manage the new wallet
     * @param      {string[]}       owners     wallet owners
     * @return     {Promise<void>}  resolved when done
     */
    create(accountId: string, manager: string, owners: string[]): Promise<void>;
    /**
     * get all owners of a wallet
     *
     * @return     {string[]}  wallet owners
     */
    getOwners(): Promise<string[]>;
    /**
     * load wallet contract from address
     *
     * @param      {string}  contractId  a wallet contract address
     * @return     {void}
     */
    load(contractId: string): void;
    /**
     * remove an owner from a wallet contract
     *
     * @param      {string}         accountId  account with management permissions on wallet
     * @param      {string}         toRemove   account to remove from wallet owners
     * @return     {Promise<void>}  resolved when done
     */
    removeOwner(accountId: string, toRemove: string): Promise<void>;
    /**
     * submit a transaction to a wallet
     *
     * @param      {any}           target             contract of the submitted transaction
     * @param      {string}        functionName       name of the contract function to call
     * @param      {any}           inputOptions       currently supported: from, gas, event,
     *                                                getEventResult, eventTimeout, estimate, force
     * @param      {any[]}         functionArguments  optional arguments to pass to contract
     *                                                transaction
     * @return     {Promise<any>}  status information about transaction
     */
    submitTransaction(target: any, functionName: string, inputOptions: any, ...functionArguments: any[]): Promise<any>;
    private encodeFunctionParams(functionName, contractInstance, params);
    private ensureContract();
}
