def test_calculate_balance(): blockchain = Blockchain() wallet = Wallet() assert Wallet.calculate_balance(blockchain, wallet.address) == STARTING_BALANCE amount = 50 transaction = Transaction(wallet, 'reciepient', amount) blockchain.add_block([transaction.to_json()]) assert Wallet.calculate_balance( blockchain, wallet.address) == STARTING_BALANCE - amount recieved_amount_1 = 25 recieved_transaction_1 = Transaction(Wallet(), wallet.address, recieved_amount_1) recieved_amount_2 = 43 recieved_transaction_2 = Transaction(Wallet(), wallet.address, recieved_amount_2) blockchain.add_block( [recieved_transaction_1.to_json(), recieved_transaction_2.to_json()]) assert Wallet.calculate_balance( blockchain, wallet.address ) == STARTING_BALANCE - amount + recieved_amount_1 + recieved_amount_2
def is_valid_transaction_chain_bad_transaction(blockchain_three_blocks): bad_transaction = Transaction(Wallet(), 'recipient', 1) bad_transaction.input['signature'] = Wallet().sign(bad_transaction.output) blockchain_three_blocks.add_block([bad_transaction.to_json()]) with pytest.raises(Exception): Blockchain.is_valid_transaction_chain(blockchain_three_blocks.chain)
def test_clear_blockchain_transaction(): transaction_pool = TransactionPool() transaction_1 = Transaction(Wallet(), 'reciepient', 1) transaction_2 = Transaction(Wallet(), 'reciepient', 2) transaction_pool.set_transaction(transaction_1) transaction_pool.set_transaction(transaction_2) blockchain = Blockchain() blockchain.add_block([transaction_1.to_json(), transaction_2.to_json()]) assert transaction_1.id in transaction_pool.transaction_map assert transaction_2.id in transaction_pool.transaction_map transaction_pool.clear_blockchain_transactions(blockchain) assert not transaction_1.id in transaction_pool.transaction_map assert not transaction_2.id in transaction_pool.transaction_map
def test_is_valid_transaction_chain_bad_historic_balance(blockchain_three_blocks): wallet = Wallet() bad_transaction = Transaction(wallet, 'recipient', 1) bad_transaction.output[wallet.address] = 9000 bad_transaction.input['amount'] = 9001 bad_transaction.input['signature'] = wallet.sign(bad_transaction.output) blockchain_three_blocks.add_block([bad_transaction.to_json()]) with pytest.raises(Exception, match='has invalid input amount'): Blockchain.is_valid_transaction_chain(blockchain_three_blocks.chain)
def route_wallet_transact(): transaction_data = request.get_json() transaction = transaction_pool.existing_transaction(wallet.address) if transaction: transaction.update(wallet, transaction_data['reciepient'], transaction_data['amount']) else: transaction = Transaction(wallet, transaction_data['reciepient'], transaction_data['amount']) pubsub.broadcast_transaction(transaction) return jsonify(transaction.to_json())