예제 #1
0
def test_for_mining_block():
    last_block = Block.genesis_block_generator()
    data = 'test-data'
    block = Block.mine_the_block(last_block, data)

    assert isinstance(block, Block)
    assert block.data == data
    assert block.last_hash == last_block.hash
    assert convert_hex_to_binary(block.hash)[0:block.difficulty] == '0' * block.difficulty
예제 #2
0
    def chain_is_valid(chain):
        """
        In this block, I validate the incoming chain.
        The whole point, it to ednforce the following rules of the blockchain:
          - the chain starts with the genesis block
          - blocks must be formatted correctly
        """
        if chain[0] != Block.genesis_block_generator():
            raise Exception('The Genesis Block Must Be Valid')

        for i in range(1, len(chain)):
            block = chain[i]
            last_block = chain[i-1]
            Block.block_is_valid(last_block, block)      

        Blockchain.transaction_chain_is_valid(chain)
예제 #3
0
def last_block():
    return Block.genesis_block_generator()
예제 #4
0
def test_for_slowly_mined_blocks():
    last_block = Block.mine_the_block(Block.genesis_block_generator(), 'foo')
    time.sleep(MINE_RATE / SECS)
    mined_block = Block.mine_the_block(last_block, 'bar')

    assert mined_block.difficulty == last_block.difficulty - 1
예제 #5
0
def test_for_quickly_mined_blocks():
    last_block = Block.mine_the_block(Block.genesis_block_generator(), 'foo')
    mined_block = Block.mine_the_block(last_block, 'bar')

    assert mined_block.difficulty == last_block.difficulty + 1
예제 #6
0
def test_for_genesis_generation():
    genesis = Block.genesis_block_generator()

    assert isinstance(genesis, Block)
    for key, value in THE_GENESIS_BLOCK_DATA.items():
        getattr(genesis, key) == value
예제 #7
0
 def __init__(self):
     self.chain = [Block.genesis_block_generator()]