def test_is_valid_block(last_block, block): # last_block = Block.genesis() # block = Block.mine_block(last_block, 'test-data') Block.is_valid_block(last_block, block)
def test_is_valid_block(last_block, block): Block.is_valid_block(last_block, block)
def test_is_valid_block_bad_proof_of_work(last_block, block): block.hash = 'fff' with pytest.raises(Exception, match='proof of work requirement was not met'): Block.is_valid_block(last_block, block)
def test_is_valid_block_bad_block_hash(last_block, block): block.hash = '00000000000000000acabb' with pytest.raises(Exception, match='The block hash must be correct'): Block.is_valid_block(last_block, block)
def last_block(): return Block.genesis()
def test_slowly_mined_block(): last_block = Block.mine_block(Block.genesis(), 'foo') time.sleep(MINE_RATE / SECONDS) mined_block = Block.mine_block(last_block, 'bar') assert mined_block.difficulty == last_block.difficulty - 1
def test_is_valid_block_bad_last_hash(last_block, block): block.last_hash = 'evil_last_hash' with pytest.raises(Exception, match='last_hash must be correct'): Block.is_valid_block(last_block, block)
def test_quickly_mine_block(): last_block = Block.mine_block(Block.genesis(), 'foo') mined_block = Block.mine_block(last_block, 'z1234') assert last_block.difficulty - mined_block.difficulty == -1
def test_is_valid_block(): last_block = Block.genesis() block = Block.mine_block(last_block, 'foo') Block.is_valid_block(last_block, block)
def block(last_block): return Block.mine_block(last_block, 'Test-data')
def test_slowly_mine_block(): last_block = Block.mine_block(Block.genesis(), 'foo') sleep(MINE_RATE) mined_block = Block.mine_block(last_block, 'z1234') assert last_block.difficulty - mined_block.difficulty == +1
def add_block(self, data): prev_block = self.chain[-1] self.chain.append(Block.mine_block(prev_block, data))
def block(last_block): return Block.mine_block(last_block, "test_data")
def test_quickly_mined_block(): last_block = Block.mine_block(Block.genesis(), "foo") mined_block = Block.mine_block(last_block, "bar") assert mined_block.difficulty == last_block.difficulty + 1
def test_is_valid_block_bad_block_hash(last_block, block): block.hash = '000000000000000bbababababbabbabaab' with pytest.raises(Exception, match="block hash must be correct"): Block.is_valid_block(last_block, block)
def test_is_valid_bad_proof_of_work(last_block, block): block.hash = 'fff' with pytest.raises(Exception, match='The proof of work was not right'): Block.is_valid_block(last_block, block)
def test_genesis(): genesis = Block.genesis() assert isinstance(genesis, Block) for key, value in GENESIS_DATA.items(): getattr(genesis, key) == value
def add_block(self, data): block = Block.mine_block(self.chain[-1], data) self.chain.append(block)
def test_is_valid_block(last_block, block): block = Block.mine_block(last_block, 'test_data') Block.is_valid_block(last_block, block)
def add_block(self, data): last_block = self.chain[-1] self.chain.append(Block.mine_block(last_block, data))
def test_is_valid_block_jumped_difficulty(last_block, block): jumped_difficulty = 10 block.difficulty = jumped_difficulty block.hash = f'{"0" * jumped_difficulty}111abc' with pytest.raises(Exception, match='difficulty must only adjust by 1'): Block.is_valid_block(last_block, block)
def add_block(self, data): self.chain.append(Block.mine_block(self.chain[-1], data))
def test_quickly_mined_block(): last_block = Block.mine_block(Block.genesis(), 'foo') mined_block = Block.mine_block(last_block, 'bar') assert mined_block.difficulty == last_block.difficulty + 1
def block(last_block): return Block.mine_block(last_block, "dummy data")
def block(last_block): return Block.mine_block(last_block, 'test_data')
def test_is_valid_block(last_block, block): # block.last_hash = "We're hacking you" # What would be the case if they tried to inject a branch or block. False hashes Block.is_valid_block(last_block, block)
def test_is_valid_block_bad_last_hash(last_block, block): block.last_hash = 'changing the last_block.hash' # assert last_block.hash == block.last_hash with pytest.raises(Exception, match='last_hash must be correct'): Block.is_valid_block(last_block, block)
def test_is_valid_block_bad_last_hash(last_block, block): block.last_hash = "Evil last hash" with pytest.raises(Exception, match="last_hash must be correct"): Block.is_valid_block(last_block, block)
def __init__(self): self.chain = [Block.genesis()]
def add_block(self, data): # instantiate block at the top of blockchain method self.chain.append(Block.mine_block(self.chain[-1], data))