From 49ebed737d43fcb8e8f54df8cefd7108f26757f4 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 30 May 2016 11:12:20 +0930 Subject: [PATCH] daemon/test: test differential fees. This would have revealed the previous breakage (and I tested that!), plus now we test negotiate on closing. Signed-off-by: Rusty Russell --- Makefile | 3 ++- daemon/test/test.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cb3b6c37b..307e7c74d 100644 --- a/Makefile +++ b/Makefile @@ -196,7 +196,8 @@ daemon-test-%: # These don't work in parallel, so chain the deps daemon-test-steal: daemon-test-dump-onchain daemon-test-dump-onchain: daemon-test-timeout-anchor -daemon-test-timeout-anchor: daemon-test-normal +daemon-test-timeout-anchor: daemon-test-different-fee-rates +daemon-test-different-fee-rates: daemon-test-normal daemon-test-normal: daemon-test-manual-commit daemon-test-manual-commit: daemon-test-mutual-close-with-htlcs daemon-test-mutual-close-with-htlcs: daemon-all diff --git a/daemon/test/test.sh b/daemon/test/test.sh index ad098d888..413a06ac6 100755 --- a/daemon/test/test.sh +++ b/daemon/test/test.sh @@ -61,6 +61,9 @@ while [ $# != 0 ]; do x"--mutual-close-with-htlcs") CLOSE_WITH_HTLCS=1 ;; + x"--different-fee-rates") + DIFFERENT_FEES=1 + ;; x"--normal") ;; x"--crash") @@ -247,6 +250,13 @@ locktime=600 commit-time=$COMMIT_TIME EOF +if [ -n "$DIFFERENT_FEES" ]; then + FEE_RATE2=300000 + CLOSE_FEE_RATE2=30000 + echo "commit-fee-rate=$FEE_RATE2" >> $DIR2/config + echo "closing-fee-rate=$CLOSE_FEE_RATE2" >> $DIR2/config +fi + if [ -n "$GDB1" ]; then echo Press return once you run: gdb --args daemon/lightningd --lightning-dir=$DIR1 >&2 read REPLY @@ -343,6 +353,56 @@ $CLI generate 3 check_peerstate lcli1 STATE_NORMAL check_peerstate lcli2 STATE_NORMAL +if [ -n "$DIFFERENT_FEES" ]; then + # This is 100,000 satoshi, so covers fees. + HTLC_AMOUNT=100000000 + + # Asymmetry, since fee rates different. + NO_HTLCS_FEE2=$((338 * $FEE_RATE2 / 2000 * 2000)) + ONE_HTLCS_FEE2=$(( (338 + 32) * $FEE_RATE2 / 2000 * 2000)) + + A_AMOUNT1=$(($AMOUNT - $NO_HTLCS_FEE)) + A_FEE1=$NO_HTLCS_FEE + A_AMOUNT2=$(($AMOUNT - $NO_HTLCS_FEE2)) + A_FEE2=$NO_HTLCS_FEE2 + B_AMOUNT=0 + B_FEE=0 + + check_status_single lcli1 $A_AMOUNT1 $A_FEE1 "" $B_AMOUNT $B_FEE "" + check_status_single lcli2 $B_AMOUNT $B_FEE "" $(($A_AMOUNT2)) $(($A_FEE2)) "" + + EXPIRY=$(( $(date +%s) + 1000)) + SECRET=1de08917a61cb2b62ed5937d38577f6a7bfe59c176781c6d8128018e8b5ccdfd + RHASH=`lcli1 dev-rhash $SECRET | sed 's/.*"\([0-9a-f]*\)".*/\1/'` + lcli1 newhtlc $ID2 $HTLC_AMOUNT $EXPIRY $RHASH + [ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2 + [ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1 + check_status_single lcli2 0 0 "" $(($AMOUNT - $HTLC_AMOUNT - $ONE_HTLCS_FEE2)) $(($ONE_HTLCS_FEE2)) '{ "msatoshis" : '$HTLC_AMOUNT', "expiry" : { "second" : '$EXPIRY' }, "rhash" : "'$RHASH'" } ' + lcli2 fulfillhtlc $ID1 $SECRET + [ ! -n "$MANUALCOMMIT" ] || lcli2 commit $ID1 + [ ! -n "$MANUALCOMMIT" ] || lcli1 commit $ID2 + + check_status_single lcli1 $(($AMOUNT - $HTLC_AMOUNT - $NO_HTLCS_FEE / 2)) $(($NO_HTLCS_FEE / 2)) "" $(($HTLC_AMOUNT - $NO_HTLCS_FEE / 2)) $(($NO_HTLCS_FEE / 2)) "" + check_status_single lcli2 $(($HTLC_AMOUNT - $NO_HTLCS_FEE2 / 2)) $(($NO_HTLCS_FEE2 / 2)) "" $(($AMOUNT - $HTLC_AMOUNT - $NO_HTLCS_FEE2 / 2)) $(($NO_HTLCS_FEE2 / 2)) "" + + lcli1 close $ID2 + # Make sure they notice it. + check_peerstate lcli1 STATE_MUTUAL_CLOSING + check_peerstate lcli2 STATE_MUTUAL_CLOSING + $CLI generate 1 + check_peerstate lcli1 STATE_CLOSE_ONCHAIN_MUTUAL + check_peerstate lcli2 STATE_CLOSE_ONCHAIN_MUTUAL + # Give it 100 blocks. + $CLI generate 100 + check_no_peers lcli1 + check_no_peers lcli2 + + lcli1 stop + lcli2 stop + + all_ok +fi + A_AMOUNT=$(($AMOUNT - $NO_HTLCS_FEE)) A_FEE=$NO_HTLCS_FEE B_AMOUNT=0