import Payment from './payment';
import { BigNumber } from 'bignumber.js';
import Serde from './Serde';
export interface PaymentChannelJSON {
    sender: string;
    receiver: string;
    channelId: string;
    value: BigNumber;
    spent: BigNumber;
    state: number;
    tokenContract: string;
    settlementPeriod: number;
    settlingUntil: BigNumber;
}
export interface SerializedPaymentChannel {
    state: number;
    spent: string;
    value: string;
    channelId: string;
    receiver: string;
    sender: string;
    tokenContract?: string;
    settlementPeriod: number;
    settlingUntil: string;
}
/**
 * The Payment Channel
 */
export declare class PaymentChannel {
    sender: string;
    receiver: string;
    channelId: string;
    value: BigNumber;
    spent: BigNumber;
    state: number;
    tokenContract: string;
    settlementPeriod: number;
    settlingUntil: BigNumber;
    /**
     * @param sender      Ethereum address of the client.
     * @param receiver    Ethereum address of the server.
     * @param channelId   Identifier of the channel.
     * @param value       Total value of the channel.
     * @param spent       Value sent by {sender} to {receiver}.
     * @param state       0 - 'open', 1 - 'settling', 2 - 'settled'
     * @param tokenContract
     * @param settlementPeriod
     * @param settlingUntil
     */
    constructor(sender: string, receiver: string, channelId: string, value: BigNumber, spent: BigNumber, state?: number, tokenContract?: string, settlementPeriod?: number, settlingUntil?: BigNumber);
    static fromPayment(payment: Payment): PaymentChannel;
    static fromDocument(document: PaymentChannelJSON): PaymentChannel;
}
export declare class PaymentChannelSerde implements Serde<PaymentChannel> {
    static instance: PaymentChannelSerde;
    serialize(obj: PaymentChannel): SerializedPaymentChannel;
    deserialize(data: any): PaymentChannel;
}
