From 4b4fa1ab594f3967c79d185ec65d6d0314789be3 Mon Sep 17 00:00:00 2001 From: vtexier <vit@free.fr> Date: Tue, 18 Feb 2020 20:44:21 +0100 Subject: [PATCH] [fix] fix last UD block value and improve previous reevaluation UD block capture Last UD value is now accurate, taking last UD block. Previous reevaluation block number is not accurate todo: improve previous reevaluation block detection or wait for a futur API feature. --- src/sakia/data/processors/blockchain.py | 38 ++++++++++++------------- src/sakia/services/network.py | 4 ++- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index a1d55408..9da959a3 100644 --- a/src/sakia/data/processors/blockchain.py +++ b/src/sakia/data/processors/blockchain.py @@ -327,31 +327,37 @@ class BlockchainProcessor: (blockchain.median_time - blockchain.parameters.ud_reeval_time_0) / blockchain.parameters.dt_reeval ) + self._logger.debug("nb_previous_reevaluations = {}".format(nb_previous_reevaluations)) last_reeval_offset = blockchain.median_time - ( blockchain.parameters.ud_reeval_time_0 + nb_previous_reevaluations * blockchain.parameters.dt_reeval ) + self._logger.debug("last_reeval_offset = {}".format(last_reeval_offset)) + + # todo: improve this method or use a future API method returning reevaluation block numbers... + previous_dt_reeval_block_index = int(((nb_previous_reevaluations-1) * + (blockchain.parameters.dt_reeval/blockchain.parameters.dt)) + + (blockchain.parameters.dt_reeval/2/blockchain.parameters.dt)) + + self._logger.debug(" previous previous_dt_reeval_block_index = {}".format(previous_dt_reeval_block_index)) - dt_reeval_block_target = max( - blockchain.current_buid.number - - int(last_reeval_offset / blockchain.parameters.avg_gen_time), - 0, - ) try: - last_ud_reeval_block_number = [ - b for b in blocks_with_ud if b <= dt_reeval_block_target - ][-1] + last_ud_reeval_block_number = blocks_with_ud[-1] except IndexError: last_ud_reeval_block_number = 0 + self._logger.debug("last_ud_reeval_block_number = {}".format(last_ud_reeval_block_number)) + if last_ud_reeval_block_number: + self._logger.debug("Requesting last block with dividend reevaluation...") block_with_ud = await self._bma_connector.get( currency, bma.blockchain.block, req_args={"number": last_ud_reeval_block_number}, ) if block_with_ud: + self._logger.debug("Refresh last UD reevaluation info in DB") blockchain.last_members_count = block_with_ud["membersCount"] blockchain.last_ud = block_with_ud["dividend"] blockchain.last_ud_base = block_with_ud["unitbase"] @@ -359,22 +365,16 @@ class BlockchainProcessor: blockchain.last_mass = block_with_ud["monetaryMass"] self._logger.debug("Requesting previous block with dividend") - dt_reeval_block_target = max( - dt_reeval_block_target - - int( - blockchain.parameters.dt_reeval - / blockchain.parameters.avg_gen_time - ), - 0, - ) try: - previous_ud_reeval_block_number = [ - b for b in blocks_with_ud if b <= dt_reeval_block_target - ][-1] + previous_ud_reeval_block_number = blocks_with_ud[previous_dt_reeval_block_index] except IndexError: previous_ud_reeval_block_number = min(blocks_with_ud) + self._logger.debug("previous_ud_reeval_block_number = {}".format(previous_ud_reeval_block_number)) + + self._logger.debug("Refresh previous UD reevaluation info in DB") + block_with_ud = await self._bma_connector.get( currency, bma.blockchain.block, diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py index 174754d0..dc7dc2a8 100644 --- a/src/sakia/services/network.py +++ b/src/sakia/services/network.py @@ -335,13 +335,15 @@ class NetworkService(QObject): self.node_changed.emit(node) self._ws2p_heads_refreshing = False - + # capture current block UID of trusted nodes current_buid = self._processor.current_buid(self.currency) self._logger.debug( "{0} -> {1}".format( self._block_found.sha_hash[:10], current_buid.sha_hash[:10] ) ) + + # if hash of last block in DB <> hash of current block in trusted nodes... if self._block_found.sha_hash != current_buid.sha_hash: self._logger.debug("Latest block changed : {0}".format(current_buid.number)) self.latest_block_changed.emit(current_buid) -- GitLab