示例#1
0
def test_transaction_chain(clone_blockchain):
    Blockchain.is_tx_chain_valid(clone_blockchain.chain)
示例#2
0
def test_valid_transaction_chain(blockchain_three_blocks):

    Blockchain.is_valid_transaction_chain(blockchain_three_blocks.chain)
示例#3
0
def test_blockchain_instance():
    blockchain = Blockchain()
    assert blockchain.chain[0].hash == GENESIS_DATA['hash']
示例#4
0
def test_is_valid_chain_bad_genesis(blockchain_three_blocks):
    blockchain_three_blocks.chain[0].hash = 'evil_hash'
    with pytest.raises(Exception, match='genesis block must be valid'):
        Blockchain.is_valid_chain(blockchain_three_blocks.chain)
示例#5
0
def test_replace_chain_not_longer(blockchain_three_blocks):
    blockchain = Blockchain()
    with pytest.raises(Exception, match='The incoming chain must be longer'):
        blockchain_three_blocks.replace_chain(blockchain.chain)
def test_replace_chain_bad_chain(blockchain):
    old_blockchain = Blockchain()
    blockchain.chain[1].data = 'evil_hash'

    with raises(Exception, match='Invalid incoming chain'):
        old_blockchain.replace_chain(blockchain.chain)
示例#7
0
def blockchain_three_blocks():
    blockchain = Blockchain()

    for i in range(3):
        blockchain.add_block([Transaction(Wallet(), 'recipient', i).to_json()])
    return blockchain
示例#8
0
def test_is_valid_chain(blockchain_with_blocks):
    Blockchain.is_valid_chain(blockchain_with_blocks.chain)
示例#9
0
def test_is_valid_chain_invalid_genesis(blockchain_with_blocks):
    blockchain_with_blocks.chain[0].hash = 3000
    with pytest.raises(Exception, match="genesis block is invalid"):
        Blockchain.is_valid_chain(blockchain_with_blocks.chain)
示例#10
0
def test_add_block():
    blockchain = Blockchain()
    data = "test data"
    blockchain.add_block(data)
    assert blockchain.chain[-1].data == data
示例#11
0
def blockchain_with_blocks():
    blockchain = Blockchain()
    for i in range(5):
        blockchain.add_block(f"block #{i}")
    return blockchain
def test_wallet_starting_balance():
	wallet = Wallet()
	blockchain = Blockchain()
	assert Wallet.calculate_balance(blockchain, wallet.address) == STARTING_BALANCE
示例#13
0
import os
import requests
import random

from flask import Flask, jsonify

from backend.blockchain.blockchain import Blockchain
from backend.pubsub import PubSub

app = Flask(__name__)
blockchain = Blockchain()
pubsub = PubSub(blockchain)


@app.route('/')
def route_default():
    return 'Welcome to the blockchain'

@app.route('/blockchain')
def route_blockchain():
    return jsonify(blockchain.to_json())

@app.route('/blockchain/mine')
def route_blockchain_mine():
    transaction_data = 'stubbed_transcation_data'

    blockchain.add_block(transaction_data)

    block = blockchain.chain[-1]
    pubsub.broadcast_block(block)
    return jsonify(block.to_json())
示例#14
0
def test_transaction_chain_when_duplicate_tx(clone_blockchain):
    tx_instance = Transaction(Wallet(), "b13b2bf4", 1).serialize_to_json()
    clone_blockchain.add_block([tx_instance, tx_instance])

    with pytest.raises(Exception, match="is not unique;"):
        Blockchain.is_tx_chain_valid(clone_blockchain.chain)
def test_replace_chain(blockchain):
    old_blockchain = Blockchain()
    old_blockchain.replace_chain(blockchain.chain)

    assert old_blockchain.chain == blockchain.chain
示例#16
0
def test_blockchain():
    blockchain = Blockchain()
    assert blockchain.chain[0].hash == GENESIS_DATA["hash"]
def test_replace_chain_too_short(blockchain):
    old_blockchain = Blockchain()

    with raises(Exception, match='Incoming chain must be longer'):
        blockchain.replace_chain(old_blockchain.chain)
