Browse Source

lnaddr: small clean-up

hard-fail-on-bad-server-string
SomberNight 5 years ago
parent
commit
94e3c078f8
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 14
      electrum/lnaddr.py

14
electrum/lnaddr.py

@ -142,6 +142,13 @@ def tagged_bytes(char, l):
return tagged(char, bitstring.BitArray(l))
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.
while bits.startswith('0b00000'):
if len(bits) == 5:
@ -210,7 +217,7 @@ def lnencode(addr: 'LnAddr', privkey):
elif k == 'd':
data += tagged_bytes('d', v.encode())
elif k == 'x':
expirybits = bitstring.pack('intbe:64', v)[4:64]
expirybits = bitstring.pack('intbe:64', v)
expirybits = trim_to_min_length(expirybits)
data += tagged('x', expirybits)
elif k == 'h':
@ -218,15 +225,14 @@ def lnencode(addr: 'LnAddr', privkey):
elif k == 'n':
data += tagged_bytes('n', v)
elif k == 'c':
finalcltvbits = bitstring.pack('intbe:64', v)[4:64]
finalcltvbits = bitstring.pack('intbe:64', v)
finalcltvbits = trim_to_min_length(finalcltvbits)
data += tagged('c', finalcltvbits)
elif k == '9':
if v == 0:
continue
feature_bits = bitstring.BitArray(uint=v, length=v.bit_length())
while feature_bits.len % 5 != 0:
feature_bits.prepend('0b0')
feature_bits = trim_to_min_length(feature_bits)
data += tagged('9', feature_bits)
else:
# FIXME: Support unknown tags?

Loading…
Cancel
Save