Commit Graph
100 Commits
Author SHA1 Message Date
Olaoluwa Osuntokun 9cd88a04b7 Merge pull request #2516 from cfromknecht/wtclient-backup-task
watchtower: client justice transaction creation + blob encryption
2019-02-05 21:38:10 -08:00
Olaoluwa Osuntokun c05a7c5c44 Merge pull request #1988 from valentinewallace/subscribe-chans-rpc
rpc: Add SubscribeChannels RPC.
2019-02-05 19:18:52 -08:00
Olaoluwa Osuntokun e5d660daf9 Merge pull request #2521 from joostjager/sendtosingleroute
lnrpc: deprecate SendToRoute with more than one route
2019-02-05 18:06:01 -08:00
Olaoluwa Osuntokun 27c7ce91f4 Merge pull request #2584 from halseth/utxonursery-baby-expiry-heighthint
utxonursery: use baby expiry as height hint
2019-02-04 17:21:28 -08:00
Olaoluwa Osuntokun a98d5deeb8 Merge pull request #2580 from halseth/autopilotrpc-imports-cleanup
[trivial] cleanup subserver imports
2019-02-04 12:46:53 -08:00
Olaoluwa Osuntokun 1189f0ea6c server: use chanInfo instead of chanPolicy to establish channel peer conns
In this commit, we modify the way we attempt to locate the our channel
peer to establish a persistent connection on start up. Before this
commit, we would use the channel policy pointing to the peer to locate
the node as it's embedded in the struct. However, at times it's
currently possible for the channel policy to not be found in the
database if the remote nodes announces before we finalize the process on
our end. This can at times lead to a panic as the pointer isn't checked
before attempting to access it.

