Commit Graph
100 Commits
Author SHA1 Message Date
Johan T. Halseth 08ae9fe510 lnrpc: change REST post path of PolicyUpdate from /fees to /chanpolicy 2018-01-27 14:48:28 -08:00
Johan T. Halseth 764323eb69 integration tests: use wait predicate to get Bob balance 2018-01-24 11:12:52 +01:00
Johan T. Halseth a55c74f80c discovery/gossiper: restrict database access per channel ID
This commit uses the multimutex.Mutex to esure database
state stays consistent when handling an announcement, by
restricting access to one goroutine per channel ID.

This fixes a bug where the goroutine would read the
database, make some decisions based on what was read,
then write its data to the database, but the read data
would be outdated at this point. For instance, an
AuthProof could have been added between reading the
database and when the decision whether to announce
the channel is made, making it not announce it.
Similarly, when receiving the AuthProof, the edge
policy could be added between reading the edge state
and adding the proof to the database, also resulting
in the edge not being announced.
2018-01-24 10:26:40 +01:00
Johan T. Halseth b07f242dc2 routing: use multimutex.Mutex instead of package internal mutex 2018-01-24 10:26:40 +01:00
Johan T. Halseth 0df3ff4994 multimutex: add new multimutex package 2018-01-24 10:26:39 +01:00
Johan T. Halseth 3e01529de4 discovery/gossiper: don't reset batch after broadcast
This commit fixes a bug that could cause annoucements
to get lost, and resultet in flaky integration tests.
After a set of announcements was broadcastet, we would
reset (clear) the announcement batch, making any
annoucement that was added between the call to Emit()
and Reset() to be deleted, without ever being broadcast.

We can just remove the Reset() call, as the batch will
actually be reset within the call to Emit(), making
the previous call only delete those messages we hadn't
sent yet.
2018-01-24 10:26:39 +01:00
Johan T. Halseth 786ca6cc50 integration test: improve logging in case of channel announcement failure 2018-01-24 10:26:29 +01:00
Johan T. Halseth 8cce2ad630 Merge pull request #573 from wilmerpaulino/parse-data-fields
invoice: refactor parsing data tagged fields and add unit tests
2018-01-19 18:40:48 +01:00
Johan T. Halseth cb7699068b Merge pull request #591 from AdamISZ/master
Fix trivial comment errors in noise.go
2018-01-19 14:47:22 +01:00
Johan T. Halseth 88f5c9ca9c Merge branch 'master' into master 2018-01-19 14:04:52 +01:00
Johan T. Halseth 244ae4b571 Merge pull request #605 from timo-schmid/master
rpc: remove SetAlias from the rpc docs
2018-01-15 11:33:11 +01:00
Johan T. Halseth d030773c8d lnd test: add testUpdateChannelPolicy
This commit adds a new integration test, that checks that
policy/fee updates get propagated properly in the network,
such that the other nodes learn about the changes.
2018-01-12 22:57:05 +01:00
Johan T. Halseth f4f024aff2 lnd_test: extract graph topology subscription into own method
This commit extracts the launching of a goroutine subscribing
to and forwarding graph topology notifications into its own
utility method, such that it can be used in other tests as
well.
2018-01-12 22:57:04 +01:00
Johan T. Halseth 483abbee5b discovery: make sure ChannelUpdates always have incremented timestamp
This commit ensures that we always increment the timestamp of
ChannelUpdates we send telling the network about changes to
our channel policy. We do this because it could happen
(especially during tests) that we issued an update, but the
ChannelUpdate would have the same timestamp as our last
ChannelUpdate, and would be ignored by the network.
2018-01-12 22:57:03 +01:00
Johan T. Halseth 43d7dd3d99 lnd: make NumRequiredConfs and RequiredRemoteDelay scale with chanAmt
This commit makes the value returned fomr NumRequiredConfs
and RequiredRemoteDelay used during the funding process scale
linearly with the channel size. This is done to ensure that
in cases there are more at stake in a channel, we have more
time to react to reorgs, or unilateral closes.

