def test_transaction_chain_when_duplicate_rewards(clone_blockchain): reward_1 = Transaction.generate_reward_transaction( Wallet()).serialize_to_json() reward_2 = Transaction.generate_reward_transaction( Wallet()).serialize_to_json() clone_blockchain.add_block([reward_1, reward_2]) with pytest.raises(Exception, match="There can only be one mining reward per block."): Blockchain.is_tx_chain_valid(clone_blockchain.chain)
def test_block_reward_tx_when_invalid_reward_amt(): wallet = Wallet() reward_tx = Transaction.generate_reward_transaction(wallet) reward_tx.output[wallet.address] = 100000 with pytest.raises(Exception, match="Invalid block reward transaction."): Transaction.is_tx_valid(reward_tx)
def mine_block_route(): """ Mine blocks on the shared chain. If given wallet is first to validate a given block, `prospective_mining_reward` will be allocated into given wallet UTXO. Else, the reward transaction will be void. """ # serialize all Tx tx_data = transaction_pool.serialize_to_json() # generate, serialize mining reward transaction obj prospective_mining_reward = Transaction.generate_reward_transaction(wallet).serialize_to_json() # append reward Tx and submit tx_data.append(prospective_mining_reward) blockchain.add_block(tx_data) block = blockchain.chain[-1] pubsub.broadcast_block(block) transaction_pool.purge(blockchain) return jsonify(block.serialize_to_json())
def test_block_reward_tx_when_valid_tx(): reward_tx = Transaction.generate_reward_transaction(Wallet()) Transaction.is_tx_valid(reward_tx)
def test_block_reward_tx(): wallet = Wallet() transaction = Transaction.generate_reward_transaction(wallet) assert transaction.input == MINING_REWARD_INPUT assert transaction.output[wallet.address] == MINING_REWARD
def test_block_reward_tx_when_exceeds_recipients(): reward_tx = Transaction.generate_reward_transaction(Wallet()) reward_tx.output["second_and_invalid_recipient"] = 100 with pytest.raises(Exception, match="Invalid block reward transaction."): Transaction.is_tx_valid(reward_tx)