To remedy this, we now instead use the channel info which will _always_
be there if the channel is known.
2019-02-03 15:01:37 -08:00
Olaoluwa Osuntokun bcc9e30396 Merge pull request #2515 from cfromknecht/altruist-output-calc
watchtower/wtpolicy: altruist output calculation
2019-02-01 19:58:06 -08:00
Olaoluwa Osuntokun 8aecccf266 Merge pull request #2407 from joostjager/commit-resolver-sweeper
cnct: use sweeper in commit resolver
2019-02-01 17:34:51 -08:00
Olaoluwa Osuntokun 4af857f0c6 Merge pull request #2356 from joostjager/invoices-subserver
invoices: add subscribesingleinvoice
2019-02-01 17:19:58 -08:00
Olaoluwa Osuntokun 6032e47fe8 Merge pull request #1875 from joostjager/resolverstate
rpc+contractcourt: merge the contractResolver state into the pendingchannels RPC response
2019-02-01 17:07:53 -08:00
Olaoluwa Osuntokun bceb048a76 Merge pull request #2385 from cfromknecht/peer-write-buffer
peer: write buffer pool
2019-02-01 17:04:30 -08:00
Olaoluwa Osuntokun 6a3addbeda Merge pull request #2563 from halseth/funding-ensure-max-value-less-than-cap
funding: cap the max_htlc value at channel capacity
2019-02-01 16:29:33 -08:00
Olaoluwa Osuntokun 66c80bb3c0 Merge pull request #2571 from Roasbeef/lnwire-onion-fix
lnwire: ensure we're able to decode legacy FailUnknownPaymentHash
2019-02-01 12:53:45 -08:00
Olaoluwa Osuntokun 17fd5eef07 lnwire: ensure we're able to decode legacy FailUnknownPaymentHash
In this commit, we modify the decoding of the FailUnknownPaymentHash
message to ensure we're able to fully decode the legacy serialization of
the onion error. We do this by catching the `io.EOF` error as it's
returned when _no_ bytes are read. If this is the case, then only the
error type was serialized and not also the optional amount.
2019-01-31 22:20:41 -08:00
Olaoluwa Osuntokun b7387a5972 Merge pull request #2570 from Roasbeef/local-features-fix
lnwire: ensure even/odd features have the same base name
2019-01-31 22:19:40 -08:00
Olaoluwa Osuntokun 5c434b17ff lnwire: ensure even/odd features have the same base name
In this commit, we fix a bug in the way we defined our even/odd features
for a particular feature. The check for if a feature bit is part of a
pair assumes that the pair bit has the exact same name as the bit being
queried. The way we defined our feature map didn't take note of this
assumption, as a result, any attempts to require a new bit moving from
optional to required would fail since the bit would be found, but the
names differed.
2019-01-31 20:58:10 -08:00
Olaoluwa Osuntokun 5167b02312 Merge pull request #2500 from Roasbeef/mandatory-dlp
server: require the DLP bit for all incoming/outgoing connections
2019-01-31 20:14:15 -08:00
Olaoluwa Osuntokun 55ed7769a5 Merge pull request #2514 from cfromknecht/add-wtmock-pkg
watchtower/multi: move MockSigner+MockPeer to wtmock
2019-01-31 19:13:47 -08:00
Olaoluwa Osuntokun f98cc26a6f Merge pull request #2513 from cfromknecht/add-base-reward
wtpolicy+wtwire+wtserver: add base reward
2019-01-31 19:13:31 -08:00
Olaoluwa Osuntokun 8b04cfbf12 Merge pull request #2531 from wpaulino/update-listinvoices-docs
lnrpc: update ListInvoices documentation
2019-01-31 17:26:06 -08:00
Olaoluwa Osuntokun 9a66ac396b Merge pull request #2493 from halseth/tor-addr-sanity-check
Validate addresses before writing them to DB
2019-01-31 17:15:22 -08:00
Olaoluwa Osuntokun 948646b58b Merge pull request #2481 from joostjager/move-input
multi: move input to separate package
2019-01-31 16:48:31 -08:00
Olaoluwa Osuntokun fc869d4a4c Merge pull request #2558 from halseth/channel-restoration-old-format-fee-update
Channel restoration of old format fee update
2019-01-31 12:29:49 -08:00
Olaoluwa Osuntokun 1863dcef1f Merge pull request #2371 from Roasbeef/static-chan-backups-channeldb
channeldb: prepatory modifications for full SCB implementation
2019-01-30 14:40:27 -08:00
Olaoluwa Osuntokun 8bd29de981 Merge pull request #2554 from Roasbeef/deprecate-htlc-amt-error
multi: deprecate IncorrectHtlcAmount
2019-01-30 14:14:09 -08:00
Olaoluwa Osuntokun 441307e8f7 Merge pull request #2561 from Roasbeef/lax-max-in-flight-verification
Revert "funding+lnwallet: ensure max_htlc_value_in_flight smaller tha…
2019-01-29 23:04:13 -08:00
Olaoluwa Osuntokun b1b42dcfae test: update error propagation test for new onion error change
In this commit, we update the error propagation test to ensure that the
proper HTLC amount is included for the `CodeUnknownPaymentHash` error.
2019-01-29 23:03:42 -08:00
Olaoluwa Osuntokun c8518140ee lnwire: update Error() method for FailUnknownPaymentHash to include amt 2019-01-29 23:03:35 -08:00
Olaoluwa Osuntokun b4c5833325 Revert "fundingmanager_test: add TestFundingManagerRejectInvalidMaxValueInFlight"
This reverts commit eb618051208dbd8bb0c160001052b5cc36174888.
2019-01-29 18:31:04 -08:00
Olaoluwa Osuntokun b220c47ce7 Revert "funding+lnwallet: ensure max_htlc_value_in_flight smaller than capacity"
This reverts commit 4aa52d267f.

