1
0
Commit Graph

13446 Commits

Author SHA1 Message Date
SomberNight
064670bd75 network: close interfaces more aggressively (abort after 2 seconds)
fixes #7083
2021-03-04 17:47:49 +01:00
SomberNight
ff485cee62 use functools.wraps() for some wrappers
to help debugging
2021-03-04 16:44:13 +01:00
SomberNight
859f8ccf8e fix wallet.clear_history()
it would result in "wallet.get_history() failed balance sanity-check"

maybe related: https://github.com/spesmilo/electrum/issues/6792
2021-03-04 14:25:41 +01:00
ThomasV
5a2a724cb9 Receive MPP: Use persisted payment status to decide whether to
fulfill HTLCs. Without this commit, we might timeout a part of
a payment if the client is shut down before all parts are
fulfilled.
2021-03-04 14:11:55 +01:00
SomberNight
e25602ab3b wallet: don't put partial tx as UTXO into psbt
if there is a chain of unsigned txs, we cannot populate NON_WITNESS_UTXO

closes #7080
closes #7009
closes #6482
2021-03-04 13:20:49 +01:00
SomberNight
785fe6aeea lnutil: (trivial) add ShortChannelID.from_str() method
for console use atm
2021-03-04 12:14:47 +01:00
ThomasV
738411e32b Trampoline forwarding:
- fix regression in create_routes:
   fwd_trampoline_onion was not added to the tuple
 - fix onion structure for e2e
 - maybe_fulfill_htlc:
   check the mpp_status of the outer onion,
   return trampoline_onion to be forwarded
2021-03-04 11:46:31 +01:00
ThomasV
ba4d6bc8b3 trampoline MPP: fix total_msat in trampoline onion, and bucketing 2021-03-04 10:05:09 +01:00
ThomasV
253907fb60 lnworker: move buckets logic inside first branch of if statement (refactoring commit) 2021-03-04 08:50:22 +01:00
SomberNight
f84f13529a lnhtlc: fix deadlock 2021-03-03 22:05:09 +01:00
SomberNight
adbfb2dcc8 lnworker.pay_to_node: (fix) pass correct total_msat to pay_to_route 2021-03-03 20:35:48 +01:00
SomberNight
920e1e94fa kivy: InvoiceDialog: make LN invoice QR code scannable
Don't show the text and the QR code together, only the QR code:
the text takes up too much space, which make the QR hard to scan.
2021-03-03 17:31:08 +01:00
SomberNight
1aec982b27 kivy: SendScreen: reliably show LN payment attempt progress for invoice 2021-03-03 16:57:54 +01:00
ThomasV
7ca64ebbd8 fix #7078 2021-03-03 15:35:38 +01:00
SomberNight
95b7c976e0 lnrouter.get_distances: fix exception due to rare race
if the graph is being updated while the pathfinding is running,
channel_info might be None here
2021-03-03 14:10:57 +01:00
ThomasV
3fa1aed8cd add unit test for basic mpp 2021-03-03 12:52:52 +01:00
ThomasV
ca6ecd56f2 fix route for non-trampoline MPP 2021-03-03 12:30:29 +01:00
ThomasV
1adde4c54a qt channels_list: use monospace font for channel capacity 2021-03-03 11:20:24 +01:00
ThomasV
6cf79dcfb2 qt: update all tabs when base_unit changes 2021-03-03 11:19:41 +01:00
ThomasV
222c70ada6 qt swap_dialog: use a single button to toggle direction 2021-03-03 10:45:46 +01:00
ThomasV
51f3c613a5 (minor) fix typos and indentation 2021-03-03 10:03:29 +01:00
SomberNight
44059ec116 lnpeer: more detailed logging in maybe_fulfill_htlc 2021-03-02 18:53:08 +01:00
SomberNight
9310e9023e test_lnpeer: add test: multihop payment that routes around failure
This would have caught the overpayment bug fixed in
693583edc5
2021-03-02 18:35:07 +01:00
SomberNight
750d8cfab5 lnworker: run create_route_for_payment end-to-end, incl private edges
We pass the private edges to lnrouter, and let it find routes end-to-end.
Previously the edge_cost heuristics didn't apply to the private edges
and we were just randomly picking one of the route hints and use that.
So e.g. cheaper private edges were not preferred, but they are now.

