def test_wait_for_and_get_block(self): bts = self.bts b = Blockchain(steem_instance=bts, max_block_wait_repetition=18) start_num = b.get_current_block_num() blocknum = start_num last_fetched_block_num = None for i in range(3): block = b.wait_for_and_get_block(blocknum) last_fetched_block_num = block.block_num blocknum = last_fetched_block_num + 1 self.assertEqual(last_fetched_block_num, start_num + 2) b2 = Blockchain(steem_instance=bts, max_block_wait_repetition=1) with self.assertRaises(BlockWaitTimeExceeded): for i in range(300): block = b2.wait_for_and_get_block(blocknum) last_fetched_block_num = block.block_num blocknum = last_fetched_block_num + 2
def test_wait_for_and_get_block(self, node_param): if node_param == "non_appbase": bts = self.bts else: bts = self.appbase b = Blockchain(steem_instance=bts, max_block_wait_repetition=6) start_num = b.get_current_block_num() blocknum = start_num last_fetched_block_num = None for i in range(3): block = b.wait_for_and_get_block(blocknum) last_fetched_block_num = block.block_num blocknum = last_fetched_block_num + 2 self.assertEqual(last_fetched_block_num, start_num + 4)
def find_block_num_by_timestamp(blockchain: Blockchain, low_block_num, high_block_num, key_timestamp): low = low_block_num high = high_block_num while high >= low: mid = low + (high - low) // 2 mid_block = blockchain.wait_for_and_get_block(mid) is_equal_timestamp = (mid_block["timestamp"] - timedelta(seconds=5) <= key_timestamp <= mid_block["timestamp"] + timedelta(seconds=5)) if is_equal_timestamp: return mid elif mid_block["timestamp"] < key_timestamp: low = mid + 1 else: high = mid - 1 return None