It turns out that the other implementations set values for this field
which aren't based on the actual capacity of the channel. As a result,
we'll no reject most of their channel offerings, since they may offer a
value of a max `uint64` or something else hard coded that's above the
size of the channel. As a result, we're reverting this check for now to
maintain proper compatibility.
2019-01-29 17:58:04 -08:00
Olaoluwa Osuntokun 480ec3bbca channeldb: ensure restored channels can't be mutated 2019-01-28 20:24:48 -08:00
Olaoluwa Osuntokun 4fd1f832d7 contractcourt+rpc: use new FetchChannel method instead of scanning
In this commit, we modify areas where we need to force close a channel
to use the new FetchChannel method instead of manually scanning. This
dramatically reduces the CPU usage when doing things like closing a
large number of channels within lnd.
2019-01-28 20:24:45 -08:00
Olaoluwa Osuntokun 821de3e107 test: remove FullSync call from breacharbiter_test.go
In this commit, we remove an extra openChannel.FullSync() call from
breacharbiter_test.go. Before this collective diff, calling
SyncPending() then FullSync() didn't result in an error. However, a
prior commit now makes this an error to ensure we don't attempt to
override any existing channels. This is the only area in the codebase
that we made this mistake which in this case, was benign.
2019-01-28 20:24:43 -08:00
Olaoluwa Osuntokun 9e5723e1bc lnwallet: modify ForceClose to disallow closing if local data loss
In this commit, we ensure that if a channel is detected to have local
data loss, then we don't allow a force close attempt, as this may not be
possible, or cause us to play an invalid state.
2019-01-28 20:24:42 -08:00
Olaoluwa Osuntokun b2b57314fa channeldb: add new RestoreChannelShells method
In this commit, we add a new type (ChannelShell) along with a new
method, RestoreChannelShells which allows a caller to insert a series of
channel shells into the database. These channel shells will allow a
restored node to initiate the DLP protocol and recover their set of
existing channels.

