mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-29 18:20:58 +02:00
test: refactor: introduce generate_keypair
helper with WIF support
In functional tests it is a quite common scenario to generate fresh elliptic curve keypairs, which is currently a bit cumbersome as it involves multiple steps, e.g.: privkey = ECKey() privkey.generate() privkey_wif = bytes_to_wif(privkey.get_bytes()) pubkey = privkey.get_pubkey().get_bytes() Simplify this by providing a new `generate_keypair` helper function that returns the private key either as `ECKey` object or as WIF-string (depending on the boolean `wif` parameter) and the public key as byte-string; these formats are what we mostly need (currently we don't use `ECPubKey` objects from generated keypairs anywhere). With this, most of the affected code blocks following the pattern above can be replaced by one-liners, e.g.: privkey, pubkey = generate_keypair(wif=True) Note that after this commit, the only direct uses of `ECKey` remain in situations where we want to set the private key explicitly, e.g. in MiniWallet (test/functional/test_framework/wallet.py) or the test for the signet miner script (test/functional/tool_signet_miner.py).
This commit is contained in:
@ -11,7 +11,6 @@ from test_framework.address import (
|
||||
address_to_scriptpubkey,
|
||||
script_to_p2sh,
|
||||
)
|
||||
from test_framework.key import ECKey
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
assert_equal,
|
||||
@ -23,16 +22,16 @@ from test_framework.script_util import (
|
||||
script_to_p2sh_p2wsh_script,
|
||||
script_to_p2wsh_script,
|
||||
)
|
||||
from test_framework.wallet import (
|
||||
getnewdestination,
|
||||
)
|
||||
from test_framework.wallet_util import (
|
||||
bytes_to_wif,
|
||||
generate_keypair,
|
||||
)
|
||||
|
||||
from decimal import (
|
||||
Decimal,
|
||||
)
|
||||
from test_framework.wallet import (
|
||||
getnewdestination,
|
||||
)
|
||||
|
||||
|
||||
class SignRawTransactionWithKeyTest(BitcoinTestFramework):
|
||||
@ -80,11 +79,8 @@ class SignRawTransactionWithKeyTest(BitcoinTestFramework):
|
||||
def witness_script_test(self):
|
||||
self.log.info("Test signing transaction to P2SH-P2WSH addresses without wallet")
|
||||
# Create a new P2SH-P2WSH 1-of-1 multisig address:
|
||||
eckey = ECKey()
|
||||
eckey.generate()
|
||||
embedded_privkey = bytes_to_wif(eckey.get_bytes())
|
||||
embedded_pubkey = eckey.get_pubkey().get_bytes().hex()
|
||||
p2sh_p2wsh_address = self.nodes[1].createmultisig(1, [embedded_pubkey], "p2sh-segwit")
|
||||
embedded_privkey, embedded_pubkey = generate_keypair(wif=True)
|
||||
p2sh_p2wsh_address = self.nodes[1].createmultisig(1, [embedded_pubkey.hex()], "p2sh-segwit")
|
||||
# send transaction to P2SH-P2WSH 1-of-1 multisig address
|
||||
self.block_hash = self.generate(self.nodes[0], COINBASE_MATURITY + 1)
|
||||
self.blk_idx = 0
|
||||
@ -109,10 +105,7 @@ class SignRawTransactionWithKeyTest(BitcoinTestFramework):
|
||||
|
||||
def verify_txn_with_witness_script(self, tx_type):
|
||||
self.log.info("Test with a {} script as the witnessScript".format(tx_type))
|
||||
eckey = ECKey()
|
||||
eckey.generate()
|
||||
embedded_privkey = bytes_to_wif(eckey.get_bytes())
|
||||
embedded_pubkey = eckey.get_pubkey().get_bytes().hex()
|
||||
embedded_privkey, embedded_pubkey = generate_keypair(wif=True)
|
||||
witness_script = {
|
||||
'P2PKH': key_to_p2pkh_script(embedded_pubkey).hex(),
|
||||
'P2PK': key_to_p2pk_script(embedded_pubkey).hex()
|
||||
|
Reference in New Issue
Block a user