If the user explicitly specified values for these two at
startup, we return those instead, without doing the scaling.
2018-01-12 22:57:02 +01:00
Johan T. Halseth 3edc1a7456 fundingmanager: define min and maxRemoteDelay
This commit defines minRemoteDelay and maxRemoteDelay,
which is the extremes of the CSV delay we will require
the remote to use for its commitment transaction. The
actual delay we will require will be somewhere between
these values, depending on channel size.
2018-01-12 22:57:01 +01:00
Johan T. Halseth 53b0ee3765 lntest/node: use --bitcoin.defaultchanconfs=1 and --bitcoin.defaultremotedelay=4 2018-01-12 22:57:00 +01:00
Johan T. Halseth 4ee3bff771 lnd: use cfg.Bitcoin.DefaultNumChanConfs 2018-01-12 22:56:59 +01:00
Johan T. Halseth 0815bd4eb0 config: make DefaultNumChanConfs part of chainConfig
This commit moves the definition of DefaultNumChanConfs into
the chainConfig (such that it is set as e.g.
"--bitcoin.defaultchanconfs"), making it possible to set
individually for different chains.

It also adds the flag DefaultRemoteDelay to the chainConfig,
which can be used to set the CSV delay we will require the remote
to wait before retrieving its own funds in case of an
uncooperative close of the channel.

Both these are set 0 by default (if not specified by the user),
which in that case we will dynamically set the values, scaling
them according to the channel size.
2018-01-12 22:56:54 +01:00
Johan T. Halseth 633878d497 funding test: return static num conf instead of default value 2018-01-12 22:56:52 +01:00
Johan T. Halseth 10bd46ac72 chainregistry: use forwarding policy rules from config
This commit removes the definitions of
defaultBitcoinForwardingPolicy and defaultLitecoinForwardingPolicy
from the the chainregistry, and instead creates a routingPolicy
from the values found in the config.
2018-01-12 22:56:44 +01:00
Johan T. Halseth f1c6d40db8 lnd_test: use defaultBitcoinTimeLockDelta instead of defaultBitcoinForwardingPolicy.TimeLockDelta 2018-01-12 22:56:42 +01:00
Johan T. Halseth 1f6268cdde rpcserver: use cfg.Bitcoin.TimeLockDelta as default CLTVExpiry for invoices 2018-01-12 22:56:41 +01:00
Johan T. Halseth f4feb1e697 config: add forwarding policy rules to config
This commit moves the forwarding policy rules for Bitcoin
and Litecoin, previously defined in the chainregistry, to
config.go, making them possible to define by the user.
We validate that the TimeLockDelta set is at least 4, the
other rules we let the user specify arbitrarily, even 0.
2018-01-12 22:56:40 +01:00
Johan T. Halseth 79a6efe33f fundingmanager: use minHtlc from initFundingMsg
This commit makes the fundingmanager read the minHtlc
field of the initFundingMsg, and add it to the reservation
as this node's htlc_minimum_msat for the open_channel
message. If the field is not specified in the initFundingMsg,
the default value found in the DefaultRoutingPolicy will
be used.
2018-01-12 22:56:39 +01:00
Johan T. Halseth 7805a53c34 pilot: pass minHtlc = 1 satoshi to OpenChannel 2018-01-12 22:56:39 +01:00
Johan T. Halseth f3dff2ae97 rpcserver: add min_htlc_msat parameter to OpenChannel and OpenChannelSync 2018-01-12 22:56:38 +01:00
Johan T. Halseth 84e5adcdd0 server: add min_htlc_msat parameter to OpenChannel method 2018-01-12 22:56:37 +01:00
Johan T. Halseth 59b331c04d lncli: add min_htlc_msat to openchannel 2018-01-12 22:56:36 +01:00
Johan T. Halseth e27f524309 lnrpc: add min_htlc_msat to OpenChanneRequest 2018-01-12 22:56:35 +01:00
Johan T. Halseth c4139b9f89 rpcserver: rename UpdateFees -> UpdateChannelPolicy
This commit changes the name of the UpdateFee method to
UpdateChannelPolicy, to mimic the recent proto change.
It also reads and validates the passed TimeLockDelta,
and sends it to the gossiper for announcing it to the
network, and to the switch for updating the forwarding
policy of the links.
2018-01-12 22:56:34 +01:00
Johan T. Halseth 26421031e2 lncli: rename updatefees to updatechanpolicy
This commit renames the `lncli updatefees` command to
`lncli updatechanpolicy` and adds `time_lock_delta` as
one of the passed parameters.
2018-01-12 22:56:34 +01:00
Johan T. Halseth 551326586c lnrpc: rename UpdateFee -> UpdateChannelPolicy
This commit renames the UpdateFee RPC call together
with associated types to UpdateChannelPolicy. In addition
to fees, now also timelock delta can be specified using
this call.
2018-01-12 22:56:33 +01:00
Johan T. Halseth 8370fa2cde discovery/gossiper: apply TimeLockDelta to edge when processing policy update
Also rename various instances of "FeeUpdate" to "PolicyUpdate"
2018-01-12 22:56:32 +01:00
Johan T. Halseth 0b8e7ff836 routing: embed FeeSchema in ChannelPolicy
This commit embeds the FeeSchema within the new
struct ChannelPolicy, which also contains the
TimeLockDelta for a channel.
2018-01-12 22:56:31 +01:00
Johan T. Halseth 9bdb483757 htlcswitch/link: make MinHTLC non-changable
This commit specifies that the MinHTLC value for a link is static
over the lifetime of a channel, and don't process the field
during a policyUpdate.
2018-01-12 22:56:29 +01:00
Johan T. Halseth 0571918d3d routing: process only single ChannelEdgePolicy per channelID concurrently
This commit adds synchronization around the processing
of multiple ChannelEdgePolicy updates for the same
channel ID at the same time.

