Example #1
0
 async def f():
     async with TaskGroup() as group:
         for peer in peers:
             await group.spawn(peer._message_loop())
             await group.spawn(peer.htlc_switch())
         await asyncio.sleep(0.2)
         pay_req = await self.prepare_invoice(
             graph.w_d, include_routing_hints=True)
         invoice_features = LnFeatures(
             lndecode(pay_req).get_tag('9') or 0)
         self.assertFalse(
             invoice_features.supports(LnFeatures.BASIC_MPP_OPT))
         await group.spawn(pay(pay_req))
Example #2
0
 def __init__(self, *, local_keypair: Keypair, chans: Iterable['Channel'],
              tx_queue):
     Logger.__init__(self)
     NetworkRetryManager.__init__(self,
                                  max_retry_delay_normal=1,
                                  init_retry_delay_normal=1)
     self.node_keypair = local_keypair
     self.network = MockNetwork(tx_queue)
     self.channel_db = self.network.channel_db
     self._channels = {chan.channel_id: chan for chan in chans}
     self.payments = {}
     self.logs = defaultdict(list)
     self.wallet = MockWallet()
     self.features = LnFeatures(0)
     self.features |= LnFeatures.OPTION_DATA_LOSS_PROTECT_OPT
     self.features |= LnFeatures.OPTION_UPFRONT_SHUTDOWN_SCRIPT_OPT
     self.pending_payments = defaultdict(asyncio.Future)
     for chan in chans:
         chan.lnworker = self
     self._peers = {}  # bytes -> Peer
     # used in tests
     self.enable_htlc_settle = asyncio.Event()
     self.enable_htlc_settle.set()
     self.received_htlcs = defaultdict(set)
     self.sent_htlcs = defaultdict(asyncio.Queue)
     self.htlc_routes = defaultdict(list)
    def test_features(self):
        lnaddr = lndecode("lnbc25m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdq5vdhkven9v5sxyetpdees9qzsze992adudgku8p05pstl6zh7av6rx2f297pv89gu5q93a0hf3g7lynl3xq56t23dpvah6u7y9qey9lccrdml3gaqwc6nxsl5ktzm464sq73t7cl")
        self.assertEqual(514, lnaddr.get_tag('9'))
        self.assertEqual(LnFeatures(514), lnaddr.get_features())

        with self.assertRaises(UnknownEvenFeatureBits):
            lndecode("lnbc25m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdq5vdhkven9v5sxyetpdees9q4pqqqqqqqqqqqqqqqqqqszk3ed62snp73037h4py4gry05eltlp0uezm2w9ajnerhmxzhzhsu40g9mgyx5v3ad4aqwkmvyftzk4k9zenz90mhjcy9hcevc7r3lx2sphzfxz7")
Example #4
0
 def test_ln_features_for_invoice(self):
     features = LnFeatures.OPTION_DATA_LOSS_PROTECT_REQ
     self.assertEqual(LnFeatures(0), features.for_invoice())
     features = LnFeatures.PAYMENT_SECRET_OPT
     self.assertEqual(features, features.for_invoice())
     features = LnFeatures.PAYMENT_SECRET_REQ
     self.assertEqual(features, features.for_invoice())
     features = LnFeatures.PAYMENT_SECRET_REQ | LnFeatures.VAR_ONION_REQ
     self.assertEqual(features, features.for_invoice())
     features = LnFeatures.BASIC_MPP_OPT | LnFeatures.PAYMENT_SECRET_REQ | LnFeatures.OPTION_DATA_LOSS_PROTECT_REQ
     self.assertEqual(LnFeatures.BASIC_MPP_OPT | LnFeatures.PAYMENT_SECRET_REQ,
                      features.for_invoice())
     features = LnFeatures.BASIC_MPP_OPT | LnFeatures.PAYMENT_SECRET_REQ | LnFeatures.VAR_ONION_OPT | LnFeatures.OPTION_DATA_LOSS_PROTECT_REQ
     self.assertEqual(LnFeatures.BASIC_MPP_OPT | LnFeatures.PAYMENT_SECRET_REQ | LnFeatures.VAR_ONION_OPT,
                      features.for_invoice())
     features = LnFeatures.BASIC_MPP_OPT | LnFeatures.PAYMENT_SECRET_REQ | LnFeatures.VAR_ONION_REQ
     self.assertEqual(features, features.for_invoice())
Example #5
0
 def __init__(self, remote_keypair, local_keypair, chan: 'Channel', tx_queue):
     Logger.__init__(self)
     self.remote_keypair = remote_keypair
     self.node_keypair = local_keypair
     self.network = MockNetwork(tx_queue)
     self.channels = {chan.channel_id: chan}
     self.payments = {}
     self.logs = defaultdict(list)
     self.wallet = MockWallet()
     self.features = LnFeatures(0)
     self.features |= LnFeatures.OPTION_DATA_LOSS_PROTECT_OPT
     self.pending_payments = defaultdict(asyncio.Future)
     chan.lnworker = self
     chan.node_id = remote_keypair.pubkey
     # used in tests
     self.enable_htlc_settle = asyncio.Event()
     self.enable_htlc_settle.set()
Example #6
0
 def __init__(self, *, local_keypair: Keypair, chans: Iterable['Channel'], tx_queue, name):
     self.name = name
     Logger.__init__(self)
     NetworkRetryManager.__init__(self, max_retry_delay_normal=1, init_retry_delay_normal=1)
     self.node_keypair = local_keypair
     self.network = MockNetwork(tx_queue)
     self.taskgroup = TaskGroup()
     self.lnwatcher = None
     self.listen_server = None
     self._channels = {chan.channel_id: chan for chan in chans}
     self.payments = {}
     self.logs = defaultdict(list)
     self.wallet = MockWallet()
     self.features = LnFeatures(0)
     self.features |= LnFeatures.OPTION_DATA_LOSS_PROTECT_OPT
     self.features |= LnFeatures.OPTION_UPFRONT_SHUTDOWN_SCRIPT_OPT
     self.features |= LnFeatures.VAR_ONION_OPT
     self.features |= LnFeatures.PAYMENT_SECRET_OPT
     self.features |= LnFeatures.OPTION_TRAMPOLINE_ROUTING_OPT
     self.pending_payments = defaultdict(asyncio.Future)
     for chan in chans:
         chan.lnworker = self
     self._peers = {}  # bytes -> Peer
     # used in tests
     self.enable_htlc_settle = asyncio.Event()
     self.enable_htlc_settle.set()
     self.enable_htlc_forwarding = asyncio.Event()
     self.enable_htlc_forwarding.set()
     self.received_mpp_htlcs = dict()
     self.sent_htlcs = defaultdict(asyncio.Queue)
     self.sent_htlcs_routes = dict()
     self.sent_buckets = defaultdict(set)
     self.trampoline_forwarding_failures = {}
     self.inflight_payments = set()
     self.preimages = {}
     self.stopping_soon = False