mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-08 17:30:36 +02:00
test: use script_util helpers for creating P2PKH scripts
This commit is contained in:
@ -34,13 +34,14 @@ from test_framework.script import (
|
|||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_CHECKSIG,
|
OP_CHECKSIG,
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_DUP,
|
|
||||||
OP_EQUAL,
|
OP_EQUAL,
|
||||||
OP_EQUALVERIFY,
|
|
||||||
OP_HASH160,
|
OP_HASH160,
|
||||||
OP_TRUE,
|
OP_TRUE,
|
||||||
hash160,
|
hash160,
|
||||||
)
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
key_to_p2pkh_script,
|
||||||
|
)
|
||||||
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_equal,
|
assert_equal,
|
||||||
@ -427,7 +428,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
op0 = CScript([OP_0])
|
op0 = CScript([OP_0])
|
||||||
# 2N7MGY19ti4KDMSzRfPAssP6Pxyuxoi6jLe is the P2SH(P2PKH) version of mjoE3sSrb8ByYEvgnC3Aox86u1CHnfJA4V
|
# 2N7MGY19ti4KDMSzRfPAssP6Pxyuxoi6jLe is the P2SH(P2PKH) version of mjoE3sSrb8ByYEvgnC3Aox86u1CHnfJA4V
|
||||||
unsolvable_address_key = hex_str_to_bytes("02341AEC7587A51CDE5279E0630A531AEA2615A9F80B17E8D9376327BAEAA59E3D")
|
unsolvable_address_key = hex_str_to_bytes("02341AEC7587A51CDE5279E0630A531AEA2615A9F80B17E8D9376327BAEAA59E3D")
|
||||||
unsolvablep2pkh = CScript([OP_DUP, OP_HASH160, hash160(unsolvable_address_key), OP_EQUALVERIFY, OP_CHECKSIG])
|
unsolvablep2pkh = key_to_p2pkh_script(unsolvable_address_key)
|
||||||
unsolvablep2wshp2pkh = CScript([OP_0, sha256(unsolvablep2pkh)])
|
unsolvablep2wshp2pkh = CScript([OP_0, sha256(unsolvablep2pkh)])
|
||||||
p2shop0 = CScript([OP_HASH160, hash160(op0), OP_EQUAL])
|
p2shop0 = CScript([OP_HASH160, hash160(op0), OP_EQUAL])
|
||||||
p2wshop1 = CScript([OP_0, sha256(op1)])
|
p2wshop1 = CScript([OP_0, sha256(op1)])
|
||||||
@ -454,7 +455,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
else:
|
else:
|
||||||
pubkey = hex_str_to_bytes(v['pubkey'])
|
pubkey = hex_str_to_bytes(v['pubkey'])
|
||||||
p2pk = CScript([pubkey, OP_CHECKSIG])
|
p2pk = CScript([pubkey, OP_CHECKSIG])
|
||||||
p2pkh = CScript([OP_DUP, OP_HASH160, hash160(pubkey), OP_EQUALVERIFY, OP_CHECKSIG])
|
p2pkh = key_to_p2pkh_script(pubkey)
|
||||||
importlist.append(p2pk.hex())
|
importlist.append(p2pk.hex())
|
||||||
importlist.append(p2pkh.hex())
|
importlist.append(p2pkh.hex())
|
||||||
importlist.append(CScript([OP_0, hash160(pubkey)]).hex())
|
importlist.append(CScript([OP_0, hash160(pubkey)]).hex())
|
||||||
|
@ -76,6 +76,9 @@ from test_framework.script import (
|
|||||||
is_op_success,
|
is_op_success,
|
||||||
taproot_construct,
|
taproot_construct,
|
||||||
)
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
keyhash_to_p2pkh_script,
|
||||||
|
)
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import assert_raises_rpc_error, assert_equal
|
from test_framework.util import assert_raises_rpc_error, assert_equal
|
||||||
from test_framework.key import generate_privkey, compute_xonly_pubkey, sign_schnorr, tweak_add_privkey, ECKey
|
from test_framework.key import generate_privkey, compute_xonly_pubkey, sign_schnorr, tweak_add_privkey, ECKey
|
||||||
@ -459,7 +462,7 @@ def make_spender(comment, *, tap=None, witv0=False, script=None, pkh=None, p2sh=
|
|||||||
assert script is None
|
assert script is None
|
||||||
pubkeyhash = hash160(pkh)
|
pubkeyhash = hash160(pkh)
|
||||||
spk = CScript([OP_0, pubkeyhash])
|
spk = CScript([OP_0, pubkeyhash])
|
||||||
conf["scriptcode"] = CScript([OP_DUP, OP_HASH160, pubkeyhash, OP_EQUALVERIFY, OP_CHECKSIG])
|
conf["scriptcode"] = keyhash_to_p2pkh_script(pubkeyhash)
|
||||||
conf["script_witv0"] = None
|
conf["script_witv0"] = None
|
||||||
conf["inputs"] = [getter("sign"), pkh]
|
conf["inputs"] = [getter("sign"), pkh]
|
||||||
elif script is not None:
|
elif script is not None:
|
||||||
@ -475,7 +478,7 @@ def make_spender(comment, *, tap=None, witv0=False, script=None, pkh=None, p2sh=
|
|||||||
# P2PKH
|
# P2PKH
|
||||||
assert script is None
|
assert script is None
|
||||||
pubkeyhash = hash160(pkh)
|
pubkeyhash = hash160(pkh)
|
||||||
spk = CScript([OP_DUP, OP_HASH160, pubkeyhash, OP_EQUALVERIFY, OP_CHECKSIG])
|
spk = keyhash_to_p2pkh_script(pubkeyhash)
|
||||||
conf["scriptcode"] = spk
|
conf["scriptcode"] = spk
|
||||||
conf["inputs"] = [getter("sign"), pkh]
|
conf["inputs"] = [getter("sign"), pkh]
|
||||||
elif script is not None:
|
elif script is not None:
|
||||||
|
@ -60,11 +60,9 @@ from test_framework.script import (
|
|||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_CHECKSIG,
|
OP_CHECKSIG,
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_DUP,
|
|
||||||
OP_ELSE,
|
OP_ELSE,
|
||||||
OP_ENDIF,
|
OP_ENDIF,
|
||||||
OP_EQUAL,
|
OP_EQUAL,
|
||||||
OP_EQUALVERIFY,
|
|
||||||
OP_HASH160,
|
OP_HASH160,
|
||||||
OP_IF,
|
OP_IF,
|
||||||
OP_RETURN,
|
OP_RETURN,
|
||||||
@ -77,6 +75,9 @@ from test_framework.script import (
|
|||||||
LegacySignatureHash,
|
LegacySignatureHash,
|
||||||
hash160,
|
hash160,
|
||||||
)
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
keyhash_to_p2pkh_script,
|
||||||
|
)
|
||||||
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_equal,
|
assert_equal,
|
||||||
@ -100,10 +101,6 @@ class UTXO():
|
|||||||
self.n = n
|
self.n = n
|
||||||
self.nValue = value
|
self.nValue = value
|
||||||
|
|
||||||
def get_p2pkh_script(pubkeyhash):
|
|
||||||
"""Get the script associated with a P2PKH."""
|
|
||||||
return CScript([CScriptOp(OP_DUP), CScriptOp(OP_HASH160), pubkeyhash, CScriptOp(OP_EQUALVERIFY), CScriptOp(OP_CHECKSIG)])
|
|
||||||
|
|
||||||
def sign_p2pk_witness_input(script, tx_to, in_idx, hashtype, value, key):
|
def sign_p2pk_witness_input(script, tx_to, in_idx, hashtype, value, key):
|
||||||
"""Add signature for a P2PK witness program."""
|
"""Add signature for a P2PK witness program."""
|
||||||
tx_hash = SegwitV0SignatureHash(script, tx_to, in_idx, hashtype, value)
|
tx_hash = SegwitV0SignatureHash(script, tx_to, in_idx, hashtype, value)
|
||||||
@ -1550,7 +1547,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
tx2 = CTransaction()
|
tx2 = CTransaction()
|
||||||
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
||||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, script_wsh))
|
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, script_wsh))
|
||||||
script = get_p2pkh_script(pubkeyhash)
|
script = keyhash_to_p2pkh_script(pubkeyhash)
|
||||||
sig_hash = SegwitV0SignatureHash(script, tx2, 0, SIGHASH_ALL, tx.vout[0].nValue)
|
sig_hash = SegwitV0SignatureHash(script, tx2, 0, SIGHASH_ALL, tx.vout[0].nValue)
|
||||||
signature = key.sign_ecdsa(sig_hash) + b'\x01' # 0x1 is SIGHASH_ALL
|
signature = key.sign_ecdsa(sig_hash) + b'\x01' # 0x1 is SIGHASH_ALL
|
||||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||||
@ -1587,7 +1584,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
# Test 3: P2SH(P2WSH)
|
# Test 3: P2SH(P2WSH)
|
||||||
# Try to spend the P2SH output created in the last test.
|
# Try to spend the P2SH output created in the last test.
|
||||||
# Send it to a P2PKH output, which we'll use in the next test.
|
# Send it to a P2PKH output, which we'll use in the next test.
|
||||||
script_pubkey = get_p2pkh_script(pubkeyhash)
|
script_pubkey = keyhash_to_p2pkh_script(pubkeyhash)
|
||||||
tx4 = CTransaction()
|
tx4 = CTransaction()
|
||||||
tx4.vin.append(CTxIn(COutPoint(tx3.sha256, 0), script_sig))
|
tx4.vin.append(CTxIn(COutPoint(tx3.sha256, 0), script_sig))
|
||||||
tx4.vout.append(CTxOut(tx3.vout[0].nValue - 1000, script_pubkey))
|
tx4.vout.append(CTxOut(tx3.vout[0].nValue - 1000, script_pubkey))
|
||||||
@ -1754,7 +1751,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
||||||
tx2.vout.append(CTxOut(tx.vout[0].nValue, CScript([OP_TRUE])))
|
tx2.vout.append(CTxOut(tx.vout[0].nValue, CScript([OP_TRUE])))
|
||||||
|
|
||||||
script = get_p2pkh_script(pubkeyhash)
|
script = keyhash_to_p2pkh_script(pubkeyhash)
|
||||||
sig_hash = SegwitV0SignatureHash(script, tx2, 0, SIGHASH_ALL, tx.vout[0].nValue)
|
sig_hash = SegwitV0SignatureHash(script, tx2, 0, SIGHASH_ALL, tx.vout[0].nValue)
|
||||||
signature = key.sign_ecdsa(sig_hash) + b'\x01' # 0x1 is SIGHASH_ALL
|
signature = key.sign_ecdsa(sig_hash) + b'\x01' # 0x1 is SIGHASH_ALL
|
||||||
|
|
||||||
|
@ -21,14 +21,14 @@ from test_framework.script import (
|
|||||||
OP_2,
|
OP_2,
|
||||||
OP_3,
|
OP_3,
|
||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_CHECKSIG,
|
|
||||||
OP_DUP,
|
|
||||||
OP_EQUAL,
|
OP_EQUAL,
|
||||||
OP_EQUALVERIFY,
|
|
||||||
OP_HASH160,
|
OP_HASH160,
|
||||||
hash160,
|
hash160,
|
||||||
sha256,
|
sha256,
|
||||||
)
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
key_to_p2pkh_script,
|
||||||
|
)
|
||||||
from test_framework.util import hex_str_to_bytes
|
from test_framework.util import hex_str_to_bytes
|
||||||
|
|
||||||
Key = namedtuple('Key', ['privkey',
|
Key = namedtuple('Key', ['privkey',
|
||||||
@ -60,7 +60,7 @@ def get_key(node):
|
|||||||
pkh = hash160(hex_str_to_bytes(pubkey))
|
pkh = hash160(hex_str_to_bytes(pubkey))
|
||||||
return Key(privkey=node.dumpprivkey(addr),
|
return Key(privkey=node.dumpprivkey(addr),
|
||||||
pubkey=pubkey,
|
pubkey=pubkey,
|
||||||
p2pkh_script=CScript([OP_DUP, OP_HASH160, pkh, OP_EQUALVERIFY, OP_CHECKSIG]).hex(),
|
p2pkh_script=key_to_p2pkh_script(pubkey).hex(),
|
||||||
p2pkh_addr=key_to_p2pkh(pubkey),
|
p2pkh_addr=key_to_p2pkh(pubkey),
|
||||||
p2wpkh_script=CScript([OP_0, pkh]).hex(),
|
p2wpkh_script=CScript([OP_0, pkh]).hex(),
|
||||||
p2wpkh_addr=key_to_p2wpkh(pubkey),
|
p2wpkh_addr=key_to_p2wpkh(pubkey),
|
||||||
@ -79,7 +79,7 @@ def get_generate_key():
|
|||||||
pkh = hash160(hex_str_to_bytes(pubkey))
|
pkh = hash160(hex_str_to_bytes(pubkey))
|
||||||
return Key(privkey=privkey,
|
return Key(privkey=privkey,
|
||||||
pubkey=pubkey,
|
pubkey=pubkey,
|
||||||
p2pkh_script=CScript([OP_DUP, OP_HASH160, pkh, OP_EQUALVERIFY, OP_CHECKSIG]).hex(),
|
p2pkh_script=key_to_p2pkh_script(pubkey).hex(),
|
||||||
p2pkh_addr=key_to_p2pkh(pubkey),
|
p2pkh_addr=key_to_p2pkh(pubkey),
|
||||||
p2wpkh_script=CScript([OP_0, pkh]).hex(),
|
p2wpkh_script=CScript([OP_0, pkh]).hex(),
|
||||||
p2wpkh_addr=key_to_p2wpkh(pubkey),
|
p2wpkh_addr=key_to_p2wpkh(pubkey),
|
||||||
|
Reference in New Issue
Block a user