This fixes a bug that could cause the database access
HasChannelEdge to be out of date when the goroutine
came to the point where it was calling UpdateEdgePolicy.
This happened because a second goroutine would have
called UpdateEdgePolicy in the meantime.

This bug was quite benign, as if this happened at
runtime, we would eventually get the ChannelEdgePolicy
we had lost again, either from a peer sending it to
us, or if we would fail a payment since we were using
outdated information. However, it would cause some of
the tests to flake, since losing routing information
made payments we expected to go through fail if this
happened.

This is fixed by introducing a new mutex type, that
when locking and unlocking takes an additional
(id uint64) parameter, keeping an internal map
tracking what ID's are currently locked and the
count of goroutines waiting for the mutex. This
ensure we can still process updates concurrently,
only avoiding updates with the same channel ID from
being run concurrently.
2018-01-09 13:09:29 +01:00
Johan T. Halseth 3f0a525331 discovery test: update gossiper test to account for timestamp deduping 2018-01-09 13:09:28 +01:00
Johan T. Halseth ea95f37277 discovery: keep newest messages when deduping in gossiper
This commit makes the gossiper aware of the timestamps
of ChannelUpdates and NodeAnnouncements, such that it
only keeps the newest message when deduping. Earlier
it would always keep the last received message, which
in some cases could be outdated.
2018-01-09 13:09:25 +01:00
Johan T. Halseth 4a1a9d6b14 lnd_test: add name of testcase to node's logfile
This commit adds a line of text including a test case's
name to Alice's and Bob's logfiles during integration
tests, making it easier to seek for the place in the log
where the specific tests start.
2018-01-09 12:59:32 +01:00
Johan T. Halseth 87dee4b15a lntest: add AddToLog method for node
This commit adds a new method, AddToLog, that can
be used to add strings to a test node's log file.
2018-01-09 12:58:13 +01:00
Johan T. Halseth 1f19694f50 integration tests: add test for private channels
This commit adds a new test, that in a small network
of 4 nodes, tests that a private channel can be used
for routing payments by the endpoints of the channel,
while the existence of the channel is not known to
the rest of the network.
2018-01-06 17:21:49 -08:00
Johan T. Halseth a5f7c4872b lntest/harness: let OpenChannel take 'private' parameter 2018-01-06 17:21:49 -08:00
Johan T. Halseth 2ddd139084 discovery: check proof for nilness before creating chanAnn
This commit makes sure we are not attempting to create a
channel announcement with a nil ChannelAuthProof, as that
could cause a crash at startup whe the gossiper would
attempt to reprocess an edge coming from the fundingmanager.

