def main(): target_interval_sec = 5 diff_calc = diff.MADifficultyCalculator( ma_samples=32, target_interval_sec=target_interval_sec) hash_power = 100 cTime = 0.0 chain = [Block(0, 0.002)] usedTimeList = [] p = proof_of_work.PoW(hash_power) for i in range(1000): required_diff = diff_calc.calculate_diff(chain) cTime = cTime + p.mine(required_diff) block = Block(cTime, required_diff) used_time = block.n_time - chain[-1].n_time chain.append(block) usedTimeList.append(used_time) print("Time %.2f, block %d, requiredWork %.2f, used_time %.2f" % (block.n_time, i + 1, 1 / block.required_diff, used_time)) print("Max: %.2f, min: %.2f, avg: %.2f, std: %.2f" % ( max(usedTimeList), min(usedTimeList), stat.mean(usedTimeList), stat.stdev(usedTimeList), ))
def __init__(self, shard_size, hash): self.shard_size = shard_size self.genesis_block = create_genesis_major_block(shard_size, hash) self.block_map = {hash: self.genesis_block} self.best_chain = [self.genesis_block] self.diff_calc = diff.MADifficultyCalculator( ma_samples=144, bootstrap_samples=64, slide_size=1, target_interval_sec=MAJOR_BLOCK_RATE_SEC, ) self.pending_minor_block_map = {}
def __init__(self, shard_size, shard_id, hash): self.shard_size = shard_size self.shard_id = shard_id self.genesis_block = create_genesis_minor_block( shard_size, shard_id, hash) # Map from block hash to block self.block_map = {hash: self.genesis_block} self.best_chain = [self.genesis_block] self.diff_calc = diff.MADifficultyCalculator( ma_samples=1440, bootstrap_samples=64, slide_size=1, target_interval_sec=MINOR_BLOCK_RATE_SEC, )
def test_two_sample(self): chain = [Block(0, 0.1), Block(4.0, 0.1), Block(10, 0.08)] diff_calc = diff.MADifficultyCalculator(ma_samples=2, target_interval_sec=5.0) self.assertEqual(diff_calc.calculate_diff(chain), 1 / 11.25)
def test_none_sample(self): chain = [Block(0, 0.1)] diff_calc = diff.MADifficultyCalculator(ma_samples=2, target_interval_sec=5.0) self.assertEqual(diff_calc.calculate_diff(chain), 0.1)