/// <reference types="node" />
import { MessageType } from '../MessageType';
import { IDlcMessage } from './DlcMessage';
import { HyperbolaPayoutCurvePieceJSON, PayoutCurvePiece, PolynomialPayoutCurvePieceJSON } from './PayoutCurvePiece';
export declare abstract class PayoutFunction {
    static deserialize(buf: Buffer): PayoutFunctionV0;
    abstract type: number;
    abstract length: bigint;
    abstract toJSON(): PayoutFunctionV0JSON;
    abstract serialize(): Buffer;
}
/**
 * PayoutFunction V0
 */
export declare class PayoutFunctionV0 extends PayoutFunction implements IDlcMessage {
    static type: MessageType;
    /**
     * Deserializes an payout_function_v0 message
     * @param buf
     */
    static deserialize(buf: Buffer): PayoutFunctionV0;
    /**
     * The type for payout_function_v0 message. payout_function_v0 = 42790
     */
    type: MessageType;
    length: bigint;
    endpoint0: bigint;
    endpointPayout0: bigint;
    extraPrecision0: number;
    pieces: IPayoutCurvePieces[];
    /**
     * Converts payout_function_v0 to JSON
     */
    toJSON(): PayoutFunctionV0JSON;
    /**
     * Serializes the payout_function_v0 message into a Buffer
     */
    serialize(): Buffer;
}
interface IPayoutCurvePieces {
    payoutCurvePiece: PayoutCurvePiece;
    endpoint: bigint;
    endpointPayout: bigint;
    extraPrecision: number;
}
interface IPayoutCurvePiecesJSON {
    payoutCurvePiece: PolynomialPayoutCurvePieceJSON | HyperbolaPayoutCurvePieceJSON;
    endpoint: number;
    endpointPayout: number;
    extraPrecision: number;
}
export interface PayoutFunctionV0JSON {
    type: number;
    endpoint0: number;
    endpointPayout0: number;
    extraPrecision0: number;
    pieces: IPayoutCurvePiecesJSON[];
}
export {};
