|
|
|
@ -1079,17 +1079,28 @@ class RawTransactionsTest(BitcoinTestFramework):
|
|
|
|
|
self.nodes[2].createwallet("test_weight_calculation")
|
|
|
|
|
wallet = self.nodes[2].get_wallet_rpc("test_weight_calculation")
|
|
|
|
|
|
|
|
|
|
addr = wallet.getnewaddress()
|
|
|
|
|
txid = self.nodes[0].sendtoaddress(addr, 5)
|
|
|
|
|
addr = wallet.getnewaddress(address_type="bech32")
|
|
|
|
|
ext_addr = self.nodes[0].getnewaddress(address_type="bech32")
|
|
|
|
|
txid = self.nodes[0].send([{addr: 5}, {ext_addr: 5}])["txid"]
|
|
|
|
|
vout = find_vout_for_address(self.nodes[0], txid, addr)
|
|
|
|
|
ext_vout = find_vout_for_address(self.nodes[0], txid, ext_addr)
|
|
|
|
|
|
|
|
|
|
self.nodes[0].sendtoaddress(wallet.getnewaddress(), 5)
|
|
|
|
|
self.nodes[0].sendtoaddress(wallet.getnewaddress(address_type="bech32"), 5)
|
|
|
|
|
self.generate(self.nodes[0], 1)
|
|
|
|
|
|
|
|
|
|
rawtx = wallet.createrawtransaction([{'txid': txid, 'vout': vout}], [{self.nodes[0].getnewaddress(): 9.999}])
|
|
|
|
|
fundedtx = wallet.fundrawtransaction(rawtx, {'fee_rate': 10})
|
|
|
|
|
rawtx = wallet.createrawtransaction([{'txid': txid, 'vout': vout}], [{self.nodes[0].getnewaddress(address_type="bech32"): 8}])
|
|
|
|
|
fundedtx = wallet.fundrawtransaction(rawtx, {'fee_rate': 10, "change_type": "bech32"})
|
|
|
|
|
# with 71-byte signatures we should expect following tx size
|
|
|
|
|
tx_size = 10 + 41*2 + 31*2 + (2 + 107*2)/4
|
|
|
|
|
# tx overhead (10) + 2 inputs (41 each) + 2 p2wpkh (31 each) + (segwit marker and flag (2) + 2 p2wpkh 71 byte sig witnesses (107 each)) / witness scaling factor (4)
|
|
|
|
|
tx_size = ceil(10 + 41*2 + 31*2 + (2 + 107*2)/4)
|
|
|
|
|
assert_equal(fundedtx['fee'] * COIN, tx_size * 10)
|
|
|
|
|
|
|
|
|
|
# Using the other output should have 72 byte sigs
|
|
|
|
|
rawtx = wallet.createrawtransaction([{'txid': txid, 'vout': ext_vout}], [{self.nodes[0].getnewaddress(): 13}])
|
|
|
|
|
ext_desc = self.nodes[0].getaddressinfo(ext_addr)["desc"]
|
|
|
|
|
fundedtx = wallet.fundrawtransaction(rawtx, {'fee_rate': 10, "change_type": "bech32", "solving_data": {"descriptors": [ext_desc]}})
|
|
|
|
|
# tx overhead (10) + 3 inputs (41 each) + 2 p2wpkh(31 each) + (segwit marker and flag (2) + 2 p2wpkh 71 bytes sig witnesses (107 each) + p2wpkh 72 byte sig witness (108)) / witness scaling factor (4)
|
|
|
|
|
tx_size = ceil(10 + 41*3 + 31*2 + (2 + 107*2 + 108)/4)
|
|
|
|
|
assert_equal(fundedtx['fee'] * COIN, tx_size * 10)
|
|
|
|
|
|
|
|
|
|
self.nodes[2].unloadwallet("test_weight_calculation")
|
|
|
|
|