mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-08 21:59:10 +02:00
test: remove bare CTransaction .rehash()/.calc_sha256() calls
Since the previous commit, CTransaction object calls to the methods `.rehash()` and `.calc_sha256()` are effectively no-ops if the returned value is not used, so we can just remove them.
This commit is contained in:
@@ -40,7 +40,6 @@ def signet_txs(block, challenge):
|
||||
txs[0].vout[-1].scriptPubKey += CScriptOp.encode_op_pushdata(SIGNET_HEADER)
|
||||
hashes = []
|
||||
for tx in txs:
|
||||
tx.rehash()
|
||||
hashes.append(ser_uint256(tx.sha256))
|
||||
mroot = block.get_merkle_root(hashes)
|
||||
|
||||
@@ -55,7 +54,6 @@ def signet_txs(block, challenge):
|
||||
to_spend.nLockTime = 0
|
||||
to_spend.vin = [CTxIn(COutPoint(0, 0xFFFFFFFF), b"\x00" + CScriptOp.encode_op_pushdata(sd), 0)]
|
||||
to_spend.vout = [CTxOut(0, challenge)]
|
||||
to_spend.rehash()
|
||||
|
||||
spend = CTransaction()
|
||||
spend.version = 0
|
||||
@@ -88,7 +86,6 @@ def finish_block(block, signet_solution, grind_cmd):
|
||||
pass # Don't need to add a signet commitment if there's no signet signature needed
|
||||
else:
|
||||
block.vtx[0].vout[-1].scriptPubKey += CScriptOp.encode_op_pushdata(SIGNET_HEADER + signet_solution)
|
||||
block.vtx[0].rehash()
|
||||
block.hashMerkleRoot = block.calc_merkle_root()
|
||||
if grind_cmd is None:
|
||||
block.solve()
|
||||
@@ -111,7 +108,6 @@ def new_block(tmpl, reward_spk, *, blocktime=None, poolid=None):
|
||||
cbtx.vin = [CTxIn(COutPoint(0, 0xffffffff), scriptSig, MAX_SEQUENCE_NONFINAL)]
|
||||
cbtx.vout = [CTxOut(tmpl["coinbasevalue"], reward_spk)]
|
||||
cbtx.vin[0].nSequence = 2**32-2
|
||||
cbtx.rehash()
|
||||
|
||||
block = CBlock()
|
||||
block.nVersion = tmpl["version"]
|
||||
@@ -130,7 +126,6 @@ def new_block(tmpl, reward_spk, *, blocktime=None, poolid=None):
|
||||
block.vtx[0].wit.vtxinwit = [cbwit]
|
||||
block.vtx[0].vout.append(CTxOut(0, bytes(get_witness_script(witroot, witnonce))))
|
||||
|
||||
block.vtx[0].rehash()
|
||||
block.hashMerkleRoot = block.calc_merkle_root()
|
||||
|
||||
return block
|
||||
|
||||
@@ -98,7 +98,6 @@ class OutputMissing(BadTxTemplate):
|
||||
def get_tx(self):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(self.valid_txin)
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -113,7 +112,6 @@ class InputMissing(BadTxTemplate):
|
||||
# rather than the input count check.
|
||||
def get_tx(self):
|
||||
tx = CTransaction()
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -130,7 +128,6 @@ class SizeTooSmall(BadTxTemplate):
|
||||
tx.vout.append(CTxOut(0, CScript([OP_RETURN] + ([OP_0] * (MIN_PADDING - 2)))))
|
||||
assert len(tx.serialize_without_witness()) == 64
|
||||
assert MIN_STANDARD_TX_NONWITNESS_SIZE - 1 == 64
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -149,7 +146,6 @@ class BadInputOutpointIndex(BadTxTemplate):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.spend_tx.sha256, bad_idx), b"", SEQUENCE_FINAL))
|
||||
tx.vout.append(CTxOut(0, basic_p2sh))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -162,7 +158,6 @@ class DuplicateInput(BadTxTemplate):
|
||||
tx.vin.append(self.valid_txin)
|
||||
tx.vin.append(self.valid_txin)
|
||||
tx.vout.append(CTxOut(1, basic_p2sh))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -175,7 +170,6 @@ class PrevoutNullInput(BadTxTemplate):
|
||||
tx.vin.append(self.valid_txin)
|
||||
tx.vin.append(CTxIn(COutPoint(hash=0, n=0xffffffff)))
|
||||
tx.vout.append(CTxOut(1, basic_p2sh))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -190,7 +184,6 @@ class NonexistentInput(BadTxTemplate):
|
||||
tx.vin.append(CTxIn(COutPoint(self.spend_tx.sha256 + 1, 0), b"", SEQUENCE_FINAL))
|
||||
tx.vin.append(self.valid_txin)
|
||||
tx.vout.append(CTxOut(1, basic_p2sh))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -226,7 +219,6 @@ class CreateSumTooLarge(BadTxTemplate):
|
||||
def get_tx(self):
|
||||
tx = create_tx_with_script(self.spend_tx, 0, amount=MAX_MONEY)
|
||||
tx.vout = [tx.vout[0]] * 2
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
|
||||
@@ -274,7 +266,6 @@ def getDisabledOpcodeTemplate(opcode):
|
||||
vin.scriptSig = CScript([opcode])
|
||||
tx.vin.append(vin)
|
||||
tx.vout.append(CTxOut(1, basic_p2sh))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
return type('DisabledOpcode_' + str(opcode), (BadTxTemplate,), {
|
||||
|
||||
@@ -119,7 +119,6 @@ class AssumeValidTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.block1.vtx[0].sha256, 0), scriptSig=b""))
|
||||
tx.vout.append(CTxOut(49 * 100000000, CScript([OP_TRUE])))
|
||||
tx.calc_sha256()
|
||||
|
||||
block102 = create_block(self.tip, create_coinbase(height), self.block_time, txlist=[tx])
|
||||
self.block_time += 1
|
||||
|
||||
@@ -110,7 +110,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
tx2.wit.vtxinwit = [CTxInWitness()]
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [CScript([OP_TRUE])]
|
||||
tx2.vout = [CTxOut(int(value - self.relayfee * COIN), SCRIPT_W0_SH_OP_TRUE)]
|
||||
tx2.rehash()
|
||||
|
||||
assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.wallet.sendrawtransaction, from_node=self.nodes[0], tx_hex=tx2.serialize().hex())
|
||||
|
||||
@@ -220,7 +219,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
# Create a mempool tx.
|
||||
self.wallet.rescan_utxos()
|
||||
tx1 = self.wallet.send_self_transfer(from_node=self.nodes[0])["tx"]
|
||||
tx1.rehash()
|
||||
|
||||
# Anyone-can-spend mempool tx.
|
||||
# Sequence lock of 0 should pass.
|
||||
@@ -230,7 +228,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
tx2.vout = [CTxOut(int(tx1.vout[0].nValue - self.relayfee * COIN), SCRIPT_W0_SH_OP_TRUE)]
|
||||
self.wallet.sign_tx(tx=tx2)
|
||||
tx2_raw = tx2.serialize().hex()
|
||||
tx2.rehash()
|
||||
|
||||
self.wallet.sendrawtransaction(from_node=self.nodes[0], tx_hex=tx2_raw)
|
||||
|
||||
@@ -248,7 +245,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
tx.wit.vtxinwit = [CTxInWitness()]
|
||||
tx.wit.vtxinwit[0].scriptWitness.stack = [CScript([OP_TRUE])]
|
||||
tx.vout = [CTxOut(int(orig_tx.vout[0].nValue - relayfee * COIN), SCRIPT_W0_SH_OP_TRUE)]
|
||||
tx.rehash()
|
||||
|
||||
if (orig_tx.hash in node.getrawmempool()):
|
||||
# sendrawtransaction should fail if the tx is in the mempool
|
||||
@@ -353,7 +349,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
assert not softfork_active(self.nodes[0], 'csv')
|
||||
|
||||
tx1 = self.wallet.send_self_transfer(from_node=self.nodes[0])["tx"]
|
||||
tx1.rehash()
|
||||
|
||||
# Make an anyone-can-spend transaction
|
||||
tx2 = CTransaction()
|
||||
@@ -365,7 +360,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
self.wallet.sign_tx(tx=tx2)
|
||||
tx2_raw = tx2.serialize().hex()
|
||||
tx2 = tx_from_hex(tx2_raw)
|
||||
tx2.rehash()
|
||||
|
||||
self.wallet.sendrawtransaction(from_node=self.nodes[0], tx_hex=tx2_raw)
|
||||
|
||||
@@ -378,7 +372,6 @@ class BIP68Test(BitcoinTestFramework):
|
||||
tx3.wit.vtxinwit = [CTxInWitness()]
|
||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [CScript([OP_TRUE])]
|
||||
tx3.vout = [CTxOut(int(tx2.vout[0].nValue - self.relayfee * COIN), SCRIPT_W0_SH_OP_TRUE)]
|
||||
tx3.rehash()
|
||||
|
||||
assert_raises_rpc_error(-26, NOT_FINAL_ERROR, self.wallet.sendrawtransaction, from_node=self.nodes[0], tx_hex=tx3.serialize().hex())
|
||||
|
||||
|
||||
@@ -109,7 +109,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
# Create a new block
|
||||
b_dup_cb = self.next_block('dup_cb')
|
||||
b_dup_cb.vtx[0].vin[0].scriptSig = DUPLICATE_COINBASE_SCRIPT_SIG
|
||||
b_dup_cb.vtx[0].rehash()
|
||||
duplicate_tx = b_dup_cb.vtx[0]
|
||||
b_dup_cb = self.update_block('dup_cb', [])
|
||||
self.send_blocks([b_dup_cb])
|
||||
@@ -194,7 +193,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
badtx = template.get_tx()
|
||||
if TxTemplate != invalid_txs.InputMissing:
|
||||
self.sign_tx(badtx, attempt_spend_tx)
|
||||
badtx.rehash()
|
||||
badblock = self.update_block(blockname, [badtx])
|
||||
self.send_blocks(
|
||||
[badblock], success=False,
|
||||
@@ -385,7 +383,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
self.move_tip(15)
|
||||
b26 = self.next_block(26, spend=out[6])
|
||||
b26.vtx[0].vin[0].scriptSig = b'\x00'
|
||||
b26.vtx[0].rehash()
|
||||
# update_block causes the merkle root to get updated, even with no new
|
||||
# transactions, and updates the required state.
|
||||
b26 = self.update_block(26, [])
|
||||
@@ -399,7 +396,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
self.move_tip(15)
|
||||
b28 = self.next_block(28, spend=out[6])
|
||||
b28.vtx[0].vin[0].scriptSig = b'\x00' * 101
|
||||
b28.vtx[0].rehash()
|
||||
b28 = self.update_block(28, [])
|
||||
self.send_blocks([b28], success=False, reject_reason='bad-cb-length', reconnect=True)
|
||||
|
||||
@@ -413,7 +409,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
b30.vtx[0].vin[0].scriptSig = bytes(b30.vtx[0].vin[0].scriptSig) # Convert CScript to raw bytes
|
||||
b30.vtx[0].vin[0].scriptSig += b'\x00' * (100 - len(b30.vtx[0].vin[0].scriptSig)) # Fill with 0s
|
||||
assert_equal(len(b30.vtx[0].vin[0].scriptSig), 100)
|
||||
b30.vtx[0].rehash()
|
||||
b30 = self.update_block(30, [])
|
||||
self.send_blocks([b30], True)
|
||||
self.save_spendable_output()
|
||||
@@ -516,7 +511,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx = self.create_tx(spend, 0, 1, p2sh_script)
|
||||
tx.vout.append(CTxOut(spend.vout[0].nValue - 1, CScript([OP_TRUE])))
|
||||
self.sign_tx(tx, spend)
|
||||
tx.rehash()
|
||||
b39 = self.update_block(39, [tx])
|
||||
b39_outputs += 1
|
||||
|
||||
@@ -527,7 +521,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
while total_weight < MAX_BLOCK_WEIGHT:
|
||||
tx_new = self.create_tx(tx_last, 1, 1, p2sh_script)
|
||||
tx_new.vout.append(CTxOut(tx_last.vout[1].nValue - 1, CScript([OP_TRUE])))
|
||||
tx_new.rehash()
|
||||
total_weight += tx_new.get_weight()
|
||||
if total_weight >= MAX_BLOCK_WEIGHT:
|
||||
break
|
||||
@@ -579,7 +572,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(lastOutpoint, b''))
|
||||
tx.vout.append(CTxOut(1, CScript([OP_CHECKSIG] * b40_sigops_to_fill)))
|
||||
tx.rehash()
|
||||
new_txs.append(tx)
|
||||
self.update_block(40, new_txs)
|
||||
self.send_blocks([b40], success=False, reject_reason='bad-blk-sigops', reconnect=True)
|
||||
@@ -593,7 +585,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(lastOutpoint, b''))
|
||||
tx.vout.append(CTxOut(1, CScript([OP_CHECKSIG] * b41_sigops_to_fill)))
|
||||
tx.rehash()
|
||||
self.update_block(41, [tx])
|
||||
self.send_blocks([b41], True)
|
||||
|
||||
@@ -833,7 +824,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
assert len(out[17].vout) < 42
|
||||
tx.vin.append(CTxIn(COutPoint(out[17].sha256, 42), CScript([OP_TRUE]), SEQUENCE_FINAL))
|
||||
tx.vout.append(CTxOut(0, b""))
|
||||
tx.calc_sha256()
|
||||
b58 = self.update_block(58, [tx])
|
||||
self.send_blocks([b58], success=False, reject_reason='bad-txns-inputs-missingorspent', reconnect=True)
|
||||
|
||||
@@ -865,7 +855,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
b61 = self.next_block(61)
|
||||
b61.vtx[0].nLockTime = 0
|
||||
b61.vtx[0].vin[0].scriptSig = DUPLICATE_COINBASE_SCRIPT_SIG
|
||||
b61.vtx[0].rehash()
|
||||
b61 = self.update_block(61, [])
|
||||
assert_equal(duplicate_tx.serialize(), b61.vtx[0].serialize())
|
||||
# BIP30 is always checked on regtest, regardless of the BIP34 activation height
|
||||
@@ -882,13 +871,11 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx.vin.append(CTxIn(COutPoint(duplicate_tx.sha256, 0)))
|
||||
tx.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||
self.sign_tx(tx, duplicate_tx)
|
||||
tx.rehash()
|
||||
b_spend_dup_cb = self.update_block('spend_dup_cb', [tx])
|
||||
|
||||
b_dup_2 = self.next_block('dup_2')
|
||||
b_dup_2.vtx[0].nLockTime = 0
|
||||
b_dup_2.vtx[0].vin[0].scriptSig = DUPLICATE_COINBASE_SCRIPT_SIG
|
||||
b_dup_2.vtx[0].rehash()
|
||||
b_dup_2 = self.update_block('dup_2', [])
|
||||
assert_equal(duplicate_tx.serialize(), b_dup_2.vtx[0].serialize())
|
||||
assert_equal(self.nodes[0].gettxout(txid=duplicate_tx.hash, n=0)['confirmations'], 119)
|
||||
@@ -909,7 +896,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx.vin.append(CTxIn(COutPoint(out[18].sha256, 0))) # don't set nSequence
|
||||
tx.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||
assert_greater_than(SEQUENCE_FINAL, tx.vin[0].nSequence)
|
||||
tx.calc_sha256()
|
||||
b62 = self.update_block(62, [tx])
|
||||
self.send_blocks([b62], success=False, reject_reason='bad-txns-nonfinal', reconnect=True)
|
||||
|
||||
@@ -923,7 +909,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
b63 = self.next_block(63)
|
||||
b63.vtx[0].nLockTime = 0xffffffff
|
||||
b63.vtx[0].vin[0].nSequence = 0xDEADBEEF
|
||||
b63.vtx[0].rehash()
|
||||
b63 = self.update_block(63, [])
|
||||
self.send_blocks([b63], success=False, reject_reason='bad-txns-nonfinal', reconnect=True)
|
||||
|
||||
@@ -1241,7 +1226,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
|
||||
tx2 = self.create_and_sign_transaction(tx1, 0, CScript([OP_TRUE]))
|
||||
tx2.vin[0].scriptSig = CScript([OP_FALSE])
|
||||
tx2.rehash()
|
||||
|
||||
b83 = self.update_block(83, [tx1, tx2])
|
||||
self.send_blocks([b83], True)
|
||||
@@ -1259,9 +1243,7 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
tx1.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||
tx1.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||
tx1.vout.append(CTxOut(0, CScript([OP_TRUE])))
|
||||
tx1.calc_sha256()
|
||||
self.sign_tx(tx1, out[29])
|
||||
tx1.rehash()
|
||||
tx2 = self.create_tx(tx1, 1, 0, CScript([OP_RETURN]))
|
||||
tx2.vout.append(CTxOut(0, CScript([OP_RETURN])))
|
||||
tx3 = self.create_tx(tx1, 2, 0, CScript([OP_RETURN]))
|
||||
@@ -1347,7 +1329,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
self.move_tip(chain1_tip + 2)
|
||||
b_cb34 = self.next_block('b_cb34')
|
||||
b_cb34.vtx[0].vin[0].scriptSig = b_cb34.vtx[0].vin[0].scriptSig[:-1]
|
||||
b_cb34.vtx[0].rehash()
|
||||
b_cb34.hashMerkleRoot = b_cb34.calc_merkle_root()
|
||||
b_cb34.solve()
|
||||
self.send_blocks([b_cb34], success=False, reject_reason='bad-cb-height', reconnect=True)
|
||||
@@ -1356,7 +1337,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
################
|
||||
|
||||
def add_transactions_to_block(self, block, tx_list):
|
||||
[tx.rehash() for tx in tx_list]
|
||||
block.vtx.extend(tx_list)
|
||||
|
||||
# this is a little handier to use than the version in blocktools.py
|
||||
@@ -1379,7 +1359,6 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
output_script = CScript([OP_TRUE])
|
||||
tx = self.create_tx(spend_tx, 0, value, output_script=output_script)
|
||||
self.sign_tx(tx, spend_tx)
|
||||
tx.rehash()
|
||||
return tx
|
||||
|
||||
def next_block(self, number, spend=None, additional_coinbase_value=0, *, script=None, version=4, additional_output_scripts=None):
|
||||
@@ -1399,15 +1378,12 @@ class FullBlockTest(BitcoinTestFramework):
|
||||
coinbase.vout[0].nValue += additional_coinbase_value
|
||||
for additional_script in additional_output_scripts:
|
||||
coinbase.vout.append(CTxOut(0, additional_script))
|
||||
coinbase.rehash()
|
||||
if spend is None:
|
||||
block = create_block(base_block_hash, coinbase, block_time, version=version)
|
||||
else:
|
||||
coinbase.vout[0].nValue += spend.vout[0].nValue - 1 # all but one satoshi to fees
|
||||
coinbase.rehash()
|
||||
tx = self.create_tx(spend, 0, 1, output_script=script) # spend 1 satoshi
|
||||
self.sign_tx(tx, spend)
|
||||
tx.rehash()
|
||||
block = create_block(base_block_hash, coinbase, block_time, version=version, txlist=[tx])
|
||||
# Block is created. Find a valid nonce.
|
||||
block.solve()
|
||||
|
||||
@@ -43,7 +43,6 @@ def cltv_modify_tx(tx, prepend_scriptsig, nsequence=None, nlocktime=None):
|
||||
tx.nLockTime = nlocktime
|
||||
|
||||
tx.vin[0].scriptSig = CScript(prepend_scriptsig + list(CScript(tx.vin[0].scriptSig)))
|
||||
tx.rehash()
|
||||
|
||||
|
||||
def cltv_invalidate(tx, failure_reason):
|
||||
|
||||
@@ -191,7 +191,6 @@ class CoinStatsIndexTest(BitcoinTestFramework):
|
||||
# has two outputs
|
||||
cb = create_coinbase(109, nValue=35)
|
||||
cb.vout.append(CTxOut(5 * COIN, CScript([OP_FALSE])))
|
||||
cb.rehash()
|
||||
|
||||
# Generate a block that includes previous coinbase
|
||||
tip = self.nodes[0].getbestblockhash()
|
||||
|
||||
@@ -112,7 +112,6 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
||||
tx.version = txversion
|
||||
self.miniwallet.sign_tx(tx)
|
||||
tx.vin[0].scriptSig = CScript([-1, OP_CHECKSEQUENCEVERIFY, OP_DROP] + list(CScript(tx.vin[0].scriptSig)))
|
||||
tx.rehash()
|
||||
return tx
|
||||
|
||||
def create_bip112emptystack(self, input, txversion):
|
||||
@@ -120,7 +119,6 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
||||
tx.version = txversion
|
||||
self.miniwallet.sign_tx(tx)
|
||||
tx.vin[0].scriptSig = CScript([OP_CHECKSEQUENCEVERIFY] + list(CScript(tx.vin[0].scriptSig)))
|
||||
tx.rehash()
|
||||
return tx
|
||||
|
||||
def send_generic_input_tx(self, coinbases):
|
||||
@@ -159,7 +157,6 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
||||
tx.vin[0].scriptSig = CScript([locktime, OP_CHECKSEQUENCEVERIFY, OP_DROP] + list(CScript(tx.vin[0].scriptSig)))
|
||||
else:
|
||||
tx.vin[0].scriptSig = CScript([BASE_RELATIVE_LOCKTIME, OP_CHECKSEQUENCEVERIFY, OP_DROP] + list(CScript(tx.vin[0].scriptSig)))
|
||||
tx.rehash()
|
||||
txs.append({'tx': tx, 'sdf': sdf, 'stf': stf})
|
||||
return txs
|
||||
|
||||
|
||||
@@ -81,7 +81,6 @@ class BIP66Test(BitcoinTestFramework):
|
||||
|
||||
spendtx = self.create_tx(self.coinbase_txids[0])
|
||||
unDERify(spendtx)
|
||||
spendtx.rehash()
|
||||
|
||||
tip = self.nodes[0].getbestblockhash()
|
||||
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
|
||||
@@ -112,7 +111,6 @@ class BIP66Test(BitcoinTestFramework):
|
||||
coin_txid = self.coinbase_txids[1]
|
||||
spendtx = self.create_tx(coin_txid)
|
||||
unDERify(spendtx)
|
||||
spendtx.rehash()
|
||||
|
||||
# First we show that this tx is valid except for DERSIG by getting it
|
||||
# rejected from the mempool for exactly that reason.
|
||||
|
||||
@@ -61,7 +61,6 @@ def small_txpuzzle_randfee(
|
||||
tx.vout[0].nValue = int((total_in - amount - fee) * COIN)
|
||||
tx.vout.append(deepcopy(tx.vout[0]))
|
||||
tx.vout[1].nValue = int(amount * COIN)
|
||||
tx.rehash()
|
||||
txid = tx.hash
|
||||
tx_hex = tx.serialize().hex()
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@ def invalidate_nulldummy_tx(tx):
|
||||
to be non-NULLDUMMY compliant by replacing the dummy with OP_TRUE"""
|
||||
assert_equal(tx.vin[0].scriptSig[0], OP_0)
|
||||
tx.vin[0].scriptSig = bytes([OP_TRUE]) + tx.vin[0].scriptSig[1:]
|
||||
tx.rehash()
|
||||
|
||||
|
||||
class NULLDUMMYTest(BitcoinTestFramework):
|
||||
|
||||
@@ -106,7 +106,6 @@ class ReplaceByFeeTest(BitcoinTestFramework):
|
||||
|
||||
# Should fail because we haven't changed the fee
|
||||
tx.vout[0].scriptPubKey[-1] ^= 1
|
||||
tx.rehash()
|
||||
tx_hex = tx.serialize().hex()
|
||||
|
||||
# This will raise an exception due to insufficient fee
|
||||
|
||||
@@ -277,7 +277,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(int(txid2, 16), 0), b""))
|
||||
tx.vout.append(CTxOut(int(49.95 * COIN), CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE]))) # Huge fee
|
||||
tx.calc_sha256()
|
||||
txid3 = self.nodes[0].sendrawtransaction(hexstring=tx.serialize().hex(), maxfeerate=0)
|
||||
assert tx.wit.is_null()
|
||||
assert txid3 in self.nodes[0].getrawmempool()
|
||||
@@ -305,7 +304,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vin.append(CTxIn(COutPoint(int('0x' + utxo['txid'], 0), utxo['vout'])))
|
||||
for i in script_list:
|
||||
tx.vout.append(CTxOut(10000000, i))
|
||||
tx.rehash()
|
||||
signresults = self.nodes[0].signrawtransactionwithwallet(tx.serialize_without_witness().hex())['hex']
|
||||
txid = self.nodes[0].sendrawtransaction(hexstring=signresults, maxfeerate=0)
|
||||
txs_mined[txid] = self.generate(self.nodes[0], 1)[0]
|
||||
@@ -354,7 +352,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
for j in range(len(txtmp.vout)):
|
||||
tx.vin.append(CTxIn(COutPoint(int('0x' + i, 0), j)))
|
||||
tx.vout.append(CTxOut(0, CScript()))
|
||||
tx.rehash()
|
||||
signresults = self.nodes[0].signrawtransactionwithwallet(tx.serialize_without_witness().hex())['hex']
|
||||
self.nodes[0].sendrawtransaction(hexstring=signresults, maxfeerate=0)
|
||||
self.generate(self.nodes[0], 1)
|
||||
|
||||
@@ -1423,7 +1423,6 @@ class TaprootTest(BitcoinTestFramework):
|
||||
# Ask the wallet to sign
|
||||
fund_tx = tx_from_hex(node.signrawtransactionwithwallet(fund_tx.serialize().hex())["hex"])
|
||||
# Construct UTXOData entries
|
||||
fund_tx.rehash()
|
||||
for i in range(count_this_tx):
|
||||
utxodata = UTXOData(outpoint=COutPoint(fund_tx.sha256, i), output=fund_tx.vout[i], spender=spenders[done])
|
||||
if utxodata.spender.need_vin_vout_mismatch:
|
||||
@@ -1538,7 +1537,6 @@ class TaprootTest(BitcoinTestFramework):
|
||||
and (all(utxo.spender.is_standard for utxo in input_utxos)) # All inputs must be standard
|
||||
and tx.version >= 1 # The tx version must be standard
|
||||
and tx.version <= 2)
|
||||
tx.rehash()
|
||||
msg = ','.join(utxo.spender.comment + ("*" if n == fail_input else "") for n, utxo in enumerate(input_utxos))
|
||||
if is_standard_tx:
|
||||
node.sendrawtransaction(tx.serialize().hex(), 0)
|
||||
@@ -1568,7 +1566,6 @@ class TaprootTest(BitcoinTestFramework):
|
||||
coinbase.vin = [CTxIn(COutPoint(0, 0xffffffff), CScript([OP_1, OP_1]), SEQUENCE_FINAL)]
|
||||
coinbase.vout = [CTxOut(5000000000, CScript([OP_1]))]
|
||||
coinbase.nLockTime = 0
|
||||
coinbase.rehash()
|
||||
assert coinbase.hash == "f60c73405d499a956d3162e3483c395526ef78286458a4cb17b125aa92e49b20"
|
||||
# Mine it
|
||||
block = create_block(hashprev=int(self.nodes[0].getbestblockhash(), 16), coinbase=coinbase)
|
||||
@@ -1662,7 +1659,6 @@ class TaprootTest(BitcoinTestFramework):
|
||||
if i & 1:
|
||||
tx.vout = list(reversed(tx.vout))
|
||||
tx.nLockTime = 0
|
||||
tx.rehash()
|
||||
amount -= val
|
||||
lasttxid = tx.sha256
|
||||
txn.append(tx)
|
||||
|
||||
@@ -212,7 +212,6 @@ class ZMQTest (BitcoinTestFramework):
|
||||
|
||||
# Should receive the coinbase raw transaction.
|
||||
tx = tx_from_hex(rawtx.receive().hex())
|
||||
tx.calc_sha256()
|
||||
assert_equal(tx.hash, txid.hex())
|
||||
|
||||
# Should receive the generated raw block.
|
||||
|
||||
@@ -435,7 +435,6 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||
anchor_nonempty_wit_spend.vout.append(CTxOut(anchor_value - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE]))))
|
||||
anchor_nonempty_wit_spend.wit.vtxinwit.append(CTxInWitness())
|
||||
anchor_nonempty_wit_spend.wit.vtxinwit[0].scriptWitness.stack.append(b"f")
|
||||
anchor_nonempty_wit_spend.rehash()
|
||||
|
||||
self.check_mempool_result(
|
||||
result_expected=[{'txid': anchor_nonempty_wit_spend.rehash(), 'allowed': False, 'reject-reason': 'bad-witness-nonstandard'}],
|
||||
@@ -466,14 +465,12 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||
self.log.info('But cannot be spent if nested sh()')
|
||||
nested_anchor_tx = self.wallet.create_self_transfer(sequence=SEQUENCE_FINAL)['tx']
|
||||
nested_anchor_tx.vout[0].scriptPubKey = script_to_p2sh_script(PAY_TO_ANCHOR)
|
||||
nested_anchor_tx.rehash()
|
||||
self.generateblock(node, self.wallet.get_address(), [nested_anchor_tx.serialize().hex()])
|
||||
|
||||
nested_anchor_spend = CTransaction()
|
||||
nested_anchor_spend.vin.append(CTxIn(COutPoint(nested_anchor_tx.sha256, 0), b""))
|
||||
nested_anchor_spend.vin[0].scriptSig = CScript([bytes(PAY_TO_ANCHOR)])
|
||||
nested_anchor_spend.vout.append(CTxOut(nested_anchor_tx.vout[0].nValue - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE]))))
|
||||
nested_anchor_spend.rehash()
|
||||
|
||||
self.check_mempool_result(
|
||||
result_expected=[{'txid': nested_anchor_spend.rehash(), 'allowed': False, 'reject-reason': 'non-mandatory-script-verify-flag (Witness version reserved for soft-fork upgrades)'}],
|
||||
@@ -488,12 +485,10 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||
tx = tx_from_hex(raw_tx_reference)
|
||||
privkey, pubkey = generate_keypair()
|
||||
tx.vout[0].scriptPubKey = keys_to_multisig_script([pubkey] * 3, k=1) # Some bare multisig script (1-of-3)
|
||||
tx.rehash()
|
||||
self.generateblock(node, address, [tx.serialize().hex()])
|
||||
tx_spend = CTransaction()
|
||||
tx_spend.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
||||
tx_spend.vout.append(CTxOut(tx.vout[0].nValue - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE]))))
|
||||
tx_spend.rehash()
|
||||
sign_input_legacy(tx_spend, 0, tx.vout[0].scriptPubKey, privkey, sighash_type=SIGHASH_ALL)
|
||||
tx_spend.vin[0].scriptSig = bytes(CScript([OP_0])) + tx_spend.vin[0].scriptSig
|
||||
self.check_mempool_result(
|
||||
|
||||
@@ -58,7 +58,6 @@ class MempoolWtxidTest(BitcoinTestFramework):
|
||||
parent = CTransaction()
|
||||
parent.vin.append(CTxIn(COutPoint(int(txid, 16), 0), b""))
|
||||
parent.vout.append(CTxOut(int(9.99998 * COIN), script_pubkey))
|
||||
parent.rehash()
|
||||
|
||||
privkeys = [node.get_deterministic_priv_key().key]
|
||||
raw_parent = node.signrawtransactionwithkey(hexstring=parent.serialize().hex(), privkeys=privkeys)['hex']
|
||||
|
||||
@@ -425,7 +425,6 @@ class MiningTest(BitcoinTestFramework):
|
||||
coinbase_tx = create_coinbase(height=next_height)
|
||||
# sequence numbers must not be max for nLockTime to have effect
|
||||
coinbase_tx.vin[0].nSequence = 2**32 - 2
|
||||
coinbase_tx.rehash()
|
||||
|
||||
block = CBlock()
|
||||
block.nVersion = tmpl["version"]
|
||||
@@ -447,7 +446,6 @@ class MiningTest(BitcoinTestFramework):
|
||||
self.log.info("getblocktemplate: Test bad input hash for coinbase transaction")
|
||||
bad_block = copy.deepcopy(block)
|
||||
bad_block.vtx[0].vin[0].prevout.hash += 1
|
||||
bad_block.vtx[0].rehash()
|
||||
assert_template(node, bad_block, 'bad-cb-missing')
|
||||
|
||||
self.log.info("submitblock: Test bad input hash for coinbase transaction")
|
||||
@@ -481,7 +479,6 @@ class MiningTest(BitcoinTestFramework):
|
||||
bad_block = copy.deepcopy(block)
|
||||
bad_tx = copy.deepcopy(bad_block.vtx[0])
|
||||
bad_tx.vin[0].prevout.hash = 255
|
||||
bad_tx.rehash()
|
||||
bad_block.vtx.append(bad_tx)
|
||||
assert_template(node, bad_block, 'bad-txns-inputs-missingorspent')
|
||||
assert_submitblock(bad_block, 'bad-txns-inputs-missingorspent')
|
||||
@@ -489,7 +486,6 @@ class MiningTest(BitcoinTestFramework):
|
||||
self.log.info("getblocktemplate: Test nonfinal transaction")
|
||||
bad_block = copy.deepcopy(block)
|
||||
bad_block.vtx[0].nLockTime = 2**32 - 1
|
||||
bad_block.vtx[0].rehash()
|
||||
assert_template(node, bad_block, 'bad-txns-nonfinal')
|
||||
assert_submitblock(bad_block, 'bad-txns-nonfinal')
|
||||
|
||||
@@ -563,7 +559,6 @@ class MiningTest(BitcoinTestFramework):
|
||||
|
||||
bad_block_lock = copy.deepcopy(block)
|
||||
bad_block_lock.vtx[0].nLockTime = 2**32 - 1
|
||||
bad_block_lock.vtx[0].rehash()
|
||||
bad_block_lock.hashMerkleRoot = bad_block_lock.calc_merkle_root()
|
||||
bad_block_lock.solve()
|
||||
assert_equal(node.submitblock(hexdata=bad_block_lock.serialize().hex()), 'bad-txns-nonfinal')
|
||||
|
||||
@@ -65,7 +65,6 @@ class MiningMainnetTest(BitcoinTestFramework):
|
||||
# The alternate mainnet chain was mined with non-timelocked coinbase txs.
|
||||
block.vtx[0].nLockTime = 0
|
||||
block.vtx[0].vin[0].nSequence = SEQUENCE_FINAL
|
||||
block.vtx[0].rehash()
|
||||
block.hashMerkleRoot = block.calc_merkle_root()
|
||||
block.rehash()
|
||||
block_hex = block.serialize(with_witness=False).hex()
|
||||
|
||||
@@ -169,7 +169,6 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
tx.vin.append(CTxIn(COutPoint(block.vtx[0].sha256, 0), b''))
|
||||
for _ in range(10):
|
||||
tx.vout.append(CTxOut(out_value, CScript([OP_TRUE])))
|
||||
tx.rehash()
|
||||
|
||||
block2 = self.build_block_on_tip(self.nodes[0])
|
||||
block2.vtx.append(tx)
|
||||
@@ -309,8 +308,6 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
|
||||
# Store the raw block in our internal format.
|
||||
block = from_hex(CBlock(), node.getblock("%064x" % block_hash, False))
|
||||
for tx in block.vtx:
|
||||
tx.calc_sha256()
|
||||
block.rehash()
|
||||
|
||||
# Wait until the block was announced (via compact blocks)
|
||||
@@ -423,7 +420,6 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(utxo[0], utxo[1]), b''))
|
||||
tx.vout.append(CTxOut(utxo[2] - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
||||
tx.rehash()
|
||||
utxo = [tx.sha256, 0, tx.vout[0].nValue]
|
||||
block.vtx.append(tx)
|
||||
|
||||
@@ -583,7 +579,6 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
test_node.send_without_ping(msg)
|
||||
test_node.wait_until(lambda: "blocktxn" in test_node.last_message, timeout=10)
|
||||
|
||||
[tx.calc_sha256() for tx in block.vtx]
|
||||
with p2p_lock:
|
||||
assert_equal(test_node.last_message["blocktxn"].block_transactions.blockhash, int(block_hash, 16))
|
||||
all_indices = msg.block_txn_request.to_absolute()
|
||||
|
||||
@@ -93,7 +93,6 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
|
||||
|
||||
block2_dup = copy.deepcopy(block2_orig)
|
||||
block2_dup.vtx[2].vin.append(block2_dup.vtx[2].vin[0])
|
||||
block2_dup.vtx[2].rehash()
|
||||
block2_dup.hashMerkleRoot = block2_dup.calc_merkle_root()
|
||||
block2_dup.solve()
|
||||
peer.send_blocks_and_test([block2_dup], node, success=False, reject_reason='bad-txns-inputs-duplicate')
|
||||
@@ -122,7 +121,6 @@ class InvalidBlockRequestTest(BitcoinTestFramework):
|
||||
# Create a block that spends the output of a tx in a previous block.
|
||||
tx3 = create_tx_with_script(tx2, 0, script_sig=bytes([OP_TRUE]), amount=50 * COIN)
|
||||
tx3.vin.append(tx3.vin[0]) # Duplicates input
|
||||
tx3.rehash()
|
||||
block4 = create_block(tip, create_coinbase(height), block_time, txlist=[tx3])
|
||||
block4.solve()
|
||||
self.log.info("Test inflation by duplicating input")
|
||||
|
||||
@@ -93,13 +93,11 @@ class InvalidTxRequestTest(BitcoinTestFramework):
|
||||
tx_withhold = CTransaction()
|
||||
tx_withhold.vin.append(CTxIn(outpoint=COutPoint(block1.vtx[0].sha256, 0)))
|
||||
tx_withhold.vout = [CTxOut(nValue=25 * COIN - 12000, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE)] * 2
|
||||
tx_withhold.calc_sha256()
|
||||
|
||||
# Our first orphan tx with some outputs to create further orphan txs
|
||||
tx_orphan_1 = CTransaction()
|
||||
tx_orphan_1.vin.append(CTxIn(outpoint=COutPoint(tx_withhold.sha256, 0)))
|
||||
tx_orphan_1.vout = [CTxOut(nValue=8 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE)] * 3
|
||||
tx_orphan_1.calc_sha256()
|
||||
|
||||
# A valid transaction with low fee
|
||||
tx_orphan_2_no_fee = CTransaction()
|
||||
@@ -110,13 +108,11 @@ class InvalidTxRequestTest(BitcoinTestFramework):
|
||||
tx_orphan_2_valid = CTransaction()
|
||||
tx_orphan_2_valid.vin.append(CTxIn(outpoint=COutPoint(tx_orphan_1.sha256, 1)))
|
||||
tx_orphan_2_valid.vout.append(CTxOut(nValue=8 * COIN - 12000, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_orphan_2_valid.calc_sha256()
|
||||
|
||||
# An invalid transaction with negative fee
|
||||
tx_orphan_2_invalid = CTransaction()
|
||||
tx_orphan_2_invalid.vin.append(CTxIn(outpoint=COutPoint(tx_orphan_1.sha256, 2)))
|
||||
tx_orphan_2_invalid.vout.append(CTxOut(nValue=11 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_orphan_2_invalid.calc_sha256()
|
||||
|
||||
self.log.info('Send the orphans ... ')
|
||||
# Send valid orphan txs from p2ps[0]
|
||||
@@ -160,7 +156,6 @@ class InvalidTxRequestTest(BitcoinTestFramework):
|
||||
rejected_parent = CTransaction()
|
||||
rejected_parent.vin.append(CTxIn(outpoint=COutPoint(tx_orphan_2_invalid.sha256, 0)))
|
||||
rejected_parent.vout.append(CTxOut(nValue=11 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
rejected_parent.rehash()
|
||||
with node.assert_debug_log(['not keeping orphan with rejected parents {}'.format(rejected_parent.hash)]):
|
||||
node.p2ps[0].send_txs_and_test([rejected_parent], node, success=False)
|
||||
|
||||
@@ -172,12 +167,10 @@ class InvalidTxRequestTest(BitcoinTestFramework):
|
||||
tx_withhold_until_block_A = CTransaction()
|
||||
tx_withhold_until_block_A.vin.append(CTxIn(outpoint=COutPoint(tx_withhold.sha256, 1)))
|
||||
tx_withhold_until_block_A.vout = [CTxOut(nValue=12 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE)] * 2
|
||||
tx_withhold_until_block_A.calc_sha256()
|
||||
|
||||
tx_orphan_include_by_block_A = CTransaction()
|
||||
tx_orphan_include_by_block_A.vin.append(CTxIn(outpoint=COutPoint(tx_withhold_until_block_A.sha256, 0)))
|
||||
tx_orphan_include_by_block_A.vout.append(CTxOut(nValue=12 * COIN - 12000, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_orphan_include_by_block_A.calc_sha256()
|
||||
|
||||
self.log.info('Send the orphan ... ')
|
||||
node.p2ps[0].send_txs_and_test([tx_orphan_include_by_block_A], node, success=False)
|
||||
@@ -197,17 +190,14 @@ class InvalidTxRequestTest(BitcoinTestFramework):
|
||||
tx_withhold_until_block_B = CTransaction()
|
||||
tx_withhold_until_block_B.vin.append(CTxIn(outpoint=COutPoint(tx_withhold_until_block_A.sha256, 1)))
|
||||
tx_withhold_until_block_B.vout.append(CTxOut(nValue=11 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_withhold_until_block_B.calc_sha256()
|
||||
|
||||
tx_orphan_include_by_block_B = CTransaction()
|
||||
tx_orphan_include_by_block_B.vin.append(CTxIn(outpoint=COutPoint(tx_withhold_until_block_B.sha256, 0)))
|
||||
tx_orphan_include_by_block_B.vout.append(CTxOut(nValue=10 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_orphan_include_by_block_B.calc_sha256()
|
||||
|
||||
tx_orphan_conflict_by_block_B = CTransaction()
|
||||
tx_orphan_conflict_by_block_B.vin.append(CTxIn(outpoint=COutPoint(tx_withhold_until_block_B.sha256, 0)))
|
||||
tx_orphan_conflict_by_block_B.vout.append(CTxOut(nValue=9 * COIN, scriptPubKey=SCRIPT_PUB_KEY_OP_TRUE))
|
||||
tx_orphan_conflict_by_block_B.calc_sha256()
|
||||
self.log.info('Send the orphan ... ')
|
||||
node.p2ps[0].send_txs_and_test([tx_orphan_conflict_by_block_B], node, success=False)
|
||||
|
||||
|
||||
@@ -313,7 +313,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(txid, 0), b""))
|
||||
tx.vout.append(CTxOut(49 * 100000000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
||||
tx.calc_sha256()
|
||||
|
||||
# Check that serializing it with or without witness is the same
|
||||
# This is a sanity check of our testing framework.
|
||||
@@ -471,7 +470,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vin = [CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b'')]
|
||||
tx.vout = [CTxOut(value, script_pubkey), CTxOut(value, p2sh_script_pubkey)]
|
||||
tx.vout.append(CTxOut(value, CScript([OP_TRUE])))
|
||||
tx.rehash()
|
||||
txid = tx.sha256
|
||||
|
||||
# Add it to a block
|
||||
@@ -489,14 +487,12 @@ class SegWitTest(BitcoinTestFramework):
|
||||
p2wsh_tx.vout = [CTxOut(value, CScript([OP_TRUE]))]
|
||||
p2wsh_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
p2wsh_tx.wit.vtxinwit[0].scriptWitness.stack = [CScript([OP_TRUE])]
|
||||
p2wsh_tx.rehash()
|
||||
|
||||
p2sh_p2wsh_tx = CTransaction()
|
||||
p2sh_p2wsh_tx.vin = [CTxIn(COutPoint(txid, 1), CScript([script_pubkey]))]
|
||||
p2sh_p2wsh_tx.vout = [CTxOut(value, CScript([OP_TRUE]))]
|
||||
p2sh_p2wsh_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
p2sh_p2wsh_tx.wit.vtxinwit[0].scriptWitness.stack = [CScript([OP_TRUE])]
|
||||
p2sh_p2wsh_tx.rehash()
|
||||
|
||||
for tx in [p2wsh_tx, p2sh_p2wsh_tx]:
|
||||
|
||||
@@ -527,7 +523,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
||||
tx.wit.vtxinwit.append(CTxInWitness())
|
||||
tx.wit.vtxinwit[0].scriptWitness.stack = [b'a']
|
||||
tx.rehash()
|
||||
|
||||
tx_hash = tx.sha256
|
||||
tx_value = tx.vout[0].nValue
|
||||
@@ -573,7 +568,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
p2sh_tx = CTransaction()
|
||||
p2sh_tx.vin = [CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b"")]
|
||||
p2sh_tx.vout = [CTxOut(self.utxo[0].nValue - 1000, p2sh_script_pubkey)]
|
||||
p2sh_tx.rehash()
|
||||
|
||||
# Mine it on test_node to create the confirmed output.
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, p2sh_tx, with_witness=True, accepted=True)
|
||||
@@ -586,7 +580,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vout = [CTxOut(p2sh_tx.vout[0].nValue - 10000, script_pubkey)]
|
||||
tx.vout.append(CTxOut(8000, script_pubkey)) # Might burn this later
|
||||
tx.vin[0].nSequence = MAX_BIP125_RBF_SEQUENCE # Just to have the option to bump this tx from the mempool
|
||||
tx.rehash()
|
||||
|
||||
# This is always accepted, since the mempool policy is to consider segwit as always active
|
||||
# and thus allow segwit outputs
|
||||
@@ -601,7 +594,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vout = [CTxOut(7000, script_pubkey)]
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
tx2.rehash()
|
||||
|
||||
test_transaction_acceptance(self.nodes[1], self.std_node, tx2, with_witness=True, accepted=True)
|
||||
|
||||
@@ -614,7 +606,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx3.vout = [CTxOut(tx.vout[0].nValue - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE]))]
|
||||
tx3.wit.vtxinwit.append(CTxInWitness())
|
||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
tx3.rehash()
|
||||
if not self.segwit_active:
|
||||
# Just check mempool acceptance, but don't add the transaction to the mempool, since witness is disallowed
|
||||
# in blocks and the tx is impossible to mine right now.
|
||||
@@ -636,7 +627,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx3_out = tx3.vout[0]
|
||||
tx3 = tx
|
||||
tx3.vout = [tx3_out]
|
||||
tx3.rehash()
|
||||
testres3_replaced = self.nodes[0].testmempoolaccept([tx3.serialize_with_witness().hex()])
|
||||
testres3_replaced[0]["fees"].pop("effective-feerate")
|
||||
testres3_replaced[0]["fees"].pop("effective-includes")
|
||||
@@ -683,7 +673,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
# Verify mempool acceptance and block validity
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=False, accepted=True)
|
||||
@@ -696,7 +685,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
spend_tx = CTransaction()
|
||||
spend_tx.vin.append(CTxIn(COutPoint(tx.sha256, 0), script_sig))
|
||||
spend_tx.vout.append(CTxOut(tx.vout[0].nValue - 1000, CScript([OP_TRUE])))
|
||||
spend_tx.rehash()
|
||||
|
||||
# This transaction should not be accepted into the mempool pre- or
|
||||
# post-segwit. Mempool acceptance will use SCRIPT_VERIFY_WITNESS which
|
||||
@@ -709,7 +697,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
|
||||
# Try to put the witness script in the scriptSig, should also fail.
|
||||
spend_tx.vin[0].scriptSig = CScript([p2wsh_pubkey, b'a'])
|
||||
spend_tx.rehash()
|
||||
with self.nodes[0].assert_debug_log(
|
||||
expected_msgs=[spend_tx.hash, 'was not accepted: mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)']):
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, spend_tx, with_witness=False, accepted=False)
|
||||
@@ -717,7 +704,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# Now put the witness script in the witness, should succeed after
|
||||
# segwit activates.
|
||||
spend_tx.vin[0].scriptSig = script_sig
|
||||
spend_tx.rehash()
|
||||
spend_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
spend_tx.wit.vtxinwit[0].scriptWitness.stack = [b'a', witness_script]
|
||||
|
||||
@@ -772,7 +758,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
witness_script = CScript([OP_TRUE])
|
||||
script_pubkey = script_to_p2wsh_script(witness_script)
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
# tx2 will spend tx1, and send back to a regular anyone-can-spend address
|
||||
tx2 = CTransaction()
|
||||
@@ -780,7 +765,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, witness_script))
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
tx2.rehash()
|
||||
|
||||
block_3 = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block_3, [tx, tx2], nonce=1)
|
||||
@@ -788,7 +772,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# even though it has extra data after the incorrect commitment.
|
||||
# This block should fail.
|
||||
block_3.vtx[0].vout.append(CTxOut(0, CScript([OP_RETURN, WITNESS_COMMITMENT_HEADER + ser_uint256(2), 10])))
|
||||
block_3.vtx[0].rehash()
|
||||
block_3.hashMerkleRoot = block_3.calc_merkle_root()
|
||||
block_3.solve()
|
||||
|
||||
@@ -801,7 +784,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
add_witness_commitment(block_3, nonce=0)
|
||||
block_3.vtx[0].vout[0].nValue -= 1
|
||||
block_3.vtx[0].vout[-1].nValue += 1
|
||||
block_3.vtx[0].rehash()
|
||||
block_3.hashMerkleRoot = block_3.calc_merkle_root()
|
||||
assert len(block_3.vtx[0].vout) == 4 # 3 OP_returns
|
||||
block_3.solve()
|
||||
@@ -813,7 +795,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx3 = CTransaction()
|
||||
tx3.vin.append(CTxIn(COutPoint(tx2.sha256, 0), b""))
|
||||
tx3.vout.append(CTxOut(tx.vout[0].nValue - 1000, witness_script))
|
||||
tx3.rehash()
|
||||
block_4.vtx.append(tx3)
|
||||
block_4.hashMerkleRoot = block_4.calc_merkle_root()
|
||||
block_4.solve()
|
||||
@@ -893,7 +874,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
parent_tx.vout.append(CTxOut(child_value, script_pubkey))
|
||||
parent_tx.vout[0].nValue -= 50000
|
||||
assert parent_tx.vout[0].nValue > 0
|
||||
parent_tx.rehash()
|
||||
|
||||
child_tx = CTransaction()
|
||||
for i in range(NUM_OUTPUTS):
|
||||
@@ -902,7 +882,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
for _ in range(NUM_OUTPUTS):
|
||||
child_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
child_tx.wit.vtxinwit[-1].scriptWitness.stack = [b'a' * 195] * (2 * NUM_DROPS) + [witness_script]
|
||||
child_tx.rehash()
|
||||
self.update_witness_block_with_transactions(block, [parent_tx, child_tx])
|
||||
|
||||
additional_bytes = MAX_BLOCK_WEIGHT - block.get_weight()
|
||||
@@ -990,7 +969,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vout.append(CTxOut(1000, CScript([OP_TRUE]))) # non-witness output
|
||||
tx.wit.vtxinwit.append(CTxInWitness())
|
||||
tx.wit.vtxinwit[0].scriptWitness.stack = [CScript([])]
|
||||
tx.rehash()
|
||||
self.update_witness_block_with_transactions(block, [tx])
|
||||
|
||||
# Extra witness data should not be allowed.
|
||||
@@ -1000,7 +978,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# Try extra signature data. Ok if we're not spending a witness output.
|
||||
block.vtx[1].wit.vtxinwit = []
|
||||
block.vtx[1].vin[0].scriptSig = CScript([OP_0])
|
||||
block.vtx[1].rehash()
|
||||
add_witness_commitment(block)
|
||||
block.solve()
|
||||
|
||||
@@ -1028,7 +1005,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vin[1].scriptSig = CScript([OP_TRUE])
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack.pop(0)
|
||||
tx2.wit.vtxinwit[1].scriptWitness.stack = []
|
||||
tx2.rehash()
|
||||
add_witness_commitment(block)
|
||||
block.solve()
|
||||
|
||||
@@ -1039,7 +1015,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# Now get rid of the extra scriptsig on the witness input, and verify
|
||||
# success (even with extra scriptsig data in the non-witness input)
|
||||
tx2.vin[0].scriptSig = b""
|
||||
tx2.rehash()
|
||||
add_witness_commitment(block)
|
||||
block.solve()
|
||||
|
||||
@@ -1061,7 +1036,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
tx2 = CTransaction()
|
||||
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
||||
@@ -1069,7 +1043,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
# First try a 521-byte stack element
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [b'a' * (MAX_SCRIPT_ELEMENT_SIZE + 1), witness_script]
|
||||
tx2.rehash()
|
||||
|
||||
self.update_witness_block_with_transactions(block, [tx, tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block, accepted=False,
|
||||
@@ -1102,14 +1075,12 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, long_script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
tx2 = CTransaction()
|
||||
tx2.vin.append(CTxIn(COutPoint(tx.sha256, 0), b""))
|
||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, CScript([OP_TRUE])))
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [b'a'] * 44 + [long_witness_script]
|
||||
tx2.rehash()
|
||||
|
||||
self.update_witness_block_with_transactions(block, [tx, tx2])
|
||||
|
||||
@@ -1122,10 +1093,8 @@ class SegWitTest(BitcoinTestFramework):
|
||||
script_pubkey = script_to_p2wsh_script(witness_script)
|
||||
|
||||
tx.vout[0] = CTxOut(tx.vout[0].nValue, script_pubkey)
|
||||
tx.rehash()
|
||||
tx2.vin[0].prevout.hash = tx.sha256
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [b'a'] * 43 + [witness_script]
|
||||
tx2.rehash()
|
||||
block.vtx = [block.vtx[0]]
|
||||
self.update_witness_block_with_transactions(block, [tx, tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block, accepted=True)
|
||||
@@ -1234,7 +1203,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
||||
tx.wit.vtxinwit.append(CTxInWitness())
|
||||
tx.wit.vtxinwit[0].scriptWitness.stack = [b'a']
|
||||
tx.rehash()
|
||||
|
||||
tx_hash = tx.sha256
|
||||
|
||||
@@ -1252,7 +1220,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2 = CTransaction()
|
||||
tx2.vin.append(CTxIn(COutPoint(tx_hash, 0), b""))
|
||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, script_pubkey))
|
||||
tx2.rehash()
|
||||
|
||||
tx3 = CTransaction()
|
||||
tx3.vin.append(CTxIn(COutPoint(tx2.sha256, 0), b""))
|
||||
@@ -1263,7 +1230,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
witness_script2 = CScript([b'a' * 400000])
|
||||
tx3.vout.append(CTxOut(tx2.vout[0].nValue - 1000, script_to_p2sh_script(p2sh_script)))
|
||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_script2]
|
||||
tx3.rehash()
|
||||
|
||||
# Node will not be blinded to the transaction, requesting it any number of times
|
||||
# if it is being announced via txid relay.
|
||||
@@ -1277,7 +1243,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# Remove witness stuffing, instead add extra witness push on stack
|
||||
tx3.vout[0] = CTxOut(tx2.vout[0].nValue - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE]))
|
||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [CScript([CScriptNum(1)]), witness_script]
|
||||
tx3.rehash()
|
||||
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx2, with_witness=True, accepted=True)
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=True, accepted=False)
|
||||
@@ -1324,7 +1289,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
split_value = (self.utxo[0].nValue - 4000) // NUM_SEGWIT_VERSIONS
|
||||
for _ in range(NUM_SEGWIT_VERSIONS):
|
||||
tx.vout.append(CTxOut(split_value, CScript([OP_TRUE])))
|
||||
tx.rehash()
|
||||
block = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block, [tx])
|
||||
test_witness_block(self.nodes[0], self.test_node, block, accepted=True)
|
||||
@@ -1347,7 +1311,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
script_pubkey = CScript([CScriptOp(version), witness_hash])
|
||||
tx.vin = [CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b"")]
|
||||
tx.vout = [CTxOut(self.utxo[0].nValue - 1000, script_pubkey)]
|
||||
tx.rehash()
|
||||
test_transaction_acceptance(self.nodes[1], self.std_node, tx, with_witness=True, accepted=False)
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=True, accepted=True)
|
||||
self.utxo.pop(0)
|
||||
@@ -1364,7 +1327,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vout = [CTxOut(tx.vout[0].nValue - 1000, script_pubkey)]
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
tx2.rehash()
|
||||
# Gets accepted to both policy-enforcing nodes and others.
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx2, with_witness=True, accepted=True)
|
||||
test_transaction_acceptance(self.nodes[1], self.std_node, tx2, with_witness=True, accepted=True)
|
||||
@@ -1380,7 +1342,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
total_value += i.nValue
|
||||
tx3.wit.vtxinwit[-1].scriptWitness.stack = [witness_script]
|
||||
tx3.vout.append(CTxOut(total_value - 1000, script_pubkey))
|
||||
tx3.rehash()
|
||||
|
||||
# First we test this transaction against std_node
|
||||
# making sure the txid is added to the reject filter
|
||||
@@ -1420,7 +1381,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
spend_tx.vout = [CTxOut(block.vtx[0].vout[0].nValue, witness_script)]
|
||||
spend_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
spend_tx.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
spend_tx.rehash()
|
||||
|
||||
# Now test a premature spend.
|
||||
self.generate(self.nodes[0], 98)
|
||||
@@ -1456,7 +1416,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(utxo.sha256, utxo.n), b""))
|
||||
tx.vout.append(CTxOut(utxo.nValue - 1000, script_pkh))
|
||||
tx.rehash()
|
||||
|
||||
# Confirm it in a block.
|
||||
block = self.build_next_block()
|
||||
@@ -1542,7 +1501,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=True, accepted=True)
|
||||
# Mine this transaction in preparation for following tests.
|
||||
@@ -1637,7 +1595,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
sign_p2pk_witness_input(witness_script, tx, i, hashtype, temp_utxos[i].nValue, key)
|
||||
if (hashtype == SIGHASH_SINGLE and i >= num_outputs):
|
||||
used_sighash_single_out_of_bounds = True
|
||||
tx.rehash()
|
||||
for i in range(num_outputs):
|
||||
temp_utxos.append(UTXO(tx.sha256, i, split_value))
|
||||
temp_utxos = temp_utxos[num_inputs:]
|
||||
@@ -1676,7 +1633,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
|
||||
# Check that we can't have a scriptSig
|
||||
tx2.vin[0].scriptSig = CScript([signature, pubkey])
|
||||
tx2.rehash()
|
||||
block = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block, [tx, tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block, accepted=False,
|
||||
@@ -1687,7 +1643,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [signature, pubkey]
|
||||
tx2.vin[0].scriptSig = b""
|
||||
tx2.rehash()
|
||||
|
||||
self.update_witness_block_with_transactions(block, [tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block, accepted=True)
|
||||
@@ -1731,7 +1686,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, False, True)
|
||||
self.generate(self.nodes[0], 1)
|
||||
|
||||
@@ -1745,7 +1699,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, script_pubkey))
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [b'a' * 400]
|
||||
tx2.rehash()
|
||||
# This will be rejected due to a policy check:
|
||||
# No witness is allowed, since it is not a witness program but a p2sh program
|
||||
test_transaction_acceptance(self.nodes[1], self.std_node, tx2, True, False, 'bad-witness-nonstandard')
|
||||
@@ -1757,7 +1710,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx3 = CTransaction()
|
||||
tx3.vin.append(CTxIn(COutPoint(tx2.sha256, 0), CScript([p2sh_program])))
|
||||
tx3.vout.append(CTxOut(tx2.vout[0].nValue - 1000, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
||||
tx3.rehash()
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx2, False, True)
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx3, False, True)
|
||||
|
||||
@@ -1791,7 +1743,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
p2wsh_scripts.append(p2wsh)
|
||||
tx.vout.append(CTxOut(outputvalue, p2wsh))
|
||||
tx.vout.append(CTxOut(outputvalue, script_to_p2sh_script(p2wsh)))
|
||||
tx.rehash()
|
||||
txid = tx.sha256
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx, with_witness=False, accepted=True)
|
||||
|
||||
@@ -1805,13 +1756,11 @@ class SegWitTest(BitcoinTestFramework):
|
||||
p2wsh_tx.vin.append(CTxIn(COutPoint(txid, i * 2)))
|
||||
p2wsh_tx.vout.append(CTxOut(outputvalue - 5000, CScript([OP_0, hash160(b"")])))
|
||||
p2wsh_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
p2wsh_tx.rehash()
|
||||
p2wsh_txs.append(p2wsh_tx)
|
||||
p2sh_tx = CTransaction()
|
||||
p2sh_tx.vin.append(CTxIn(COutPoint(txid, i * 2 + 1), CScript([p2wsh_scripts[i]])))
|
||||
p2sh_tx.vout.append(CTxOut(outputvalue - 5000, CScript([OP_0, hash160(b"")])))
|
||||
p2sh_tx.wit.vtxinwit.append(CTxInWitness())
|
||||
p2sh_tx.rehash()
|
||||
p2sh_txs.append(p2sh_tx)
|
||||
|
||||
# Testing native P2WSH
|
||||
@@ -1902,7 +1851,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx.vout.append(CTxOut(split_value, script_pubkey))
|
||||
tx.vout[-2].scriptPubKey = script_pubkey_toomany
|
||||
tx.vout[-1].scriptPubKey = script_pubkey_justright
|
||||
tx.rehash()
|
||||
|
||||
block_1 = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block_1, [tx])
|
||||
@@ -1919,7 +1867,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
total_value += tx.vout[i].nValue
|
||||
tx2.wit.vtxinwit[-1].scriptWitness.stack = [witness_script_toomany]
|
||||
tx2.vout.append(CTxOut(total_value, CScript([OP_TRUE])))
|
||||
tx2.rehash()
|
||||
|
||||
block_2 = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block_2, [tx2])
|
||||
@@ -1933,7 +1880,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vin.pop()
|
||||
tx2.wit.vtxinwit.pop()
|
||||
tx2.vout[0].nValue -= tx.vout[-2].nValue
|
||||
tx2.rehash()
|
||||
block_3 = self.build_next_block()
|
||||
self.update_witness_block_with_transactions(block_3, [tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block_3, accepted=False, reason='bad-blk-sigops')
|
||||
@@ -1941,7 +1887,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
# If we drop the last checksig in this output, the tx should succeed.
|
||||
block_4 = self.build_next_block()
|
||||
tx2.vout[-1].scriptPubKey = CScript([OP_CHECKSIG] * (checksig_count - 1))
|
||||
tx2.rehash()
|
||||
self.update_witness_block_with_transactions(block_4, [tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block_4, accepted=True)
|
||||
|
||||
@@ -1957,7 +1902,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vin.append(CTxIn(COutPoint(tx.sha256, outputs - 1), b""))
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[-1].scriptWitness.stack = [witness_script_justright]
|
||||
tx2.rehash()
|
||||
self.update_witness_block_with_transactions(block_5, [tx2])
|
||||
test_witness_block(self.nodes[0], self.test_node, block_5, accepted=True)
|
||||
|
||||
@@ -2022,7 +1966,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx = CTransaction()
|
||||
tx.vin.append(CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b""))
|
||||
tx.vout.append(CTxOut(self.utxo[0].nValue - 1000, script_pubkey))
|
||||
tx.rehash()
|
||||
|
||||
# Create a Segwit transaction
|
||||
tx2 = CTransaction()
|
||||
@@ -2030,7 +1973,6 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx2.vout.append(CTxOut(tx.vout[0].nValue - 1000, script_pubkey))
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [witness_script]
|
||||
tx2.rehash()
|
||||
|
||||
# Announce Segwit transaction with wtxid
|
||||
# and wait for getdata
|
||||
|
||||
@@ -134,7 +134,6 @@ def add_witness_commitment(block, nonce=0):
|
||||
|
||||
# witness commitment is the last OP_RETURN output in coinbase
|
||||
block.vtx[0].vout.append(CTxOut(0, get_witness_script(witness_root, witness_nonce)))
|
||||
block.vtx[0].rehash()
|
||||
block.hashMerkleRoot = block.calc_merkle_root()
|
||||
block.rehash()
|
||||
|
||||
@@ -176,7 +175,6 @@ def create_coinbase(height, pubkey=None, *, script_pubkey=None, extra_output_scr
|
||||
coinbaseoutput2.nValue = 0
|
||||
coinbaseoutput2.scriptPubKey = extra_output_script
|
||||
coinbase.vout.append(coinbaseoutput2)
|
||||
coinbase.calc_sha256()
|
||||
return coinbase
|
||||
|
||||
def create_tx_with_script(prevtx, n, script_sig=b"", *, amount, output_script=None):
|
||||
@@ -191,7 +189,6 @@ def create_tx_with_script(prevtx, n, script_sig=b"", *, amount, output_script=No
|
||||
assert n < len(prevtx.vout)
|
||||
tx.vin.append(CTxIn(COutPoint(prevtx.sha256, n), script_sig, SEQUENCE_FINAL))
|
||||
tx.vout.append(CTxOut(amount, output_script))
|
||||
tx.calc_sha256()
|
||||
return tx
|
||||
|
||||
def get_legacy_sigopcount_block(block, accurate=True):
|
||||
|
||||
@@ -682,7 +682,6 @@ class CTransaction:
|
||||
return uint256_from_str(hash256(self.serialize_with_witness()))
|
||||
|
||||
def is_valid(self):
|
||||
self.calc_sha256()
|
||||
for tout in self.vout:
|
||||
if tout.nValue < 0 or tout.nValue > 21000000 * COIN:
|
||||
return False
|
||||
@@ -810,7 +809,6 @@ class CBlock(CBlockHeader):
|
||||
def calc_merkle_root(self):
|
||||
hashes = []
|
||||
for tx in self.vtx:
|
||||
tx.calc_sha256()
|
||||
hashes.append(ser_uint256(tx.sha256))
|
||||
return self.get_merkle_root(hashes)
|
||||
|
||||
|
||||
@@ -694,7 +694,6 @@ def sign_input_legacy(tx, input_index, input_scriptpubkey, privkey, sighash_type
|
||||
assert err is None
|
||||
der_sig = privkey.sign_ecdsa(sighash)
|
||||
tx.vin[input_index].scriptSig = bytes(CScript([der_sig + bytes([sighash_type])])) + tx.vin[input_index].scriptSig
|
||||
tx.rehash()
|
||||
|
||||
def sign_input_segwitv0(tx, input_index, input_scriptpubkey, input_amount, privkey, sighash_type=SIGHASH_ALL):
|
||||
"""Add segwitv0 ECDSA signature for a given transaction input. Note that the signature
|
||||
@@ -703,7 +702,6 @@ def sign_input_segwitv0(tx, input_index, input_scriptpubkey, input_amount, privk
|
||||
sighash = SegwitV0SignatureHash(input_scriptpubkey, tx, input_index, sighash_type, input_amount)
|
||||
der_sig = privkey.sign_ecdsa(sighash)
|
||||
tx.wit.vtxinwit[input_index].scriptWitness.stack.insert(0, der_sig + bytes([sighash_type]))
|
||||
tx.rehash()
|
||||
|
||||
# TODO: Allow cached hashPrevouts/hashSequence/hashOutputs to be provided.
|
||||
# Performance optimization probably not necessary for python tests, however.
|
||||
|
||||
Reference in New Issue
Block a user