When we insert a channel shell, we re-create the original link node, and
also add the outgoing edge to the channel graph. This way we can be sure
that upon start up, we attempt to connect to the remote peers, and that
the normal graph query commands will operate as expected.
2019-01-28 20:24:41 -08:00
Olaoluwa Osuntokun fa30af0475 channeldb: when fetching/inserting commits check for ChanStatusRestored
If the ChanStatusRestored flag is set, then we don't need to write or
read the set of commits for a channel as they won't exist. This will be
the case when we restore a channel from an SCB.
2019-01-28 20:24:40 -08:00
Olaoluwa Osuntokun c656788b0b channeldb: add new methods to allow adding a new edge+policy w/ existing db transaction 2019-01-28 20:24:38 -08:00
Olaoluwa Osuntokun 11c6887ffa channeldb: refactor syncPending to expose new syncNewChannel function
The new syncNewChannel function will allow callers to insert a new
channel given the OpenChannel struct, and set of addresses for the
channel peer. This new method will also create a new LinkNode for the
peer if one doesn't already exist.
2019-01-28 20:24:37 -08:00
Olaoluwa Osuntokun 7a88f580ea channeldb: add new FetchChannelMethod
In this commit, we add a new method, FetchChannel which is required in
order to implement the new chanbackup.LiveChannelSource interface.
2019-01-28 20:24:36 -08:00
Olaoluwa Osuntokun aaf6456e12 channeldb: add HasChanStatus and ApplyChanState methods to OpenChannel
These methods allow callers to properly query if a channel is in a
particular flag, and also modify the channel status in a thread safe
manner.
2019-01-28 20:24:35 -08:00
Olaoluwa Osuntokun a410262dda channeldb: modify the String() method of ChannelStatus reflect all flags
In this commit, we modify the String() method of the ChannelStatus type
to reflect the fact that it's a flag set. With these new changes, we'll
now print the variable name of each assigned bit with a bar delimiting
them all.
2019-01-28 20:24:33 -08:00
Olaoluwa Osuntokun f57f40e767 channeldb: add prefix naming to ChannelStatus enum variables
In this commit, we add a prefix naming scheme to the ChannelStatus enum
variables. We do this as it enables outside callers to more easily
identify each individual enum variable as a part of the greater
enum-like type.
2019-01-28 20:24:32 -08:00
Olaoluwa Osuntokun f4054d2a66 channeldb: add new AddrsForNode method
In this commit, we add a new AddrsForNode method. This method will allow
a wrapper sturct to implement the new chanbackup.LiveChannelSource
method which is required to implement the full SCB feature set.
2019-01-28 20:24:22 -08:00
Olaoluwa Osuntokun e51c58e722 Merge pull request #2538 from Roasbeef/trickle-timer
config: increase default trickle delay from 30s to 1m30s
2019-01-28 19:43:08 -08:00
Olaoluwa Osuntokun ea6f7ccf2e Merge pull request #2547 from moshababo/master
[trivial] lntest: FetchNodeInfo/initLightningClient docs update
2019-01-28 12:37:15 -08:00
Olaoluwa Osuntokun b56e95587f config: increase default trickle delay from 30s to 1m30s
In this commit, we increase the default trickle delay from 30s to 1m30s.
We do this as before we implement the new INV gossip mechanism, we want
to de-emphasise the quick propagation of updates through the network
which eats up bandwidth.
2019-01-25 14:40:28 -08:00
Olaoluwa Osuntokun e9889cb899 Merge pull request #2370 from Roasbeef/static-chan-backups-chanbackup
chanbackup: add new package implementing static channel backups
2019-01-24 16:14:24 -08:00
Olaoluwa Osuntokun 3b370fa08d chanbackup: add new sub-system for keeping the on disk channels.backup up to date
In this commit, we introduce the chanbackup.SubSwapper interface. It
takes a regular Swapper implementation (defined by the
chanbackup.SubSwapper) interface along with a chanbackup.ChannelNotifier
implementation. Given these two interfaces, we're able to be notified
when a new channel is opened or closed, and then use the Swapper to
atomically replace the on-disk channel back up. As a result, a Lightning
daemon can ensure that they alwayts have a up to date channels.backup on
disk that can safely be copied away by users and be used to restore
channel funds in the event of partial/total data loss.
2019-01-23 18:11:33 -08:00
Olaoluwa Osuntokun 60999df08f chanbackup: add new MultiFile struct for storing+updating Multis on disk
In this commit, we add a new MultiFile struct. We'll use this struct in
store the latest multi-channel backup on disk, swap it out atomically,
and finally extract+unpack the contents of the multi-file. The format
that's written to disk is the same as a regular Packed multi. The
contents of this new file are meant to be used to safely implement an
always up to date multi file on disk as a way for users to easily rsync
or fsnotiy (when it changes) the backup state of their channels.

We implement an atomic update and swap in the UpdateAndSwap. The method
uses relies on the underlying file system supporting an atomic rename
syscall. We first make a temporary backup file, write the latest
contents to that, then swap the temp file with the main file using
rename(2). This way, we ensure that we always have a single up to date
file, if the protocol aborts before the rename, then we can detect this,
remove the temp file, and attempt another swap.
2019-01-23 18:11:31 -08:00
Olaoluwa Osuntokun 7fcab83bb4 chanbackup: add functions to allow recovery of existing channel backups
In this commit, we add a series of functions that will allow users to
recover existing channel backups. We do this using two primary
interfaces: the ChannelRestorer, and the PeerConnector. The first
interfaces allows us to abstract away the details w.r.t exactly how a
channel is restored. Instead, we simply expect that the channel backup
will be inserted as a sort of "channel shell" which contains only the
data required to initiate the data loss protection protocol. The second
interface is how we instruct the Lightning node to connect out to the
channel peer given its known addresses.
2019-01-23 18:11:29 -08:00
Olaoluwa Osuntokun 1348c6b35b chanbackup: add functionality to allow external callers to backup channels
In this commit, we introduce a series of interfaces and methods that
will allow external callers to backup either all channels, or a specific
channel identified by its channel point. In order to abstract away the
details w.r.t _how_ we obtain the set of open channels, or their storage
mechanisms, we introduce a new LiveChannelSource interfaces. This
interfaces allows us to fetch all channels, a channel by its channel
point, and also all the known addresses for a node as we'll need this in
order to connect out to the node in the case of a recovery attempt.
2019-01-23 18:11:28 -08:00
Olaoluwa Osuntokun 71df4b0545 chanbackup: introduce Multi, a multi-channel backup
In this commit, we introduce the Multi sturct. Multi is a series of
static channel backups. This type of backup can contains ALL the channel
backup state in a single packed blob. This is suitable for storing on
your file system, cloud storage, etc. Systems will be in place within
lnd to ensure that one can easily obtain the latest version of the Multi
for the node, and also that it will be kept up to date if channel state
changes.
2019-01-23 18:11:27 -08:00
Olaoluwa Osuntokun ee71e16593 chanbackup: add implementation of Single Channel Backups (SCBs)
In this commit, we add the initial implementation of the SCB structure.
Given an SCB, and a user's seed, it will be possible to recover the
settled balanced of a channel in the event of total or partial data
loss. The SCB contains all information required to initiate the data
loss protection protocol once we restore the channel and connect to the
remote channel peer.

