mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01: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:
@@ -8,7 +8,7 @@ from decimal import Decimal
|
||||
from itertools import product
|
||||
|
||||
from test_framework.descriptors import descsum_create
|
||||
from test_framework.key import ECKey, H_POINT
|
||||
from test_framework.key import H_POINT
|
||||
from test_framework.messages import (
|
||||
COutPoint,
|
||||
CTransaction,
|
||||
@@ -43,8 +43,8 @@ from test_framework.util import (
|
||||
random_bytes,
|
||||
)
|
||||
from test_framework.wallet_util import (
|
||||
bytes_to_wif,
|
||||
get_generate_key
|
||||
generate_keypair,
|
||||
get_generate_key,
|
||||
)
|
||||
|
||||
import json
|
||||
@@ -710,9 +710,7 @@ class PSBTTest(BitcoinTestFramework):
|
||||
|
||||
self.log.info("Test that we can fund psbts with external inputs specified")
|
||||
|
||||
eckey = ECKey()
|
||||
eckey.generate()
|
||||
privkey = bytes_to_wif(eckey.get_bytes())
|
||||
privkey, _ = generate_keypair(wif=True)
|
||||
|
||||
self.nodes[1].createwallet("extfund")
|
||||
wallet = self.nodes[1].get_wallet_rpc("extfund")
|
||||
@@ -825,11 +823,9 @@ class PSBTTest(BitcoinTestFramework):
|
||||
self.nodes[1].createwallet(wallet_name="scriptwatchonly", disable_private_keys=True)
|
||||
watchonly = self.nodes[1].get_wallet_rpc("scriptwatchonly")
|
||||
|
||||
eckey = ECKey()
|
||||
eckey.generate()
|
||||
privkey = bytes_to_wif(eckey.get_bytes())
|
||||
privkey, pubkey = generate_keypair(wif=True)
|
||||
|
||||
desc = descsum_create("wsh(pkh({}))".format(eckey.get_pubkey().get_bytes().hex()))
|
||||
desc = descsum_create("wsh(pkh({}))".format(pubkey.hex()))
|
||||
if self.options.descriptors:
|
||||
res = watchonly.importdescriptors([{"desc": desc, "timestamp": "now"}])
|
||||
else:
|
||||
@@ -846,11 +842,9 @@ class PSBTTest(BitcoinTestFramework):
|
||||
|
||||
# Same test but for taproot
|
||||
if self.options.descriptors:
|
||||
eckey = ECKey()
|
||||
eckey.generate()
|
||||
privkey = bytes_to_wif(eckey.get_bytes())
|
||||
privkey, pubkey = generate_keypair(wif=True)
|
||||
|
||||
desc = descsum_create("tr({},pk({}))".format(H_POINT, eckey.get_pubkey().get_bytes().hex()))
|
||||
desc = descsum_create("tr({},pk({}))".format(H_POINT, pubkey.hex()))
|
||||
res = watchonly.importdescriptors([{"desc": desc, "timestamp": "now"}])
|
||||
assert res[0]["success"]
|
||||
addr = self.nodes[0].deriveaddresses(desc)[0]
|
||||
|
||||
Reference in New Issue
Block a user