It also makes sure we check the correct error returned from
processRejectedEdge.
2018-01-02 19:51:38 +01:00
Johan T. Halseth db8b4cad4a server: fix deadlock in sendToPeer at peer shutdown
This commit fixes a deadlock that could occur when
a peer disconnected during a call to sentToPeer. In
This particular case, a message would successfully
be queued, the peer would shutdown, and we would
block waiting for an error to be returned on the
message's error channel, which would deadlock.
This fixes that by also checking for peer shutdown.
2017-12-21 23:32:39 +01:00
Johan T. Halseth 2f926f1a47 server: add NotifyWhenOnline method to gossiper 2017-12-19 13:01:59 -06:00
Johan T. Halseth c3aa23f061 discovery test: update gossiper test for new database structure 2017-12-19 13:01:59 -06:00
Johan T. Halseth e3ae204fcb discovery: make gossiper able to resend failed AnnounceSignatures
This commit makes the gossiper track the state of a local
AnnounceSignature message, such that it can retry sending
it to the remote peer if needed. It will also persist this
state in the WaitingProofStore, such that it can resume
from this state at startup.
2017-12-19 13:01:59 -06:00
Johan T. Halseth 8a79bbf383 server: return error from sendPeerMessages
This commit adds a return error to sendPeerMessages,
making it possible to observe if a message sent to
a peer fails or succeeds.
2017-12-19 13:01:59 -06:00
Johan T. Halseth 25b77a0aee peer: add error chan to queueMsg 2017-12-19 13:01:59 -06:00
Johan T. Halseth b74a281b57 discovery test: test for remote ChannelUpdate for unknown channel
This commit adds a test that ensures that if we receive a
ChannelUpdate for a channel we don't know about, it will
be reprocessed after we receive a ChannelAnnouncement for
that channel.
2017-12-17 18:35:34 -08:00
Johan T. Halseth db829cd0c5 discovery: reprocess premature ChannelUpdates
This commit makes the gossiper store received ChannelUpdates
that is not for any known channel in a map, such that they
can be reprocessed when the ChannelAnnouncement arrives.

This is done to handle the case where we receive a ChannelUpdate
from our channel counterparty before we have been able to process
our own local ChannelAnnouncement.
2017-12-17 18:35:34 -08:00
Johan T. Halseth 8e120d1e62 lnwallet test: add FFAnnounceChan flag to reservation init 2017-12-17 18:35:34 -08:00
Johan T. Halseth fa5b5521bf lnd_test: update integration tests for 6 block channel announcements 2017-12-17 18:35:34 -08:00
Johan T. Halseth d7072c4f8f lntest/harness: set Private=false in OpenChannel 2017-12-17 18:35:34 -08:00
Johan T. Halseth b3948d352e funding tests: update tests for the 6 block and private channel changes 2017-12-17 18:35:34 -08:00
Johan T. Halseth 9af7cc9b99 funding: cleanup of 6 conf and 'private' channel logic
This commits slightly rewrites the newly introduced
logic for private channels. Instead of keeping the
channel announce preference in a database within
fundingManager, it is stored as part of the
OpenChannel struct.