The primary way outside callers will interact with this package are via
the Pack and Unpack methods. Packing means writing a
serialized+encrypted version of the SCB to an io.Writer. Unpacking does
the opposite.

The encoding format itself uses the same encoding as we do on the wire
within Lightning. Each encoded backup begins with a version so we can
easily add or modify the serialization format in the future, if new
channel types appear, or we need to add/remove fields.
2019-01-23 18:11:26 -08:00
Olaoluwa Osuntokun d98a7e8138 chanbackup: add logger 2019-01-23 18:11:25 -08:00
Olaoluwa Osuntokun 67c6d0d331 chanbackup: implement crypto operations for serialized static channel baackups
In this commit, we implement a series of new crypto operations that will
allow us to encrypt and decrypt a set of serialized channel backups.
Their various backups may have distinct encodings when serialized, but
to the functions defined in this file, we treat them as simple opaque
blobs.

For encryption, we utilize chacha20poly1305 with a random 24 byte nonce.
We use a larger nonce size as this can be safely generated via a CSPRNG
without fear of frequency collisions between nonces generated. To
encrypt a blob, we then use this nonce as the AD (associated data) and
prepend the nonce to the front of the ciphertext package.

For key generation, in order to ensure the user only needs their
passphrase and the backup file, we utilize the existing keychain to
derive a private key. In order to ensure that at we don't force any
hardware signer to be aware of our crypto operations, we instead opt to
utilize a public key that will be hashed to derive our private key. The
assumption here is that this key will only be exposed to this software,
and never derived as a public facing address.
2019-01-23 18:11:21 -08:00
Olaoluwa Osuntokun eff9899d14 keychain: add new KeyFamily: KeyFamilyStaticBackup for SCB encryption keys 2019-01-23 18:11:11 -08:00
Olaoluwa Osuntokun ecd5541d55 Merge pull request #2350 from halseth/autopilot-dryrun-only
[Autopilot] Add heuristic dry-run option
2019-01-23 17:59:00 -08:00
Olaoluwa Osuntokun 6c610d977f Merge pull request #2075 from wpaulino/settle-invoice-on-chain-sweep
contractcourt: settle invoice when claiming HTLC on-chain
2019-01-23 16:50:54 -08:00
Olaoluwa Osuntokun 7a6b4e2fc5 Merge pull request #2532 from wpaulino/btcwallet-initial-sync
build: update btcwallet dependency to new initial sync definition
2019-01-23 16:41:03 -08:00
Olaoluwa Osuntokun cebc4d8dba Merge pull request #2405 from halseth/autopilot-weighted-heuristics-follow-up
[autopilot] Weighted combined attachment heuristic
2019-01-22 19:08:46 -08:00
Olaoluwa Osuntokun e2285732e4 Merge pull request #2460 from halseth/max-htlc-size-pickup
Support the max_htlc field from ChannelUpdates
2019-01-22 18:54:38 -08:00
Olaoluwa Osuntokun 375be936ce Merge pull request #2314 from wpaulino/chainnotifier-subserver
chainntnfs+lnrpc/chainrpc: add ChainNotifier RPC subserver
2019-01-21 15:19:12 -08:00
Olaoluwa Osuntokun 4537c63dbd Merge pull request #2504 from Roasbeef/vendor-with-release
build: update release.sh to contain vendor archive + source code
2019-01-18 19:16:36 -08:00
Olaoluwa Osuntokun b7244244ae peer: disconnect peers that don't have our required feature bits 2019-01-18 18:30:55 -08:00
Olaoluwa Osuntokun 9c344ec311 Merge pull request #2499 from Roasbeef/code-cont-replace
docs: add new section to contribution guidelines for go mod replace
2019-01-18 18:19:55 -08:00
Olaoluwa Osuntokun aa5e3fed43 Merge pull request #2503 from cfromknecht/wtserver-reward-script
watchtower/wtserver/server: return valid reward script
2019-01-18 12:51:52 -08:00
Olaoluwa Osuntokun df45cc19a3 build: update release.sh to contain vendor archive + source code
In this commit, we update the release script to include a directory
containing all of our vendored dependencies. This makes out releases
more self contained as they can be built using `go build -mod=vendor`
without requiring any package fetching.

