Exemple #1
0
    def process(self):
        conf_obj = self.get_conf_obj()

        conf_obj[FULL_SUPPORTERS_SET] = set(
            conf_obj[SUPPORTERS_SET]
            | set(conf_obj[FOUNDERS_MAP].keys())
            | set(conf_obj[OWNERS_MAP].keys()))

        conf_obj[EXCLUDED_DELEGATORS_SET_TOE] = set(
            [k for k, v in conf_obj[RULES_MAP].items() if v == TOE])
        conf_obj[EXCLUDED_DELEGATORS_SET_TOF] = set(
            [k for k, v in conf_obj[RULES_MAP].items() if v == TOF])
        conf_obj[EXCLUDED_DELEGATORS_SET_TOB] = set(
            [k for k, v in conf_obj[RULES_MAP].items() if v == TOB])

        addr_validator = AddressValidator("dest_map")
        conf_obj[DEST_MAP] = {
            k: v
            for k, v in conf_obj[RULES_MAP].items()
            if addr_validator.isaddress(v)
        }

        conf_obj[CONTRACTS_SET] = set(
            [k for k, v in conf_obj[RULES_MAP].items() if v.lower() == DEXTER])

        # default destination for min_delegation filtered account rewards
        if MIN_DELEGATION_KEY not in conf_obj[RULES_MAP]:
            conf_obj[EXCLUDED_DELEGATORS_SET_TOB].add(MIN_DELEGATION_KEY)
    def validate_address_set(self, conf_obj, set_name):
        if set_name not in conf_obj:
            conf_obj[set_name] = set()
            return

        if isinstance(conf_obj[set_name],
                      str) and conf_obj[set_name].lower() == 'none':
            conf_obj[set_name] = set()
            return

        # empty sets are evaluated as dict
        if not conf_obj[set_name] and (isinstance(conf_obj[set_name], dict) or
                                       isinstance(conf_obj[set_name], list)):
            conf_obj[set_name] = set()
            return

        # {KT*****,KT****} are loaded as {KT*****:None,KT****:None}
        # convert to set
        if isinstance(conf_obj[set_name], dict) and set(
                conf_obj[set_name].values()) == {None}:
            conf_obj[set_name] = set(conf_obj[set_name].keys())

        validator = AddressValidator(set_name)
        for addr in conf_obj[set_name]:
            validator.validate(addr)
Exemple #3
0
    def __validate_share_map(self, conf_obj, map_name):
        """
        all shares in the map must sum up to 1
        :param conf_obj: configuration object
        :param map_name: name of the map to validate
        :return: None
        """

        if map_name not in conf_obj:
            conf_obj[map_name] = dict()
            return

        if isinstance(conf_obj[map_name], str) and conf_obj[map_name].lower() == 'none':
            conf_obj[map_name] = dict()
            return

        if not conf_obj[map_name]:
            return

        share_map = conf_obj[map_name]

        validator = AddressValidator(map_name)
        for key, value in share_map.items():
            validator.validate(key)

        if len(share_map) > 0:
            try:
                if abs(1 - sum(share_map.values()) > 1e-4):  # a zero check actually
                    raise ConfigurationException("Map '{}' shares does not sum up to 1!".format(map_name))
            except TypeError:
                raise ConfigurationException("Map '{}' values must be number!".format(map_name))
Exemple #4
0
def onexclude(input):
    if not input:
        fsm.go()
        return

    try:
        address_target = input.split(',')
        address = address_target[0].strip()
        target = address_target[1].strip()
        AddressValidator("excluded address").validate(address)
        options = ['TOB', 'TOE', 'TOF']
        if target not in options:
            printe("Invalid target, available options are {}".format(options))
            return

        global parser
        conf_obj = parser.get_conf_obj()
        if RULES_MAP not in conf_obj:
            conf_obj[RULES_MAP] = dict()

        conf_obj[RULES_MAP][address] = target

        parser.validate_dest_map(parser.get_conf_obj())
    except Exception:
        printe("Invalid exclusion entry: " + traceback.format_exc())
        return
Exemple #5
0
    def __validate_specials_map(self, conf_obj):
        if SPECIALS_MAP not in conf_obj:
            conf_obj[SPECIALS_MAP] = dict()
            return

        if isinstance(conf_obj[SPECIALS_MAP], str) and conf_obj[SPECIALS_MAP].lower() == 'none':
            conf_obj[SPECIALS_MAP] = dict()
            return

        if not conf_obj[SPECIALS_MAP]:
            return

        addr_validator = AddressValidator(SPECIALS_MAP)
        for key, value in conf_obj[SPECIALS_MAP].items():
            addr_validator.validate(key)
            FeeValidator("specials_map:" + key).validate(value)
Exemple #6
0
    def __validate_address_set(self, conf_obj, set_name):
        if set_name not in conf_obj:
            conf_obj[set_name] = set()
            return

        if isinstance(conf_obj[set_name], str) and conf_obj[set_name].lower() == 'none':
            conf_obj[set_name] = set()
            return

        # empty sets are evaluated as dict
        if not conf_obj[set_name] and (isinstance(conf_obj[set_name], dict) or isinstance(conf_obj[set_name], list)):
            conf_obj[set_name] = set()
            return

        validator = AddressValidator(set_name)
        for addr in conf_obj[set_name]:
            validator.validate(addr)
    def __list_known_contracts_by_alias(self):
        _, response = self.send_request(" list known contracts")

        dict = self.parse_list_known_contracts_response(response)

        for alias, pkh in dict.items():
            try:
                AddressValidator("known_contract").validate(pkh)
            except Exception as e:
                raise ClientException("Invalid response from client '{}'".format(response), e)

        return dict
