def test_flow_10(): """ This MUST fail Test of block reverse """ coinbase_0 = Tx([TxIn(OutPoint("00" * 32, 0), Script())], [TxOut(10**10, Script())]) origin_transactions = [coinbase_0] origin_header = BlockHeader("00" * 32, generate_merkle_root(origin_transactions), 0) origin = Block(origin_header, origin_transactions) blockchain = Blockchain() rev_block_0 = blockchain._add_block(origin) coinbase_1 = Tx( [TxIn(OutPoint("00" * 32, 0), Script.from_hex("00030000aa"))], [TxOut(2 * 10**10 - 10**5, Script())], ) tx = Tx([TxIn(OutPoint(coinbase_0.txid, 0), Script())], [TxOut(10**5, Script())]) block_1_transactions = [coinbase_1, tx] block_1_header = BlockHeader(origin.header.pow, generate_merkle_root(block_1_transactions), 0) block_1 = Block(block_1_header, block_1_transactions) blockchain._add_block(block_1) with pytest.raises(Exception): blockchain._reverse_block(rev_block_0) reset_blockchain()
def test_flow_8(): """ This MUST NOT fail Test of block reverse """ coinbase_0 = Tx([TxIn(OutPoint("00" * 32, 0), Script())], [TxOut(10**10, Script())]) origin_transactions = [coinbase_0] origin_header = BlockHeader("00" * 32, generate_merkle_root(origin_transactions), 0) origin = Block(origin_header, origin_transactions) blockchain = Blockchain() rev_origin = blockchain._add_block(origin) old_utxo_list = blockchain.main_utxo_set.get_utxo_list() coinbase_1 = Tx( [TxIn(OutPoint("00" * 32, 0), Script.from_hex("00030000aa"))], [TxOut(2 * 10**10 - 10**5, Script())], ) tx = Tx([TxIn(OutPoint(coinbase_0.txid, 0), Script())], [TxOut(10**5, Script())]) block_1_transactions = [coinbase_1, tx] block_1_header = BlockHeader(origin.header.pow, generate_merkle_root(block_1_transactions), 0) block_1 = Block(block_1_header, block_1_transactions) rev_block = blockchain._add_block(block_1) assert not blockchain.main_utxo_set.get_utxo_list() == old_utxo_list blockchain._reverse_block(rev_block) assert blockchain.main_utxo_set.get_utxo_list() == old_utxo_list with pytest.raises(Exception): blockchain._reverse_block(rev_block) blockchain._reverse_block(rev_origin) assert blockchain.main_utxo_set.get_utxo_list() == [] reset_blockchain()