ThomasV
6dfbdec73e
follow-up prev commit
2023-10-20 13:52:55 +02:00
ThomasV
b26f954c2d
lnworker.pay_to_node: skip error handling if sender_idx is None
2023-10-20 13:42:12 +02:00
SomberNight
22a8348303
renames: use consistent naming of cltv delta vs cltv abs
...
to avoid confusing relative vs absolute cltvs
(see b0401a6386 )
2023-10-19 16:40:05 +00:00
SomberNight
f78340efbc
lnworker: (trivial) fix type hint
...
follow-up 4c42840c1c
2023-10-19 15:26:20 +00:00
ThomasV
4c42840c1c
lnpeer: obfuscate error pakets of forwarded htlcs, that we
...
propageate back to the sender.
lnworker: in htlc_fulfilled and htlc_failed, return early if the
htlc was forwarded, so that we do not trigger invoice callbacks
2023-10-19 15:59:26 +02:00
SomberNight
a059a9a256
lnpeer.pay: also log hops_data for trampoline_onion
...
We were already logging the outer-layer hops_data,
now we also log the inner trampoline-onion hops_data.
Example:
```
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | lnpeer.pay len(route)=1
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | 0: edge=9926297x9781928x61754 hop_data=<OnionHopsDataSingle. payload={'amt_to_forward': {'amt_to_forward': 100000000}, 'outgoing_cltv_value': {'outgoing_cltv_value': 601299}, 'payment_data': {'payment_secret': b'\xd2\x9cl\xdfV\xd4\xea_\x06{\xed\xc9\xc7\xa6\xf5\xc0\n\x1a\x95\xad\xad\xd2F\xb8;&\x9f\xa1\xe1\xd1\x07H', 'total_msat': 100000000, 'amount_msat': 100000000}}. hmac=None>
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | adding trampoline onion to final payload
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | lnpeer.pay len(t_route)=3
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | 0: t_node=02389c93b85ef8f7264c6fa3d3b239341c2631c2cab97e815b33453bd8d0254e77 hop_data=<OnionHopsDataSingle. payload={'amt_to_forward': {'amt_to_forward': 100000000}, 'outgoing_cltv_value': {'outgoing_cltv_value': 600723}, 'outgoing_node_id': {'outgoing_node_id': b'\x03\x06\xd9,\x9c\xabRe\x83Mr\x0b\x14(\xf5\x81\xf9\xfb\x9b\xfeV\xc1q\x85&L\xda\xffs\xe5y(\x81'}}. hmac=b'\xe7\x04\xe2>\x9a\xd9\xf0\x92<\xf8Q\xe4\xf4\xd8\x8cr{\x1e\xb1\xee\xb0\xd4R\xba\xe5\xfd\x83\xfc\xd7\xa7\x1dt'>
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | 1: t_node=0306d92c9cab5265834d720b1428f581f9fb9bfe56c17185264cdaff73e5792881 hop_data=<OnionHopsDataSingle. payload={'amt_to_forward': {'amt_to_forward': 100000000}, 'outgoing_cltv_value': {'outgoing_cltv_value': 600147}, 'outgoing_node_id': {'outgoing_node_id': b'\x03\x85v\xac:\xf8AUW\xcf\x1d\x12e\xcc\xff\xb1\xea\xd6\x01\xd5\x17HX?\x12\x83\x9cD\xbe\xebC\x82o'}}. hmac=b's-\xe1\xdb\xbc\xa5\x88\x90\xc0\xafu\xab\xba\xb6k\x81\xeae)#\x85\x12fm\xe6\xc3\xbd\xf6\x86eR\xd2'>
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | 2: t_node=038576ac3af8415557cf1d1265ccffb1ead601d51748583f12839c44beeb43826f hop_data=<OnionHopsDataSingle. payload={'amt_to_forward': {'amt_to_forward': 100000000}, 'outgoing_cltv_value': {'outgoing_cltv_value': 600147}, 'payment_data': {'payment_secret': b'B-P\x01\xc3\x1e#\x19\xf9!\xbb\xd8\xd1pu\xc7J\x11A\xa8J\xfe\xb8\x8a\xb8\xc4Oi\x0f\xe8\xac\xab', 'total_msat': 100000000}}. hmac=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'>
1.12 | I | P/lnpeer.Peer.[MockLNWallet, alice->bob] | starting payment. len(route)=1.
```
2023-10-18 18:07:21 +00:00
ThomasV
2664ee7f63
pay_to_node: raise failure_msg if we received a trampoline error from the next onion.
...
that way, the error is sent back to the payer
2023-10-18 19:32:13 +02:00
SomberNight
30c863d32c
lnaddr: don't call validate_features in parser
...
- see comment in lnaddr.py
- Previously we used feature bit 50/51 for trampoline.
The spec subsequently defined fbit 50/51 as option_zeroconf, which
requires fbit 46/47 (option_scid_alias) to also be set.
We moved the non-standard trampoline fbit to a different int.
However, old wallets might have old invoices saved that set fbit 50/51
for trampoline, and those would not have the dependent bit set.
Invoices are parsed at wallet-open, so if the parser ran these checks,
those wallets could not be opened.
- note: we could potentially also run lnaddr.validate_and_compare_features
when saving new invoices into the wallet but this is not done here
2023-10-16 17:10:49 +00:00
ThomasV
98a4d7b60d
public channels:
...
- send node and channel announcements.
- store channel_flags in constraints
- store signatures in local and remote configs
2023-10-16 13:54:16 +02:00
ThomasV
aad4fd6d48
Fix sending of 'channel_ready':
...
- send only once
- in channel_reestablish, do not send it if we are not funded.
- lnworker: do not send channel_ready before channel_reestablish
2023-10-15 10:58:37 +02:00
ThomasV
89023cc123
Remove trampoline hints from invoices
...
This has been deprecated for a long time, was kept only for
compatibility with old electrum clients.
2023-10-11 09:47:36 +02:00
ThomasV
57c9059cab
open_channel_with_peer: return funding tx
...
(this makes things easier the just_in_time_channels branch)
2023-10-09 17:02:19 +02:00
ThomasV
e2fb928e4f
delete htlc session keys once they are no longer needed.
...
fixes #8630
Note: maybe we should plan a WalletDB upgrade to cleanup
existing wallets.
2023-10-08 15:52:41 +02:00
ThomasV
4e76ed6952
move INITIAL_TRAMPOLINE_FEE_LEVEL to config
2023-10-08 15:06:19 +02:00
ThomasV
40eba6f780
submarine swaps: improve labels
...
- claim tx was incorrectly labeled
- if we send tx change to a swap, display both labels
2023-10-05 15:41:04 +02:00
ThomasV
d7beb109b8
lnworker: separate add_peer from _open_channel_coroutine
2023-09-19 09:45:56 +02:00
ThomasV
cffbe44c07
lnworker: get_channel_by_short_id to use remote scid_alias
...
This is needed when forwarding payments
2023-09-17 11:12:23 +02:00
ThomasV
375f96f7fa
remove lnworker.get_channel_by_scid (redundant)
2023-09-17 11:06:25 +02:00
ThomasV
c27e6de975
Merge pull request #8616 from SomberNight/202309_dont_sign_tx_with_dummy_addr
...
add sanity checks we don't sign tx including dummy addr
2023-09-16 15:02:36 +02:00
ThomasV
59aa7611dd
add group_id to swap refund transactions, so that the GUI shows them as part of the swap tx group
2023-09-16 11:09:39 +02:00
SomberNight
4c63d8729b
add sanity checks we don't sign tx including dummy addr
...
Somewhat a follow-up to 649ce979ab .
This adds some safety belts so we don't accidentally sign a tx that
contains a dummy address.
Specifically we check that tx does not contain output for dummy addr:
- in wallet.sign_transaction
- in network.broadcast_transaction
The second one is perhaps redundant, but I think it does not hurt.
2023-09-16 04:36:08 +00:00
SomberNight
2746a9d93f
lnchannel: replace assert htlc.payment_hash==sha256(preimage) w/ exc
...
asserts should not be used for security checks
2023-09-12 13:30:48 +00:00
ThomasV
649ce979ab
send tx change to lightning
2023-09-09 14:14:43 +02:00
ThomasV
136978e9d0
submarine swaps: fail received HTLCs of normal swap htlcs if
...
the swap is still unfunded and the refund delay has expired.
2023-09-08 16:38:08 +02:00
SomberNight
a560841f3f
lnworker: fix some type hints re hold_invoices
2023-09-06 19:01:41 +00:00
SomberNight
2529323ba3
(trivial) lnworker: fix type hint
2023-09-06 14:11:41 +00:00
ThomasV
af27d5b95e
Payment bundles: use lists of payment keys.
...
That way we don't need to special case trampoline outer onions
2023-09-06 10:44:55 +02:00
ThomasV
4d0ec8d177
lnworker: choose IP address with recent timestamp (Rogach)
2023-08-30 09:32:34 +02:00
ThomasV
b2053c68f1
make use_to_trampolines a user visible option, disable it by default
2023-08-27 11:43:17 +02:00
SomberNight
a3997f8b58
lnworker: don't create invoice with dupl t-hints, & filter when sending
...
- when creating an invoice, if we had multiple chans with the same trampoline,
were putting duplicate t-hints into the invoice
- when paying an invoice that had duplicate t-hints, we would sometimes
construct invalid paths (SRC>T1->T1->DST)
2023-08-17 20:04:02 +00:00
SomberNight
98ccad68c1
channel_db: add TTLs to channel_updates_for_private_channels
...
eclair sends CHANNEL_DISABLED if its peer is offline. E.g. we might be
trying to pay a mobile phone with the app closed. In that case we
should not cache the CHANNEL_DISABLED for too long.
2023-08-15 16:34:51 +00:00
SomberNight
1dd0608718
lnrouter: rework blacklist a bit
...
separate from LiquidityHintMgr
2023-08-15 16:34:48 +00:00
SomberNight
13864f7abe
lnworker: clear paysessions dict
2023-08-11 22:01:22 +00:00
SomberNight
98bda60c01
lnworker: move sent_buckets into PaySession
2023-08-11 22:01:19 +00:00
SomberNight
00e88c4e50
lnworker: introduce PaySession cls, refactor pay_to_node
2023-08-11 22:01:16 +00:00
SomberNight
98bea49a3c
lnworker.pay_to_node: make trampoline fee_level and failed_routes local
...
multiple instances of pay_to_node might run concurrently, esp for trampoline forwarding
2023-08-11 22:01:11 +00:00
SomberNight
35c9ac8f31
lnworker: MPP send: more aggressively split large htlcs
...
related: https://github.com/spesmilo/electrum/issues/7987#issuecomment-1670002482
2023-08-11 22:01:08 +00:00
SomberNight
8f768d1da5
lnworker.pay_to_node: log num htlcs in-flight
2023-08-11 22:01:05 +00:00
ThomasV
40f2087ac3
Add option for support_large_channels.
...
max_funding_sats is a config variable and defaults to the old value.
2023-08-09 16:36:12 +02:00
ThomasV
1ce50b9dee
submarine swaps: register callbacks on startup
2023-08-09 14:15:49 +02:00
ThomasV
bf86cd6761
lnpeer and lnworker cleanup:
...
- rename trampoline_forwardings -> final_onion_forwardings,
because this dict is used for both trampoline and hold invoices
- remove timeout from hold_invoice_callbacks (redundant with invoice)
- add test_failure boolean parameter to TestPeer._test_simple_payment,
in order to test correct propagation of OnionRoutingFailures.
- maybe_fulfill_htlc: raise an OnionRoutingFailure if we do not have
the preimage for a payment that does not have a hold invoice callback.
Without this, the above unit tests stall when we use test_failure=True
2023-08-09 13:23:26 +02:00
SomberNight
47a591b87f
lnworker.pay_invoice: log more
...
related https://github.com/spesmilo/electrum/issues/7987#issuecomment-1670002482
2023-08-08 17:13:10 +00:00
SomberNight
afac158c80
lnworker: clean-up sent_htlcs_q and sent_htlcs_info
...
- introduce SentHtlcInfo named tuple
- some previously unnamed tuples are now much shorter:
create_routes_for_payment no longer returns an 8-tuple!
- sent_htlcs_q (renamed from sent_htlcs), is now keyed on payment_hash+payment_secret
(needed for proper trampoline forwarding)
2023-08-08 16:37:50 +00:00
SomberNight
44bdd20ccc
lnworker: add RecvMPPResolution with "FAILED" state
...
- add RecvMPPResolution enum for possible states of a pending incoming MPP,
and use it in check_mpp_status
- new state: "FAILED", to allow nicely failing back the whole MPP set
- key more things with payment_hash+payment_secret, for consistency
(just payment_hash is insufficient for trampoline forwarding)
2023-08-08 16:37:46 +00:00
SomberNight
d51f00e2a3
asyncio.wait_for() is too buggy. use util.wait_for2() instead
...
wasted some time because asyncio.wait_for() was suppressing cancellations. [0][1][2]
deja vu... [3]
Looks like this is finally getting fixed in cpython 3.12 [4]
So far away...
In attempt to avoid encountering this again, let's try using
asyncio.timeout in 3.11, which is how upstream reimplemented wait_for in 3.12 [4], and
aiorpcx.timeout_after in 3.8-3.10.
[0] https://github.com/python/cpython/issues/86296
[1] https://bugs.python.org/issue42130
[2] https://bugs.python.org/issue45098
[3] https://github.com/kyuupichan/aiorpcX/issues/44
[4] https://github.com/python/cpython/pull/98518
2023-08-04 18:18:21 +00:00
ThomasV
a6a2679d8a
Merge pull request #8536 from SomberNight/202307_ln_imported_cb
...
fix sweeping chan after local force-close using cb
2023-07-28 11:16:48 +02:00
ThomasV
1411b75584
swapserver: add test for refund path
2023-07-26 19:20:18 +02:00
ThomasV
83dcc5e4cc
payment bundles: fix bundle detection for trampoline
...
This feels a bit like workaround; it might be better to represent
payment bundles objects using payment secrets rather than payment
hashes.
2023-07-26 18:54:20 +02:00
ThomasV
3bb5ebf137
simplify check_mpp_status
...
(the distinction that was between is_accepted and is_expired does
not seem to be useful)
2023-07-24 16:43:06 +02:00
ThomasV
017186d107
Refactor trampoline forwarding and hold invoices.
...
- maybe_fulfill_htlc returns a forwarding callback that
covers both cases.
- previously, the callback of hold invoices was called as a
side-effect of lnworker.check_mpp_status.
- the same data structures (lnworker.trampoline_forwardings,
lnworker.trampoline_forwarding_errors) are used for both
trampoline forwardings and hold invoices.
- maybe_fulfill_htlc still recursively calls itself to perform
checks on trampoline onion. This is ugly, but ugliness is now
contained to that method.
2023-07-21 13:40:10 +02:00