import AbstractChannelsDatabase from '../AbstractChannelsDatabase';
import * as BigNumber from 'bignumber.js';
import IChannelsDatabase from '../IChannelsDatabase';
import EngineNedb from './EngineNedb';
import ChannelId from '../../ChannelId';
import { PaymentChannel } from '../../PaymentChannel';
/**
 * Database layer for {PaymentChannel}
 */
export default class NedbChannelsDatabase extends AbstractChannelsDatabase<EngineNedb> implements IChannelsDatabase {
    save(paymentChannel: PaymentChannel): Promise<void>;
    firstById(channelId: ChannelId | string): Promise<PaymentChannel | null>;
    /**
     * Set amount of money spent on the channel.
     */
    spend(channelId: ChannelId | string, spent: BigNumber.BigNumber): Promise<void>;
    deposit(channelId: ChannelId | string, value: BigNumber.BigNumber): Promise<void>;
    /**
     * Retrieve all the payment channels stored.
     *
     * @return {Promise<PaymentChannel>}
     */
    all(): Promise<Array<PaymentChannel>>;
    allOpen(): Promise<PaymentChannel[]>;
    findUsable(sender: string, receiver: string, amount: BigNumber.BigNumber): Promise<PaymentChannel | null>;
    findBySenderReceiver(sender: string, receiver: string): Promise<Array<PaymentChannel>>;
    findBySenderReceiverChannelId(sender: string, receiver: string, channelId: ChannelId | string): Promise<PaymentChannel | null>;
    updateState(channelId: ChannelId | string, state: number): Promise<void>;
    updateSettlingUntil(channelId: ChannelId | string, settlingUntil: BigNumber.BigNumber): Promise<void>;
}