def onpaymentaddress(input):
    try:

        AddressValidator("payouts address").validate(input)

        global parser
        parser.set(PAYMENT_ADDRESS, input)
        parser.validate_payment_address(parser.get_conf_obj())
    except Exception as e:
        printe(f"Invalid payouts address: {str(e)}")
        return

    fsm.go()
Exemple #9
0
    def __list_known_addresses_by_pkh(self):

        _, response = self.send_request("list known addresses")

        dict = self.parse_list_known_addresses_response(response)

        for pkh, dict_alias_sk in dict.items():
            try:
                AddressValidator("known_address").validate(pkh)
            except Exception as e:
                raise ClientException(
                    "Invalid response from client '{}'".format(response), e)

        return dict
Exemple #10
0
def onredirect(input):
    if not input:
        fsm.go()
        return

    try:
        address1_address2 = input.split(',')
        address1 = address1_address2[0].strip()
        address2 = address1_address2[1].strip()

        AddressValidator("redirected source address").validate(address1)
        AddressValidator("redirected target address").validate(address2)

        global parser
        conf_obj = parser.get_conf_obj()
        if RULES_MAP not in conf_obj:
            conf_obj[RULES_MAP] = dict()

        conf_obj[RULES_MAP][address1] = address2

        parser.validate_dest_map(parser.get_conf_obj())
    except Exception:
        printe("Invalid redirection entry: " + traceback.format_exc())
        return
def onbakingaddress(input):
    try:
        AddressValidator("baking address").validate(input)
    except Exception as e:
        printe(f"Invalid baking address: {str(e)}")
        return

    if not input.startswith("tz"):
        printe("Only tz addresses are allowed")
        return
    provider_factory = ProviderFactory(args.reward_data_provider)
    global parser
    parser = BakingYamlConfParser(None, client_manager, provider_factory, network_config, args.node_endpoint,
                                  api_base_url=args.api_base_url)
    parser.set(BAKING_ADDRESS, input)
    fsm.go()
Exemple #12
0
def onbakingaddress(input):
    try:
        AddressValidator("bakingaddress").validate(input)
    except Exception as e:
        printe("Invalid baking address: " + traceback.format_exc())
        return

    if not input.startswith("tz"):
        printe("Only tz addresses are allowed")
        return
    provider_factory = ProviderFactory(args.reward_data_provider)
    global parser
    parser = BakingYamlConfParser(None, wllt_clnt_mngr, provider_factory, network_config, args.node_addr)
    parser.set(BAKING_ADDRESS, input)
    messages['paymentaddress']=messages['paymentaddress'].format([v['alias'] for k,v in wllt_clnt_mngr.get_addr_dict().items() if v['sk']])+" (without quotes)"
    fsm.go()
Exemple #13
0
def onsupporters(input):
    if not input:
        fsm.go()
        return

    try:
        AddressValidator("supporter address").validate(input)

        global parser
        conf_obj = parser.get_conf_obj()
        if SUPPORTERS_SET not in conf_obj:
            conf_obj[SUPPORTERS_SET] = set()

        conf_obj[SUPPORTERS_SET].add(input)

        parser.validate_address_set(parser.get_conf_obj(), SUPPORTERS_SET)
    except Exception:
        printe("Invalid supporter entry: " + traceback.format_exc())
        return
    def get_manager_for_contract(self, pkh):

        if pkh.startswith('dn'):
            return pkh

        if pkh in self.managers:
            return self.managers[pkh]

        _, response = self.send_request(" get manager for " + pkh)

        manager = self.parse_get_manager_for_contract_response(response)

        try:
            AddressValidator("manager").validate(manager)
        except Exception as e:
            raise ClientException("Invalid response from client '{}'".format(response), e)
        self.managers[pkh] = manager

        return manager
Exemple #15
0
def onspecials(input):
    if not input:
        fsm.go()
        return

    try:
        address_target = input.split(',')
        address = address_target[0].strip()
        fee = float(address_target[1].strip())
        AddressValidator("special address").validate(address)
        FeeValidator("special_fee").validate(fee)

        global parser
        conf_obj = parser.get_conf_obj()
        if SPECIALS_MAP not in conf_obj:
            conf_obj[SPECIALS_MAP] = dict()

        conf_obj[SPECIALS_MAP][address] = fee

        parser.validate_specials_map(parser.get_conf_obj())
    except Exception:
        printe("Invalid specials entry: " + traceback.format_exc())
        return
Exemple #16
0
    def validate_dest_map(self, conf_obj):
        if RULES_MAP not in conf_obj:
            conf_obj[RULES_MAP] = dict()
            return

        if isinstance(conf_obj[RULES_MAP], str) and conf_obj[SPECIALS_MAP].lower() == 'none':
            conf_obj[RULES_MAP] = dict()
            return

        if not conf_obj[RULES_MAP]:
            return

        addr_validator = AddressValidator(RULES_MAP)
        for key, value in conf_obj[RULES_MAP].items():
            # validate key (and address or MINDELEGATION)
            if key != MIN_DELEGATION_KEY:
                addr_validator.validate(key)
            # validate destination value (An address OR TOF OR TOB OR TOE)
            if value not in [TOF, TOB, TOE]:
                addr_validator.validate(key)