diff --git a/src/sakia/data/entities/blockchain.py b/src/sakia/data/entities/blockchain.py index e6af029cb49e7ba422b03e834f6e322d497ef8ea..7d5b3418ec8602bd82cb231728833a6b49197fa9 100644 --- a/src/sakia/data/entities/blockchain.py +++ b/src/sakia/data/entities/blockchain.py @@ -14,12 +14,16 @@ class BlockchainParameters: sig_period = attr.ib(convert=int, default=0, cmp=False, hash=False) # Maximum quantity of active certifications made by member sig_stock = attr.ib(convert=int, default=0, cmp=False, hash=False) - # Maximum delay in seconds a certification can wait before being expired for non-writing - sig_window = attr.ib(convert=int, default=0, cmp=False, hash=False) # Maximum age of a active signature (in seconds) sig_validity = attr.ib(convert=int, default=0, cmp=False, hash=False) # Minimum quantity of signatures to be part of the WoT sig_qty = attr.ib(convert=int, default=0, cmp=False, hash=False) + # Maximum delay in seconds a certification can wait before being expired for non-writing + sig_window = attr.ib(convert=int, default=0, cmp=False, hash=False) + # Maximum delay in seconds an identity can wait before being expired for non-writing + idty_window = attr.ib(convert=int, default=0, cmp=False, hash=False) + # Maximum delay in seconds a membership can wait before being expired for non-writing + ms_window = attr.ib(convert=int, default=0, cmp=False, hash=False) # Minimum decimal percent of sentries to reach to match the distance rule xpercent = attr.ib(convert=float, default=0, cmp=False, hash=False) # Maximum age of an active membership( in seconds) diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index 569ae051e31ef7f2b41f908350c5beff732d63d8..b2e4dcfe1feca585a6277e8420305d7eb10f758c 100644 --- a/src/sakia/data/processors/blockchain.py +++ b/src/sakia/data/processors/blockchain.py @@ -1,6 +1,6 @@ import attr import re -from ..entities import Blockchain +from ..entities import Blockchain, BlockchainParameters from .nodes import NodesProcessor from ..connectors import BmaConnector from duniterpy.api import bma, errors @@ -175,6 +175,32 @@ class BlockchainProcessor: blockchain = self._repo.get_one(currency=currency) if not blockchain: blockchain = Blockchain(currency=currency) + blockchain_parameters = BlockchainParameters() + log_stream("Requesting blockchain parameters") + try: + parameters = await self._bma_connector.get(currency, bma.blockchain.Parameters) + blockchain.parameters.ms_validity = parameters['msValidity'] + blockchain.parameters.avg_gen_time = parameters['avgGenTime'] + blockchain.parameters.blocks_rot = parameters['blocksRot'] + blockchain.parameters.c = parameters['c'] + blockchain.parameters.dt = parameters['dt'] + blockchain.parameters.dt_diff_eval = parameters['dtDiffEval'] + blockchain.parameters.median_time_blocks = parameters['medianTimeBlocks'] + blockchain.parameters.percent_rot = parameters['percentRot'] + blockchain.parameters.idty_window = parameters['idtyWindow'] + blockchain.parameters.ms_window = parameters['msWindow'] + blockchain.parameters.sig_window = parameters['sigWindow'] + blockchain.parameters.sig_period = parameters['sigPeriod'] + blockchain.parameters.sig_qty = parameters['sigQty'] + blockchain.parameters.sig_stock = parameters['sigStock'] + blockchain.parameters.sig_validity = parameters['sigValidity'] + blockchain.parameters.sig_qty = parameters['sigQty'] + blockchain.parameters.sig_period = parameters['sigPeriod'] + blockchain.parameters.ud0 = parameters['ud0'] + blockchain.parameters.xpercent = parameters['xpercent'] + except errors.DuniterError as e: + raise + log_stream("Requesting current block") try: current_block = await self._bma_connector.get(currency, bma.blockchain.Current) diff --git a/src/sakia/data/repositories/blockchains.py b/src/sakia/data/repositories/blockchains.py index e61b905ed527e752809c1b5ee424b092b551037b..d0c9a8dfe161f702563686eaef047c1692d7ab6e 100644 --- a/src/sakia/data/repositories/blockchains.py +++ b/src/sakia/data/repositories/blockchains.py @@ -68,7 +68,7 @@ class BlockchainsRepo: c = self._conn.execute(request, tuple(values)) data = c.fetchone() if data: - return Blockchain(BlockchainParameters(*data[:15]), *data[16:]) + return Blockchain(BlockchainParameters(*data[:17]), *data[18:]) def get_all(self, offset=0, limit=1000, sort_by="currency", sort_order="ASC", **search) -> List[Blockchain]: """ @@ -110,7 +110,7 @@ class BlockchainsRepo: c = self._conn.execute(request) datas = c.fetchall() if datas: - return [Blockchain(BlockchainParameters(*data[:15]), *data[16:]) for data in datas] + return [Blockchain(BlockchainParameters(*data[:17]), *data[18:]) for data in datas] return [] def drop(self, blockchain): diff --git a/src/sakia/data/repositories/meta.sql b/src/sakia/data/repositories/meta.sql index 610cc552bccadf7045ef14a00db601aa6df63307..0a99b1a43bdfef1b9c5b73236e1093285d560e7c 100644 --- a/src/sakia/data/repositories/meta.sql +++ b/src/sakia/data/repositories/meta.sql @@ -24,6 +24,8 @@ CREATE TABLE IF NOT EXISTS blockchains ( sig_period INT, sig_stock INT, sig_window INT, + idty_window INT, + ms_window INT, sig_validity INT, sig_qty INT, xpercent FLOAT(1, 6),