Commit graph

385 commits

Author SHA1 Message Date
Matt Corallo
4f77c812a4 Fix crash introduced in #124
I'm rapidly starting to regret holding failed HTLCs in Channel,
given we allow them to violate the no-duplicate-hashes
precondition.

Found by fuzzer
2018-08-24 16:58:27 -04:00
Matt Corallo
7ce13da728 Fix integer overflow panic in new HTLC-forwarding fee checks
Found by fuzzer
2018-08-23 17:23:46 -04:00
Matt Corallo
dfc04ad0b4 Fix duplicate payment_hashes one immediately failed, one fail crash
Found by fuzzer
2018-08-23 17:04:31 -04:00
Matt Corallo
ab00e4ccff Merge HTLC-update events, remove FailHTLC ErrorAction
UpdateFailHTLC isn't really an error anymore now that its handled
async after channel commitment (as required by BOLT 2), and since
its unused this is free. To resolve the TODO which intended to use
it for HTLC failure when trying to route forwards, we instead opt
to merge all the HTLC update events into one UpdateHTLCs event
which just contains a CommitmentUpdate object.
2018-08-23 16:11:20 -04:00
Matt Corallo
6e50a84f14 Do not return UpdateFailHTLC updates until the HTLC is committed
This fixes a violation of BOLT 2 and will let us consolidate some
HTLC update handling. Good bit of code movement, but is mostly
refactor to store HTLC failure status in pending_htlcs in Channel.
2018-08-23 16:11:20 -04:00
Matt Corallo
7345c0b3ce Add trace logs for Errs when handling peer messages 2018-08-23 16:11:12 -04:00
Matt Corallo
11e5975523 Update to rust-secp256k1 v0.11 and rust-bitcoin v0.14 2018-08-23 14:52:43 -04:00
Matt Corallo
5ee88ad9f2 Clean up excess \ns in route debug, use all debug encoders 2018-08-23 14:52:43 -04:00
Matt Corallo
6ab31a0d50 Return channel_updates when failing a HTLC for fee/CLTV reasons 2018-08-23 14:52:43 -04:00
Antoine Riard
0523403887 Add Display trait on network structs for routing bug track 2018-08-23 14:52:42 -04:00
Antoine Riard
05552c0988 Check amt_to_forward and outgoing_cltv_value in add_update_htlc 2018-08-23 14:52:36 -04:00
Matt Corallo
f476a19bde Add simple utility to ChannelManager to force close all channels 2018-08-20 13:58:31 -04:00
Matt Corallo
7a04595269 Only enforce no-dup-payment_hash precondition on non-removed HTLCs
This fixes a panic found by fuzzer.
2018-08-20 13:58:31 -04:00
Matt Corallo
42086c94a0 Remove implicit Record import requirement in logging macros 2018-08-20 13:33:09 -04:00
Matt Corallo
1360fccd71 Ignore unknown channel flags as required in BOLT 2 2018-08-17 13:22:44 -04:00
Yuntai Kyong
69624a8556 add 1% chnnel reserve while keeping min value
if 1000 is always used it will almost always fail test reserve < dust_limit check
2018-08-17 13:18:29 -04:00
Yuntai Kyong
1c839ff103 Add checking locally derived reserve and dust limit 2018-08-17 13:18:28 -04:00
Yuntai Kyong
716b37863a document optional channel constraints per spec 2018-08-17 13:18:28 -04:00
Yuntai Kyong
0fece38b19 Add various checking when handling open and accept
Add `derive_minimum_depth()` and `derive_maximum_minimum_depth()` and hide
CONF_TARGET constant behind these functions.

