Changeset View
Changeset View
Standalone View
Standalone View
test/functional/p2p_invalid_block.py
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
# Mutate block 2 | # Mutate block 2 | ||||
block2.vtx.append(block2.vtx[2]) | block2.vtx.append(block2.vtx[2]) | ||||
assert_equal(block2.hashMerkleRoot, block2.calc_merkle_root()) | assert_equal(block2.hashMerkleRoot, block2.calc_merkle_root()) | ||||
assert_equal(orig_hash, block2.rehash()) | assert_equal(orig_hash, block2.rehash()) | ||||
assert(block2_orig.vtx != block2.vtx) | assert(block2_orig.vtx != block2.vtx) | ||||
node.p2p.send_blocks_and_test( | node.p2p.send_blocks_and_test( | ||||
[block2], node, success=False, request_block=False, reject_code=16, reject_reason=b'bad-txns-duplicate') | [block2], node, success=False, request_block=False, reject_reason='bad-txns-duplicate') | ||||
# Check transactions for duplicate inputs | # Check transactions for duplicate inputs | ||||
self.log.info("Test duplicate input block.") | self.log.info("Test duplicate input block.") | ||||
block2_orig.vtx[2].vin.append(block2_orig.vtx[2].vin[0]) | block2_orig.vtx[2].vin.append(block2_orig.vtx[2].vin[0]) | ||||
block2.vtx = [block2.vtx[0]] + \ | block2.vtx = [block2.vtx[0]] + \ | ||||
sorted(block2.vtx[1:], key=lambda tx: tx.get_id()) | sorted(block2.vtx[1:], key=lambda tx: tx.get_id()) | ||||
block2_orig.vtx[2].rehash() | block2_orig.vtx[2].rehash() | ||||
block2_orig.hashMerkleRoot = block2_orig.calc_merkle_root() | block2_orig.hashMerkleRoot = block2_orig.calc_merkle_root() | ||||
block2_orig.rehash() | block2_orig.rehash() | ||||
block2_orig.solve() | block2_orig.solve() | ||||
node.p2p.send_blocks_and_test( | node.p2p.send_blocks_and_test( | ||||
[block2_orig], node, success=False, request_block=False, reject_code=16, reject_reason=b'bad-txns-inputs-duplicate') | [block2_orig], node, success=False, request_block=False, reject_reason='bad-txns-inputs-duplicate') | ||||
self.log.info("Test very broken block.") | self.log.info("Test very broken block.") | ||||
block3 = create_block(tip, create_coinbase(height), block_time) | block3 = create_block(tip, create_coinbase(height), block_time) | ||||
block_time += 1 | block_time += 1 | ||||
block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! | block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! | ||||
block3.vtx[0].sha256 = None | block3.vtx[0].sha256 = None | ||||
block3.vtx[0].calc_sha256() | block3.vtx[0].calc_sha256() | ||||
block3.hashMerkleRoot = block3.calc_merkle_root() | block3.hashMerkleRoot = block3.calc_merkle_root() | ||||
block3.rehash() | block3.rehash() | ||||
block3.solve() | block3.solve() | ||||
node.p2p.send_blocks_and_test( | node.p2p.send_blocks_and_test( | ||||
[block3], node, success=False, request_block=False, reject_code=16, reject_reason=b'bad-cb-amount') | [block3], node, success=False, request_block=False, reject_reason='bad-cb-amount') | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
InvalidBlockRequestTest().main() | InvalidBlockRequestTest().main() |