Additionally, we pacakge the entire source as well.

Fixes #1550.
2019-01-17 23:40:11 -08:00
Olaoluwa Osuntokun c815821679 server: require the DLP bit for all incoming/outgoing connections
In this commit, we modify our default local feature bits to require the
Data Loss Protection (DLP) feature to be active. Once full Static
Channel Backups are implemented, if we connect to a peer that doesn't
follow the DLP protocol, then the SCBs are useless, as we may not be
able to recover funds. As a result, in prep for full SCB deployment,
we'll now ensure that any peer we connect to, knows of the DLP bit. This
could be a bit more relaxed and allow _connections_ to non-DLP peers,
but reject channel requests to/from them. However, this implementation is
much simpler.
2019-01-17 16:53:43 -08:00
Olaoluwa Osuntokun 9cda05ee8a docs: add new section to contribution guidelines for go mod replace
In this commit, we add a new section to the code contribution guidelines
explaining how to use `go mod replace`. This will be a common procedure
for any developer that needs to make a change in any of our sister
projects, so it's nice to have this outlined in a single place.
2019-01-17 16:50:06 -08:00
Olaoluwa Osuntokun c3ebe6c77d Merge pull request #2402 from Roasbeef/update-install-directions
docs/INSTALL.md: update Go installation options for Linux
2019-01-17 16:33:06 -08:00
Olaoluwa Osuntokun 099d260318 Merge pull request #2320 from cfromknecht/wtpolicy
[watchtower] add wtpolicy.Policy and wtserver message logging
2019-01-16 14:05:59 -08:00
Olaoluwa Osuntokun 32a5f6821a Merge pull request #1621 from halseth/integration-tests-split-backend-miner
[Integration tests] Split chain backend and miner
2019-01-16 14:02:52 -08:00
Olaoluwa Osuntokun cb1df51a3a Merge pull request #2479 from wpaulino/signer-server-compilation-fix
lnrpc/signrpc/signer_server: fix incorrect lnwallet.InputScript field
2019-01-15 21:39:45 -08:00
Olaoluwa Osuntokun 5b2afaff8f Merge pull request #2448 from cfromknecht/watchtower-pkg
watchtower pkg
2019-01-15 20:01:50 -08:00
Olaoluwa Osuntokun 53a181ce49 Merge pull request #2439 from cfromknecht/wtpolicy-blob-type
wtpolicy: migrate to using wtpolicy.Policy + blob bitvector flags
2019-01-15 19:30:56 -08:00
Olaoluwa Osuntokun 8bde0e736f Merge pull request #2473 from Roasbeef/list-channels-initiator
lnrpc+rpc: add initiator field to listchannels
2019-01-15 18:29:13 -08:00
Olaoluwa Osuntokun 7df0e6fafe Merge pull request #2466 from yancyribbens/enable-docker-mainnet
enable btcd and btcctl mainnet to be invoked from docker
2019-01-15 16:59:42 -08:00
Olaoluwa Osuntokun 114f0a8918 rpc: populate new initiator field in ListChannels response 2019-01-15 16:51:35 -08:00
Olaoluwa Osuntokun 5d0a371a7d lnrpc: add Initiator field to ListChannels resposne 2019-01-15 16:51:00 -08:00
Olaoluwa Osuntokun b700b969e8 Merge pull request #2463 from wpaulino/notify-when-offline
server: implement notifications for disconnected peers
2019-01-15 16:47:29 -08:00
Olaoluwa Osuntokun 509bed614c Merge pull request #2198 from Roasbeef/sendall-rpc
multi: add ability to sweep all coins in the the wallet to an addr to sendcoins
2019-01-15 14:49:17 -08:00
Olaoluwa Osuntokun 490ce4cd37 Merge pull request #2471 from jonathancross/aezeed
Fixup aezeed README (typos)
2019-01-14 21:36:55 -08:00
Olaoluwa Osuntokun 9c59ac4383 Merge pull request #2397 from halseth/reject-commitment-expected-fee-reset-bug
[bugfix] Process fee updates as any other update message
2019-01-14 17:06:27 -08:00
Olaoluwa Osuntokun 815c4a9e0d Merge pull request #2275 from wpaulino/funding-max-confs
fundingmanager: rejects funding requests with number of confirmations too large
2019-01-14 17:04:28 -08:00
Olaoluwa Osuntokun 2d717fdc44 Merge pull request #2446 from cfromknecht/lncfg-lnaddress-parsing
lncfg: NetAddress parsing
2019-01-11 15:42:48 -08:00
Olaoluwa Osuntokun 400a1d3282 Merge pull request #2431 from cfromknecht/keyring-remote-delay-retribution
lnwallet: Add keyring and remote CSV delay to BreachRetribution
2019-01-11 15:33:16 -08:00
Olaoluwa Osuntokun 5fde362420 Merge pull request #2452 from cfromknecht/stricter-has-active-link
htlcswitch: stricter HasActiveLink
2019-01-11 15:28:21 -08:00
Olaoluwa Osuntokun f83fde8483 lnwire: ensure we precisely encode the length for onion errors w/ chan updates
In this commit we fix a compatibility issue with other implementations.
Before this commit, when writing out an onion error that includes a
`ChannelUpdate` we would use the `MaxPayloadLength` to get the length to
encode. However, a recent update has modified that to be the max
`brontide` payload length as it's possible to pad out the message with
optional fields we're unaware of. As a result, we would always write out
a length of 65KB or so. This didn't effect our parser as we ignore the
length and decode the channel update directly as we don't need the
length to do that. However, other implementations depended on the length
rather than just reading the channel update, meaning that they weren't
able to decode our onion errors that had channel updates.

