Skip to content
Snippets Groups Projects
informations_tab.py 7.59 KiB
Newer Older
Created on 31 janv. 2015
from PyQt5.QtWidgets import QWidget
from ..gen_resources.informations_tab_uic import Ui_InformationsTabWidget


class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
    """
    classdocs
    """

    def __init__(self, account, community):
        """
        Constructor
        """
        super().__init__()
        self.setupUi(self)
        self.community = community
        self.account = account

        #  try to request money parameters
            params = self.community.parameters
        except Exception as e:
            logging.debug('community parameters error : ' + str(e))
        #  try to request money variables from last ud block
        try:
            block = 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)
        except Exception as e:
            logging.debug('community get_ud_block error : ' + str(e))
            return False
        if block:
            # set infos in label
            self.label_general.setText(
                """
                <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>
                </table>
                """.format(
                    round(self.get_referential_diff_value(block['dividend'])),
                    'Universal Dividend UD(t) in',
                    self.get_referential_name(),
                    round(self.get_referential_value(block['monetaryMass'])),
                    'Monetary Mass M(t) in',
                    self.get_referential_name(),
                    block['membersCount'],
                    'Members N(t)',
                    round(self.get_referential_value(block['monetaryMass'] / block['membersCount'])),
                    'Monetary Mass per member M(t)/N(t) in',
                    self.get_referential_name(),
                    block['dividend'] / (block_t_minus_1['monetaryMass'] / block['membersCount']),
                    params['dt'] / 86400,
                    'Actual growth c = UD(t)/[M(t-1)/N(t)]',
                    datetime.datetime.fromtimestamp(block['medianTime'] + params['dt']).strftime("%d/%m/%Y %I:%M"),
                    'Next UD date and time (t+1)'
                )
        else:
            self.label_general.setText('No Universal Dividend created yet.')

        if block:
            # set infos in label
            self.label_rules.setText(
                """
                <table cellpadding="5">
                <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>
                </table>
                """.format(
                    '{:2.0%} / {:} days'.format(params['c'], params['dt'] / 86400),
                    'Fundamental growth (c) / Delta time (dt)',
                    'UD(t+1) = MAX { UD(t) ; c * M(t) / N(t) }',
                    'Universal Dividend (formula)',
                    '{:} = MAX {{ {:} {:} ; {:2.0%} * {:} {:} / {:} }}'.format(
                        math.ceil(max(block['dividend'], params['c'] * block['monetaryMass'] / block['membersCount'])),
                        round(self.get_referential_diff_value(block['dividend'])),
                        self.get_referential_name(),
                        params['c'],
                        round(self.get_referential_value(block['monetaryMass'])),
                        self.get_referential_name(),
                        block['membersCount']
                    ),
                    'Universal Dividend (computed)'
                )
            )
        else:
            self.label_rules.setText('No Universal Dividend created yet.')

        # set infos in label
        self.label_money.setText(
            """
            <table cellpadding="5">
            <tr><td align="right"><b>{:2.0%} / {:} 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>
            <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>{:}</b></td><td>{:}</td></tr>
            <tr><td align="right"><b>{:2.0%}</b></td><td>{:}</td></tr>
            </table>
            """.format(
                params['c'],
                params['dt'] / 86400,
                'Fundamental growth (c)',
                'Initial Universal Dividend UD(0) in',
                self.community.short_currency,
                params['dt'] / 86400,
                'Time period (dt) in days (86400 seconds) between two UD',
                params['medianTimeBlocks'],
                'Number of blocks used for calculating median time',
                params['avgGenTime'],
                'The average time in seconds for writing 1 block (wished time)',
                params['dtDiffEval'],
                'The number of blocks required to evaluate again PoWMin value',
                params['blocksRot'],
                'The number of previous blocks to check for personalized difficulty',
                params['percentRot'],
                'The percent of previous issuers to reach for personalized difficulty'
            )
        )

        # set infos in label
        self.label_wot.setText(
            """
            <table cellpadding="5">
            <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>{:}</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(
                params['sigDelay'] / 86400,
                'Minimum delay between 2 identical certifications (in days)',
                params['sigValidity'] / 86400,
                'Maximum age of a valid signature (in days)',
                params['sigQty'],
                'Minimum quantity of signatures to be part of the WoT',
                params['sigWoT'],
                'Minimum quantity of valid made certifications to be part of the WoT for distance rule',
                params['msValidity'] / 86400,
                'Maximum age of a valid membership (in days)',
                params['stepMax'],
                'Maximum distance between each WoT member and a newcomer',
            )
        )

    def get_referential_value(self, value):
        return self.account.units_to_ref(value, self.community)

    def get_referential_diff_value(self, value):
        return self.account.units_to_diff_ref(value, self.community)

    def get_referential_name(self):
        return self.account.ref_name(self.community.short_currency)