mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-28 07:42:46 +02:00
test: MiniWallet: always rehash after signing (P2PK mode)
Also explicitly rehash in the cases where we modify a tx after signing in feature_csv_activation.py. Parts of this test relied on the fact that rehashing of transactions is done in the course of calculating a block's merkle root (`calc_merkle_root`), which only works if no hash was calculated before due to a caching mechanism. In the following commit the txid in MiniWallet is calculated via `rehash()`, i.e. this doesn't work anymore and we always have to explicitely have the right hash before we calculate the merkle root.
This commit is contained in:
@@ -112,6 +112,7 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
|||||||
tx.nVersion = txversion
|
tx.nVersion = txversion
|
||||||
self.miniwallet.sign_tx(tx)
|
self.miniwallet.sign_tx(tx)
|
||||||
tx.vin[0].scriptSig = CScript([-1, OP_CHECKSEQUENCEVERIFY, OP_DROP] + list(CScript(tx.vin[0].scriptSig)))
|
tx.vin[0].scriptSig = CScript([-1, OP_CHECKSEQUENCEVERIFY, OP_DROP] + list(CScript(tx.vin[0].scriptSig)))
|
||||||
|
tx.rehash()
|
||||||
return tx
|
return tx
|
||||||
|
|
||||||
def create_bip112emptystack(self, input, txversion):
|
def create_bip112emptystack(self, input, txversion):
|
||||||
@@ -119,6 +120,7 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
|||||||
tx.nVersion = txversion
|
tx.nVersion = txversion
|
||||||
self.miniwallet.sign_tx(tx)
|
self.miniwallet.sign_tx(tx)
|
||||||
tx.vin[0].scriptSig = CScript([OP_CHECKSEQUENCEVERIFY] + list(CScript(tx.vin[0].scriptSig)))
|
tx.vin[0].scriptSig = CScript([OP_CHECKSEQUENCEVERIFY] + list(CScript(tx.vin[0].scriptSig)))
|
||||||
|
tx.rehash()
|
||||||
return tx
|
return tx
|
||||||
|
|
||||||
def send_generic_input_tx(self, coinbases):
|
def send_generic_input_tx(self, coinbases):
|
||||||
@@ -136,7 +138,6 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
|||||||
tx.nVersion = txversion
|
tx.nVersion = txversion
|
||||||
tx.vin[0].nSequence = locktime + locktime_delta
|
tx.vin[0].nSequence = locktime + locktime_delta
|
||||||
self.miniwallet.sign_tx(tx)
|
self.miniwallet.sign_tx(tx)
|
||||||
tx.rehash()
|
|
||||||
txs.append({'tx': tx, 'sdf': sdf, 'stf': stf})
|
txs.append({'tx': tx, 'sdf': sdf, 'stf': stf})
|
||||||
|
|
||||||
return txs
|
return txs
|
||||||
@@ -339,20 +340,16 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
|||||||
# BIP 113 tests should now fail regardless of version number if nLockTime isn't satisfied by new rules
|
# BIP 113 tests should now fail regardless of version number if nLockTime isn't satisfied by new rules
|
||||||
bip113tx_v1.nLockTime = self.last_block_time - 600 * 5 # = MTP of prior block (not <) but < time put on current block
|
bip113tx_v1.nLockTime = self.last_block_time - 600 * 5 # = MTP of prior block (not <) but < time put on current block
|
||||||
self.miniwallet.sign_tx(bip113tx_v1)
|
self.miniwallet.sign_tx(bip113tx_v1)
|
||||||
bip113tx_v1.rehash()
|
|
||||||
bip113tx_v2.nLockTime = self.last_block_time - 600 * 5 # = MTP of prior block (not <) but < time put on current block
|
bip113tx_v2.nLockTime = self.last_block_time - 600 * 5 # = MTP of prior block (not <) but < time put on current block
|
||||||
self.miniwallet.sign_tx(bip113tx_v2)
|
self.miniwallet.sign_tx(bip113tx_v2)
|
||||||
bip113tx_v2.rehash()
|
|
||||||
for bip113tx in [bip113tx_v1, bip113tx_v2]:
|
for bip113tx in [bip113tx_v1, bip113tx_v2]:
|
||||||
self.send_blocks([self.create_test_block([bip113tx])], success=False, reject_reason='bad-txns-nonfinal')
|
self.send_blocks([self.create_test_block([bip113tx])], success=False, reject_reason='bad-txns-nonfinal')
|
||||||
|
|
||||||
# BIP 113 tests should now pass if the locktime is < MTP
|
# BIP 113 tests should now pass if the locktime is < MTP
|
||||||
bip113tx_v1.nLockTime = self.last_block_time - 600 * 5 - 1 # < MTP of prior block
|
bip113tx_v1.nLockTime = self.last_block_time - 600 * 5 - 1 # < MTP of prior block
|
||||||
self.miniwallet.sign_tx(bip113tx_v1)
|
self.miniwallet.sign_tx(bip113tx_v1)
|
||||||
bip113tx_v1.rehash()
|
|
||||||
bip113tx_v2.nLockTime = self.last_block_time - 600 * 5 - 1 # < MTP of prior block
|
bip113tx_v2.nLockTime = self.last_block_time - 600 * 5 - 1 # < MTP of prior block
|
||||||
self.miniwallet.sign_tx(bip113tx_v2)
|
self.miniwallet.sign_tx(bip113tx_v2)
|
||||||
bip113tx_v2.rehash()
|
|
||||||
for bip113tx in [bip113tx_v1, bip113tx_v2]:
|
for bip113tx in [bip113tx_v1, bip113tx_v2]:
|
||||||
self.send_blocks([self.create_test_block([bip113tx])])
|
self.send_blocks([self.create_test_block([bip113tx])])
|
||||||
self.nodes[0].invalidateblock(self.nodes[0].getbestblockhash())
|
self.nodes[0].invalidateblock(self.nodes[0].getbestblockhash())
|
||||||
@@ -477,7 +474,6 @@ class BIP68_112_113Test(BitcoinTestFramework):
|
|||||||
for tx in [tx['tx'] for tx in bip112txs_vary_OP_CSV_v2 if not tx['sdf'] and tx['stf']]:
|
for tx in [tx['tx'] for tx in bip112txs_vary_OP_CSV_v2 if not tx['sdf'] and tx['stf']]:
|
||||||
tx.vin[0].nSequence = BASE_RELATIVE_LOCKTIME | SEQ_TYPE_FLAG
|
tx.vin[0].nSequence = BASE_RELATIVE_LOCKTIME | SEQ_TYPE_FLAG
|
||||||
self.miniwallet.sign_tx(tx)
|
self.miniwallet.sign_tx(tx)
|
||||||
tx.rehash()
|
|
||||||
time_txs.append(tx)
|
time_txs.append(tx)
|
||||||
|
|
||||||
self.send_blocks([self.create_test_block(time_txs)])
|
self.send_blocks([self.create_test_block(time_txs)])
|
||||||
|
@@ -127,6 +127,7 @@ class MiniWallet:
|
|||||||
if not fixed_length:
|
if not fixed_length:
|
||||||
break
|
break
|
||||||
tx.vin[0].scriptSig = CScript([der_sig + bytes(bytearray([SIGHASH_ALL]))])
|
tx.vin[0].scriptSig = CScript([der_sig + bytes(bytearray([SIGHASH_ALL]))])
|
||||||
|
tx.rehash()
|
||||||
|
|
||||||
def generate(self, num_blocks, **kwargs):
|
def generate(self, num_blocks, **kwargs):
|
||||||
"""Generate blocks with coinbase outputs to the internal address, and append the outputs to the internal list"""
|
"""Generate blocks with coinbase outputs to the internal address, and append the outputs to the internal list"""
|
||||||
|
Reference in New Issue
Block a user