def test_is_valid_transaction_chain_duplicate_transactions(blockchain_3b): trans = Transaction(Wallet(), 'recipient', 1).to_json() # Add block with list of transactions containing two identical transactions # (a duplicate) blockchain_3b.add_block([trans, trans]) with pytest.raises(Exception, match='is not unique.'): Blockchain.is_valid_trans_chain(blockchain_3b.chain)
def test_is_valid_transaction_chain_bad_histroric_balance(blockchain_3b): wallet = Wallet() bad_trans = Transaction(wallet, 'recipient', 1) bad_trans.output[wallet.address] = 9001 bad_trans.input['amount'] = 9002 bad_trans.input['signature'] = wallet.sign(bad_trans.output) blockchain_3b.add_block([bad_trans.to_json()]) with pytest.raises(Exception, match='has an invalid input amount.'): Blockchain.is_valid_trans_chain(blockchain_3b.chain)
def test_valid_transaction_chain(blockchain_3b): Blockchain.is_valid_trans_chain(blockchain_3b.chain)
def test_is_valid_transaction_chain_bad_transaction(blockchain_3b): bad_trans = Transaction(Wallet(), 'recipient', 1) bad_trans.input['signature'] = Wallet().sign(bad_trans.output) blockchain_3b.add_block([bad_trans.to_json()]) with pytest.raises(Exception): Blockchain.is_valid_trans_chain(blockchain_3b.chain)
def test_is_valid_transaction_chain_multiple_rewards(blockchain_3b): reward1 = Transaction.reward_transaction(Wallet()).to_json() reward2 = Transaction.reward_transaction(Wallet()).to_json() blockchain_3b.add_block([reward1, reward2]) with pytest.raises(Exception, match='one mining reward per block.'): Blockchain.is_valid_trans_chain(blockchain_3b.chain)