import { PaymentChannel, PaymentChannelJSON } from '../PaymentChannel';
import * as BigNumber from 'bignumber.js';
import IEngine from './IEngine';
import ChannelId from '../ChannelId';
import IChannelsDatabase from './IChannelsDatabase';
import ChannelInflator from '../ChannelInflator';
export default abstract class AbstractChannelsDatabase<T extends IEngine> implements IChannelsDatabase {
    engine: T;
    kind: string;
    inflator: ChannelInflator;
    constructor(engine: T, inflator: ChannelInflator, namespace: string | null);
    inflatePaymentChannels(channels: Array<PaymentChannelJSON>): Promise<Array<PaymentChannel>>;
    inflatePaymentChannel(json: PaymentChannelJSON): Promise<PaymentChannel | null>;
    filterByState(state: number, channels: PaymentChannel[]): PaymentChannel[];
    abstract save(paymentChannel: PaymentChannel): Promise<void>;
    saveOrUpdate(paymentChannel: PaymentChannel): Promise<void>;
    abstract deposit(channelId: ChannelId | string, value: BigNumber.BigNumber): Promise<void>;
    abstract firstById(channelId: ChannelId | string): Promise<PaymentChannel | null>;
    abstract spend(channelId: ChannelId | string, spent: BigNumber.BigNumber): Promise<void>;
    abstract all(): Promise<Array<PaymentChannel>>;
    abstract allOpen(): Promise<PaymentChannel[]>;
    allSettling(): Promise<PaymentChannel[]>;
    abstract findUsable(sender: string, receiver: string, amount: BigNumber.BigNumber): Promise<PaymentChannel | null>;
    abstract findBySenderReceiver(sender: string, receiver: string): Promise<Array<PaymentChannel>>;
    abstract findBySenderReceiverChannelId(sender: string, receiver: string, channelId: ChannelId | string): Promise<PaymentChannel | null>;
    abstract updateState(channelId: ChannelId | string, state: number): Promise<void>;
    abstract updateSettlingUntil(channelId: ChannelId | string, settlingUntil: BigNumber.BigNumber): Promise<void>;
}
