Example #1
0
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)