Commit Graph

4591 Commits

Author SHA1 Message Date
e693f89cb0 lnwallet/channel: locked in settle/fail 2018-05-28 13:17:28 -07:00
9f358db7c7 Merge pull request #1286 from Roasbeef/prevent-duplicate-htlc-mods
lnwallet: ensure we reject duplicate fails and settles for HTLCs
2018-05-28 12:23:48 -07:00
524291dada Merge pull request #1287 from Roasbeef/fail-link-server-wg
peer: when failing link, depend on server wg, not peer
2018-05-26 16:44:29 -07:00
bfcdbe2204 peer: when failing link, depend on server wg, not peer
In this commit, we fix a recently introduced bug. The issue is that
while we're failing the link, the peer we're attempting to force close
on may disconnect. As a result, if the peerTerminationWatcher exits
before we can add to the wait group (it's waiting on that), then we'll
run into a panic as we're attempting to increment the wait group while
another goroutine is calling wait.

The fix is to first check that the server isn't shutting down, and then
use the server's wait group rather than the peer to synchronize
goroutines.

Fixes #1285.
2018-05-25 20:36:40 -07:00
376d332dbd lnwallet: add new tests to ensure we reject duplicate settles and fails 2018-05-25 20:26:02 -07:00
04f576ee6e lnwallet: reject duplicate fails for the same HTLC 2018-05-25 20:26:01 -07:00
28f37def7c lnwallet: reject duplicate settles for the same HTLC 2018-05-25 20:26:01 -07:00
b6d046ad84 lnwallet: mark HTLCs modified for updates restored in restoreStageLogs 2018-05-25 20:26:01 -07:00
1f1f22cfe8 lnwallet: clear modified HTLCs within updateLog.removeHtlcs 2018-05-25 20:26:00 -07:00
56ebd6de8d lnwallet: add new modified HTLC index to the updateLog
In this commit, we add a new index to the HTLC log. This new index is
meant to ensure that we don't attempt to modify and HTLC twice. An HTLC
modification is either a fail or a settle. This is the first in a series
of commits to fix an existing bug in the state machine that can cause a
panic if a remote node attempts to settle an HTLC twice.
2018-05-25 20:25:55 -07:00
19e826cada test: fix constant compliation error 2018-05-25 19:57:30 -07:00
fa5c0b9ee7 Merge pull request #1246 from wpaulino/bump-ltc-limits
config: increase max funding and payment amount 60x under Litecoin
2018-05-25 19:33:04 -07:00
b401cb6401 Merge pull request #1279 from wpaulino/itest-flakes
test: fix multiple integration test flakes
2018-05-25 19:25:36 -07:00
dd2859dc61 Merge pull request #1213 from halseth/fail-channel
[htlcswitch] Optionally force close channel on link failure
2018-05-25 17:32:05 -07:00
3e7c69e596 Revert "test: account for block race by mining additional block in remote htlc force close test"
Before the previous commit, we assumed the HTLC's timeout transaction
would be the only transaction in the mempool. In reality, after mining
some blocks for the HTLC to expire and waiting for the timeout
transaction to arrive in the mempool, at times we would instead detect
the funding output's sweeping transaction and proceed the test with this
assumption, leading to the case where we would have to mine extra blocks
to include the HTLC sweeping transaction. This has been resolved in the
previous commit, so this fix is no longer needed.

This reverts commit e54f1ea4db.
2018-05-25 11:19:35 -04:00
84fcf5b12f test: detect funding output sweep tx after force close
In this commit, we address an existing flake that would be triggered
when testing HTLC timeouts. After force closing a channel and generating
enough blocks to expire an HTLC, we would wait for a transaction to
arrive in the mempool and assumed it was the timeout transaction.
Instead, we'd detect the funding output sweep transaction and attempt to
proceed with the test with the incorrect assumption of the timeout
transaction being broadcast.
2018-05-25 11:19:15 -04:00
a3e0c9ca0b test: expect sweep txs for both sides in the mempool after csv delay 2018-05-25 11:10:03 -04:00
4dfb4547a0 htlcswitch: remove unused Disconnect from Peer interface 2018-05-25 06:58:24 +02:00
f95ae1cdd6 htlcswitch/link: add failed variable to ensure exit 2018-05-25 06:58:24 +02:00
d0b0734e5b lnd_test: add testFailingLink
This commit adds an integration test that checks that in case a channel
counterparty tries to settle an HTLC with the wrong preimage, the
channel is failed and force closed.
2018-05-25 06:58:24 +02:00
49fd3f34d4 htlcswitch/link: settle with fake preimage if BogusSettle active 2018-05-25 06:58:24 +02:00
71a1aae417 htlcswitch/hodl: add flag BogusSettle
This commit adds a new hodl flag "BogusSettle" which will be used to
emulate a node trying to settle back an incoming HTLC with a fake
preimage.
2018-05-25 06:58:23 +02:00
88670175c7 htlcswitch/link_test: add TestChannelLinkFail 2018-05-25 06:58:23 +02:00
9a47494517 htlcswitch/link_test: extract adding link to switch 2018-05-25 06:58:23 +02:00
3b2fd32523 peer: populate OnChannelFailure in link config
This commit makes the peer aware of the LinkFailureErrors that can
happen during link operation, and making it start a goroutine to
properly remove the link and force close the channel.
2018-05-25 06:58:23 +02:00
fbec83699c htlcswitch/link: make fail() call OnChannelFailure with LinkFailureError
Adds a new closure OnChannelFailure to the link config, which is called
when the link fails. This function closure should use the given
LinkFailureError to properly force close the channel, send an error to
the peer, and disconnect the peer.
2018-05-25 06:58:23 +02:00
92afcbe3f4 htlcswitch/linkfailure: define LinkFailureError
This commit introduces a new error type LinkFailureError which is used
to distinguish the different kinds of errors that we can encounter
during link operation. It encapsulates the information necessary to
decide how we should handle the error.
2018-05-25 06:58:18 +02:00
4836a25c98 peer: move link creation into new method 2018-05-25 06:54:05 +02:00
1f746c3fda contractcourt/chan_arb: specify that ForceCloseChan removes link from
switch
2018-05-25 06:54:05 +02:00
e363766394 multi: increase max funding and payment amount 60x under Litecoin 2018-05-25 00:11:20 -04:00
11c315cffe test: modify waitForTxInMempool to expect only one tx in the mempool 2018-05-24 22:56:51 -04:00
d8325e29fd test: use graph notifications to receive node announcement
In this commit, we rewrite the node announcement integration test to no
longer depend on a sleep interval. Instead, we use graph topology
updates in order to be notified exactly when we receive the node
announcement.
2018-05-24 22:56:49 -04:00
d543ff5811 lntest: wait until channel is active within AssertChannelExists
In this commit, we fix a race condition where at times we open a channel
between two parties and immediately try to send payments over it. At
times this would fail due to the channel link not being fully registered
in the HTLC switch.
2018-05-24 22:56:48 -04:00
42de4400bf docs/grpc: add macaroon and SSL Cipher info to Ruby gRPC docs 2018-05-24 19:15:23 -07:00
fc3d711cf0 Merge pull request #1248 from halseth/close-channel-fix
[bugfix] Wait for confirmation before marking channel cooperatively closed
2018-05-24 18:28:31 -07:00
9eef31d210 lnd: fix typo in log message on launch
`2018-05-24 01:14:14.503 [INF] LTND: Active chain: Bitcoin (network=simmnet)`
2018-05-24 14:56:33 -07:00
5cef2bacde rpcserver: add TODO for removing coop closes from "pending close" channels 2018-05-24 10:29:20 +02:00
8afc7bf66e contractcourt/chain_arbitrator: add TODO for removing watchForChannelClose 2018-05-24 10:24:31 +02:00
6382215346 Merge pull request #1276 from wpaulino/shutdown-while-chain-sync
lnd: add interrupt handler to handle shutdown requests while syncing chain backend
2018-05-23 15:39:30 -07:00
4a200d28eb lnd: add interrupt handler to handle shutdown requests while syncing
chain backend
2018-05-23 11:26:07 -04:00
69a76a808f breacharbiter: add todo for removing IsPending check 2018-05-23 12:11:19 +02:00
72d9726e7f channeldb/channel: update IsPending godoc
The pending state definitin in ChannelCloseSummary was slightly changed
in such a way that channels that has had their commitment broadcasted
now is no longer considered "pending close". They now instead stay in
the open chan bucket with the ChanStatus "CommitmentBroadcasted" until
their commitment is confirmed. This commit updates the IsPending godoc
to reflect this.
2018-05-23 12:07:35 +02:00
5c42a88038 Merge pull request #1260 from tyzbit/btcd-ltcd-docker
Docker: Use multi-stage builds and Alpine containers for btcd and ltcd
2018-05-22 20:51:11 -07:00
aeee3905b7 Merge pull request #1272 from Roasbeef/remove-bucket-autocreation
channeldb: modify updateChanBucket to no longer auto-create buckets
2018-05-22 19:05:48 -07:00
71d7d4952f channeldb: remove premature buf.Grow optimization
This optimization isn't needed as a bytes.Buffer already comes
pre-allocated with 64-bytes as a fast path.
2018-05-22 17:52:45 -07:00
1969022cec docs/INSTALL: update docs with more detailed info for ZMQ support 2018-05-22 17:31:05 -07:00
3f78a7419c Merge pull request #1273 from Roasbeef/fix-switch-panic-deadlock
htlcswitch: ensure we don't attempt to create fwding events for fails
2018-05-22 17:24:37 -07:00
4d04b29b01 Merge pull request #1266 from parakeety/use-current-keychain-version
walletunlocker: use KeyDerivationVersion for generating cipher seed
2018-05-22 16:58:19 -07:00
b60575fdac htlcswitch: run decay log tests in parallel 2018-05-22 16:55:08 -07:00
5e3b239ebc htlcswitch: ensure we don't attempt to create fwding events for fails
In this commit, we fix an existing source of a panic, that could at
times lead to a deadlock. If the circuit returned from closeCircuit
didn't have an outgoing key (as it was an incomplete forward), then we
would attempt to de-ref a nil pointer. This would trigger a panic, and
the runtime would start to unwind the stack, and execute each defer in
line. A deadlock can arise here, as in the defer at the root goroutine,
we need to grab the fwdingEventMtx. However, we already have it at the
panic site.

We fix this issue by ensuring we only attempt to add the event if it's a
_settle_ and also actually has an outgoing circuit (which it should
already, just a defensive check).
2018-05-22 16:46:55 -07:00