Browse Source

encapsulate get_routing_info in lnaddr

patch-4
ThomasV 4 years ago
parent
commit
4febbcdc2d
  1. 11
      electrum/lnaddr.py
  2. 9
      electrum/lnworker.py

11
electrum/lnaddr.py

@ -8,6 +8,7 @@ from binascii import hexlify
from decimal import Decimal
from typing import Optional
import random
import bitstring
from .bitcoin import hash160_to_b58_address, b58_address_to_hash160
@ -282,6 +283,16 @@ class LnAddr(object):
return None
return self.amount * COIN
def get_routing_info(self, tag):
# note: tag will be 't' for trampoline
r_tags = list(filter(lambda x: x[0] == tag, self.tags))
# strip the tag type, it's implicitly 'r' now
r_tags = list(map(lambda x: x[1], r_tags))
# if there are multiple hints, we will use the first one that works,
# from a random permutation
random.shuffle(r_tags)
return r_tags
def get_amount_msat(self) -> Optional[int]:
if self.amount is None:
return None

9
electrum/lnworker.py

@ -1144,15 +1144,8 @@ class LNWallet(LNWorker):
# TODO: return multiples routes if we know that a single one will not work
# initially, try with less htlcs
invoice_pubkey = decoded_invoice.pubkey.serialize()
# use 'r' field from invoice
r_tags = decoded_invoice.get_routing_info('r')
route = None # type: Optional[LNPaymentRoute]
# only want 'r' tags
r_tags = list(filter(lambda x: x[0] == 'r', decoded_invoice.tags))
# strip the tag type, it's implicitly 'r' now
r_tags = list(map(lambda x: x[1], r_tags))
# if there are multiple hints, we will use the first one that works,
# from a random permutation
random.shuffle(r_tags)
channels = list(self.channels.values())
scid_to_my_channels = {chan.short_channel_id: chan for chan in channels
if chan.short_channel_id is not None}

Loading…
Cancel
Save