ppad-bolt1-0.0.1: Base protocol per BOLT #1
Copyright(c) 2025 Jared Tobin
LicenseMIT
MaintainerJared Tobin <jared@ppad.tech>
Safe HaskellNone
LanguageHaskell2010

Lightning.Protocol.BOLT1.Prim

Description

Primitive type encoding and decoding for BOLT #1.

Synopsis

Chain hash

newtype ChainHash Source #

A chain hash (32-byte hash identifying a blockchain).

Constructors

ChainHash ByteString 

Instances

Instances details
NFData ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: ChainHash -> () #

Generic ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep ChainHash 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChainHash = D1 ('MetaData "ChainHash" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ChainHash" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChainHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChainHash = D1 ('MetaData "ChainHash" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ChainHash" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

chainHash :: ByteString -> Maybe ChainHash Source #

Construct a chain hash from a 32-byte bytestring.

Returns Nothing if the input is not exactly 32 bytes.

unChainHash :: ChainHash -> ByteString Source #

Extract the raw bytes from a chain hash.

Channel identifier

newtype ChannelId Source #

A 32-byte channel identifier.

Constructors

ChannelId ByteString 

Instances

Instances details
NFData ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: ChannelId -> () #

Generic ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep ChannelId 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChannelId = D1 ('MetaData "ChannelId" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ChannelId" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ChannelId = D1 ('MetaData "ChannelId" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ChannelId" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

channelId :: ByteString -> Maybe ChannelId Source #

Construct a ChannelId from a 32-byte ByteString.

Returns Nothing if the input is not exactly 32 bytes.

unChannelId :: ChannelId -> ByteString Source #

Extract the raw bytes from a ChannelId.

allChannels :: ChannelId Source #

The all-zeros channel ID (connection-level errors).

Signatures and keys

newtype Signature Source #

A 64-byte compact ECDSA signature.

Constructors

Signature ByteString 

Instances

Instances details
NFData Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: Signature -> () #

Generic Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep Signature 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Signature = D1 ('MetaData "Signature" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Signature" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Signature Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Signature = D1 ('MetaData "Signature" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Signature" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

signature :: ByteString -> Maybe Signature Source #

Construct a Signature from a 64-byte ByteString.

Returns Nothing if the input is not exactly 64 bytes.

unSignature :: Signature -> ByteString Source #

Extract the raw bytes from a Signature.

newtype Point Source #

A 33-byte compressed secp256k1 public key.

Constructors

Point ByteString 

Instances

Instances details
NFData Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: Point -> () #

Generic Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep Point 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Point = D1 ('MetaData "Point" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Point" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

Methods

from :: Point -> Rep Point x #

to :: Rep Point x -> Point #

Show Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

showsPrec :: Int -> Point -> ShowS #

show :: Point -> String #

showList :: [Point] -> ShowS #

Eq Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

(==) :: Point -> Point -> Bool #

(/=) :: Point -> Point -> Bool #

Ord Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

compare :: Point -> Point -> Ordering #

(<) :: Point -> Point -> Bool #

(<=) :: Point -> Point -> Bool #

(>) :: Point -> Point -> Bool #

(>=) :: Point -> Point -> Bool #

max :: Point -> Point -> Point #

min :: Point -> Point -> Point #

type Rep Point Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Point = D1 ('MetaData "Point" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Point" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

point :: ByteString -> Maybe Point Source #

Construct a Point from a 33-byte ByteString.

Returns Nothing if the input is not exactly 33 bytes.

unPoint :: Point -> ByteString Source #

Extract the raw bytes from a Point.

Payment types

newtype PaymentHash Source #

A 32-byte SHA256 payment hash.

Constructors

PaymentHash ByteString 

Instances

Instances details
NFData PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: PaymentHash -> () #

Generic PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep PaymentHash 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentHash = D1 ('MetaData "PaymentHash" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PaymentHash" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentHash Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentHash = D1 ('MetaData "PaymentHash" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PaymentHash" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

paymentHash :: ByteString -> Maybe PaymentHash Source #

Construct a PaymentHash from a 32-byte ByteString.

Returns Nothing if the input is not exactly 32 bytes.

unPaymentHash :: PaymentHash -> ByteString Source #

Extract the raw bytes from a PaymentHash.

newtype PaymentPreimage Source #

A 32-byte payment preimage.

Instances

Instances details
NFData PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: PaymentPreimage -> () #

Generic PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep PaymentPreimage 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentPreimage = D1 ('MetaData "PaymentPreimage" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PaymentPreimage" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentPreimage Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PaymentPreimage = D1 ('MetaData "PaymentPreimage" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PaymentPreimage" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

paymentPreimage :: ByteString -> Maybe PaymentPreimage Source #

Construct a PaymentPreimage from a 32-byte ByteString.

Returns Nothing if the input is not exactly 32 bytes.

Per-commitment secret

newtype PerCommitmentSecret Source #

A 32-byte per-commitment secret.

Instances

Instances details
NFData PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: PerCommitmentSecret -> () #

Generic PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep PerCommitmentSecret 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PerCommitmentSecret = D1 ('MetaData "PerCommitmentSecret" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PerCommitmentSecret" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PerCommitmentSecret Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep PerCommitmentSecret = D1 ('MetaData "PerCommitmentSecret" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "PerCommitmentSecret" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

perCommitmentSecret :: ByteString -> Maybe PerCommitmentSecret Source #

Construct a PerCommitmentSecret from a 32-byte ByteString.

Returns Nothing if the input is not exactly 32 bytes.

Short channel identifier

newtype ShortChannelId Source #

A short channel identifier (8 bytes packed as Word64).

Encodes block height (3 bytes), transaction index (3 bytes), and output index (2 bytes).

Constructors

ShortChannelId Word64 

Instances

Instances details
NFData ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: ShortChannelId -> () #

Generic ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep ShortChannelId 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ShortChannelId = D1 ('MetaData "ShortChannelId" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ShortChannelId" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))
Show ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ShortChannelId Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep ShortChannelId = D1 ('MetaData "ShortChannelId" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "ShortChannelId" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))

shortChannelId Source #

Arguments

:: Word32

Block height (24 bits max)

-> Word32

Transaction index (24 bits max)

-> Word16

Output index

-> Maybe ShortChannelId 

Construct a ShortChannelId from components.

Returns Nothing if block height or tx index exceed 24 bits.

scidWord64 :: ShortChannelId -> Word64 Source #

Extract the packed Word64 from a ShortChannelId.

scidBlockHeight :: ShortChannelId -> Word32 Source #

Extract the block height from a ShortChannelId.

scidTxIndex :: ShortChannelId -> Word32 Source #

Extract the transaction index from a ShortChannelId.

scidOutputIndex :: ShortChannelId -> Word16 Source #

Extract the output index from a ShortChannelId.

Amounts

newtype Satoshi Source #

Amount in satoshis.

Constructors

Satoshi 

Fields

Instances

Instances details
NFData Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: Satoshi -> () #

Enum Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Generic Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep Satoshi 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Satoshi = D1 ('MetaData "Satoshi" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Satoshi" 'PrefixI 'True) (S1 ('MetaSel ('Just "unSatoshi") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))

Methods

from :: Satoshi -> Rep Satoshi x #

to :: Rep Satoshi x -> Satoshi #

Num Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Integral Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Real Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Show Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

(==) :: Satoshi -> Satoshi -> Bool #

(/=) :: Satoshi -> Satoshi -> Bool #

Ord Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Satoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep Satoshi = D1 ('MetaData "Satoshi" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "Satoshi" 'PrefixI 'True) (S1 ('MetaSel ('Just "unSatoshi") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))

newtype MilliSatoshi Source #

Amount in millisatoshis.

Constructors

MilliSatoshi 

Instances

Instances details
NFData MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Methods

rnf :: MilliSatoshi -> () #

Enum MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Generic MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Associated Types

type Rep MilliSatoshi 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep MilliSatoshi = D1 ('MetaData "MilliSatoshi" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "MilliSatoshi" 'PrefixI 'True) (S1 ('MetaSel ('Just "unMilliSatoshi") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))
Num MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Integral MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Real MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Show MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Eq MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

Ord MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep MilliSatoshi Source # 
Instance details

Defined in Lightning.Protocol.BOLT1.Prim

type Rep MilliSatoshi = D1 ('MetaData "MilliSatoshi" "Lightning.Protocol.BOLT1.Prim" "ppad-bolt1-0.0.1-3AI6PDE70OhJud7vB7rIZR" 'True) (C1 ('MetaCons "MilliSatoshi" 'PrefixI 'True) (S1 ('MetaSel ('Just "unMilliSatoshi") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))

msatToSat :: MilliSatoshi -> Satoshi Source #

Convert MilliSatoshi to Satoshi (rounds down).

Unsigned integer encoding

encodeU16 :: Word16 -> ByteString Source #

Encode a 16-bit unsigned integer (big-endian).

>>> encodeU16 0x0102
"\SOH\STX"

encodeU32 :: Word32 -> ByteString Source #

Encode a 32-bit unsigned integer (big-endian).

>>> encodeU32 0x01020304
"\SOH\STX\ETX\EOT"

encodeU64 :: Word64 -> ByteString Source #

Encode a 64-bit unsigned integer (big-endian).

>>> encodeU64 0x0102030405060708
"\SOH\STX\ETX\EOT\ENQ\ACK\a\b"

Signed integer encoding

encodeS8 :: Int8 -> ByteString Source #

Encode an 8-bit signed integer.

>>> encodeS8 42
"*"
>>> encodeS8 (-42)
"\214"

encodeS16 :: Int16 -> ByteString Source #

Encode a 16-bit signed integer (big-endian two's complement).

>>> encodeS16 0x0102
"\SOH\STX"
>>> encodeS16 (-1)
"\255\255"

encodeS32 :: Int32 -> ByteString Source #

Encode a 32-bit signed integer (big-endian two's complement).

>>> encodeS32 0x01020304
"\SOH\STX\ETX\EOT"
>>> encodeS32 (-1)
"\255\255\255\255"

encodeS64 :: Int64 -> ByteString Source #

Encode a 64-bit signed integer (big-endian two's complement).

>>> encodeS64 0x0102030405060708
"\SOH\STX\ETX\EOT\ENQ\ACK\a\b"
>>> encodeS64 (-1)
"\255\255\255\255\255\255\255\255"

Truncated unsigned integer encoding

encodeTu16 :: Word16 -> ByteString Source #

Encode a truncated 16-bit unsigned integer (0-2 bytes).

Leading zeros are omitted per BOLT #1. Zero encodes to empty.

>>> encodeTu16 0
""
>>> encodeTu16 1
"\SOH"
>>> encodeTu16 256
"\SOH\NUL"

encodeTu32 :: Word32 -> ByteString Source #

Encode a truncated 32-bit unsigned integer (0-4 bytes).

Leading zeros are omitted per BOLT #1. Zero encodes to empty.

>>> encodeTu32 0
""
>>> encodeTu32 1
"\SOH"
>>> encodeTu32 0x010000
"\SOH\NUL\NUL"

encodeTu64 :: Word64 -> ByteString Source #

Encode a truncated 64-bit unsigned integer (0-8 bytes).

Leading zeros are omitted per BOLT #1. Zero encodes to empty.

>>> encodeTu64 0
""
>>> encodeTu64 1
"\SOH"
>>> encodeTu64 0x0100000000
"\SOH\NUL\NUL\NUL\NUL"

Minimal signed integer encoding

encodeMinSigned :: Int64 -> ByteString Source #

Encode a signed 64-bit integer using minimal bytes.

Uses the smallest number of bytes that can represent the value in two's complement. Per BOLT #1 Appendix D test vectors.

>>> encodeMinSigned 0
"\NUL"
>>> encodeMinSigned 127
"\DEL"
>>> encodeMinSigned 128
"\NUL\128"
>>> encodeMinSigned (-1)
"\255"
>>> encodeMinSigned (-128)
"\128"
>>> encodeMinSigned (-129)
"\255\DEL"

BigSize encoding

encodeBigSize :: Word64 -> ByteString Source #

Encode a BigSize value (variable-length unsigned integer).

>>> encodeBigSize 0
"\NUL"
>>> encodeBigSize 252
"\252"
>>> encodeBigSize 253
"\253\NUL\253"
>>> encodeBigSize 65536
"\254\NUL\SOH\NUL\NUL"

Unsigned integer decoding

decodeU16 :: ByteString -> Maybe (Word16, ByteString) Source #

Decode a 16-bit unsigned integer (big-endian).

decodeU32 :: ByteString -> Maybe (Word32, ByteString) Source #

Decode a 32-bit unsigned integer (big-endian).

decodeU64 :: ByteString -> Maybe (Word64, ByteString) Source #

Decode a 64-bit unsigned integer (big-endian).

Signed integer decoding

decodeS8 :: ByteString -> Maybe (Int8, ByteString) Source #

Decode an 8-bit signed integer.

decodeS16 :: ByteString -> Maybe (Int16, ByteString) Source #

Decode a 16-bit signed integer (big-endian two's complement).

decodeS32 :: ByteString -> Maybe (Int32, ByteString) Source #

Decode a 32-bit signed integer (big-endian two's complement).

decodeS64 :: ByteString -> Maybe (Int64, ByteString) Source #

Decode a 64-bit signed integer (big-endian two's complement).

Truncated unsigned integer decoding

decodeTu16 :: Int -> ByteString -> Maybe (Word16, ByteString) Source #

Decode a truncated 16-bit unsigned integer (0-2 bytes).

Returns Nothing if the encoding is non-minimal (has leading zeros).

decodeTu32 :: Int -> ByteString -> Maybe (Word32, ByteString) Source #

Decode a truncated 32-bit unsigned integer (0-4 bytes).

Returns Nothing if the encoding is non-minimal (has leading zeros).

decodeTu64 :: Int -> ByteString -> Maybe (Word64, ByteString) Source #

Decode a truncated 64-bit unsigned integer (0-8 bytes).

Returns Nothing if the encoding is non-minimal (has leading zeros).

Minimal signed integer decoding

decodeMinSigned :: Int -> ByteString -> Maybe (Int64, ByteString) Source #

Decode a minimal signed integer (1, 2, 4, or 8 bytes).

Validates that the encoding is minimal: the value could not be represented in fewer bytes. Per BOLT #1 Appendix D test vectors.

BigSize decoding

decodeBigSize :: ByteString -> Maybe (Word64, ByteString) Source #

Decode a BigSize value with minimality check.

Internal helpers

encodeLength :: ByteString -> Maybe ByteString Source #

Encode a length as u16, checking bounds.

Returns Nothing if the length exceeds 65535.