mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 23:09:44 -04:00
refactor: use address_to_scriptpubkey to retrieve addresses scriptpubkey
This commit updates the code by replacing the RPC call used to decode an address and retrieve its corresponding scriptpubkey with the address_to_scriptpubkey function. address_to_scriptpubkey function can now decode all addresses formats, which makes it more efficient to use.
This commit is contained in:
parent
4142d19d74
commit
e47ce42f67
8 changed files with 16 additions and 8 deletions
|
@ -14,6 +14,7 @@ Generate COINBASE_MATURITY (CB) more blocks to ensure the coinbases are mature.
|
||||||
"""
|
"""
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from test_framework.address import address_to_scriptpubkey
|
||||||
from test_framework.blocktools import (
|
from test_framework.blocktools import (
|
||||||
COINBASE_MATURITY,
|
COINBASE_MATURITY,
|
||||||
NORMAL_GBT_REQUEST_PARAMS,
|
NORMAL_GBT_REQUEST_PARAMS,
|
||||||
|
@ -77,7 +78,7 @@ class NULLDUMMYTest(BitcoinTestFramework):
|
||||||
cms = self.nodes[0].createmultisig(1, [self.pubkey])
|
cms = self.nodes[0].createmultisig(1, [self.pubkey])
|
||||||
wms = self.nodes[0].createmultisig(1, [self.pubkey], 'p2sh-segwit')
|
wms = self.nodes[0].createmultisig(1, [self.pubkey], 'p2sh-segwit')
|
||||||
self.ms_address = cms["address"]
|
self.ms_address = cms["address"]
|
||||||
ms_unlock_details = {"scriptPubKey": self.nodes[0].validateaddress(self.ms_address)["scriptPubKey"],
|
ms_unlock_details = {"scriptPubKey": address_to_scriptpubkey(self.ms_address).hex(),
|
||||||
"redeemScript": cms["redeemScript"]}
|
"redeemScript": cms["redeemScript"]}
|
||||||
self.wit_ms_address = wms['address']
|
self.wit_ms_address = wms['address']
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import itertools
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from test_framework.address import address_to_scriptpubkey
|
||||||
from test_framework.blocktools import COINBASE_MATURITY
|
from test_framework.blocktools import COINBASE_MATURITY
|
||||||
from test_framework.authproxy import JSONRPCException
|
from test_framework.authproxy import JSONRPCException
|
||||||
from test_framework.descriptors import descsum_create, drop_origins
|
from test_framework.descriptors import descsum_create, drop_origins
|
||||||
|
@ -193,7 +194,7 @@ class RpcCreateMultiSigTest(BitcoinTestFramework):
|
||||||
assert mredeemw == mredeem
|
assert mredeemw == mredeem
|
||||||
wmulti.unloadwallet()
|
wmulti.unloadwallet()
|
||||||
|
|
||||||
spk = bytes.fromhex(node0.validateaddress(madd)["scriptPubKey"])
|
spk = address_to_scriptpubkey(madd)
|
||||||
txid, _ = self.wallet.send_to(from_node=self.nodes[0], scriptPubKey=spk, amount=1300)
|
txid, _ = self.wallet.send_to(from_node=self.nodes[0], scriptPubKey=spk, amount=1300)
|
||||||
tx = node0.getrawtransaction(txid, True)
|
tx = node0.getrawtransaction(txid, True)
|
||||||
vout = [v["n"] for v in tx["vout"] if madd == v["scriptPubKey"]["address"]]
|
vout = [v["n"] for v in tx["vout"] if madd == v["scriptPubKey"]["address"]]
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
"""Test the scanblocks RPC call."""
|
"""Test the scanblocks RPC call."""
|
||||||
|
from test_framework.address import address_to_scriptpubkey
|
||||||
from test_framework.blockfilter import (
|
from test_framework.blockfilter import (
|
||||||
bip158_basic_element_hash,
|
bip158_basic_element_hash,
|
||||||
bip158_relevant_scriptpubkeys,
|
bip158_relevant_scriptpubkeys,
|
||||||
|
@ -36,7 +37,7 @@ class ScanblocksTest(BitcoinTestFramework):
|
||||||
# send 1.0, mempool only
|
# send 1.0, mempool only
|
||||||
# childkey 5 of `parent_key`
|
# childkey 5 of `parent_key`
|
||||||
wallet.send_to(from_node=node,
|
wallet.send_to(from_node=node,
|
||||||
scriptPubKey=bytes.fromhex(node.validateaddress("mkS4HXoTYWRTescLGaUTGbtTTYX5EjJyEE")['scriptPubKey']),
|
scriptPubKey=address_to_scriptpubkey("mkS4HXoTYWRTescLGaUTGbtTTYX5EjJyEE"),
|
||||||
amount=1 * COIN)
|
amount=1 * COIN)
|
||||||
|
|
||||||
# mine a block and assure that the mined blockhash is in the filterresult
|
# mine a block and assure that the mined blockhash is in the filterresult
|
||||||
|
|
|
@ -8,6 +8,7 @@ from test_framework.blocktools import (
|
||||||
COINBASE_MATURITY,
|
COINBASE_MATURITY,
|
||||||
)
|
)
|
||||||
from test_framework.address import (
|
from test_framework.address import (
|
||||||
|
address_to_scriptpubkey,
|
||||||
script_to_p2sh,
|
script_to_p2sh,
|
||||||
)
|
)
|
||||||
from test_framework.key import ECKey
|
from test_framework.key import ECKey
|
||||||
|
@ -118,7 +119,7 @@ class SignRawTransactionWithKeyTest(BitcoinTestFramework):
|
||||||
}.get(tx_type, "Invalid tx_type")
|
}.get(tx_type, "Invalid tx_type")
|
||||||
redeem_script = script_to_p2wsh_script(witness_script).hex()
|
redeem_script = script_to_p2wsh_script(witness_script).hex()
|
||||||
addr = script_to_p2sh(redeem_script)
|
addr = script_to_p2sh(redeem_script)
|
||||||
script_pub_key = self.nodes[1].validateaddress(addr)['scriptPubKey']
|
script_pub_key = address_to_scriptpubkey(addr).hex()
|
||||||
# Fund that address
|
# Fund that address
|
||||||
txid = self.send_to_address(addr, 10)
|
txid = self.send_to_address(addr, 10)
|
||||||
vout = find_vout_for_address(self.nodes[0], txid, addr)
|
vout = find_vout_for_address(self.nodes[0], txid, addr)
|
||||||
|
|
|
@ -9,6 +9,7 @@ import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from .address import (
|
from .address import (
|
||||||
|
address_to_scriptpubkey,
|
||||||
key_to_p2sh_p2wpkh,
|
key_to_p2sh_p2wpkh,
|
||||||
key_to_p2wpkh,
|
key_to_p2wpkh,
|
||||||
script_to_p2sh_p2wsh,
|
script_to_p2sh_p2wsh,
|
||||||
|
@ -205,7 +206,7 @@ def create_witness_tx(node, use_p2wsh, utxo, pubkey, encode_p2sh, amount):
|
||||||
else:
|
else:
|
||||||
addr = key_to_p2sh_p2wpkh(pubkey) if encode_p2sh else key_to_p2wpkh(pubkey)
|
addr = key_to_p2sh_p2wpkh(pubkey) if encode_p2sh else key_to_p2wpkh(pubkey)
|
||||||
if not encode_p2sh:
|
if not encode_p2sh:
|
||||||
assert_equal(node.getaddressinfo(addr)['scriptPubKey'], witness_script(use_p2wsh, pubkey))
|
assert_equal(address_to_scriptpubkey(addr).hex(), witness_script(use_p2wsh, pubkey))
|
||||||
return node.createrawtransaction([utxo], {addr: amount})
|
return node.createrawtransaction([utxo], {addr: amount})
|
||||||
|
|
||||||
def send_to_witness(use_p2wsh, node, utxo, pubkey, encode_p2sh, amount, sign=True, insert_redeem_script=""):
|
def send_to_witness(use_p2wsh, node, utxo, pubkey, encode_p2sh, amount, sign=True, insert_redeem_script=""):
|
||||||
|
|
|
@ -13,6 +13,7 @@ from typing import (
|
||||||
Optional,
|
Optional,
|
||||||
)
|
)
|
||||||
from test_framework.address import (
|
from test_framework.address import (
|
||||||
|
address_to_scriptpubkey,
|
||||||
create_deterministic_address_bcrt1_p2tr_op_true,
|
create_deterministic_address_bcrt1_p2tr_op_true,
|
||||||
key_to_p2pkh,
|
key_to_p2pkh,
|
||||||
key_to_p2sh_p2wpkh,
|
key_to_p2sh_p2wpkh,
|
||||||
|
@ -96,7 +97,7 @@ class MiniWallet:
|
||||||
self._scriptPubKey = key_to_p2pk_script(pub_key.get_bytes())
|
self._scriptPubKey = key_to_p2pk_script(pub_key.get_bytes())
|
||||||
elif mode == MiniWalletMode.ADDRESS_OP_TRUE:
|
elif mode == MiniWalletMode.ADDRESS_OP_TRUE:
|
||||||
self._address, self._internal_key = create_deterministic_address_bcrt1_p2tr_op_true()
|
self._address, self._internal_key = create_deterministic_address_bcrt1_p2tr_op_true()
|
||||||
self._scriptPubKey = bytes.fromhex(self._test_node.validateaddress(self._address)['scriptPubKey'])
|
self._scriptPubKey = address_to_scriptpubkey(self._address)
|
||||||
|
|
||||||
# When the pre-mined test framework chain is used, it contains coinbase
|
# When the pre-mined test framework chain is used, it contains coinbase
|
||||||
# outputs to the MiniWallet's default address in blocks 76-100
|
# outputs to the MiniWallet's default address in blocks 76-100
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
"""Test the avoid_reuse and setwalletflag features."""
|
"""Test the avoid_reuse and setwalletflag features."""
|
||||||
|
|
||||||
|
from test_framework.address import address_to_scriptpubkey
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import (
|
from test_framework.util import (
|
||||||
assert_approx,
|
assert_approx,
|
||||||
|
@ -257,7 +258,7 @@ class AvoidReuseTest(BitcoinTestFramework):
|
||||||
if not self.options.descriptors:
|
if not self.options.descriptors:
|
||||||
# For the second send, we transmute it to a related single-key address
|
# For the second send, we transmute it to a related single-key address
|
||||||
# to make sure it's also detected as re-use
|
# to make sure it's also detected as re-use
|
||||||
fund_spk = self.nodes[0].getaddressinfo(fundaddr)["scriptPubKey"]
|
fund_spk = address_to_scriptpubkey(fundaddr).hex()
|
||||||
fund_decoded = self.nodes[0].decodescript(fund_spk)
|
fund_decoded = self.nodes[0].decodescript(fund_spk)
|
||||||
if second_addr_type == "p2sh-segwit":
|
if second_addr_type == "p2sh-segwit":
|
||||||
new_fundaddr = fund_decoded["segwit"]["p2sh-segwit"]
|
new_fundaddr = fund_decoded["segwit"]["p2sh-segwit"]
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import os
|
import os
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from test_framework.address import address_to_scriptpubkey
|
||||||
from test_framework.descriptors import descsum_create
|
from test_framework.descriptors import descsum_create
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.test_node import TestNode
|
from test_framework.test_node import TestNode
|
||||||
|
@ -58,7 +59,7 @@ class WalletFastRescanTest(BitcoinTestFramework):
|
||||||
if 'range' in desc_info:
|
if 'range' in desc_info:
|
||||||
start_range, end_range = desc_info['range']
|
start_range, end_range = desc_info['range']
|
||||||
addr = w.deriveaddresses(desc_info['desc'], [end_range, end_range])[0]
|
addr = w.deriveaddresses(desc_info['desc'], [end_range, end_range])[0]
|
||||||
spk = bytes.fromhex(w.getaddressinfo(addr)['scriptPubKey'])
|
spk = address_to_scriptpubkey(addr)
|
||||||
self.log.info(f"-> range [{start_range},{end_range}], last address {addr}")
|
self.log.info(f"-> range [{start_range},{end_range}], last address {addr}")
|
||||||
else:
|
else:
|
||||||
spk = bytes.fromhex(fixed_key.p2wpkh_script)
|
spk = bytes.fromhex(fixed_key.p2wpkh_script)
|
||||||
|
|
Loading…
Add table
Reference in a new issue