Replace `DisconnectPeer` error with `HandleError` with `ErrorAction::SendErrorMessage`
2018-08-17 13:18:28 -04:00
Yuntai Kyong
ada2154b40 Add push_msat to new outbound API
Also add APIMisuseError to be thrown to the API client
2018-08-17 13:18:28 -04:00
Matt Corallo
4291cb99d4 Add some trace logging in peer_handler 2018-08-16 23:11:22 -04:00
Matt Corallo
609054eae0 Handle duplicate funding transaction gracefully.
This can otherwise cause strange behavior, including a panic on
force_close_all_channels found by full_stack_target fuzzing.
2018-08-16 22:37:44 -04:00
Matt Corallo
b4078d992d Fix handle_funding_created bug/TODO
The fuzzer was able to tickle this
2018-08-16 22:37:41 -04:00
Matt Corallo
0f965d319f Fix bug in early-HTLC-fulfill handling
Caught by fuzzer. See new comments for more
2018-08-16 22:31:14 -04:00
Matt Corallo
9362450c61 [Router] Remove channels from nodes when the channel is failed
Found by fuzzer
2018-08-16 20:51:50 -04:00
Matt Corallo
7c24fea4fe Handle only-path-overflows-fee in get_route and avoid PubKey::new()
Found by fuzzer
2018-08-16 20:51:50 -04:00
Matt Corallo
dde0ac4c29 Fix fee_base_msat overflowing entire fee range in RouteHint 2018-08-16 20:51:50 -04:00
Matt Corallo
0e6f028c3b Err from get_route if the requested value is more than 21m BTC
This fixes a potential overflow panic.
2018-08-16 20:51:50 -04:00
Matt Corallo
2a0ae96fdf Correct lowest_inbound_proportional_fee deduction in route finding
Found cause fuzzer was able to crash us if we don't
2018-08-16 20:51:50 -04:00
Matt Corallo
feb3db5ac8 Fix multiply-with-overflow panic in router
Found by fuzzer
2018-08-16 20:51:50 -04:00
Antoine Riard
0029f04fce Logging interface
Implement error, warn, info, debug and trace macros, internally calling
an instance of Logger, and passing it to every main structures
Build-time or client-side filtering.
Issue #54
2018-08-17 00:01:15 +00:00
Antoine Riard
e752611247 Implement HandleError event with ErrorAction field 2018-08-12 00:36:48 +00:00
Matt Corallo
c52825d5f1 Fix UpdateAddHTLC serialize vec capacity default 2018-08-02 22:37:28 -04:00
Matt Corallo
3db5798246 Stub out ChaCha20 non-HMAC encryption/decryption in fuzztarget 2018-08-02 22:37:28 -04:00
Matt Corallo
482648bbf0 Fix fuzztarget insert_combine hash-collision panic 2018-08-02 22:26:44 -04:00
Matt Corallo
a6161210e2 Fix panic on reorg through the funding_locked-generating block
We had a TODO to handle "lost confirmation" in block_connected,
which we recently did in block_disconnected (calling force_shutdown
in case we get too many blocks disconnected) but didn't handle the
case where we had a simple reorg through the block that resulted in
us generating a funding_locked.
2018-08-02 22:26:44 -04:00
Matt Corallo
bd01f4e0c3 Fix fuzztarget ChannelKeys generation 2018-08-02 22:26:44 -04:00
Matt Corallo
2470812077 Fix types in Channel::funding_tx_confirmed_in
This should have no effect in a real system but was causing the
full_stack_target fuzz test to fail due to a block with a null hash
being disconnected.
2018-08-02 22:26:44 -04:00
Matt Corallo
cfc3fe3148 Fix panic!() in block_connected on unfunded channels (fixes #42)
The new full_stack_target fuzzing stuff was able to find this bug,
which gives me a bit of hope for full_stack_target's utility.
2018-08-02 22:26:44 -04:00
Matt Corallo
b17211ffe4 Fix non-HTLC-inclusion balance calculation (mark II) 2018-07-30 18:29:03 -04:00
Matt Corallo
7e255b5cf5 Handle invalid funding tx in channelmanager 2018-07-29 13:30:04 -04:00
Matt Corallo
1051e53ecc Stop adding remote's payment_preimages to our channel monitor 2018-07-29 13:30:04 -04:00
Matt Corallo
b22519c0f9 Some match -> if let replacement 2018-07-29 13:30:04 -04:00
Matt Corallo
fb9f169279 Assert usize is 32 or 64 bits, as required in a TODO 2018-07-29 13:30:04 -04:00
Matt Corallo
d5e316f5a0 Remove some excess mut's 1.22 complains about 2018-07-29 13:30:04 -04:00
Matt Corallo
c26967348d Remove some useless Vecs 2018-07-29 02:23:02 -04:00
Matt Corallo
c7c8a123ba Add pending-HTLC-failure to and unify force_shutdown() handling
This patch got a bit bigger than I'd intended, but primarily this
unifies force_shutdown() handling so all the callsites at least
look similar. It also fails backwards any HTLCs which were
completely pending (ie hadn't been committed to) and ensures we
broadcast our local commitment transaction. It also adds a
force_close_channel method to ChannelManager to expose
force-closure.
2018-07-29 02:23:02 -04:00
Matt Corallo
5c32e3cb91 Clean up forward_/claimable_htlcs handling and document consistency 2018-07-28 18:36:24 -04:00
Matt Corallo
9aed28fbf0 Fix force_shutdown() bug where we lose knowledge of a preimage
In case we are in AwaitingRemoteRevoke and we go to claim an HTLC
(at which point we've already given up the money to the next hop in
the payment) we just write it to holding_cell_htlc_updates.
However, we should be ensuring we *also* write it to our
channel_monitor as we need to make sure we can still claim it after
a force_shutdown() or otherwise after hitting the chain.
2018-07-28 18:34:01 -04:00
Matt Corallo
982317a444
Merge pull request #95 from savil/rm-bitcoin-util-hexbytes
replace use of bitcoin::utils::misc::hex_bytes with hex::decode
2018-07-28 16:19:33 -04:00