From 26bc4f5239b944edfd9cd54be5951cfa7d2d76f7 Mon Sep 17 00:00:00 2001 From: niftynei Date: Mon, 19 Oct 2020 13:55:37 -0500 Subject: [PATCH] tx,bugfix: correct signature length estimate 71-bytes for a signature already includes the sighash byte. 2-bytes 30 44 (DER- prefix thing) 34-bytes 02 20 6e29c8df67fffdda1613cef1413eb1a9ef3627f1fc5e4d910837274eafcc7b2a (r) 34-bytes 02 20 4b8563d79b92fdd830a546862439f80b24132d09318af2c7220c791067067e29 (s) 1-byte 01 (sighash) == 71-bytes --- bitcoin/tx.c | 4 ++-- tests/test_misc.py | 34 +++++++++++++++++----------------- tests/test_plugin.py | 18 +++++++++--------- tests/test_wallet.py | 2 +- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/bitcoin/tx.c b/bitcoin/tx.c index 16dbc39b4..ee8c4584d 100644 --- a/bitcoin/tx.c +++ b/bitcoin/tx.c @@ -835,10 +835,10 @@ size_t bitcoin_tx_output_weight(size_t outscript_len) return weight; } -/* We grind signatures to get them down to 71 bytes (+1 for sighash flags) */ +/* We grind signatures to get them down to 71 bytes */ size_t bitcoin_tx_input_sig_weight(void) { - return 1 + 71 + 1; + return 1 + 71; } /* We only do segwit inputs, and we assume witness is sig + key */ diff --git a/tests/test_misc.py b/tests/test_misc.py index e201eb2a5..66f4798f5 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -660,46 +660,46 @@ def test_withdraw_misc(node_factory, bitcoind, chainparams): {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, [ {'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 1993745000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 1993760000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 6255000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 1993745000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 6240000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 1993760000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, [ {'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 1993745000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 1993760000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 6255000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 1993745000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 6240000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 1993760000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, [ {'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 1993745000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 1993760000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 6255000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 1993745000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 6240000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 1993760000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, [ - {'type': 'chain_mvt', 'credit': 0, 'debit': 1993385000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 1993400000, 'tag': 'withdrawal'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 2000000000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 6615000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 1993385000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 6600000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 1993400000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 11961135000, 'tag': 'withdrawal'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 13485000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 11961135000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 11961240000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 13440000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 11961240000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 11957490000, 'tag': 'withdrawal'}, - {'type': 'chain_mvt', 'credit': 0, 'debit': 3645000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 11957603000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 3637000, 'tag': 'chain_fees'}, ] check_coin_moves(l1, 'wallet', wallet_moves, chainparams) diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 23410cc7f..cc5dacdad 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -1606,11 +1606,11 @@ def test_coin_movement_notices(node_factory, bitcoind, chainparams): {'type': 'chain_mvt', 'credit': 2000000000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, [ - {'type': 'chain_mvt', 'credit': 0, 'debit': 991900000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 991908000, 'tag': 'withdrawal'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 1000000000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 8100000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 991900000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 8092000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 991908000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 100001000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 945523000, 'debit': 0, 'tag': 'deposit'}, ] @@ -1629,11 +1629,11 @@ def test_coin_movement_notices(node_factory, bitcoind, chainparams): {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, # Could go in either order [ - {'type': 'chain_mvt', 'credit': 0, 'debit': 995425000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 995433000, 'tag': 'withdrawal'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 1000000000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 4575000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 995425000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 4567000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 995433000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 100001000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 945785000, 'debit': 0, 'tag': 'deposit'}, ] @@ -1651,11 +1651,11 @@ def test_coin_movement_notices(node_factory, bitcoind, chainparams): {'type': 'chain_mvt', 'credit': 0, 'debit': 0, 'tag': 'spend_track'}, # Could go in either order [ - {'type': 'chain_mvt', 'credit': 0, 'debit': 995425000, 'tag': 'withdrawal'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 995433000, 'tag': 'withdrawal'}, {'type': 'chain_mvt', 'credit': 0, 'debit': 1000000000, 'tag': 'withdrawal'}, ], - {'type': 'chain_mvt', 'credit': 0, 'debit': 4575000, 'tag': 'chain_fees'}, - {'type': 'chain_mvt', 'credit': 995425000, 'debit': 0, 'tag': 'deposit'}, + {'type': 'chain_mvt', 'credit': 0, 'debit': 4567000, 'tag': 'chain_fees'}, + {'type': 'chain_mvt', 'credit': 995433000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 100001000, 'debit': 0, 'tag': 'deposit'}, {'type': 'chain_mvt', 'credit': 947285000, 'debit': 0, 'tag': 'deposit'}, ] diff --git a/tests/test_wallet.py b/tests/test_wallet.py index 9ff295ee5..b69c5c966 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -578,7 +578,7 @@ def test_utxopsbt(node_factory, bitcoind, chainparams): assert psbt2['tx']['vin'] == psbt['tx']['vin'] if chainparams['elements']: # elements includes the fee as an output - addl_fee = Millisatoshi(fee_val * start_weight // 1000 * 1000) + addl_fee = Millisatoshi((fee_val * start_weight + 999) // 1000 * 1000) assert psbt2['tx']['vout'][0]['value'] == psbt['tx']['vout'][0]['value'] + addl_fee.to_btc() else: assert psbt2['tx']['vout'] == psbt['tx']['vout']