diff --git a/appveyor.yml b/appveyor.yml index def1f44150216195421cac86675e010b587e8859..e92970cf03e289905d3d52696a5cacc3a7c858e1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,6 +52,5 @@ deploy: draft: true prerelease: true on: - branch: master # release from master branch only appveyor_repo_tag: true # deploy on tag push only diff --git a/res/i18n/ts/fr_FR.ts b/res/i18n/ts/fr_FR.ts index fdc99c1349c350f17a4496ceb8e9ba5288e5abd8..9d84768d1726bd90594deebc3effa573e443f931 100644 --- a/res/i18n/ts/fr_FR.ts +++ b/res/i18n/ts/fr_FR.ts @@ -55,37 +55,37 @@ <translation type="obsolete">du {0}</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>Units</source> <translation>Unités</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>UD</source> <translation>DU</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>Quant Z-sum</source> <translation>Quant. som. 0</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>Relat Z-sum</source> <translation>Rel. som. 0</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>UD {0}</source> <translation>DU {0}</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>Q0 {0}</source> <translation>Q0 {0}</translation> </message> <message> - <location filename="../../../src/cutecoin/core/account.py" line="103"/> + <location filename="../../../src/cutecoin/core/account.py" line="90"/> <source>R0 {0}</source> <translation>R0 {0}</translation> </message> @@ -842,7 +842,7 @@ Revoking your UID can only success if it is not already validated by the network <translation></translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source> <table cellpadding="5"> <tr><td align="right"><b>{:}</b></div></td><td>{:} {:}</td></tr> @@ -853,7 +853,7 @@ Revoking your UID can only success if it is not already validated by the network <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> </table> </source> - <translation> + <translation type="obsolete"> <table cellpadding="5"> <tr><td align="right"><b>{:}</b></div></td><td>{:} {:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> @@ -865,42 +865,42 @@ Revoking your UID can only success if it is not already validated by the network </translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Universal Dividend UD(t) in</source> <translation>Dividende Universel DU(t) en</translation> </message> <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> <source>Monetary Mass M(t) in</source> - <translation>Masse Monétaire M(t) en</translation> + <translation type="obsolete">Masse Monétaire M(t) en</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Members N(t)</source> <translation>Membres N(t)</translation> </message> <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> <source>Monetary Mass per member M(t)/N(t) in</source> - <translation>Masse Monétaire par membre M(t)/N(t) en</translation> + <translation type="obsolete">Masse Monétaire par membre M(t)/N(t) en</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="72"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Actual growth c = UD(t)/[M(t-1)/N(t)]</source> - <translation type="obsolete">Croissance actuelle c = DU(t)/[M(t -1)/N(t)]</translation> + <translation>Croissance actuelle c = DU(t)/[M(t -1)/N(t)]</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Next UD date and time (t+1)</source> - <translation>Prochain DU, date et heure (t+1)</translation> + <translation type="unfinished">Date et heure du prochain DU (t+1)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="165"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="191"/> <source>No Universal Dividend created yet.</source> <translation>Pas de dividende universel créé pour le moment.</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source> <table cellpadding="5"> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> @@ -911,12 +911,12 @@ Revoking your UID can only success if it is not already validated by the network <translation></translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source>{:2.0%} / {:} days</source> <translation>{:2.0%} / {:} jours</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source>Fundamental growth (c) / Delta time (dt)</source> <translation>Croissance fondamentale (c) / Delta de temps (dt)</translation> </message> @@ -926,17 +926,17 @@ Revoking your UID can only success if it is not already validated by the network <translation type="obsolete">DU(t+1) = MAX { DU(t) ; c * M(t) / N(t) }</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source>Universal Dividend (formula)</source> <translation>Dividende Universel (formule)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source>Universal Dividend (computed)</source> <translation>Dividende Universel (calculé)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source> <table cellpadding="5"> <tr><td align="right"><b>{:2.0%} / {:} days</b></td><td>{:}</td></tr> @@ -963,47 +963,47 @@ Revoking your UID can only success if it is not already validated by the network </translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>Fundamental growth (c)</source> <translation>Croissance fondamentale (c)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>Initial Universal Dividend UD(0) in</source> <translation>Dividende Universel Initial DU(0) en</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>Time period (dt) in days (86400 seconds) between two UD</source> <translation>Période de temps (dt) en jours (86400 secondes) entre deux DU</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>Number of blocks used for calculating median time</source> <translation>Nombre de blocs utilisés pour calculer le temps median</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>The average time in seconds for writing 1 block (wished time)</source> <translation>Le temps moyen en secondes pour écrire un bloc (temps espéré)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>The number of blocks required to evaluate again PoWMin value</source> <translation>Le nombre de blocs requis pour évaluer une nouvelle valeur de PoWMin</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>The number of previous blocks to check for personalized difficulty</source> <translation>Le nombre de blocs précédents pour vérifier la difficulté personnalisée</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="168"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="194"/> <source>The percent of previous issuers to reach for personalized difficulty</source> <translation>Le pourcentage d'utilisateurs précédents atteignant la difficulté personnalisée</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source> <table cellpadding="5"> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> @@ -1017,44 +1017,44 @@ Revoking your UID can only success if it is not already validated by the network <translation></translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Minimum delay between 2 identical certifications (in days)</source> <translation>Le délai minimum entre 2 certifications identiques (en jours)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Maximum age of a valid signature (in days)</source> <translation>Age maximum d'une signature valide (en jours)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Minimum quantity of signatures to be part of the WoT</source> <translation>Nombre de signatures minimum pour faire partie de la TdC</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Minimum quantity of valid made certifications to be part of the WoT for distance rule</source> <translation>Quantité minimum de certifications valides pour faire partie de la TdC suivant la règle de distance</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Maximum age of a valid membership (in days)</source> <translation>Age maximum d'un statut de membre valide (en jours)</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="203"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="229"/> <source>Maximum distance between each WoT member and a newcomer</source> <translation>Distance maximum entre chaque membre de la TdC et un nouveau venu</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="78"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Monetary Mass M(t-1) in</source> - <translation type="obsolete">Masse Monétaire M(t-1) en</translation> + <translation>Masse Monétaire M(t-1) en</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="78"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> <source>Monetary Mass per member M(t-1)/N(t) in</source> - <translation type="obsolete">Masse Monétaire par membre M(t-1)/N(t) en</translation> + <translation>Masse Monétaire par membre M(t-1)/N(t) en</translation> </message> <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="127"/> @@ -1069,7 +1069,7 @@ Revoking your UID can only success if it is not already validated by the network <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="74"/> <source>Actual growth c = UD(t)/[M(t-1)/N(t-1)]</source> - <translation>Croissance actuelle c = DU(t)/[M(t -1)/N(t-1)]</translation> + <translation type="obsolete">Croissance actuelle c = DU(t)/[M(t -1)/N(t-1)]</translation> </message> <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> @@ -1084,18 +1084,53 @@ Revoking your UID can only success if it is not already validated by the network <message> <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> <source>UD(t+1) = MAX { UD(t) ; c &#215; M(t) / N(t) }</source> - <translation type="unfinished">DU(t+1) = MAX { DU(t) ; c &#215; M(t) / N(t) }</translation> + <translation type="obsolete">DU(t+1) = MAX { DU(t) ; c &#215; M(t) / N(t) }</translation> </message> <message> - <location filename="../../../src/cutecoin/gui/informations_tab.py" line="140"/> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> <source>{:} = MAX {{ {:} {:} ; {:2.0%} &#215; {:} {:} / {:} }}</source> - <translation type="unfinished"></translation> + <translation></translation> + </message> + <message> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="166"/> + <source>UD(t+1) = MAX { UD(t) ; c &#215; M(t) / N(t+1) }</source> + <translation></translation> + </message> + <message> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> + <source> + <table cellpadding="5"> + <tr><td align="right"><b>{:}</b></div></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:2.2%} / {:} days</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + </table> + </source> + <translation> + <table cellpadding="5"> + <tr><td align="right"><b>{:}</b></div></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> + <tr><td align="right"><b>{:2.2%} / {:} jours</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr + </table> + </translation> + </message> + <message> + <location filename="../../../src/cutecoin/gui/informations_tab.py" line="121"/> + <source>Last UD date and time (t)</source> + <translation>Date et heure du dernier DU (t)</translation> </message> </context> <context> <name>MainWindow</name> <message> - <location filename="../../ui/mainwindow.ui" line="148"/> + <location filename="../../ui/mainwindow.ui" line="142"/> <source>Account</source> <translation>Compte</translation> </message> @@ -1110,32 +1145,32 @@ Revoking your UID can only success if it is not already validated by the network <translation type="obsolete">Actions</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="88"/> + <location filename="../../ui/mainwindow.ui" line="87"/> <source>Manage accounts</source> <translation>Gérer les comptes</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="93"/> + <location filename="../../ui/mainwindow.ui" line="92"/> <source>Configure trustable nodes</source> <translation>Configurer les noeuds de confiance</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="118"/> + <location filename="../../ui/mainwindow.ui" line="117"/> <source>Send a message</source> <translation>Envoyer un message</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="123"/> + <location filename="../../ui/mainwindow.ui" line="122"/> <source>Send money</source> <translation>Envoyer de l'argent</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="128"/> + <location filename="../../ui/mainwindow.ui" line="127"/> <source>Remove contact</source> <translation>Supprimer un contact</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="138"/> + <location filename="../../ui/mainwindow.ui" line="132"/> <source>Save</source> <translation>Sauvegarder</translation> </message> @@ -1231,19 +1266,19 @@ Revoking your UID can only success if it is not already validated by the network <translation>Tout fichier de compte (*.acc)</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="45"/> + <location filename="../../ui/mainwindow.ui" line="61"/> <source>&Open</source> <translation>&Ouvrir</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="63"/> + <location filename="../../ui/mainwindow.ui" line="55"/> <source>&Contacts</source> <translation>&Contacts</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="98"/> + <location filename="../../ui/mainwindow.ui" line="97"/> <source>&Add a contact</source> - <translation type="unfinished">&Ajouter un contact</translation> + <translation>&Ajouter un contact</translation> </message> <message> <location filename="../../ui/mainwindow.ui" line="132"/> @@ -1251,47 +1286,47 @@ Revoking your UID can only success if it is not already validated by the network <translation type="obsolete">&Ajouter</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="143"/> + <location filename="../../ui/mainwindow.ui" line="137"/> <source>&Quit</source> <translation>&Quitter</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="153"/> + <location filename="../../ui/mainwindow.ui" line="147"/> <source>&Transfer money</source> <translation>&Transférer de la monnaie</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="158"/> + <location filename="../../ui/mainwindow.ui" line="152"/> <source>&Configure</source> <translation>&Configurer</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="163"/> + <location filename="../../ui/mainwindow.ui" line="157"/> <source>&Import</source> <translation>&Importer</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="168"/> + <location filename="../../ui/mainwindow.ui" line="162"/> <source>&Export</source> <translation>&Exporter</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="173"/> + <location filename="../../ui/mainwindow.ui" line="167"/> <source>&Certification</source> <translation>&Certification</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="178"/> + <location filename="../../ui/mainwindow.ui" line="172"/> <source>&Set as default</source> <translation>&Par défaut</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="183"/> + <location filename="../../ui/mainwindow.ui" line="177"/> <source>A&bout</source> <translation>A &propos</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="188"/> + <location filename="../../ui/mainwindow.ui" line="182"/> <source>&Preferences</source> <translation>&Préférences</translation> </message> @@ -1306,12 +1341,12 @@ Revoking your UID can only success if it is not already validated by the network <translation>&Fichier</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="77"/> + <location filename="../../ui/mainwindow.ui" line="76"/> <source>&Help</source> <translation>&Aide</translation> </message> <message> - <location filename="../../ui/mainwindow.ui" line="133"/> + <location filename="../../ui/mainwindow.ui" line="187"/> <source>&Add account</source> <translation>&Ajouter un compte</translation> </message> @@ -2088,17 +2123,17 @@ Veuillez rééssayer plus tard</translation> <translation></translation> </message> <message> - <location filename="../../ui/transactions_tab.ui" line="68"/> + <location filename="../../ui/transactions_tab.ui" line="100"/> <source>Balance:</source> <translation>Solde:</translation> </message> <message> - <location filename="../../ui/transactions_tab.ui" line="51"/> + <location filename="../../ui/transactions_tab.ui" line="83"/> <source>Payment:</source> <translation>Paiements:</translation> </message> <message> - <location filename="../../ui/transactions_tab.ui" line="58"/> + <location filename="../../ui/transactions_tab.ui" line="90"/> <source>Deposit:</source> <translation>Dépôts:</translation> </message> diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py index 8b0406eab1a90d26bbbb0a6f8d07d6e60e2c3d32..dbce9cfca1024b11cdae0ff34617ad9d6b06298c 100644 --- a/src/cutecoin/core/app.py +++ b/src/cutecoin/core/app.py @@ -40,6 +40,7 @@ class Application(QObject): :param argv: The argv parameters of the call """ super().__init__() + self.qapp = qapp self.accounts = {} self.current_account = None self.loop = loop @@ -56,8 +57,10 @@ class Application(QObject): } self.load() + self.switch_language() - translator = QTranslator(qapp) + def switch_language(self): + translator = QTranslator(self.qapp) logging.debug("Loading translations") locale = self.preferences['lang'] QLocale.setDefault(QLocale(locale)) diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py index 2bbd110518b474f4c2758e22256a491c8abbc03f..1acdb629c3368d2ca2ddac8a543b6312b383f4a9 100644 --- a/src/cutecoin/core/community.py +++ b/src/cutecoin/core/community.py @@ -9,6 +9,7 @@ import hashlib import re import time import asyncio +import math from PyQt5.QtCore import QObject, pyqtSignal from requests.exceptions import RequestException @@ -131,6 +132,30 @@ class Community(QObject): else: return 1 + @property + def computed_dividend(self): + """ + Get the computed community universal dividend. + + Calculation based on t = last UD block time and on values from the that block : + + UD(computed) = CEIL(MAX(UD(t) ; c * M(t) / N(t))) + + :return: The computed UD or 1 if no UD was generated. + """ + block = self.get_ud_block() + if block: + return math.ceil( + max( + self.dividend(), + float(0) if block['membersCount'] != 0 else + self.parameters['c'] * block['monetaryMass'] / block['membersCount'] + ) + ) + + else: + return 1 + def get_ud_block(self, x=0): """ Get a block with universal dividend diff --git a/src/cutecoin/core/net/api/bma/access.py b/src/cutecoin/core/net/api/bma/access.py index 3c6aeffd14365e83e53717652b948001456a56b5..ad6437f4d980f506b5e2065f847361a779a1c434 100644 --- a/src/cutecoin/core/net/api/bma/access.py +++ b/src/cutecoin/core/net/api/bma/access.py @@ -89,7 +89,7 @@ class BmaAccess(QObject): if isinstance(first, dict): for key in first: if isinstance(second, dict): - if second.has_key(key): + if key in second: sec = second[key] else: # there are key in the first, that is not presented in the second @@ -159,11 +159,11 @@ class BmaAccess(QObject): if 'value' not in self._data[cache_key]: self._data[cache_key]['value'] = {} - self._data[cache_key]['metadata']['block'] = self._network.latest_block - if not self._compare_json(self._data[cache_key]['value'], data): - self._data[cache_key]['value'] = data - return True + self._data[cache_key]['metadata']['block'] = self._network.latest_block + if not self._compare_json(self._data[cache_key]['value'], data): + self._data[cache_key]['value'] = data + return True return False def get(self, caller, request, req_args={}, get_args={}, tries=0): diff --git a/src/cutecoin/core/txhistory.py b/src/cutecoin/core/txhistory.py index d520d3ec7718ef11d548456b0811c2ba4af82288..7f4460b901b54c02b8bf35459d267344f24a0c8a 100644 --- a/src/cutecoin/core/txhistory.py +++ b/src/cutecoin/core/txhistory.py @@ -150,7 +150,7 @@ class TxHistory(): tx_history = yield from community.bma_access.future_request(qtbma.tx.history.Blocks, req_args={'pubkey': self.wallet.pubkey, 'from_':str(parsed_block), - 'to_': str(parsed_block + 100)}) + 'to_': str(parsed_block + 99)}) if self._stop_coroutines: return @@ -167,7 +167,7 @@ class TxHistory(): yield from self._parse_transaction(community, txdata, new_transfers, received_list, txid) self.wallet.refresh_progressed.emit(parsed_block, current_block, self.wallet.pubkey) - parsed_block += 101 + parsed_block += 100 if current_block > self.latest_block: self.available_sources = yield from self.wallet.future_sources(community) diff --git a/src/cutecoin/gui/informations_tab.py b/src/cutecoin/gui/informations_tab.py index eea1c0b0f97e2185fbcf455351da54189bdc13f3..039c3c0c2259342134c88ac8e4b3a37379cba310 100644 --- a/src/cutecoin/gui/informations_tab.py +++ b/src/cutecoin/gui/informations_tab.py @@ -38,39 +38,85 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): # try to request money variables from last ud block try: - block = self.community.get_ud_block() + block_ud = self.community.get_ud_block() except Exception as e: logging.debug('community get_ud_block error : ' + str(e)) return False try: - block_t_minus_1 = self.community.get_ud_block(1) + block_ud_minus_1 = self.community.get_ud_block(1) except Exception as e: logging.debug('community get_ud_block error : ' + str(e)) return False - if block: - ud = self.get_referential_diff_value(block['dividend']) + if block_ud: + ud = self.get_referential_diff_value(block_ud['dividend']) # if referential type is quantitative... if self.account.ref_type() == 'q': # display int values # use the float type of 64bits, to avoid display a 32bit signed integer... localized_ud = QLocale().toString(float(ud), 'f', 0) - localized_mass_per_member = QLocale().toString( - float(self.get_referential_diff_value(block['monetaryMass'] / block['membersCount'])), 'f', 0 + # display int values + localized_ud_plus_1 = QLocale().toString( + float( + self.get_referential_diff_value( + self.community.computed_dividend + ) + ), + 'f', + 0 ) - localized_monetary_mass = QLocale().toString( - float(self.get_referential_diff_value(block['monetaryMass'])), 'f', 0 + localized_mass = QLocale().toString( + float(self.get_referential_diff_value(block_ud['monetaryMass'])), 'f', 0 ) + if block_ud_minus_1: + localized_mass_minus_1_per_member = QLocale().toString( + float( + self.get_referential_diff_value(float(0) if block_ud['membersCount'] == 0 else + block_ud_minus_1['monetaryMass'] / block_ud['membersCount'] + ) + ), 'f', 0 + ) + localized_mass_minus_1 = QLocale().toString( + float(self.get_referential_diff_value(block_ud_minus_1['monetaryMass'])), 'f', 0 + ) + else: + localized_mass_minus_1_per_member = QLocale().toString( + float(0), 'f', 0 + ) + localized_mass_minus_1 = QLocale().toString( + float(0), 'f', 0 + ) else: # display float values localized_ud = QLocale().toString(ud, 'f', 6) - localized_mass_per_member = QLocale().toString( - float(0) if block['membersCount'] <= 0 else - self.get_referential_diff_value(block['monetaryMass'] / block['membersCount']), 'f', 6 + # display float values + localized_ud_plus_1 = QLocale().toString( + float( + self.get_referential_diff_value( + self.community.computed_dividend + ) + ), + 'f', + 6 ) - localized_monetary_mass = QLocale().toString( - self.get_referential_diff_value(block['monetaryMass']), 'f', 6 + localized_mass = QLocale().toString( + float(self.get_referential_diff_value(block_ud['monetaryMass'])), 'f', 6 ) + if block_ud_minus_1: + localized_mass_minus_1_per_member = QLocale().toString( + self.get_referential_diff_value(float(0) if block_ud['membersCount'] == 0 else + block_ud_minus_1['monetaryMass'] / block_ud['membersCount']), 'f', 6 + ) + localized_mass_minus_1 = QLocale().toString( + self.get_referential_diff_value(block_ud_minus_1['monetaryMass']), 'f', 6 + ) + else: + localized_mass_minus_1_per_member = QLocale().toString( + float(0), 'f', 6 + ) + localized_mass_minus_1 = QLocale().toString( + float(0), 'f', 6 + ) # set infos in label self.label_general.setText( @@ -82,26 +128,34 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): <tr><td align="right"><b>{:}</b></td><td>{:} {:}</td></tr> <tr><td align="right"><b>{:2.2%} / {:} days</b></td><td>{:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> </table> """).format( localized_ud, self.tr('Universal Dividend UD(t) in'), self.get_referential_diff_name(), - localized_monetary_mass, - self.tr('Monetary Mass M(t) in'), + localized_mass_minus_1, + self.tr('Monetary Mass M(t-1) in'), self.get_referential_diff_name(), - block['membersCount'], + block_ud['membersCount'], self.tr('Members N(t)'), - localized_mass_per_member, - self.tr('Monetary Mass per member M(t)/N(t) in'), + localized_mass_minus_1_per_member, + self.tr('Monetary Mass per member M(t-1)/N(t) in'), self.get_referential_diff_name(), - float(0) if block_t_minus_1['membersCount'] == 0 else - block['dividend'] / (block_t_minus_1['monetaryMass'] / block_t_minus_1['membersCount']), + float(0) if block_ud_minus_1['membersCount'] == 0 else + block_ud['dividend'] / (block_ud_minus_1['monetaryMass'] / block_ud_minus_1['membersCount']), + params['dt'] / 86400, - self.tr('Actual growth c = UD(t)/[M(t-1)/N(t-1)]'), + self.tr('Actual growth c = UD(t)/[M(t-1)/N(t)]'), QLocale.toString( QLocale(), - QDateTime.fromTime_t(block['medianTime'] + params['dt']), + QDateTime.fromTime_t(block_ud['medianTime']), + QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) + ), + self.tr('Last UD date and time (t)'), + QLocale.toString( + QLocale(), + QDateTime.fromTime_t(block_ud['medianTime'] + params['dt']), QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) ), self.tr('Next UD date and time (t+1)') @@ -110,36 +164,7 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): else: self.label_general.setText(self.tr('No Universal Dividend created yet.')) - if block: - # if referential type is quantitative... - if self.account.ref_type() == 'q': - # display int values - localized_ud_t1 = QLocale().toString( - float( - self.get_referential_diff_value( - math.ceil( - max(block['dividend'], params['c'] * block['monetaryMass'] / block['membersCount']) - ) - ) - ), - 'f', - 0 - ) - else: - # display float values - localized_ud_t1 = QLocale().toString( - float( - self.get_referential_diff_value( - math.ceil( - float(0) if block['membersCount'] == 0 else - max(block['dividend'], params['c'] * block['monetaryMass'] / block['membersCount']) - ) - ) - ), - 'f', - 6 - ) - + if block_ud: # set infos in label self.label_rules.setText( self.tr(""" @@ -151,16 +176,16 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """).format( self.tr('{:2.0%} / {:} days').format(params['c'], params['dt'] / 86400), self.tr('Fundamental growth (c) / Delta time (dt)'), - self.tr('UD(t+1) = MAX { UD(t) ; c × M(t) / N(t) }'), + self.tr('UD(t+1) = MAX { UD(t) ; c × M(t) / N(t+1) }'), self.tr('Universal Dividend (formula)'), self.tr('{:} = MAX {{ {:} {:} ; {:2.0%} × {:} {:} / {:} }}').format( - localized_ud_t1, + localized_ud_plus_1, localized_ud, self.get_referential_diff_name(), params['c'], - localized_monetary_mass, + localized_mass, self.get_referential_diff_name(), - block['membersCount'] + block_ud['membersCount'] ), self.tr('Universal Dividend (computed)') ) diff --git a/src/cutecoin/gui/transactions_tab.py b/src/cutecoin/gui/transactions_tab.py index 69760d374a8d12ce194f214718c5e27362867b09..1e5a4579b2a9bfd80dcc74d14b2436c090dea930 100644 --- a/src/cutecoin/gui/transactions_tab.py +++ b/src/cutecoin/gui/transactions_tab.py @@ -35,6 +35,7 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget): self.community = community self.password_asker = password_asker self.currency_tab = currency_tab + self.app.current_account.loading_finished.connect(self.stop_progress) self.progressbar.hide() self.refresh()