diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index a1d55408a95248864a66fb17f1868afe42a445a3..9da959a32d81154953b628df6764d01b32e5f599 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 174754d034fdabd2872d8bb0900b4c82e731db5c..dc7dc2a8f3d3b7ce55f13604026100b3876635f9 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)