Commit Graph

894 Commits

Author SHA1 Message Date
Christian Decker 2a5a114f27 irc: Handle node announcements
lightningd now uses a WHOIS query on itself to learn its external IP
address and announces that on the channel with the NODE message. It also
tracks other nodes in the routing table.

Refactored the signature verification to reuse it for both CHAN and NODE
messages.
2016-10-02 14:52:14 +02:00
Christian Decker b2126375e0 irc: Add contact information to nodes
The routing table now includes hostnames and ports for the node as well
as a helper to add/update the nodes we learn about.
2016-10-02 14:30:25 +02:00
Christian Decker c97c47da47 irc: Expose more IRC functionality
Now exposing the connection event and raw incoming commands.
2016-10-02 14:30:17 +02:00
Christian Decker 356bb73fe9 log/jsonrpc: getlog was returning invalid JSON.
A mixup between object and array notation in the getlog response was
resulting in invalid JSON.
2016-09-19 14:10:44 +02:00
Rusty Russell 5b3bde715a getinfo: add version information
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-14 05:28:51 +09:30
Rusty Russell e5b2cacd3f daemon: fix up getinfo command, add it to tests.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-14 05:15:53 +09:30
Rusty Russell dff50c3a5f peer: do not send anchor depth input twice.
We *should* be in a state which accepts it (could happen with reorg),
and there's no reason to test for greater than depth since we must process
blocks in order.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-13 15:26:44 +09:30
Rusty Russell 7b5806fef2 peer: give more sensible error if anchor is too large.
Currently we get the odd message "Own anchor has insufficient funds".

Reported-by: Christian Decker
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-13 12:40:32 +09:30
Rusty Russell 13593d4cbf peer: don't try to change fees while we're still setting up channel.
And add a FIXME about doing feechanges properly.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-13 12:40:28 +09:30
Rusty Russell 221a96cdeb getinfo: new RPC command
Useful for getting ID, what port (if not set in config file).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-13 03:37:07 +09:30
Rusty Russell c648897695 Makefile: clean up ccan-enumstr object for make clean.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-08 15:57:33 +09:30
Rusty Russell 831558d884 test.sh: remove scary-looking output from 'make check'
NO_VALGRIND= daemon/test/test.sh --normal --restart
lightning-cli: Connecting to 'lightning-rpc': Connection refused
lightning-cli: Connecting to 'lightning-rpc': Connection refused
lightning-cli: Connecting to 'lightning-rpc': Connection refused
lightning-cli: Connecting to 'lightning-rpc': Connection refused
lightning-cli: Connecting to 'lightning-rpc': Connection refused

This is expected: it happens when node3 is restarting.  Redirect
errors to /dev/null.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-08 15:56:33 +09:30
Rusty Russell 453c768b12 test: disable IRC connections for test.sh
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-08 15:47:05 +09:30
Christian Decker 2f6eefc49b routing: Wiring in the IRC peer discovery
Added a flag to disable the IRC discovery and calling the entrypoint to
start the IRC client loop.
2016-09-07 23:49:39 +02:00
Christian Decker f4568e5c1c routing: Added IRC announcement glue
Added channel announcement serialization and parsing, as well as the
entrypoints for the IRC peer discovery. Announcements are signed by the
sending endpoint and signatures are verified before adding the channels
to the local view of the topology. We do not yet verify the existence of
the anchor transaction.
2016-09-07 23:49:39 +02:00
Christian Decker 96839290fb routing: Added simple IRC library based on io_loop
The IRC library can login and keep its connection alive by replying to
PING messages. It also exposes a callback that handles PRIVMSG commands
and can inject messages from outside, e.g., based on a timer or a
lightning event.
2016-09-07 23:49:28 +02:00
Rusty Russell fce9ee29e3 db: always call db_update_our_closing in a transaction.
It's not in a transaction in one caller, so wrap that.
This removes some more error handling code.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell 5bcc9047b0 db: save error, return it when we commit transaction.
This saves a lot of error handling, and puts it in the place we care about.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell ea41386ed3 daemon: rename all the low-level commands to dev-
Rename the structs to match (and remove dev-echo).

This makes it clear that they're not the normal API.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell c83fb1a2dd waitinvoice: RPC call for processing incoming invoices.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell 27715f7732 invoice: order by when they were paid.
We need some ordering to deliver them to the JSON "waitinvoice" command;
we use a counter where 0 means "unpaid".

