diff --git a/silkaj/blockchain_tools.py b/silkaj/blockchain_tools.py index c8522ba087bd60d21e339456b1056848124f363e..3c8e1ef8dbe7bde34f4f30ac90894858af8b0410 100644 --- a/silkaj/blockchain_tools.py +++ b/silkaj/blockchain_tools.py @@ -13,25 +13,17 @@ # You should have received a copy of the GNU Affero General Public License # along with Silkaj. If not, see <https://www.gnu.org/licenses/>. +import functools + from duniterpy.api.bma import blockchain from silkaj.network_tools import ClientInstance -class BlockchainParams: - __instance = None - - def __new__(cls): - if BlockchainParams.__instance is None: - BlockchainParams.__instance = object.__new__(cls) - return BlockchainParams.__instance - - def __init__(self): - self.params = self.get_params() - - def get_params(self): - client = ClientInstance().client - return client(blockchain.parameters) +@functools.lru_cache(maxsize=1) +def get_blockchain_parameters(): + client = ClientInstance().client + return client(blockchain.parameters) class HeadBlock: diff --git a/silkaj/cert.py b/silkaj/cert.py index 01ba69c8f8bfb369b77b635c3da4e066109f5ca7..dd05c93cd1fe2d2b1f1991124bed0a11ed0d5277 100644 --- a/silkaj/cert.py +++ b/silkaj/cert.py @@ -24,7 +24,7 @@ from tabulate import tabulate from silkaj import tui, wot from silkaj import wot_tools as wt from silkaj.auth import auth_method -from silkaj.blockchain_tools import BlockchainParams, HeadBlock +from silkaj.blockchain_tools import HeadBlock, get_blockchain_parameters from silkaj.constants import ALL, DATE, SUCCESS_EXIT_STATUS from silkaj.crypto_tools import is_pubkey_and_check from silkaj.license import license_approval @@ -89,11 +89,10 @@ def pre_checks(client, issuer_pubkey, pubkey_to_certify): sys.exit("You can’t certify yourself!") # Check if the certification can be renewed - req = client(bma.wot.requirements, pubkey_to_certify) + params = get_blockchain_parameters() req = req["identities"][0] for cert in req["certifications"]: if cert["from"] == issuer_pubkey: - params = BlockchainParams().params # Ğ1: 0<–>2y - 2y + 2m # ĞT: 0<–>4.8m - 4.8m + 12.5d renewable = cert["expiresIn"] - params["sigValidity"] + params["sigReplay"] @@ -128,7 +127,7 @@ def certification_confirmation( tui.display_pubkey_and_checksum(pubkey_to_certify), ] ) - params = BlockchainParams().params + params = get_blockchain_parameters() cert_begins = now().format(DATE) cert_ends = now().add(seconds=params["sigValidity"]).format(DATE) cert.append(["Valid", cert_begins, "—>", cert_ends]) diff --git a/silkaj/membership.py b/silkaj/membership.py index f579e4bac504f8b3e9c675b08c00a31ed5309162..b52222bc54069f3080bfb91b2829b05672bee183 100644 --- a/silkaj/membership.py +++ b/silkaj/membership.py @@ -23,7 +23,7 @@ from duniterpy.documents import BlockID, Membership, get_block_id from tabulate import tabulate from silkaj import auth, tui, wot -from silkaj.blockchain_tools import BlockchainParams, HeadBlock +from silkaj.blockchain_tools import HeadBlock, get_blockchain_parameters from silkaj.constants import DATE, SUCCESS_EXIT_STATUS from silkaj.license import license_approval from silkaj.network_tools import ClientInstance, send_document @@ -126,7 +126,7 @@ def display_confirmation_table(identity_uid, pubkey, identity_block_id): date_idty_pub = pendulum.from_timestamp(block["time"], tz="local").format(DATE) table.append(["Identity published", date_idty_pub]) - params = BlockchainParams().params + params = get_blockchain_parameters() membership_validity = ( pendulum.now().add(seconds=params["msValidity"]).diff_for_humans() ) diff --git a/silkaj/tools.py b/silkaj/tools.py index 94e001ebfc3c0bc2105a066ee8ee148010342fb4..7c59b6a9b2f207a5d5fa8b1b5843766c70cd70f1 100644 --- a/silkaj/tools.py +++ b/silkaj/tools.py @@ -15,7 +15,7 @@ from sys import exit -from silkaj.blockchain_tools import BlockchainParams +from silkaj.blockchain_tools import get_blockchain_parameters from silkaj.constants import FAILURE_EXIT_STATUS, G1_SYMBOL, GTEST_SYMBOL @@ -31,7 +31,7 @@ class CurrencySymbol: self.symbol = self.get_symbol() def get_symbol(self): - params = BlockchainParams().params + params = get_blockchain_parameters() if params["currency"] == "g1": return G1_SYMBOL elif params["currency"] == "g1-test": diff --git a/silkaj/wot.py b/silkaj/wot.py index 2268e1459d195b2867e6de5637ed914e253b78ac..92377b42e35640100f9a21632fae49a6a7deb6b1 100644 --- a/silkaj/wot.py +++ b/silkaj/wot.py @@ -23,7 +23,7 @@ from pendulum import from_timestamp, now from tabulate import tabulate from silkaj import wot_tools as wt -from silkaj.blockchain_tools import BlockchainParams +from silkaj.blockchain_tools import get_blockchain_parameters from silkaj.constants import DATE from silkaj.crypto_tools import is_pubkey_and_check from silkaj.network_tools import ClientInstance, exit_on_http_error @@ -66,7 +66,7 @@ def received_sent_certifications(uid_pubkey): identity, pubkey, signed = choose_identity(uid_pubkey) certifications = OrderedDict() - params = BlockchainParams().params + params = get_blockchain_parameters() requirements = client(wot.requirements, pubkey) for req in requirements["identities"]: if req["pubkey"] == pubkey: @@ -107,7 +107,7 @@ def cert_written_in_the_blockchain(written_certs, certifieur): def membership_status(certifications, pubkey, req): - params = BlockchainParams().params + params = get_blockchain_parameters() if len(certifications["received"]) >= params["sigQty"]: date = certifications["received_expire"][ len(certifications["received"]) - params["sigQty"] diff --git a/tests/test_membership.py b/tests/test_membership.py index 1d632ad174fc4866022244f15eef39b9b61956b1..763bf0ad3ce59b7e055501c7708c49160d81a540 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -36,7 +36,7 @@ from patched.wot import ( patched_wot_requirements_one_pending, ) from silkaj import auth, membership, wot -from silkaj.blockchain_tools import BlockchainParams, HeadBlock +from silkaj.blockchain_tools import HeadBlock, get_blockchain_parameters from silkaj.cli import cli from silkaj.constants import DATE, FAILURE_EXIT_STATUS, SUCCESS_EXIT_STATUS from silkaj.network_tools import ClientInstance @@ -171,7 +171,7 @@ def test_display_confirmation_table(patched_wot_requirements, monkeypatch, capsy ["Identity published", date_idty_pub], ) - params = BlockchainParams().params + params = get_blockchain_parameters() membership_validity = ( pendulum.now().add(seconds=params["msValidity"]).diff_for_humans() )