From a05d81fa81eaa2d4b70cdce32d4caafef5c6f991 Mon Sep 17 00:00:00 2001
From: holgern <holgernahrstaedt@gmx.de>
Date: Wed, 10 Jul 2019 18:23:55 +0200
Subject: [PATCH] * Fix bug for get_estimated_block_num when a block is missing

---
 CHANGELOG.rst      |  9 +++++++++
 beem/blockchain.py | 18 ++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index f904db0c..86992935 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,5 +1,14 @@
 Changelog
 =========
+0.20.22
+-------
+* Fix #195 - comment.downvote(100) will now downvote with 100%, negative numbers are not allowed anymore
+* comment.upvote(), negative numbers are not allowed anymore
+* Fix #193 - steem.vote() was added, so that voting is possible without tags_api
+* PR #181 - improve permlink derivation by crokkon
+* PR #192 - fixes compatibility issues with WhaleShares HF2 / v2.5 by alexpmorris
+* Fix bug for get_estimated_block_num when a block is skipped
+
 0.20.21
 -------
 * Fix float entered in Amount will be reduced by 0.001 due to rounding issues
diff --git a/beem/blockchain.py b/beem/blockchain.py
index 0d367317..86722204 100644
--- a/beem/blockchain.py
+++ b/beem/blockchain.py
@@ -310,6 +310,16 @@ class Blockchain(object):
 
             .. note:: The block number returned depends on the ``mode`` used
                       when instantiating from this class.
+
+            .. code-block:: python
+        
+                >>> from beem.blockchain import Blockchain
+                >>> from datetime import datetime
+                >>> blockchain = Blockchain()
+                >>> block_num = blockchain.get_estimated_block_num(datetime(2019, 6, 18, 5 ,8, 27))
+                >>> block_num == 33898184
+                True
+
         """
         last_block = self.get_current_block()
         date = addTzInfo(date)
@@ -328,9 +338,17 @@ class Blockchain(object):
             if block_number > last_block.identifier:
                 block_number = last_block.identifier
             block_time_diff = timedelta(seconds=10)
+            
+            last_block_time_diff_seconds = 10
+            second_last_block_time_diff_seconds = 10
+            
             while block_time_diff.total_seconds() > self.block_interval or block_time_diff.total_seconds() < -self.block_interval:
                 block = Block(block_number, steem_instance=self.steem)
+                second_last_block_time_diff_seconds = last_block_time_diff_seconds
+                last_block_time_diff_seconds = block_time_diff.total_seconds()
                 block_time_diff = date - block.time()
+                if second_last_block_time_diff_seconds == block_time_diff.total_seconds() and second_last_block_time_diff_seconds < 10:
+                    return int(block_number)
                 delta = block_time_diff.total_seconds() // self.block_interval
                 if delta == 0 and block_time_diff.total_seconds() < 0:
                     delta = -1
-- 
GitLab