In this commit we fix that by introducing a new
`writeOnionErrorChanUpdate` which will write out the precise length
instead of using the max payload size.

Fixes #2450.
2019-01-11 14:21:48 -08:00
Olaoluwa Osuntokun cd15de4144 Merge pull request #2259 from yancyribbens/update-dockerfile-image
update lnd dockerfile image
2019-01-10 17:40:52 -08:00
Olaoluwa Osuntokun 9f7d2f6cbc Merge pull request #2449 from cfromknecht/router-avoid-naked-spew
routing/router: avoid naked spew of channel policies
2019-01-10 12:44:38 -08:00
Olaoluwa Osuntokun e140cbb945 test: add integration test for sweeping all coins from wallet 2019-01-09 15:55:31 -08:00
Olaoluwa Osuntokun eda6ed224f sweep: add unit tests for TestDetermineFeePerKw and CraftSweepAllTx
Along the way we also extend the mockFeeEstimator to be able to return a
fee rate for a specified confirmation target.
2019-01-09 15:55:28 -08:00
Olaoluwa Osuntokun b2c712fb67 cmd/lncli: add new --sweepall flag to sendcoins
In this commit, we add a new flag to the sendcoins command that allows
callers to sweep all funds out of the daemon's wallet. This CANNOT be
set at the same time that an amount is specified.
2019-01-09 15:55:27 -08:00
Olaoluwa Osuntokun 3a7b9c8367 rpc: implement new feature of sendcoins to sweep all wallet UTXOs
In this commit, we implement the new feature which allows sendcoins to
sweep all the coins in the wallet. We use the new sweep.CraftSweepAllTx
method, and also use WithCoinSelectLock to ensure that we don't trigger
any double-spend errors triggered by coin selection race conditions.
2019-01-09 15:55:26 -08:00
Olaoluwa Osuntokun 36ff16cce4 lnrpc: add new SendAll field to SendCoinsRequest 2019-01-09 15:55:25 -08:00
Olaoluwa Osuntokun 4b316d97c8 lnwallet: add new WithCoinSelectLock method to fix coin select race conditions
In this commit, we add a new method WithCoinSelectLock. This method will
allow us to fix bugs in the project atm that can arise if a channel
funding is attempted (either manually or by autopilot) while a users is
attempting to send an on-chain transaction. If this happens
concurrently, then both contexts will grab the set of UTXOs and attempt
to lock them one by one. However, since they didn't obtain an exclusive
snapshot of the UTXO set of the wallet, they may both attempt to lock
the same input.

