Browse Source

daemon: wire in payment.

This actually uses the accept-payment data to make payments.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 8 years ago
parent
commit
ba9df99770
  1. 40
      daemon/peer.c
  2. 32
      daemon/test/test.sh

40
daemon/peer.c

@ -10,6 +10,7 @@
#include "lightningd.h"
#include "log.h"
#include "names.h"
#include "payment.h"
#include "peer.h"
#include "permute_tx.h"
#include "protobuf_convert.h"
@ -2167,6 +2168,7 @@ void peer_both_committed_to(struct peer *peer,
{
size_t i, n = tal_count(changes);
/* All this, simply for debugging. */
for (i = 0; i < n; i++) {
u64 htlc_id;
const char *type, *owner;
@ -2213,6 +2215,44 @@ void peer_both_committed_to(struct peer *peer,
log_debug(peer->log, "Both committed to %s of %s HTLC %"PRIu64,
type, owner, htlc_id);
}
/* We actually only respond to changes they made. */
if (side == OURS)
return;
for (i = 0; i < n; i++) {
struct payment *payment;
switch (changes[i].type) {
case HTLC_ADD:
payment = find_payment(peer->dstate, &changes[i].add.htlc.rhash);
if (payment) {
if (changes[i].add.htlc.msatoshis != payment->msatoshis) {
log_unusual(peer->log, "Got payment for %"PRIu64
" not %"PRIu64 " satoshi!",
changes[i].add.htlc.msatoshis,
payment->msatoshis);
command_htlc_fail(peer,
changes[i].add.htlc.id);
} else {
log_info(peer->log,
"Immediately resolving HTLC %"PRIu64,
changes[i].add.htlc.id);
command_htlc_fulfill(peer,
changes[i].add.htlc.id,
&payment->r);
}
}
/* FIXME: Otherwise, route. */
break;
case HTLC_FULFILL:
/* FIXME: resolve_one_htlc(peer, id, preimage); */
break;
case HTLC_FAIL:
/* FIXME: Route failure. */
break;
}
}
}
/* Sets up the initial cstate and commit tx for both nodes: false if

32
daemon/test/test.sh

@ -416,10 +416,6 @@ EXPIRY=$(( $(date +%s) + 1000))
SECRET=1de08917a61cb2b62ed5937d38577f6a7bfe59c176781c6d8128018e8b5ccdfd
RHASH=`lcli1 dev-rhash $SECRET | sed 's/.*"\([0-9a-f]*\)".*/\1/'`
# Tell node2 about payment: hash should be the same.
RHASH2=`lcli2 accept-payment $HTLC_AMOUNT $SECRET | sed 's/.*"\([0-9a-f]*\)".*/\1/'`
[ "$RHASH" = "$RHASH2" ]
lcli1 newhtlc $ID2 $HTLC_AMOUNT $EXPIRY $RHASH
if [ -n "$MANUALCOMMIT" ]; then
@ -724,6 +720,34 @@ A_AMOUNT=$(($A_AMOUNT - $HTLC_AMOUNT * 2))
B_AMOUNT=$(($B_AMOUNT + $HTLC_AMOUNT * 2))
check_status $A_AMOUNT $A_FEE "" $B_AMOUNT $B_FEE ""
# Now, use automatic payment redemption
RHASH3=`lcli2 accept-payment $HTLC_AMOUNT | sed 's/.*"\([0-9a-f]*\)".*/\1/'`
lcli1 newhtlc $ID2 $HTLC_AMOUNT $EXPIRY $RHASH3
[ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2
[ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1
[ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1
[ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2
# We transferred amount from A to B.
A_AMOUNT=$(($A_AMOUNT - $HTLC_AMOUNT))
B_AMOUNT=$(($B_AMOUNT + $HTLC_AMOUNT))
check_status $A_AMOUNT $A_FEE "" $B_AMOUNT $B_FEE ""
# Now, failed payment (didn't pay enough)
RHASH4=`lcli2 accept-payment $HTLC_AMOUNT | sed 's/.*"\([0-9a-f]*\)".*/\1/'`
lcli1 newhtlc $ID2 $(($HTLC_AMOUNT - 1)) $EXPIRY $RHASH4
[ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2
[ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1
[ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1
[ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2
check lcli2 "getlog | $FGREP 'Got payment for '$(($HTLC_AMOUNT - 1))' not '$HTLC_AMOUNT"
check_status $A_AMOUNT $A_FEE "" $B_AMOUNT $B_FEE ""
lcli1 close $ID2
# They should be negotiating the close.

Loading…
Cancel
Save