Changeset View
Changeset View
Standalone View
Standalone View
test/functional/feature_dersig.py
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | def set_test_params(self): | ||||
self.extra_args = [['-whitelist=noban@127.0.0.1']] | self.extra_args = [['-whitelist=noban@127.0.0.1']] | ||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.rpc_timeout = 120 | self.rpc_timeout = 120 | ||||
def skip_test_if_missing_module(self): | def skip_test_if_missing_module(self): | ||||
self.skip_if_no_wallet() | self.skip_if_no_wallet() | ||||
def run_test(self): | def run_test(self): | ||||
self.nodes[0].add_p2p_connection(P2PInterface()) | peer = self.nodes[0].add_p2p_connection(P2PInterface()) | ||||
self.log.info("Mining {} blocks".format(DERSIG_HEIGHT - 1)) | self.log.info("Mining {} blocks".format(DERSIG_HEIGHT - 1)) | ||||
self.coinbase_txids = [self.nodes[0].getblock( | self.coinbase_txids = [self.nodes[0].getblock( | ||||
b)['tx'][0] for b in self.nodes[0].generate(DERSIG_HEIGHT - 1)] | b)['tx'][0] for b in self.nodes[0].generate(DERSIG_HEIGHT - 1)] | ||||
self.nodeaddress = self.nodes[0].getnewaddress() | self.nodeaddress = self.nodes[0].getnewaddress() | ||||
self.log.info("Test that blocks must now be at least version 3") | self.log.info("Test that blocks must now be at least version 3") | ||||
tip = self.nodes[0].getbestblockhash() | tip = self.nodes[0].getbestblockhash() | ||||
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1 | block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1 | ||||
block = create_block( | block = create_block( | ||||
int(tip, 16), create_coinbase(DERSIG_HEIGHT), block_time) | int(tip, 16), create_coinbase(DERSIG_HEIGHT), block_time) | ||||
block.nVersion = 2 | block.nVersion = 2 | ||||
block.rehash() | block.rehash() | ||||
block.solve() | block.solve() | ||||
with self.nodes[0].assert_debug_log(expected_msgs=['{}, bad-version(0x00000002)'.format(block.hash)]): | with self.nodes[0].assert_debug_log(expected_msgs=['{}, bad-version(0x00000002)'.format(block.hash)]): | ||||
self.nodes[0].p2p.send_and_ping(msg_block(block)) | peer.send_and_ping(msg_block(block)) | ||||
assert_equal(self.nodes[0].getbestblockhash(), tip) | assert_equal(self.nodes[0].getbestblockhash(), tip) | ||||
self.nodes[0].p2p.sync_with_ping() | peer.sync_with_ping() | ||||
self.log.info( | self.log.info( | ||||
"Test that transactions with non-DER signatures cannot appear in a block") | "Test that transactions with non-DER signatures cannot appear in a block") | ||||
block.nVersion = 3 | block.nVersion = 3 | ||||
spendtx = create_transaction(self.nodes[0], self.coinbase_txids[1], | spendtx = create_transaction(self.nodes[0], self.coinbase_txids[1], | ||||
self.nodeaddress, amount=1000000) | self.nodeaddress, amount=1000000) | ||||
unDERify(spendtx) | unDERify(spendtx) | ||||
Show All 10 Lines | def run_test(self): | ||||
# Now we verify that a block with this transaction is also invalid. | # Now we verify that a block with this transaction is also invalid. | ||||
block.vtx.append(spendtx) | block.vtx.append(spendtx) | ||||
block.hashMerkleRoot = block.calc_merkle_root() | block.hashMerkleRoot = block.calc_merkle_root() | ||||
block.rehash() | block.rehash() | ||||
block.solve() | block.solve() | ||||
with self.nodes[0].assert_debug_log(expected_msgs=['ConnectBlock {} failed, blk-bad-inputs'.format(block.hash)]): | with self.nodes[0].assert_debug_log(expected_msgs=['ConnectBlock {} failed, blk-bad-inputs'.format(block.hash)]): | ||||
self.nodes[0].p2p.send_and_ping(msg_block(block)) | peer.send_and_ping(msg_block(block)) | ||||
assert_equal(self.nodes[0].getbestblockhash(), tip) | assert_equal(self.nodes[0].getbestblockhash(), tip) | ||||
self.nodes[0].p2p.sync_with_ping() | peer.sync_with_ping() | ||||
self.log.info( | self.log.info( | ||||
"Test that a version 3 block with a DERSIG-compliant transaction is accepted") | "Test that a version 3 block with a DERSIG-compliant transaction is accepted") | ||||
block.vtx[1] = create_transaction(self.nodes[0], | block.vtx[1] = create_transaction(self.nodes[0], | ||||
self.coinbase_txids[1], self.nodeaddress, amount=1.0) | self.coinbase_txids[1], self.nodeaddress, amount=1.0) | ||||
block.hashMerkleRoot = block.calc_merkle_root() | block.hashMerkleRoot = block.calc_merkle_root() | ||||
block.rehash() | block.rehash() | ||||
block.solve() | block.solve() | ||||
self.nodes[0].p2p.send_and_ping(msg_block(block)) | peer.send_and_ping(msg_block(block)) | ||||
assert_equal(int(self.nodes[0].getbestblockhash(), 16), block.sha256) | assert_equal(int(self.nodes[0].getbestblockhash(), 16), block.sha256) | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
BIP66Test().main() | BIP66Test().main() |