We also ensure that calls to SendMany cannot run into this issue by
using the WithCoinSelectLock synchronization when attempting to instruct
the internal wallet to send payments.
2019-01-09 15:55:24 -08:00
Olaoluwa Osuntokun 9c29e61826 sweep: add new CraftSweepAllTx method to fully withdrawal from a wallet
In this commit, we add a new function, CraftSweepAllTx. This function
allows callers to craft a transaction which sweeps ALL outputs from the
wallet to a single target address. It can either be used for UTXO
consolidation (at the cost of privacy by co-mingling inputs), or simply
to sweep all funds out of a wallet for various reasons.

In an attempt to ensure this method is loosely coupled and testable, for
all behavior structs, we create brand new interface to accept. This
ensures that we only rely on the minimal number of methods needed to
perform our duty.
2019-01-09 15:55:23 -08:00
Olaoluwa Osuntokun 4ad175c16d sweep: update getInputWitnessSizeUpperBound to be aware of nested p2sh
In this commit, we update the `getInputWitnessSizeUpperBound` and all
its callers to be aware of nested p2sh witness inputs. We do so by
adding another bool which is true if the output is a nested p2sh output.
If so, then in order to properly estimate the total weight, the caller
needs to factor in the non-witness data of the additional sigScript data
push.
2019-01-09 15:55:22 -08:00
Olaoluwa Osuntokun 40f0dbb5e6 lnwallet: add witness generation functions for p2wkh and np2wkh types 2019-01-09 15:55:21 -08:00
Olaoluwa Osuntokun c18e166e03 lnwallet+sweep: extend the WitnessGenerator type to return an InputScript
In this commit, we extend the WitnessGenerator type to now return an
InputScript. This allows it to be more encompassing, as now callers can
expect a sigScript to be populated if the input being swept requires a
sigScript field.

Along the way, we've also renamed input.BuildWitness to
input.CraftInputScript.  We also take a step towards allowing the
sweeper to sweep transactions for n2pwkh outputs. We do so by modifying
the BuiltWitness method to instead return an InputScript. Additionally,
when populating inputs if a sigScript is present, it will now be
populated.
2019-01-09 15:55:19 -08:00