From f448e988bbe1697f4bd83561339ce8a675da094f Mon Sep 17 00:00:00 2001 From: Vincent Texier <vit@free.fr> Date: Sun, 21 Jun 2015 12:06:15 +0200 Subject: [PATCH] New calculation for referentials values and informations tab Values are based on discrete time t = last UD bloc time --- res/i18n/ts/fr_FR.ts | 179 ++++++++++++++++----------- src/cutecoin/core/account.py | 21 +--- src/cutecoin/core/community.py | 27 +++- src/cutecoin/gui/informations_tab.py | 132 ++++++++++++-------- 4 files changed, 216 insertions(+), 143 deletions(-) diff --git a/res/i18n/ts/fr_FR.ts b/res/i18n/ts/fr_FR.ts index fdc99c13..9d84768d 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/account.py b/src/cutecoin/core/account.py index 165adb64..7dad16fc 100644 --- a/src/cutecoin/core/account.py +++ b/src/cutecoin/core/account.py @@ -41,13 +41,7 @@ def relative(units, community): :param cutecoin.core.community.Community community: Community instance :return: float """ - # fixme: the value "community.nb_members" is not up to date, luckyly the good value is in "community.get_ud_block()['membersCount']" - # calculate ud(t+1) - ud = math.ceil( - max(community.dividend, - community.parameters['c'] * community.monetary_mass / community.get_ud_block()['membersCount']) - ) - relative_value = units / float(ud) + relative_value = units / float(community.dividend) return relative_value @@ -59,7 +53,6 @@ def quantitative_zerosum(units, community): :param cutecoin.core.community.Community community: Community instance :return: int """ - # fixme: the value "community.nb_members" is not up to date, luckyly the good value is in "community.get_ud_block()['membersCount']" average = community.monetary_mass / community.get_ud_block()['membersCount'] return units - average @@ -72,15 +65,9 @@ def relative_zerosum(units, community): :param cutecoin.core.community.Community community: Community instance :return: float """ - # fixme: the value "community.nb_members" is not up to date, luckyly the good value is in "community.get_ud_block()['membersCount']" - median = community.monetary_mass / community.nb_members - # calculate ud(t+1) - ud = math.ceil( - max(community.dividend, - community.parameters['c'] * community.monetary_mass / community.get_ud_block()['membersCount']) - ) - relative_value = units / float(ud) - relative_median = median / ud + median = community.monetary_mass / community.get_ud_block()['membersCount'] + relative_value = units / float(community.dividend) + relative_median = median / community.dividend return relative_value - relative_median diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py index be5e70ad..9c4c1389 100644 --- a/src/cutecoin/core/community.py +++ b/src/cutecoin/core/community.py @@ -5,6 +5,7 @@ Created on 1 févr. 2014 ''' from PyQt5.QtCore import QObject, pyqtSignal +import math from ucoinpy.api import bma from ucoinpy.documents.block import Block from ..tools.exceptions import NoPeerAvailable @@ -232,6 +233,29 @@ 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, + self.parameters['c'] * block['monetaryMass'] / block['membersCount'] + ) + ) + + else: + return 1 + def get_ud_block(self, x=0): ''' Get a block with universal dividend @@ -240,7 +264,8 @@ class Community(QObject): :return: The last block with universal dividend. ''' blocks = self.request(bma.blockchain.UD)['result']['blocks'] - if len(blocks) > 0: + # if ud blocks exist and index requested exists... + if len(blocks) > 0 and len(blocks)-(1+x) >= 0: block_number = blocks[len(blocks)-(1+x)] block = self.request(bma.blockchain.Block, req_args={'number': block_number}) diff --git a/src/cutecoin/gui/informations_tab.py b/src/cutecoin/gui/informations_tab.py index d6e36615..4d3797c9 100644 --- a/src/cutecoin/gui/informations_tab.py +++ b/src/cutecoin/gui/informations_tab.py @@ -37,38 +37,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( + 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( - 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( + 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( @@ -80,25 +127,32 @@ 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(), - block['dividend'] / (block_t_minus_1['monetaryMass'] / block_t_minus_1['membersCount']), + block_ud['dividend'] / (block_ud_minus_1['monetaryMass'] / block_ud['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)') @@ -107,35 +161,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( - max(block['dividend'], params['c'] * block['monetaryMass'] / block['membersCount']) - ) - ) - ), - 'f', - 6 - ) - + if block_ud: # set infos in label self.label_rules.setText( self.tr(""" @@ -147,16 +173,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)') ) -- GitLab