encapsulate get_routing_info in lnaddr
This commit is contained in:
@@ -8,6 +8,7 @@ from binascii import hexlify
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
import random
|
||||||
import bitstring
|
import bitstring
|
||||||
|
|
||||||
from .bitcoin import hash160_to_b58_address, b58_address_to_hash160
|
from .bitcoin import hash160_to_b58_address, b58_address_to_hash160
|
||||||
@@ -282,6 +283,16 @@ class LnAddr(object):
|
|||||||
return None
|
return None
|
||||||
return self.amount * COIN
|
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]:
|
def get_amount_msat(self) -> Optional[int]:
|
||||||
if self.amount is None:
|
if self.amount is None:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1144,15 +1144,8 @@ class LNWallet(LNWorker):
|
|||||||
# TODO: return multiples routes if we know that a single one will not work
|
# TODO: return multiples routes if we know that a single one will not work
|
||||||
# initially, try with less htlcs
|
# initially, try with less htlcs
|
||||||
invoice_pubkey = decoded_invoice.pubkey.serialize()
|
invoice_pubkey = decoded_invoice.pubkey.serialize()
|
||||||
# use 'r' field from invoice
|
r_tags = decoded_invoice.get_routing_info('r')
|
||||||
route = None # type: Optional[LNPaymentRoute]
|
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())
|
channels = list(self.channels.values())
|
||||||
scid_to_my_channels = {chan.short_channel_id: chan for chan in channels
|
scid_to_my_channels = {chan.short_channel_id: chan for chan in channels
|
||||||
if chan.short_channel_id is not None}
|
if chan.short_channel_id is not None}
|
||||||
|
|||||||
Reference in New Issue
Block a user