示例#18
0
def test_replace_chain_invalid_chain(blockchain_with_blocks):
    blockchain = Blockchain()
    blockchain_with_blocks.chain[2].hash = "tampered_hash"

    with pytest.raises(Exception, match="chain is not valid"):
        blockchain.replace_chain(blockchain_with_blocks.chain)
示例#19
0
def test_add_block():
    blockchain = Blockchain()
    data = 'test-data'
    blockchain.add_block(data)
    assert blockchain.chain[-1].data == data
示例#20
0
import os
import requests
import random

from flask import Flask, jsonify, request
from flask_cors import CORS

from backend.blockchain.blockchain import Blockchain
from backend.wallet.transaction import Transaction
from backend.wallet.transaction_pool import TransactionPool
from backend.wallet.wallet import Wallet
from backend.pubsub import PubSub

app = Flask(__name__)
CORS(app, resources={r'/*': {'origins': 'http://*****:*****@app.route('/')
def route_default():
    return 'Welcome to the blockchain'


@app.route('/blockchain')
def route_blockchain():
    return jsonify(blockchain.to_json())

示例#21
0
def test_is_valid_chain(blockchain_three_blocks):

    Blockchain.is_valid_chain(blockchain_three_blocks.chain)
示例#22
0
def blockchain_three_blocks():
    blockchain = Blockchain()
    for i in range(3):
        blockchain.add_block(i)
    return blockchain
示例#23
0
def test_replace_chain(blockchain_three_blocks):
    blockchain = Blockchain()
    blockchain.replace_chain(blockchain_three_blocks.chain)
    assert blockchain.chain == blockchain_three_blocks.chain
示例#24
0
import time

from backend.blockchain.blockchain import Blockchain
from backend.config import TIME_S

blockchain = Blockchain()
times = []

for i in range(1000):
    start_time = time.time_ns() / TIME_S
    blockchain.add_block(i)
    end_time = time.time_ns() / TIME_S

    mine_time = end_time - start_time

    times.append(mine_time)
    average_time = sum(times) / len(times)

    print(f"Block No: {i}")
    print(f"last_block_difficulty: {blockchain.chain[-1].difficulty}")
    print(f"last_block_nonce: {blockchain.chain[-1].nonce}")
    print(f"last_block_hash: {blockchain.chain[-1].hash}")
    print(f"Time to mine block: {mine_time} seconds")
    print(f"Average_time: {average_time} seconds\n\n")
    
示例#25
0
def test_replace_chain_bad_chain(blockchain_three_blocks):
    blockchain = Blockchain()
    blockchain_three_blocks.chain[1].hash = 'evil-hash'
    with pytest.raises(Exception, match='The incoming chain is invalid'):
        blockchain.replace_chain(blockchain_three_blocks.chain)
def test_is_valid_chain(blockchain):
    Blockchain.is_valid_chain(blockchain.chain)
示例#27
0
def test_is_valid_transaction_chain_duplicate_transactions(
        blockchain_three_blocks):
    transaction = Transaction(Wallet(), 'recipient', 1).to_json()
    blockchain_three_blocks.add_block([transaction, transaction])
    with pytest.raises(Exception, match='is not unique'):
        Blockchain.is_valid_transaction_chain(blockchain_three_blocks.chain)
def test_is_valid_chain_bad_genesis(blockchain):
    blockchain.chain[0].hash = 'evil_hash'

    with raises(Exception, match='Invalid genesis block'):
        Blockchain.is_valid_chain(blockchain.chain)
示例#29
0
def test_is_valid_transaction_chain_multiple_rewards(blockchain_three_blocks):
    reward_1 = Transaction.reward_transaction(Wallet()).to_json()
    reward_2 = Transaction.reward_transaction(Wallet()).to_json()
    blockchain_three_blocks.add_block([reward_1, reward_2])
    with pytest.raises(Exception, match='one mining reward per block'):
        Blockchain.is_valid_transaction_chain(blockchain_three_blocks.chain)
示例#30
0
def test_surrogate_chain_when_invalid_chain(clone_blockchain):
    blockchain = Blockchain()
    clone_blockchain.chain[1].hash = "invalidate"

    with pytest.raises(Exception, match="Invalid chain."):
        blockchain.surrogate_chain(clone_blockchain.chain)