PathEdge now stores both start_node and end_node; not just end_node.
2021-03-02 18:00:31 +01:00
SomberNight
4445cef033 lnutil: turn global forwarding fee params into Channel attributes
useful for unit testing, and it is the conceptually correct thing anyway
2021-03-02 14:54:47 +01:00
ThomasV
259dacd56f Trampoline MPP aggregation:
- trampoline node is the final recipient of MPP
 - each trampoline receives a bucket of HTLCs
 - if a HTLC from a bucket fails, wait for the entire bucket to fail
 - move trampoline route and onion code into trampoline module
2021-03-02 14:28:15 +01:00
ThomasV
2da90add8f maybe_fulfill_htlc: add failure reason to logs 2021-03-02 14:26:16 +01:00
ThomasV
693583edc5 lnworker: amount passed in HtlcLog must be without fees 2021-03-02 10:23:30 +01:00
SomberNight
06ea06f7d3 _calc_routing_hints_for_invoice: incl max 15 chans to avoid qr overflow
Prioritise channels that are likely to be able to receive the payment.
2021-03-01 21:55:41 +01:00
SomberNight
6f894b9f88 _calc_routing_hints_for_invoice: also incl chans < invoice amount
now that we can receive MPP
2021-03-01 21:51:17 +01:00
SomberNight
1139720b58 lnworker: fix handle_error_code_from_failed_htlc for private channels
if the last (private) edge of the route errors, we need to try other route hints (if any)
2021-03-01 21:26:05 +01:00
SomberNight
b3b87555dc qt/kivy: lightning_tx_dialog: show LN invoice 2021-03-01 20:56:45 +01:00
SomberNight
c3ae1c0965 android build: (trivial) build arm64 apk first
Build the apk I use to test with first :P
This is also the one mentioned in the README copy-paste code snippets.
2021-03-01 20:45:52 +01:00
SomberNight
a9185b0846 follow-up prev
kivy infers the type of the property from the default value.
without this, it was converting the str(Decimal(x)) to float
2021-03-01 18:20:33 +01:00
SomberNight
6094f2751e kivy channel dialog: fix unit of displayed feerate
The amount shown was in sat/kw, incorrectly labeled as sat/kbyte.
Show sat/vbyte instead.
2021-03-01 17:09:04 +01:00
SomberNight
7d7dcf0795 qt/kivy ChannelsList: if node alias is unknown, display node id
instead of "unknown"
2021-03-01 16:41:54 +01:00
SomberNight
dd37151d65 qt ChannelsList: (trivial) format_fields should not know column order 2021-03-01 16:28:18 +01:00
SomberNight
bf7129d57e synchronizer/verifier: ensure fairness between wallets (follow-up)
follow-up to 4346d2fc76

It's not just about the Synchronizer, the Verifier should not starve other jobs either...
(previously I thought the Verifier is not too important as it only makes
requests if there are new txs; however with LNWatcher its progress is not persisted)
2021-03-01 13:08:01 +01:00
SomberNight
e0cfb2179d bech32: another around 10% speedup for bech32_decode
turns out stdlib ord() is somewhat slow;
also, only lookup data chars once

benchmarked with:
```
import time
import electrum
from electrum.segwit_addr import bech32_decode

electrum.constants.set_testnet()

inv = "lntb4m1p00zfpppp597ely08ffhk8n3emeswukt0y3qfvt3sj3ufkhnaatlrswj2xvwuqsp5vu3ezu44ka8arvgda44yalysp3k3edlvg56cjkk5lvu4e4anmdssdq2v9ekgctnvscqzynxqyz5vq9qypqsqrzjqv8shunq4nda8mw2mpxhtz8v03wlgug7sln2yvqklxym35ayz3erqxct8vqqqcqqqqqqqqlgqqqqqqgq9qrzjqdxvvgt048y4htef7r63r4ha9kctz3d6l3za0053ahe597wgrkc4gxct8cqqqfsqqqqqqqlgqqqqqqgq9qrzjqwyx8nu2hygyvgc02cwdtvuxe0lcxz06qt3lpsldzcdr46my5epmjxct8vqqqdcqqqqqqqlgqqqqqqgq9qrzjqf56jn5txtqqtepnd0ahg0qg5m5mavfajsx403rem9wgu6rue0de7xct8vqqqtgqqqqqqqlgqqqq86qq9qrzjq027z73uyyl7fy8pkrpcn7x0el82pz3fw974p2052de4uz4j5lqqxx49tuqqqwgqqqqqqqqqqqqqqqqqpurzjqfj34n62wztqjxl59w4drxekg04rrrtf08mdestwhtky84ds7ja0yxct8sqqq3qqqqqqqqlgqqqqqqgq9qrzjqd872t5c5r5a8ssmwelpkdccsyn9mrr40rpp7khad4jr3kssxj9nvx49vgqqqnqqqqqqqqlgqqqq05qqgcxwu0ervh6atmqmqv7pmenhmc207gncyj0mcxedpwm8f56y2yl3qpq6mzjak37ddmeayd9unektmffv5rq8dvlpgq00rmmdalda73yhgqep0zuz"

def f():
  for _ in range(10000):
    addr = bech32_decode(inv, ignore_long_length=True)

t0 = time.time()
f()
t1 = time.time()
print(f"{t1-t0:.4f}")
```
2021-02-28 18:32:48 +01:00
SomberNight
b83f7159a9 bech32: around 5% speedup for bech32_decode
useful for lnaddr.lndecode
2021-02-28 16:53:21 +01:00
SomberNight
d7597d96d0 lnaddr: 15x speedup for lndecode
benchmarked with:

