mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 11:13:23 -03:00
test: use script_util helpers for creating P2SH scripts
This commit is contained in:
parent
b57b633b94
commit
285a65ccfd
8 changed files with 58 additions and 65 deletions
|
@ -29,27 +29,32 @@ from test_framework.messages import (
|
||||||
CTxOut,
|
CTxOut,
|
||||||
MAX_MONEY,
|
MAX_MONEY,
|
||||||
)
|
)
|
||||||
from test_framework import script as sc
|
|
||||||
from test_framework.blocktools import create_tx_with_script, MAX_BLOCK_SIGOPS
|
from test_framework.blocktools import create_tx_with_script, MAX_BLOCK_SIGOPS
|
||||||
from test_framework.script import (
|
from test_framework.script import (
|
||||||
CScript,
|
CScript,
|
||||||
OP_CAT,
|
OP_0,
|
||||||
OP_SUBSTR,
|
|
||||||
OP_LEFT,
|
|
||||||
OP_RIGHT,
|
|
||||||
OP_INVERT,
|
|
||||||
OP_AND,
|
|
||||||
OP_OR,
|
|
||||||
OP_XOR,
|
|
||||||
OP_2MUL,
|
|
||||||
OP_2DIV,
|
OP_2DIV,
|
||||||
OP_MUL,
|
OP_2MUL,
|
||||||
|
OP_AND,
|
||||||
|
OP_CAT,
|
||||||
|
OP_CHECKSIG,
|
||||||
OP_DIV,
|
OP_DIV,
|
||||||
OP_MOD,
|
OP_INVERT,
|
||||||
|
OP_LEFT,
|
||||||
OP_LSHIFT,
|
OP_LSHIFT,
|
||||||
OP_RSHIFT
|
OP_MOD,
|
||||||
|
OP_MUL,
|
||||||
|
OP_OR,
|
||||||
|
OP_RIGHT,
|
||||||
|
OP_RSHIFT,
|
||||||
|
OP_SUBSTR,
|
||||||
|
OP_TRUE,
|
||||||
|
OP_XOR,
|
||||||
)
|
)
|
||||||
basic_p2sh = sc.CScript([sc.OP_HASH160, sc.hash160(sc.CScript([sc.OP_0])), sc.OP_EQUAL])
|
from test_framework.script_util import (
|
||||||
|
script_to_p2sh_script,
|
||||||
|
)
|
||||||
|
basic_p2sh = script_to_p2sh_script(CScript([OP_0]))
|
||||||
|
|
||||||
|
|
||||||
class BadTxTemplate:
|
class BadTxTemplate:
|
||||||
|
@ -116,7 +121,7 @@ class SizeTooSmall(BadTxTemplate):
|
||||||
def get_tx(self):
|
def get_tx(self):
|
||||||
tx = CTransaction()
|
tx = CTransaction()
|
||||||
tx.vin.append(self.valid_txin)
|
tx.vin.append(self.valid_txin)
|
||||||
tx.vout.append(CTxOut(0, sc.CScript([sc.OP_TRUE])))
|
tx.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||||
tx.calc_sha256()
|
tx.calc_sha256()
|
||||||
return tx
|
return tx
|
||||||
|
|
||||||
|
@ -217,7 +222,7 @@ class TooManySigops(BadTxTemplate):
|
||||||
expect_disconnect = False
|
expect_disconnect = False
|
||||||
|
|
||||||
def get_tx(self):
|
def get_tx(self):
|
||||||
lotsa_checksigs = sc.CScript([sc.OP_CHECKSIG] * (MAX_BLOCK_SIGOPS))
|
lotsa_checksigs = CScript([OP_CHECKSIG] * (MAX_BLOCK_SIGOPS))
|
||||||
return create_tx_with_script(
|
return create_tx_with_script(
|
||||||
self.spend_tx, 0,
|
self.spend_tx, 0,
|
||||||
script_pub_key=lotsa_checksigs,
|
script_pub_key=lotsa_checksigs,
|
||||||
|
|
|
@ -37,17 +37,17 @@ from test_framework.script import (
|
||||||
OP_CHECKSIGVERIFY,
|
OP_CHECKSIGVERIFY,
|
||||||
OP_ELSE,
|
OP_ELSE,
|
||||||
OP_ENDIF,
|
OP_ENDIF,
|
||||||
OP_EQUAL,
|
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_FALSE,
|
OP_FALSE,
|
||||||
OP_HASH160,
|
|
||||||
OP_IF,
|
OP_IF,
|
||||||
OP_INVALIDOPCODE,
|
OP_INVALIDOPCODE,
|
||||||
OP_RETURN,
|
OP_RETURN,
|
||||||
OP_TRUE,
|
OP_TRUE,
|
||||||
SIGHASH_ALL,
|
SIGHASH_ALL,
|
||||||
LegacySignatureHash,
|
LegacySignatureHash,
|
||||||
hash160,
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
script_to_p2sh_script,
|
||||||
)
|
)
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import assert_equal
|
from test_framework.util import assert_equal
|
||||||
|
@ -469,8 +469,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||||
|
|
||||||
# Build the redeem script, hash it, use hash to create the p2sh script
|
# Build the redeem script, hash it, use hash to create the p2sh script
|
||||||
redeem_script = CScript([self.coinbase_pubkey] + [OP_2DUP, OP_CHECKSIGVERIFY] * 5 + [OP_CHECKSIG])
|
redeem_script = CScript([self.coinbase_pubkey] + [OP_2DUP, OP_CHECKSIGVERIFY] * 5 + [OP_CHECKSIG])
|
||||||
redeem_script_hash = hash160(redeem_script)
|
p2sh_script = script_to_p2sh_script(redeem_script)
|
||||||
p2sh_script = CScript([OP_HASH160, redeem_script_hash, OP_EQUAL])
|
|
||||||
|
|
||||||
# Create a transaction that spends one satoshi to the p2sh_script, the rest to OP_TRUE
|
# Create a transaction that spends one satoshi to the p2sh_script, the rest to OP_TRUE
|
||||||
# This must be signed because it is spending a coinbase
|
# This must be signed because it is spending a coinbase
|
||||||
|
|
|
@ -18,10 +18,10 @@ from test_framework.script import (
|
||||||
OP_1,
|
OP_1,
|
||||||
OP_2,
|
OP_2,
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_EQUAL,
|
|
||||||
OP_HASH160,
|
|
||||||
OP_TRUE,
|
OP_TRUE,
|
||||||
hash160,
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
script_to_p2sh_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 (
|
||||||
|
@ -37,8 +37,8 @@ from test_framework.util import (
|
||||||
# time signing.
|
# time signing.
|
||||||
REDEEM_SCRIPT_1 = CScript([OP_1, OP_DROP])
|
REDEEM_SCRIPT_1 = CScript([OP_1, OP_DROP])
|
||||||
REDEEM_SCRIPT_2 = CScript([OP_2, OP_DROP])
|
REDEEM_SCRIPT_2 = CScript([OP_2, OP_DROP])
|
||||||
P2SH_1 = CScript([OP_HASH160, hash160(REDEEM_SCRIPT_1), OP_EQUAL])
|
P2SH_1 = script_to_p2sh_script(REDEEM_SCRIPT_1)
|
||||||
P2SH_2 = CScript([OP_HASH160, hash160(REDEEM_SCRIPT_2), OP_EQUAL])
|
P2SH_2 = script_to_p2sh_script(REDEEM_SCRIPT_2)
|
||||||
|
|
||||||
# Associated ScriptSig's to spend satisfy P2SH_1 and P2SH_2
|
# Associated ScriptSig's to spend satisfy P2SH_1 and P2SH_2
|
||||||
SCRIPT_SIG = [CScript([OP_TRUE, REDEEM_SCRIPT_1]), CScript([OP_TRUE, REDEEM_SCRIPT_2])]
|
SCRIPT_SIG = [CScript([OP_TRUE, REDEEM_SCRIPT_1]), CScript([OP_TRUE, REDEEM_SCRIPT_2])]
|
||||||
|
|
|
@ -34,13 +34,12 @@ from test_framework.script import (
|
||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_CHECKSIG,
|
OP_CHECKSIG,
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_EQUAL,
|
|
||||||
OP_HASH160,
|
|
||||||
OP_TRUE,
|
OP_TRUE,
|
||||||
hash160,
|
hash160,
|
||||||
)
|
)
|
||||||
from test_framework.script_util import (
|
from test_framework.script_util import (
|
||||||
key_to_p2pkh_script,
|
key_to_p2pkh_script,
|
||||||
|
script_to_p2sh_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 (
|
||||||
|
@ -354,7 +353,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
|
|
||||||
multisig_without_privkey_address = self.nodes[0].addmultisigaddress(2, [pubkeys[3], pubkeys[4]])['address']
|
multisig_without_privkey_address = self.nodes[0].addmultisigaddress(2, [pubkeys[3], pubkeys[4]])['address']
|
||||||
script = CScript([OP_2, hex_str_to_bytes(pubkeys[3]), hex_str_to_bytes(pubkeys[4]), OP_2, OP_CHECKMULTISIG])
|
script = CScript([OP_2, hex_str_to_bytes(pubkeys[3]), hex_str_to_bytes(pubkeys[4]), OP_2, OP_CHECKMULTISIG])
|
||||||
solvable_after_importaddress.append(CScript([OP_HASH160, hash160(script), OP_EQUAL]))
|
solvable_after_importaddress.append(script_to_p2sh_script(script))
|
||||||
|
|
||||||
for i in compressed_spendable_address:
|
for i in compressed_spendable_address:
|
||||||
v = self.nodes[0].getaddressinfo(i)
|
v = self.nodes[0].getaddressinfo(i)
|
||||||
|
@ -430,7 +429,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
unsolvable_address_key = hex_str_to_bytes("02341AEC7587A51CDE5279E0630A531AEA2615A9F80B17E8D9376327BAEAA59E3D")
|
unsolvable_address_key = hex_str_to_bytes("02341AEC7587A51CDE5279E0630A531AEA2615A9F80B17E8D9376327BAEAA59E3D")
|
||||||
unsolvablep2pkh = key_to_p2pkh_script(unsolvable_address_key)
|
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 = script_to_p2sh_script(op0)
|
||||||
p2wshop1 = CScript([OP_0, sha256(op1)])
|
p2wshop1 = CScript([OP_0, sha256(op1)])
|
||||||
unsolvable_after_importaddress.append(unsolvablep2pkh)
|
unsolvable_after_importaddress.append(unsolvablep2pkh)
|
||||||
unsolvable_after_importaddress.append(unsolvablep2wshp2pkh)
|
unsolvable_after_importaddress.append(unsolvablep2wshp2pkh)
|
||||||
|
@ -616,21 +615,21 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
bare = CScript(hex_str_to_bytes(v['hex']))
|
bare = CScript(hex_str_to_bytes(v['hex']))
|
||||||
p2sh = CScript(hex_str_to_bytes(v['scriptPubKey']))
|
p2sh = CScript(hex_str_to_bytes(v['scriptPubKey']))
|
||||||
p2wsh = CScript([OP_0, sha256(bare)])
|
p2wsh = CScript([OP_0, sha256(bare)])
|
||||||
p2sh_p2wsh = CScript([OP_HASH160, hash160(p2wsh), OP_EQUAL])
|
p2sh_p2wsh = script_to_p2sh_script(p2wsh)
|
||||||
return([bare, p2sh, p2wsh, p2sh_p2wsh])
|
return([bare, p2sh, p2wsh, p2sh_p2wsh])
|
||||||
|
|
||||||
def p2pkh_address_to_script(self, v):
|
def p2pkh_address_to_script(self, v):
|
||||||
pubkey = hex_str_to_bytes(v['pubkey'])
|
pubkey = hex_str_to_bytes(v['pubkey'])
|
||||||
p2wpkh = CScript([OP_0, hash160(pubkey)])
|
p2wpkh = CScript([OP_0, hash160(pubkey)])
|
||||||
p2sh_p2wpkh = CScript([OP_HASH160, hash160(p2wpkh), OP_EQUAL])
|
p2sh_p2wpkh = script_to_p2sh_script(p2wpkh)
|
||||||
p2pk = CScript([pubkey, OP_CHECKSIG])
|
p2pk = CScript([pubkey, OP_CHECKSIG])
|
||||||
p2pkh = CScript(hex_str_to_bytes(v['scriptPubKey']))
|
p2pkh = CScript(hex_str_to_bytes(v['scriptPubKey']))
|
||||||
p2sh_p2pk = CScript([OP_HASH160, hash160(p2pk), OP_EQUAL])
|
p2sh_p2pk = script_to_p2sh_script(p2pk)
|
||||||
p2sh_p2pkh = CScript([OP_HASH160, hash160(p2pkh), OP_EQUAL])
|
p2sh_p2pkh = script_to_p2sh_script(p2pkh)
|
||||||
p2wsh_p2pk = CScript([OP_0, sha256(p2pk)])
|
p2wsh_p2pk = CScript([OP_0, sha256(p2pk)])
|
||||||
p2wsh_p2pkh = CScript([OP_0, sha256(p2pkh)])
|
p2wsh_p2pkh = CScript([OP_0, sha256(p2pkh)])
|
||||||
p2sh_p2wsh_p2pk = CScript([OP_HASH160, hash160(p2wsh_p2pk), OP_EQUAL])
|
p2sh_p2wsh_p2pk = script_to_p2sh_script(p2wsh_p2pk)
|
||||||
p2sh_p2wsh_p2pkh = CScript([OP_HASH160, hash160(p2wsh_p2pkh), OP_EQUAL])
|
p2sh_p2wsh_p2pkh = script_to_p2sh_script(p2wsh_p2pkh)
|
||||||
return [p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]
|
return [p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]
|
||||||
|
|
||||||
def create_and_mine_tx_from_txids(self, txids, success=True):
|
def create_and_mine_tx_from_txids(self, txids, success=True):
|
||||||
|
|
|
@ -57,7 +57,6 @@ from test_framework.script import (
|
||||||
OP_ENDIF,
|
OP_ENDIF,
|
||||||
OP_EQUAL,
|
OP_EQUAL,
|
||||||
OP_EQUALVERIFY,
|
OP_EQUALVERIFY,
|
||||||
OP_HASH160,
|
|
||||||
OP_IF,
|
OP_IF,
|
||||||
OP_NOP,
|
OP_NOP,
|
||||||
OP_NOT,
|
OP_NOT,
|
||||||
|
@ -78,6 +77,7 @@ from test_framework.script import (
|
||||||
)
|
)
|
||||||
from test_framework.script_util import (
|
from test_framework.script_util import (
|
||||||
keyhash_to_p2pkh_script,
|
keyhash_to_p2pkh_script,
|
||||||
|
script_to_p2sh_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
|
||||||
|
@ -499,7 +499,7 @@ def make_spender(comment, *, tap=None, witv0=False, script=None, pkh=None, p2sh=
|
||||||
if p2sh:
|
if p2sh:
|
||||||
# P2SH wrapper can be combined with anything else
|
# P2SH wrapper can be combined with anything else
|
||||||
conf["script_p2sh"] = spk
|
conf["script_p2sh"] = spk
|
||||||
spk = CScript([OP_HASH160, hash160(spk), OP_EQUAL])
|
spk = script_to_p2sh_script(spk)
|
||||||
|
|
||||||
conf = {**conf, **kwargs}
|
conf = {**conf, **kwargs}
|
||||||
|
|
||||||
|
|
|
@ -19,16 +19,17 @@ from test_framework.messages import (
|
||||||
tx_from_hex,
|
tx_from_hex,
|
||||||
)
|
)
|
||||||
from test_framework.script import (
|
from test_framework.script import (
|
||||||
hash160,
|
|
||||||
CScript,
|
CScript,
|
||||||
OP_0,
|
OP_0,
|
||||||
OP_2,
|
OP_2,
|
||||||
OP_3,
|
OP_3,
|
||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_EQUAL,
|
|
||||||
OP_HASH160,
|
OP_HASH160,
|
||||||
OP_RETURN,
|
OP_RETURN,
|
||||||
)
|
)
|
||||||
|
from test_framework.script_util import (
|
||||||
|
script_to_p2sh_script,
|
||||||
|
)
|
||||||
from test_framework.util import (
|
from test_framework.util import (
|
||||||
assert_equal,
|
assert_equal,
|
||||||
assert_raises_rpc_error,
|
assert_raises_rpc_error,
|
||||||
|
@ -291,7 +292,7 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||||
rawtxs=[tx.serialize().hex()],
|
rawtxs=[tx.serialize().hex()],
|
||||||
)
|
)
|
||||||
tx = tx_from_hex(raw_tx_reference)
|
tx = tx_from_hex(raw_tx_reference)
|
||||||
output_p2sh_burn = CTxOut(nValue=540, scriptPubKey=CScript([OP_HASH160, hash160(b'burn'), OP_EQUAL]))
|
output_p2sh_burn = CTxOut(nValue=540, scriptPubKey=script_to_p2sh_script(b'burn'))
|
||||||
num_scripts = 100000 // len(output_p2sh_burn.serialize()) # Use enough outputs to make the tx too large for our policy
|
num_scripts = 100000 // len(output_p2sh_burn.serialize()) # Use enough outputs to make the tx too large for our policy
|
||||||
tx.vout = [output_p2sh_burn] * num_scripts
|
tx.vout = [output_p2sh_burn] * num_scripts
|
||||||
self.check_mempool_result(
|
self.check_mempool_result(
|
||||||
|
|
|
@ -62,8 +62,6 @@ from test_framework.script import (
|
||||||
OP_DROP,
|
OP_DROP,
|
||||||
OP_ELSE,
|
OP_ELSE,
|
||||||
OP_ENDIF,
|
OP_ENDIF,
|
||||||
OP_EQUAL,
|
|
||||||
OP_HASH160,
|
|
||||||
OP_IF,
|
OP_IF,
|
||||||
OP_RETURN,
|
OP_RETURN,
|
||||||
OP_TRUE,
|
OP_TRUE,
|
||||||
|
@ -77,6 +75,7 @@ from test_framework.script import (
|
||||||
)
|
)
|
||||||
from test_framework.script_util import (
|
from test_framework.script_util import (
|
||||||
keyhash_to_p2pkh_script,
|
keyhash_to_p2pkh_script,
|
||||||
|
script_to_p2sh_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 (
|
||||||
|
@ -491,9 +490,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
witness_program = CScript([OP_TRUE])
|
witness_program = CScript([OP_TRUE])
|
||||||
witness_hash = sha256(witness_program)
|
witness_hash = sha256(witness_program)
|
||||||
script_pubkey = CScript([OP_0, witness_hash])
|
script_pubkey = CScript([OP_0, witness_hash])
|
||||||
|
p2sh_script_pubkey = script_to_p2sh_script(script_pubkey)
|
||||||
p2sh_pubkey = hash160(script_pubkey)
|
|
||||||
p2sh_script_pubkey = CScript([OP_HASH160, p2sh_pubkey, OP_EQUAL])
|
|
||||||
|
|
||||||
value = self.utxo[0].nValue // 3
|
value = self.utxo[0].nValue // 3
|
||||||
|
|
||||||
|
@ -630,9 +627,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
witness_program = CScript([OP_TRUE])
|
witness_program = CScript([OP_TRUE])
|
||||||
witness_hash = sha256(witness_program)
|
witness_hash = sha256(witness_program)
|
||||||
script_pubkey = CScript([OP_0, witness_hash])
|
script_pubkey = CScript([OP_0, witness_hash])
|
||||||
|
p2sh_script_pubkey = script_to_p2sh_script(witness_program)
|
||||||
p2sh_pubkey = hash160(witness_program)
|
|
||||||
p2sh_script_pubkey = CScript([OP_HASH160, p2sh_pubkey, OP_EQUAL])
|
|
||||||
|
|
||||||
# First prepare a p2sh output (so that spending it will pass standardness)
|
# First prepare a p2sh output (so that spending it will pass standardness)
|
||||||
p2sh_tx = CTransaction()
|
p2sh_tx = CTransaction()
|
||||||
|
@ -739,8 +734,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
witness_program = CScript([OP_DROP, OP_TRUE])
|
witness_program = CScript([OP_DROP, OP_TRUE])
|
||||||
witness_hash = sha256(witness_program)
|
witness_hash = sha256(witness_program)
|
||||||
p2wsh_pubkey = CScript([OP_0, witness_hash])
|
p2wsh_pubkey = CScript([OP_0, witness_hash])
|
||||||
p2sh_witness_hash = hash160(p2wsh_pubkey)
|
script_pubkey = script_to_p2sh_script(p2wsh_pubkey)
|
||||||
script_pubkey = CScript([OP_HASH160, p2sh_witness_hash, OP_EQUAL])
|
|
||||||
script_sig = CScript([p2wsh_pubkey]) # a push of the redeem script
|
script_sig = CScript([p2wsh_pubkey]) # a push of the redeem script
|
||||||
|
|
||||||
# Fund the P2SH output
|
# Fund the P2SH output
|
||||||
|
@ -1328,9 +1322,8 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
|
|
||||||
# Add too-large for IsStandard witness and check that it does not enter reject filter
|
# Add too-large for IsStandard witness and check that it does not enter reject filter
|
||||||
p2sh_program = CScript([OP_TRUE])
|
p2sh_program = CScript([OP_TRUE])
|
||||||
p2sh_pubkey = hash160(p2sh_program)
|
|
||||||
witness_program2 = CScript([b'a' * 400000])
|
witness_program2 = CScript([b'a' * 400000])
|
||||||
tx3.vout.append(CTxOut(tx2.vout[0].nValue - 1000, CScript([OP_HASH160, p2sh_pubkey, OP_EQUAL])))
|
tx3.vout.append(CTxOut(tx2.vout[0].nValue - 1000, script_to_p2sh_script(p2sh_program)))
|
||||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_program2]
|
tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_program2]
|
||||||
tx3.rehash()
|
tx3.rehash()
|
||||||
|
|
||||||
|
@ -1564,8 +1557,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
# Test 2: P2WSH
|
# Test 2: P2WSH
|
||||||
# Try to spend the P2WSH output created in last test.
|
# Try to spend the P2WSH output created in last test.
|
||||||
# Send it to a P2SH(P2WSH) output, which we'll use in the next test.
|
# Send it to a P2SH(P2WSH) output, which we'll use in the next test.
|
||||||
p2sh_witness_hash = hash160(script_wsh)
|
script_p2sh = script_to_p2sh_script(script_wsh)
|
||||||
script_p2sh = CScript([OP_HASH160, p2sh_witness_hash, OP_EQUAL])
|
|
||||||
script_sig = CScript([script_wsh])
|
script_sig = CScript([script_wsh])
|
||||||
|
|
||||||
tx3 = CTransaction()
|
tx3 = CTransaction()
|
||||||
|
@ -1803,8 +1795,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
# rules (an anyone-can-spend OP_TRUE would be rejected, if not wrapped
|
# rules (an anyone-can-spend OP_TRUE would be rejected, if not wrapped
|
||||||
# in P2SH).
|
# in P2SH).
|
||||||
p2sh_program = CScript([OP_TRUE])
|
p2sh_program = CScript([OP_TRUE])
|
||||||
p2sh_pubkey = hash160(p2sh_program)
|
script_pubkey = script_to_p2sh_script(p2sh_program)
|
||||||
script_pubkey = CScript([OP_HASH160, p2sh_pubkey, OP_EQUAL])
|
|
||||||
|
|
||||||
# Now check that unnecessary witnesses can't be used to blind a node
|
# Now check that unnecessary witnesses can't be used to blind a node
|
||||||
# to a transaction, eg by violating standardness checks.
|
# to a transaction, eg by violating standardness checks.
|
||||||
|
@ -1870,10 +1861,9 @@ class SegWitTest(BitcoinTestFramework):
|
||||||
outputvalue = (self.utxo[0].nValue - 1000) // (len(scripts) * 2)
|
outputvalue = (self.utxo[0].nValue - 1000) // (len(scripts) * 2)
|
||||||
for i in scripts:
|
for i in scripts:
|
||||||
p2wsh = CScript([OP_0, sha256(i)])
|
p2wsh = CScript([OP_0, sha256(i)])
|
||||||
p2sh = hash160(p2wsh)
|
|
||||||
p2wsh_scripts.append(p2wsh)
|
p2wsh_scripts.append(p2wsh)
|
||||||
tx.vout.append(CTxOut(outputvalue, p2wsh))
|
tx.vout.append(CTxOut(outputvalue, p2wsh))
|
||||||
tx.vout.append(CTxOut(outputvalue, CScript([OP_HASH160, p2sh, OP_EQUAL])))
|
tx.vout.append(CTxOut(outputvalue, script_to_p2sh_script(p2wsh)))
|
||||||
tx.rehash()
|
tx.rehash()
|
||||||
txid = tx.sha256
|
txid = tx.sha256
|
||||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=False, accepted=True)
|
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=False, accepted=True)
|
||||||
|
|
|
@ -21,13 +21,12 @@ from test_framework.script import (
|
||||||
OP_2,
|
OP_2,
|
||||||
OP_3,
|
OP_3,
|
||||||
OP_CHECKMULTISIG,
|
OP_CHECKMULTISIG,
|
||||||
OP_EQUAL,
|
|
||||||
OP_HASH160,
|
|
||||||
hash160,
|
hash160,
|
||||||
sha256,
|
sha256,
|
||||||
)
|
)
|
||||||
from test_framework.script_util import (
|
from test_framework.script_util import (
|
||||||
key_to_p2pkh_script,
|
key_to_p2pkh_script,
|
||||||
|
script_to_p2sh_script,
|
||||||
)
|
)
|
||||||
from test_framework.util import hex_str_to_bytes
|
from test_framework.util import hex_str_to_bytes
|
||||||
|
|
||||||
|
@ -64,7 +63,7 @@ def get_key(node):
|
||||||
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),
|
||||||
p2sh_p2wpkh_script=CScript([OP_HASH160, hash160(CScript([OP_0, pkh])), OP_EQUAL]).hex(),
|
p2sh_p2wpkh_script=script_to_p2sh_script(CScript([OP_0, pkh])).hex(),
|
||||||
p2sh_p2wpkh_redeem_script=CScript([OP_0, pkh]).hex(),
|
p2sh_p2wpkh_redeem_script=CScript([OP_0, pkh]).hex(),
|
||||||
p2sh_p2wpkh_addr=key_to_p2sh_p2wpkh(pubkey))
|
p2sh_p2wpkh_addr=key_to_p2sh_p2wpkh(pubkey))
|
||||||
|
|
||||||
|
@ -83,7 +82,7 @@ def get_generate_key():
|
||||||
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),
|
||||||
p2sh_p2wpkh_script=CScript([OP_HASH160, hash160(CScript([OP_0, pkh])), OP_EQUAL]).hex(),
|
p2sh_p2wpkh_script=script_to_p2sh_script(CScript([OP_0, pkh])).hex(),
|
||||||
p2sh_p2wpkh_redeem_script=CScript([OP_0, pkh]).hex(),
|
p2sh_p2wpkh_redeem_script=CScript([OP_0, pkh]).hex(),
|
||||||
p2sh_p2wpkh_addr=key_to_p2sh_p2wpkh(pubkey))
|
p2sh_p2wpkh_addr=key_to_p2sh_p2wpkh(pubkey))
|
||||||
|
|
||||||
|
@ -101,12 +100,12 @@ def get_multisig(node):
|
||||||
witness_script = CScript([OP_0, sha256(script_code)])
|
witness_script = CScript([OP_0, sha256(script_code)])
|
||||||
return Multisig(privkeys=[node.dumpprivkey(addr) for addr in addrs],
|
return Multisig(privkeys=[node.dumpprivkey(addr) for addr in addrs],
|
||||||
pubkeys=pubkeys,
|
pubkeys=pubkeys,
|
||||||
p2sh_script=CScript([OP_HASH160, hash160(script_code), OP_EQUAL]).hex(),
|
p2sh_script=script_to_p2sh_script(script_code).hex(),
|
||||||
p2sh_addr=script_to_p2sh(script_code),
|
p2sh_addr=script_to_p2sh(script_code),
|
||||||
redeem_script=script_code.hex(),
|
redeem_script=script_code.hex(),
|
||||||
p2wsh_script=witness_script.hex(),
|
p2wsh_script=witness_script.hex(),
|
||||||
p2wsh_addr=script_to_p2wsh(script_code),
|
p2wsh_addr=script_to_p2wsh(script_code),
|
||||||
p2sh_p2wsh_script=CScript([OP_HASH160, hash160(witness_script), OP_EQUAL]).hex(),
|
p2sh_p2wsh_script=script_to_p2sh_script(witness_script).hex(),
|
||||||
p2sh_p2wsh_addr=script_to_p2sh_p2wsh(script_code))
|
p2sh_p2wsh_addr=script_to_p2sh_p2wsh(script_code))
|
||||||
|
|
||||||
def test_address(node, address, **kwargs):
|
def test_address(node, address, **kwargs):
|
||||||
|
|
Loading…
Add table
Reference in a new issue