import { ContractLoader, Executor, Logger, LoggerOptions, NameResolver } from '@evan.network/dbcp';
/**
 * describes contracts overall state
 */
export declare enum ContractState {
    Initial = 0,
    Error = 1,
    Draft = 2,
    PendingApproval = 3,
    Approved = 4,
    Active = 5,
    VerifyTerminated = 6,
    Terminated = 7,
}
/**
 * describes the state of a consumer or owner in a contract
 */
export declare enum ConsumerState {
    Initial = 0,
    Error = 1,
    Draft = 2,
    Rejected = 3,
    Active = 4,
    Terminated = 5,
}
/**
 * options for BaseContract constructor
 */
export interface BaseContractOptions extends LoggerOptions {
    executor: Executor;
    loader: ContractLoader;
    nameResolver: NameResolver;
}
/**
 * wrapper for BaseContract interactions
 *
 * @class      BaseContract (name)
 */
export declare class BaseContract extends Logger {
    protected options: BaseContractOptions;
    constructor(optionsInput: BaseContractOptions);
    /**
     * create new contract but do not initialize it yet
     *
     * @param      {string}           factoryName           contract factory name, used for ENS lookup
     * @param      {string}           accountId             Ethereum account id
     * @param      {string}           businessCenterDomain  business center in which the contract will
     *                                                      be created; use null when working without
     *                                                      business center
     * @param      {string}           descriptionDfsHash    bytes32 hash for description in dfs
     * @return     {Promise<string>}  Ethereum id of new contract
     */
    createUninitialized(factoryName: string, accountId: string, businessCenterDomain?: string, descriptionDfsHash?: string): Promise<string>;
    /**
     * invite user to contract
     *
     * @param      {string}         businessCenterDomain  ENS domain name of the business center the
     *                                                    contract was created in; use null when
     *                                                    working without business center
     * @param      {string}         contract              Ethereum id of the contract
     * @param      {string}         inviterId             account id of inviting user
     * @param      {string}         inviteeId             account id of invited user
     * @return     {Promise<void>}  resolved when done
     */
    inviteToContract(businessCenterDomain: string, contract: string, inviterId: string, inviteeId: string): Promise<void>;
    /**
     * set state of the contract
     *
     * @param      {string|any}     contract   contract instance or contract id
     * @param      {string}         accountId  Ethereum account id
     * @param      {ContractState}  state      new state
     * @return     {Promise<void>}  resolved when done
     */
    changeContractState(contract: string | any, accountId: string, state: ContractState): Promise<void>;
    /**
     * set state of a consumer
     *
     * @param      {string|any}     contract    contract instance or contract id
     * @param      {string}         accountId   Ethereum account id
     * @param      {string}         consumerId  Ethereum account id
     * @param      {ConsumerState}  state       new state
     * @return     {Promise<void>}  resolved when done
     */
    changeConsumerState(contract: string | any, accountId: string, consumerId: string, state: ConsumerState): Promise<void>;
}
