/// <reference types="node" />
import { StreamReader } from '@node-dlc/bufio';
import { ICloneable } from './ICloneable';
import { TimeLockMode } from './TimeLockMode';
/**
 * A transaction input's nSequence field according to BIP 68 where
 * rules for relative timelocks are defined. Relative timelocks prevent
 * mining of a transaction until a certain age of the spent output
 * in blocks or timespan.
 *
 * nSequence defaults to a value of 0xffff_ffff which disables the field.
 * When using a nLocktime, at least one transaction must be non-default.
 * In this condition, it is standard to use 0xffff_fffe.
 */
export declare class Sequence implements ICloneable<Sequence> {
    /**
     * Parses the value from a byte stream
     * @param reader
     */
    static parse(reader: StreamReader): Sequence;
    /**
     * Creates an nSequence value of 0xffff_fffe which is used to enable
     * nLockTime.
     */
    static locktime(): Sequence;
    /**
     * Creates an nSequence value of 0xffff_fffd which is used to
     * enable opt-in full replace-by-fee.
     */
    static rbf(): Sequence;
    /**
     * Creates an nSequence value of 0xffff_ffff
     */
    static default(): Sequence;
    /**
     * Creates an nSequence value of 0
     */
    static zero(): Sequence;
    /**
     * Creates an nSequence value with the specified block delay
     * @param blocks number of blocks sequence must wait
     */
    static blockDelay(blocks: number): Sequence;
    /**
     * Creates an nSequence value with the specified time delay
     * @param seconds delay in seconds which will be rounded up to the
     * nearest 512 second interval
     */
    static timeDelay(seconds: number): Sequence;
    /**
     * Gets or sets the raw nSequence value.
     */
    get value(): number;
    set value(val: number);
    private _value;
    constructor(val?: number);
    /**
     * Returns true when the nSequence is the default value 0xffff_ffff
     */
    get isDefault(): boolean;
    /**
     * Returns true when the relative timelock is enabled. Technically
     * this occurs when the top-most bit is unset. This means that the
     * default value of 0xffff_ffff is unset.
     */
    get enabled(): boolean;
    /**
     * Returns true for a value that would enable nLockTime. To enable
     * nLockTime, at least one input in the transaction must have a
     * non-default nSequence value.
     */
    get isLockTimeSignaled(): boolean;
    /**
     * Returns true for a value that would signal opt-in replace-by-fee
     * as defined in BIP 125. To signal this, the nSequence must be less
     * than 0xffffffff-1.
     */
    get isRBFSignaled(): boolean;
    /**
     * Gets the time lock mode for the nSequence. Technically, the bit
     * with index 22 controls the mode. When the bit is set, it will use
     * time-based relative time locks. When it is unset, it will use
     * block-based relatively time locks.
     */
    get mode(): TimeLockMode;
    /**
     * Gets or sets a relative timelock in seconds. Time-based relative
     * time locks are encoded in 512 second granularity which is close
     * to the 600 seconds each block should be generated in. When
     * setting a value in seconds, it will rounded up to the nearest
     * 512s granularity.
     */
    get timeDelay(): number;
    set timeDelay(seconds: number);
    /**
     * Gets or set a relative timelock in blocks.
     */
    get blockDelay(): number;
    set blockDelay(blocks: number);
    /**
     * Serializes the value to a buffer
     */
    serialize(): Buffer;
    /**
     * Returns the raw value as a hex encoded string, eg: 0xfffffffe
     */
    toString(): string;
    /**
     * Returns the raw value as a hex encoded string, eg: 0xfffffffe
     */
    toJSON(): string;
    /**
     * Clone via deep copy
     */
    clone(): Sequence;
}
