diff --git a/requirements.txt b/requirements.txt index 5e01047aa27a4aa3f33cce543b54db038ecd0f03..b505e855db14f07055342414a65d523cced5bba0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ git+https://github.com/Insoleet/quamash.git@master asynctest networkx -attrs +attrs<=17.2 duniter-mirage duniterpy>=0.40 pytest diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index c724af32e59d1c6ba4ae7a89a9cbee734ecf6696..24211187e5640b6fd7aae965a326ec4c9267855e 100644 --- a/src/sakia/data/processors/blockchain.py +++ b/src/sakia/data/processors/blockchain.py @@ -294,30 +294,34 @@ class BlockchainProcessor: dt_reeval_block_target = max(blockchain.current_buid.number - int(last_reeval_offset / blockchain.parameters.avg_gen_time), 0) - last_ud_reeval_block_number = [b for b in blocks_with_ud if b <= dt_reeval_block_target][-1] - - block_with_ud = await self._bma_connector.get(currency, bma.blockchain.block, - req_args={'number': last_ud_reeval_block_number}) - if block_with_ud: - blockchain.last_members_count = block_with_ud['membersCount'] - blockchain.last_ud = block_with_ud['dividend'] - blockchain.last_ud_base = block_with_ud['unitbase'] - blockchain.last_ud_time = block_with_ud['medianTime'] - 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) - previous_ud_reeval_block_number = [b for b in blocks_with_ud if b <= dt_reeval_block_target][-1] - - block_with_ud = await self._bma_connector.get(currency, bma.blockchain.block, - req_args={'number': previous_ud_reeval_block_number}) - blockchain.previous_mass = block_with_ud['monetaryMass'] - blockchain.previous_members_count = block_with_ud['membersCount'] - blockchain.previous_ud = block_with_ud['dividend'] - blockchain.previous_ud_base = block_with_ud['unitbase'] - blockchain.previous_ud_time = block_with_ud['medianTime'] + try: + last_ud_reeval_block_number = [b for b in blocks_with_ud if b <= dt_reeval_block_target][-1] + except IndexError: + last_ud_reeval_block_number = 0 + + if last_ud_reeval_block_number: + block_with_ud = await self._bma_connector.get(currency, bma.blockchain.block, + req_args={'number': last_ud_reeval_block_number}) + if block_with_ud: + blockchain.last_members_count = block_with_ud['membersCount'] + blockchain.last_ud = block_with_ud['dividend'] + blockchain.last_ud_base = block_with_ud['unitbase'] + blockchain.last_ud_time = block_with_ud['medianTime'] + 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) + previous_ud_reeval_block_number = [b for b in blocks_with_ud if b <= dt_reeval_block_target][-1] + + block_with_ud = await self._bma_connector.get(currency, bma.blockchain.block, + req_args={'number': previous_ud_reeval_block_number}) + blockchain.previous_mass = block_with_ud['monetaryMass'] + blockchain.previous_members_count = block_with_ud['membersCount'] + blockchain.previous_ud = block_with_ud['dividend'] + blockchain.previous_ud_base = block_with_ud['unitbase'] + blockchain.previous_ud_time = block_with_ud['medianTime'] except errors.DuniterError as e: if e.ucode != errors.NO_CURRENT_BLOCK: raise