lnaddr: small clean-up
This commit is contained in:
@@ -142,6 +142,13 @@ def tagged_bytes(char, l):
|
|||||||
return tagged(char, bitstring.BitArray(l))
|
return tagged(char, bitstring.BitArray(l))
|
||||||
|
|
||||||
def trim_to_min_length(bits):
|
def trim_to_min_length(bits):
|
||||||
|
"""Ensures 'bits' have min number of leading zeroes.
|
||||||
|
Assumes 'bits' is big-endian, and that it needs to be encoded in 5 bit blocks.
|
||||||
|
"""
|
||||||
|
bits = bits[:] # copy
|
||||||
|
# make sure we can be split into 5 bit blocks
|
||||||
|
while bits.len % 5 != 0:
|
||||||
|
bits.prepend('0b0')
|
||||||
# Get minimal length by trimming leading 5 bits at a time.
|
# Get minimal length by trimming leading 5 bits at a time.
|
||||||
while bits.startswith('0b00000'):
|
while bits.startswith('0b00000'):
|
||||||
if len(bits) == 5:
|
if len(bits) == 5:
|
||||||
@@ -210,7 +217,7 @@ def lnencode(addr: 'LnAddr', privkey):
|
|||||||
elif k == 'd':
|
elif k == 'd':
|
||||||
data += tagged_bytes('d', v.encode())
|
data += tagged_bytes('d', v.encode())
|
||||||
elif k == 'x':
|
elif k == 'x':
|
||||||
expirybits = bitstring.pack('intbe:64', v)[4:64]
|
expirybits = bitstring.pack('intbe:64', v)
|
||||||
expirybits = trim_to_min_length(expirybits)
|
expirybits = trim_to_min_length(expirybits)
|
||||||
data += tagged('x', expirybits)
|
data += tagged('x', expirybits)
|
||||||
elif k == 'h':
|
elif k == 'h':
|
||||||
@@ -218,15 +225,14 @@ def lnencode(addr: 'LnAddr', privkey):
|
|||||||
elif k == 'n':
|
elif k == 'n':
|
||||||
data += tagged_bytes('n', v)
|
data += tagged_bytes('n', v)
|
||||||
elif k == 'c':
|
elif k == 'c':
|
||||||
finalcltvbits = bitstring.pack('intbe:64', v)[4:64]
|
finalcltvbits = bitstring.pack('intbe:64', v)
|
||||||
finalcltvbits = trim_to_min_length(finalcltvbits)
|
finalcltvbits = trim_to_min_length(finalcltvbits)
|
||||||
data += tagged('c', finalcltvbits)
|
data += tagged('c', finalcltvbits)
|
||||||
elif k == '9':
|
elif k == '9':
|
||||||
if v == 0:
|
if v == 0:
|
||||||
continue
|
continue
|
||||||
feature_bits = bitstring.BitArray(uint=v, length=v.bit_length())
|
feature_bits = bitstring.BitArray(uint=v, length=v.bit_length())
|
||||||
while feature_bits.len % 5 != 0:
|
feature_bits = trim_to_min_length(feature_bits)
|
||||||
feature_bits.prepend('0b0')
|
|
||||||
data += tagged('9', feature_bits)
|
data += tagged('9', feature_bits)
|
||||||
else:
|
else:
|
||||||
# FIXME: Support unknown tags?
|
# FIXME: Support unknown tags?
|
||||||
|
|||||||
Reference in New Issue
Block a user