```
import time
import electrum
from electrum.lnaddr import lndecode

electrum.constants.set_testnet()

inv = "lntb4m1p00zfpppp597ely08ffhk8n3emeswukt0y3qfvt3sj3ufkhnaatlrswj2xvwuqsp5vu3ezu44ka8arvgda44yalysp3k3edlvg56cjkk5lvu4e4anmdssdq2v9ekgctnvscqzynxqyz5vq9qypqsqrzjqv8shunq4nda8mw2mpxhtz8v03wlgug7sln2yvqklxym35ayz3erqxct8vqqqcqqqqqqqqlgqqqqqqgq9qrzjqdxvvgt048y4htef7r63r4ha9kctz3d6l3za0053ahe597wgrkc4gxct8cqqqfsqqqqqqqlgqqqqqqgq9qrzjqwyx8nu2hygyvgc02cwdtvuxe0lcxz06qt3lpsldzcdr46my5epmjxct8vqqqdcqqqqqqqlgqqqqqqgq9qrzjqf56jn5txtqqtepnd0ahg0qg5m5mavfajsx403rem9wgu6rue0de7xct8vqqqtgqqqqqqqlgqqqq86qq9qrzjq027z73uyyl7fy8pkrpcn7x0el82pz3fw974p2052de4uz4j5lqqxx49tuqqqwgqqqqqqqqqqqqqqqqqpurzjqfj34n62wztqjxl59w4drxekg04rrrtf08mdestwhtky84ds7ja0yxct8sqqq3qqqqqqqqlgqqqqqqgq9qrzjqd872t5c5r5a8ssmwelpkdccsyn9mrr40rpp7khad4jr3kssxj9nvx49vgqqqnqqqqqqqqlgqqqq05qqgcxwu0ervh6atmqmqv7pmenhmc207gncyj0mcxedpwm8f56y2yl3qpq6mzjak37ddmeayd9unektmffv5rq8dvlpgq00rmmdalda73yhgqep0zuz"

def f():
  for _ in range(100):
    addr = lndecode(inv)

t0 = time.monotonic()
f()
t1 = time.monotonic()
print(f"{t1-t0:.4f}")
```
2021-02-28 16:26:15 +01:00
SomberNight
2b693d3498 tests: fix test_lnpeer.test_payment_race
broke in b6b13217b4
see changes to lnworker.htlc_fulfilled
2021-02-28 13:58:31 +01:00
ThomasV
bc1ec6ac34 Qt: fix running GUI offline 2021-02-28 13:34:24 +01:00
ThomasV
5175a97671 test_payment_race: increase delay 2021-02-28 09:43:46 +01:00
ThomasV
f32d49b8ca revert 'keep invoice INFLIGHT', check HTLCs before payment attempt 2021-02-28 09:01:31 +01:00
ThomasV
38652cffb0 fix test_lnpeer (follow-up prev commit) 2021-02-27 20:51:19 +01:00
ThomasV
b6b13217b4 lnworker: keep invoice status INFLIGHT as long as HTLCs are inflight 2021-02-27 20:26:58 +01:00
SomberNight
2f223cdf46 qt channels dialog: fix for channel backups 2021-02-27 15:15:09 +01:00
SomberNight
d85e910262 logging: eliminate "fee_estimates" log spam
only log fee estimates if they changed, instead of ~10 times per minute
2021-02-27 12:27:26 +01:00
ThomasV
7f61f22857 MPP receive: allow payer to retry after mpp timeout 2021-02-27 11:48:14 +01:00