In addition, the ChanOpenStatus_Open update is now
sent after the channel is added to the router, instead
of waiting until the 6 blocks confirmation has passed.
2017-12-17 18:35:34 -08:00
Johan T. Halseth fffe15f0fd lnwallet: add FundingFlag parameter to InitChannelReservation 2017-12-17 18:35:34 -08:00
Johan T. Halseth 10b838e9b4 gossiper: private channel cleanup + comments
This commit adds some comments and does some cleanup
of the logic that makes sure non-public channels
(channels with no AuthProof) are not broadcasted
to the network.
2017-12-17 18:35:34 -08:00
Johan T. Halseth 48e22219c0 channeldb: add ChannelFlags to OpenChannel struct
This commit adds the ChannelFlags field, of type
lnwire.FundingFlags, to the OpenChannel struct,
including serialization for database storage.
This is done to preserve the flags that were
sent during channel opening, currently used
to determine whether a channel should be made
public or not after opening.
2017-12-17 18:35:34 -08:00
Johan T. Halseth 17d1d5dc9c lncli: add 'private' flag to openchannel command
This make lncli openchannel take a --private
parameter, set to false by default.
2017-12-17 18:35:34 -08:00
Johan T. Halseth 464f57d3a5 lnrpc: update godoc for 'private' flag 2017-12-17 18:35:34 -08:00
Johan T. Halseth 6f263610ae fundingmanager: add more logging after funding confirmation (#454)
This commit adds additional logging around the sending
of fundingLocked and channel announcements.
2017-12-08 14:50:26 -08:00
johan 92f4f4fbda walletunlocker: check that password is at least 8 characters 2017-11-29 17:30:56 +01:00
Johan T. Halseth 3a0d4e78ae travis.yml: build btcd version from glide.yaml for use in integration tests 2017-11-20 14:22:15 -08:00
Johan T. Halseth 6065c763e6 rpcserver: only set channel Active=true if added to htlcswitch
For a calls to ListChannels we now only set the
ActiveChannel.Active=true if the link is found by the
htlcswitch. This is done to be able to make it possible
to tell if a newly opened channel has been added to
the htlcswitch, such that we can synchronize on this
during tests before we attempt to close the  channel.
2017-11-20 14:22:14 -08:00
Johan T. Halseth ae7c6c7e8f networktest: wait for channel to become active before attempting close 2017-11-20 14:21:57 -08:00
Johan T. Halseth 555cead5ad peer: avoid blocked writeHandler<->queueHandler interaction
This commit addresses an issue that could occur if a
message was attempted added to the sendQueue by the
queueHandler before the writeHandler had started.

If a message was sent to the queueHandler before the
writeHandler was ready to accept messages on the
sendQueue, the message would be added to the
pendingMsg queue, but would not be attempted sent
on the sendQueue again before a new incoming message
triggered a new attempt.
2017-11-15 18:54:06 -08:00
Johan T. Halseth d1e39e764b lncli: Print help text in case of encrypted wallet.
This commit adds a decorator that will inspect the
error from an command action, and prints an encrypted
wallet help text if the error has status code Unimplemented.

This is done to help a user that is trying to issue
lncli commands before unlocking the wallet, since
the RPC server won't be active and every call will
return this status code.
2017-11-09 11:10:32 -08:00
Johan T. Halseth f5e324684f test: use signDesc.HashType instead of SigHashAll in mockSigner 2017-11-06 14:31:23 +01:00
Johan T. Halseth df17a680c4 htlcswitch test: use signDesc.HashType instead of SigHashAll in mock
signer.
2017-11-06 14:31:22 +01:00
Johan T. Halseth dd4996b4d5 lnwallet: use signDesc.HashType for sweepsig in script_utils
This commit changes the use of SigHash flags in the spend
transactions created in scrit_utils. Instead of always
using SigHashAll for the sweep signature, we instead use
the sighash flag specified by the passed sign descriptor.
2017-11-06 14:31:21 +01:00
Johan T. Halseth f12dfe2c45 lnwallet/btcwallet: Use signDesc.HashType when signing
Tis commit makes the btcwallet signer implementation use
signDesc.HashType instead of SigHashAll when signing
transactions. This will allow the creator of the transaction
to specify the sighash policy when creating the accompanying
sign descriptior.
2017-11-06 14:31:03 +01:00
Johan T. Halseth 029082fb82 lnd_test: add channel graph reorg test
This commit adds a test for an lnd instance experiecing a reorg,
making sure a channel that is in the channel graph (using the
describegraph rpc call) will no longer be after the funding tx
gets reorged out.
2017-11-03 00:05:33 +01:00
Johan T. Halseth 256db86b02 routing: make channel router aware of stale blocks
This commit make the channel router handle the case where
it wakes up on a stale branch, and also the case where a
reorg happens while it is active.
2017-11-03 00:05:32 +01:00
Johan T. Halseth 8eb994c14b routing/chainView test: add testFilterBlockDisconnected
This commit adds a test for the FilteredChainView interfaces,
making sure they notify about disconnected/connected blocks
in the correct order during a reorg.
2017-11-03 00:05:31 +01:00
Johan T. Halseth 6d15be5b79 routing/chainview: use blockEventQueue for neutrino block events
This commit makes use of the blockEventQueue within the neutrino
implementation of FilteredChainView to ensure connected and
disconnected blocks are consumed in order by the reader.

It also specifies that neutrino is not to send disconnected blocks
notifications during rescans, making it consistent with the btcd
implementation.
2017-11-03 00:05:30 +01:00
Johan T. Halseth 082f012fcf routing/chainview: implement staleBlocks for btcd view.
This commit moves btcd view away from using the deprecated
callbacks onBlockConnected/Disconnected, and instead use
onFilteredBlockConnected/disconnected.

This commit also implements the sending of disconnected blocks
over the staleBlocks channel. To send these blocks, the
blockEventQueue is used to ensure the ordering of blocks are
correctly kept.

It also changes the way filter updates are handled. Since we
now load the tx filter to the rpc server itself, we can call
RescanBlocks instead of manually filtering blocks. These
rescanned blocks are also added to the blockEventQueue,
ensuring the ordering is kept.
2017-11-03 00:05:30 +01:00
Johan T. Halseth e9c2f703d9 routing/chainview: additional comments to FilteredChainView godoc 2017-11-03 00:05:29 +01:00
Johan T. Halseth a219aca0d3 routing/chainView: add blockEventQueue data structure
blockEventQueue is an ordered queue for block events sent from a
FilteredChainView. The two types of possible block events are
connected/new blocks, and disconencted/stale blocks. The
blockEventQueue keeps the order of these events intact, while
still being non-blocking. This is important in order for the
chainView's call to onFilteredBlockConnected/Disconnected to not
get blocked, and for the consumer of the block events to always
get the events in the correct order.
2017-11-03 00:05:28 +01:00
Johan T. Halseth b26560e0f4 channeldb: add DisconnectBlockAtHeight
This commit adds the method DisconnectBlockAtHeight to the channel
graph database, making it possible to "rewind" the database in case
a block is disconnected from the main chain. To accomplish this,
a prune log is introduced, making it possible to keep track of the
point in time where the database was pruned. This is necessary for
the case where lnd might wake up on a stale branch, and must "walk
backwards" on this branch after it finds a common block fro the
graph database and the new main chain.
2017-11-03 00:05:19 +01:00
Johan T. Halseth 4b883b9899 funding: poll or database state instead of using timeouts in tests
This commit make the fundingmanager tests poll for database state
for a time, instead of using an explicit sleep before accessing the
DB. This should address some of the flakes encountered on Travis,
where db writes might take longer than usual.
2017-10-25 13:17:22 -07:00
Johan T. Halseth 00ee3afab8 lncli: add commands "create" and "unlock"
lncli create:
This command is used to set up a wallet encryption password for
use with lnd at first time use. It will ask fot the user to
confirm the chosen password, then do a call to the lnd RPC method
CreateWallet with the chosen password.

lncli unlock:
This command is used to unlock the wallet of a running lnd instance.
It calls the RPC method UnlockWallet with the provided password.

Both methods makes use of the terminal.ReadPassword method, to
securely read a password from user input without making it
replayable in the terminal.
2017-10-19 19:17:35 -07:00
Johan T. Halseth 2c2d18ee10 networktest: --noencryptwallet for test nodes
This commit adds the --noencryptwallet flag to integration test
nodes,  causing them to be operational during the tests without
having to provide a password over rpc.
2017-10-19 19:17:35 -07:00
Johan T. Halseth 824e0c2982 daemon: wait for encryption passoword at startup
This commit makes use of the UnlockerService within lnd, waiting
for the user to provide a wallet encryption passord over RPC at
startup. When the passoword is received, startup continues as
normal, either using the passowrd to create the wallet for first
time use, or unlocking an existing wallet database.

This can be skipped by setting the --noencryptwallet flag, causing
the wallet database to be encypted using the default passoword.
2017-10-19 19:17:35 -07:00
Johan T. Halseth 62dc6b81d2 chainregistry: take wallet password as parameter to newChainControlFromConfig
This let the caller of newChainControlFromConfig set the password
to be used when creating or unlocking the wallet database. The
provided password is used both as private and public password.
2017-10-19 19:17:35 -07:00
Johan T. Halseth f1c7dc1cbd config: add --noencryptwallet flag
This commit add the --noencryptwallet flag to lnd config, to be
used by users wanting to disable wallet encryption.
2017-10-19 19:17:35 -07:00
Johan T. Halseth b7ba2697c8 walletunlocker: add package walletunlocker
The walletunlocker package contains the UnlockerService, which
implements the lnrpc.WalletUnlocker interface. This service is
used for receiving a password from the user over RPC, and doing
simple validity checks like making sure the user is not trying
to create a new wallet if one already exists, and that in case
the wallet exists, the provided password is correct.

The service will the pass the passwords over the CreatePasswords
or UnlockPasswords channels, for use within lnd.go.
2017-10-19 19:17:35 -07:00
Johan T. Halseth 1f34bd815d lnrpc: add WalletUnlocker service.
This commit adds the service WalletUnlocker, which is to be used
for creating a wallet password at first time startup, and unlocking
the wallet. The service exposes the RPC methods CreateWallet and
UnlockWallet.
2017-10-19 19:17:35 -07:00
Johan T. Halseth e6cc46d84e lnwallet: export btcwallet.NetworkDir 2017-10-19 19:17:35 -07:00
Johan T. Halseth ff2adf96a9 fundingManager: conditional select on arbiterChan and peer.newChannels
This commit adds a select statement for sending on the fundingManager's
arbiterChan and the peer's newChannels channel. This makes sure we won't
be blocked sending on these channels in case of a shutdown.
2017-10-02 13:29:56 +02:00
Johan T. Halseth ee2eec6188 peer: ignore new channel requests for already active channels. 2017-10-02 13:29:54 +02:00
Johan T. Halseth d981e12a3a tests: cleanup of fundingmanager_test.go
This commit cleans the fundingManager tests by extracting
most of the common code from the different test cases into
assert methods, making the test cases easier to follow
and distinguish.

It also adds a new test for the case where the peer goes
offline, and the fundingManager must wait for it to come
online before it can send the fundingLocked message and
continue the funding flow.
2017-10-02 13:29:53 +02:00
Johan T. Halseth b8cadf881c fundingManager: use NotifyWhenOnline when sending fundingLocked.
The fundingManager will register with the server to get notified
when the targetted peer comes online, in case of a failed send
of the fundingLocked message. This is necessary because if the
peer is not connected yet (or was disconnected while we were
waiting for the funding tx to confirm), we cannot continue the
the opening process before the peer successfully has received
the fundingLocked.
2017-10-02 13:29:52 +02:00
Johan T. Halseth 4b4c431d67 server: add NotifyWhenOnline method.
This commit adds a listener queue for each peer, that can be used
to queue listeners that will be notified when the targetted peer
eventually comes online.
2017-10-02 13:29:51 +02:00
Johan T. Halseth 5d03256baf htlcswith/link: resend fundingLocked from channelLink when numUpdates == 0.
In the case where the channelLink get started and the number of
updates on this channel is zero, this means no paymenys has been
done using this channel. This might mean that the fundingLocked
never was sent successfully, so we resend to make sure this
channel gets opened correctly.
2017-10-02 13:29:50 +02:00
Johan T. Halseth 8244b7a78c fundingManager: handle duplicate fundingLocked
This commit adds a channel barrier on fundingManager startup for
channels where the opening process is not finished. This fixes
a bug where we after restarting the fundingManager would receive
the fundingLocked message, and crash when trying to close the
non-existing barrier.

In case we received a fundingLocked message after our own opening
process was finished, we would crash with the same error. We
therefore check if the channel barrier exists before we try to
close it.

It also adds functionality to fundingManager that makes it
ignore a fundingLocked message it receives for a channel where
this is already received. This is necessary when we in case of
a reconnection resend the fundingLocked since we cannot be sure
the remote has received it.

The fundingmanager tests are also updated to check that the
fundingLocked messages are sent and handled correcly, and also
exercise the scanarios described above.
2017-10-02 13:29:49 +02:00
Johan T. Halseth 6b3844ea66 lnwallet: add getter for channelState.RemoteNextCommitment 2017-10-02 13:29:32 +02:00
Johan T. Halseth ed8dd0b9e4 lncli: add new zpay32 options to command line
The new BOLT-11 compliant zpay32 package offers a few new
available options when creating invoices. This commit adds
those options to lncli, such that callers can specify these
when creating payment requests.
2017-09-27 13:17:29 +02:00
Johan T. Halseth 15d753fd9e rpcserver: use BOLT-11 compatible zpay32 package.
This commit changes the rpcserver to rely on the new zpay32
package, and support the new payment request options available
in the BOLT-11 invoice format.
2017-09-27 13:17:28 +02:00