We keep two lists now, one for unpaid and one for paid invoices.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell 0761c12381 delinvoice: routine to remove an unpaid invoice.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell f6a0ea0b66 listinvoices: RPC command to show one or all invoices.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell 68632e6020 Use "msatoshi" not "msatoshis" everywhere.
Including in JSON API.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell 060ff29b45 Rename payment to invoice.
And rename JSON's accept-payment command to invoice.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:49 +09:30
Rusty Russell ca80fc0286 getroute: add a risk factor.
We need some way to reflect the tradeoff between the possible delay if
a payment gets stuck, and the fees charged by nodes.  This adds a risk
factor which reflects the probability that a node goes down, and the
cost associated with losing access to our funds for a given time.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:48 +09:30
Rusty Russell e2bc70bfce TODO: remove to-dones.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:48 +09:30
Rusty Russell 2452df315a doc: manpages for the various lightning RPC calls.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 16:47:41 +09:30
Rusty Russell ab125f709b db: save and restore accepted payments.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 13:47:33 +09:30
Rusty Russell 79b5663db7 routing: don't coredump on routes to neighbors.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 13:47:33 +09:30
Rusty Russell fcdb13093e db: use wrappers around boolean values.
TRUE and FALSE according to sql2003 standard, 1 and 0 according to sqlite3.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 13:47:33 +09:30
Rusty Russell 9d9ff00508 db: use macros to create tables.
I had some nonsensical columns, eg "bool ours", but sqlite3 pretty much
ignores them.  Use macros so mistakes are harder to make.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 13:47:33 +09:30
Rusty Russell 678df3525e ccan: update, add cppmagic.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-06 13:47:07 +09:30
Rusty Russell 04a07fd90e db: save and restore "sendpay" commands.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-05 13:29:48 +09:30
Rusty Russell b47fbfead0 db: Always fail HTLC inside a transaction.
This is important when we put payments in the database: they need to be
updated atomically as the HTLC is.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-02 12:02:18 +09:30
Rusty Russell 23049f09a9 db: Always fulfill HTLC inside a transaction.
This is important when we put payments in the database: they need to be
updated atomically as the HTLC is.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-02 12:01:18 +09:30
Rusty Russell 1ed4dbde05 peer: add peer_fail helper.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-02 12:00:18 +09:30
Rusty Russell 8a98ca8264 check-bolt: make it compile cleanly with -Wextra.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-02 11:58:18 +09:30
Rusty Russell 6fe5ecb2ac update-mocks: make mocks compile with -Wunused
Do this by scattering UNNEEDED everywhere, except in the case of (void).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-09-01 11:50:32 +09:30
Rusty Russell 2a603ea36d state: remove unused input parameter from next_state()
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 17:19:41 +09:30
Rusty Russell 15b42b89db peer: fix comparison bug if our connection_fee is negative.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 17:19:41 +09:30
Rusty Russell a4346b56f6 json: remove unused json_get_arr parameter.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 17:19:40 +09:30
Rusty Russell af8e4ed2b9 ccan: remove unused modules.
These tal submodules got pulled in initially by an overzealous copy.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:11:17 +09:30
Rusty Russell 7bebfe265c pay: remove route when a payment fails partway.
It's a bit harsh, but I'm assuming they'll get refreshed eventually.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:10:17 +09:30
Rusty Russell d8af789bbb channel: remove enum channel_side, rename htlc_side to side.
We had enum channel_side (OURS, THEIRS) for which end of a channel we
had, and htlc_side (LOCAL, REMOTE) for who proposed the HTLC.

Combine these both into simply "enum side".

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30
Rusty Russell f90fb4934f close_shutdown: make sure script_pubkey is standard.
As per BOLT update 9c3f150d2a44af6ee2c3be03acd6ef80ea184f4e.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30
Rusty Russell 2804a4de7a test: test case where we can't afford fees.
In particular, make sure B can just afford it, then have the A add a
HTLC which means B can no longer afford the fees, and A should cover
it.

We do this by modifying the previous overlapping-fail test, but we
need to have B offer it the htlc before A does: racy in the normal
autocommit case.  So we do a manual commit here, always.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30
Rusty Russell f8fa8c8dff peer: handle case correctly where they can't handle fees.
When they propose an HTLC to us, they need to be able to cover both it,
and the associated fees.  When it gets acked and applied to them, however,
they may no longer be able to afford the fees; this is OK and expected.

So add a flag to say whether they can dig into fees or not: without
this patch the code calls fatal() on the next patch which tests it.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30
Rusty Russell 1518f4424e log: add channel_state logging ability.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30
Rusty Russell 89235e0904 handle_pkt_commit: don't abort on database error.
Simply mark an error with this peer.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2016-08-31 16:06:32 +09:30