Ejemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]

        # handle beneficiaries
        extensions = Array([])
        beneficiaries = kwargs.get('beneficiaries')
        if beneficiaries and type(beneficiaries) == list:
            ext_obj = [0, {'beneficiaries': beneficiaries}]
            ext = CommentOptionExtensions(ext_obj)
            extensions = Array([ext])

        super(Comment_options, self).__init__(
            OrderedDict([
                ('author', String(kwargs["author"])),
                ('permlink', String(kwargs["permlink"])),
                ('max_accepted_payout', Amount(kwargs["max_accepted_payout"])),
                ('percent_steem_dollars',
                 Uint16(int(kwargs["percent_steem_dollars"]))),
                ('allow_votes', Bool(bool(kwargs["allow_votes"]))),
                ('allow_curation_rewards',
                 Bool(bool(kwargs["allow_curation_rewards"]))),
                ('extensions', extensions),
            ]))
Ejemplo n.º 2
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.get("prefix", default_prefix)

        # handle beneficiaries
        if "beneficiaries" in kwargs and kwargs['beneficiaries']:
            kwargs['extensions'] = [[
                0, {
                    'beneficiaries': kwargs['beneficiaries']
                }
            ]]

        extensions = Array([])
        if "extensions" in kwargs and kwargs["extensions"]:
            extensions = Array(
                [CommentOptionExtensions(o) for o in kwargs["extensions"]])

        super(Comment_options, self).__init__(
            OrderedDict([
                ('author', String(kwargs["author"])),
                ('permlink', String(kwargs["permlink"])),
                ('max_accepted_payout',
                 Amount(kwargs["max_accepted_payout"], prefix=prefix)),
                ('percent_steem_dollars',
                 Uint16(int(kwargs["percent_steem_dollars"]))),
                ('allow_votes', Bool(bool(kwargs["allow_votes"]))),
                ('allow_curation_rewards',
                 Bool(bool(kwargs["allow_curation_rewards"]))),
                ('extensions', extensions),
            ]))
Ejemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        if "json" in kwargs and kwargs["json"]:
            if (isinstance(kwargs["json"], dict) or isinstance(kwargs["json"], list)):
                js = json.dumps(kwargs["json"])
            else:
                js = kwargs["json"]

        if len(kwargs["id"]) > 32:
            raise Exception("'id' too long")

        super(Custom_json, self).__init__(
            OrderedDict([
                ('required_auths',
                 Array([String(o) for o in kwargs["required_auths"]])),
                ('required_posting_auths',
                 Array([
                     String(o) for o in kwargs["required_posting_auths"]
                 ])),
                ('id', String(kwargs["id"])),
                ('json', String(js)),
            ]))
Ejemplo n.º 4
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]

        prefix = kwargs.get("prefix", default_prefix)
        extensions = Array([])
        if "end_date" in kwargs and kwargs["end_date"]:
            extension = {
                'type': 'update_proposal_end_date',
                'value': {
                    'end_date': kwargs["end_date"]
                }
            }
            extensions = Array([UpdateProposalExtensions(extension)])

        super(Update_proposal, self).__init__(
            OrderedDict([('proposal_id', Uint64(kwargs["proposal_id"])),
                         ('creator', String(kwargs["creator"])),
                         ('daily_pay',
                          Amount(kwargs["daily_pay"], prefix=prefix)),
                         ('subject', String(kwargs["subject"])),
                         ('permlink', String(kwargs["permlink"])),
                         ('extensions', extensions)]))
Ejemplo n.º 5
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        extensions = Array([])
        proposal_ids = []
        for e in kwargs["proposal_ids"]:
            proposal_ids.append(Uint64(e))

        super(Update_proposal_votes, self).__init__(
            OrderedDict([('voter', String(kwargs["voter"])),
                         ('proposal_ids', Array(proposal_ids)),
                         ('approve', Bool(kwargs["approve"])),
                         ('extensions', extensions)]))
Ejemplo n.º 6
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.get("prefix", default_prefix)
        extensions = Array([])
        proposal_ids = []
        for e in kwargs["proposal_ids"]:
            proposal_ids.append(Uint64(e))

        super(Remove_proposal, self).__init__(
            OrderedDict([('proposal_owner', String(kwargs["voter"])),
                         ('proposal_ids', Array(proposal_ids)),
                         ('extensions', extensions)]))
Ejemplo n.º 7
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.get("prefix", default_prefix)

        if not len(kwargs["new_account_name"]) <= 16:
            raise AssertionError("Account name must be at most 16 chars long")

        meta = ""
        if "json_metadata" in kwargs and kwargs["json_metadata"]:
            if isinstance(kwargs["json_metadata"], dict):
                meta = json.dumps(kwargs["json_metadata"])
            else:
                meta = kwargs["json_metadata"]

        super(Create_claimed_account, self).__init__(
            OrderedDict([
                ('creator', String(kwargs["creator"])),
                ('new_account_name', String(kwargs["new_account_name"])),
                ('owner', Permission(kwargs["owner"], prefix=prefix)),
                ('active', Permission(kwargs["active"], prefix=prefix)),
                ('posting', Permission(kwargs["posting"], prefix=prefix)),
                ('memo_key', PublicKey(kwargs["memo_key"], prefix=prefix)),
                ('json_metadata', String(meta)),
                ('extensions', Array([])),
            ]))
Ejemplo n.º 8
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.pop("prefix", default_prefix)
        extensions = Array([])
        props = {}
        for k in kwargs["props"]:
            if "key" == k[0]:
                block_signing_key = (PublicKey(k[1], prefix=prefix))
                props["key"] = repr(block_signing_key)
            elif "new_signing_key" == k[0]:
                new_signing_key = (PublicKey(k[1], prefix=prefix))
                props["new_signing_key"] = repr(new_signing_key)
        for k in kwargs["props"]:
            if k[0] in ["key", "new_signing_key"]:
                continue
            if isinstance(k[1], str) and PY3:
                is_hex = re.fullmatch(r'[0-9a-fA-F]+', k[1] or '') is not None
            elif isinstance(k[1], str) and PY2:
                is_hex = re.match(r'[0-9a-fA-F]+', k[1] or '') is not None
            else:
                is_hex = False
            if isinstance(k[1], int) and k[0] in ["account_subsidy_budget", "account_subsidy_decay", "maximum_block_size"]:
                props[k[0]] = (hexlify(Uint32(k[1]).__bytes__())).decode()
            elif isinstance(k[1], int) and k[0] in ["sbd_interest_rate"]:
                props[k[0]] = (hexlify(Uint16(k[1]).__bytes__())).decode()
            elif not isinstance(k[1], str) and k[0] in ["account_creation_fee"]:
                props[k[0]] = (hexlify(Amount(k[1], prefix=prefix).__bytes__())).decode()
            elif not is_hex and isinstance(k[1], str) and k[0] in ["account_creation_fee"]:
                props[k[0]] = (hexlify(Amount(k[1], prefix=prefix).__bytes__())).decode()
            elif not isinstance(k[1], str) and k[0] in ["sbd_exchange_rate"]:
                if 'prefix' not in k[1]:
                    k[1]['prefix'] = prefix
                props[k[0]] = (hexlify(ExchangeRate(k[1]).__bytes__())).decode()
            elif not is_hex and k[0] in ["url"]:
                props[k[0]] = (hexlify(String(k[1]).__bytes__())).decode()
            else:
                props[k[0]] = (k[1])
        props_list = []
        for k in props:
            props_list.append(([String(k), HexString(props[k])]))
        props_list = sorted(
            props_list,
            key=lambda x: str(x[0]),
            reverse=False,
        )
        map_props = Map(props_list)

        super(Witness_set_properties, self).__init__(OrderedDict([
            ('owner', String(kwargs["owner"])),
            ('props', map_props),
            ('extensions', extensions),
        ]))
Ejemplo n.º 9
0
 def __init__(self, *args, **kwargs):
     if check_for_class(self, args):
         return
     if len(args) == 1 and len(kwargs) == 0:
         kwargs = args[0]
     super(Change_recovery_account, self).__init__(
         OrderedDict([
             ('account_to_recover', String(kwargs["account_to_recover"])),
             ('new_recovery_account', String(kwargs["new_recovery_account"])),
             ('extensions', Array([])),
         ]))
Ejemplo n.º 10
0
 def __init__(self, *args, **kwargs):
     if check_for_class(self, args):
         return
     if len(args) == 1 and len(kwargs) == 0:
         kwargs = args[0]
     super(Custom, self).__init__(OrderedDict([
         ('required_auths',
             Array([String(o) for o in kwargs["required_auths"]])),
         ('id', Uint16(int(kwargs["id"]))),
         ('data', String(kwargs["data"])),
     ]))
Ejemplo n.º 11
0
    def __init__(self, *args, **kwargs):
        if isArgsThisClass(self, args):
            self.data = args[0].data
        else:
            if len(args) == 1 and len(kwargs) == 0:
                kwargs = args[0]

        super(Beneficiaries, self).__init__(
            OrderedDict([
                ('beneficiaries',
                 Array([Beneficiary(o) for o in kwargs["beneficiaries"]])),
            ]))
Ejemplo n.º 12
0
 def __init__(self, *args, **kwargs):
     if check_for_class(self, args):
         return
     if len(args) == 1 and len(kwargs) == 0:
         kwargs = args[0]
     prefix = kwargs.get("prefix", default_prefix)
     super(Claim_account, self).__init__(
         OrderedDict([
             ('creator', String(kwargs["creator"])),
             ('fee', Amount(kwargs["fee"], prefix=prefix)),
             ('extensions', Array([])),
         ]))
Ejemplo n.º 13
0
 def sign(self, path="48'/13'/0'/0'/0'", chain=u"STEEM"):
     from ledgerblue.comm import getDongle
     dongle = getDongle(True)
     apdu_list = self.build_apdu(path, chain)
     for apdu in apdu_list:
         result = dongle.exchange(py23_bytes(apdu))
     dongle.close()
     sigs = []
     signature = result
     sigs.append(Signature(signature))
     self.data["signatures"] = Array(sigs)
     return self
Ejemplo n.º 14
0
 def __init__(self, *args, **kwargs):
     if check_for_class(self, args):
         return
     if len(args) == 1 and len(kwargs) == 0:
         kwargs = args[0]
     prefix = kwargs.get("prefix", default_prefix)
     new_owner = Permission(kwargs["new_owner_authority"], prefix=prefix)
     super(Request_account_recovery, self).__init__(
         OrderedDict([
             ('recovery_account', String(kwargs["recovery_account"])),
             ('account_to_recover', String(kwargs["account_to_recover"])),
             ('new_owner_authority', new_owner),
             ('extensions', Array([])),
         ]))
Ejemplo n.º 15
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.get("prefix", default_prefix)
        extensions = Array([])

        if "owner" in kwargs:
            owner = Optional(Permission(kwargs["owner"], prefix=prefix))
        else:
            owner = Optional(None)

        if "active" in kwargs:
            active = Optional(Permission(kwargs["active"], prefix=prefix))
        else:
            active = Optional(None)

        if "posting" in kwargs:
            posting = Optional(Permission(kwargs["posting"], prefix=prefix))
        else:
            posting = Optional(None)

        if "memo_key" in kwargs:
            memo_key = Optional(PublicKey(kwargs["memo_key"], prefix=prefix))
        else:
            memo_key = Optional(None)

        meta = ""
        if "json_metadata" in kwargs and kwargs["json_metadata"]:
            if isinstance(kwargs["json_metadata"], dict):
                meta = json.dumps(kwargs["json_metadata"])
            else:
                meta = kwargs["json_metadata"]
        posting_meta = ""
        if "posting_json_metadata" in kwargs and kwargs[
                "posting_json_metadata"]:
            if isinstance(kwargs["posting_json_metadata"], dict):
                posting_meta = json.dumps(kwargs["posting_json_metadata"])
            else:
                posting_meta = kwargs["posting_json_metadata"]

        super(Account_update2, self).__init__(
            OrderedDict([('account', String(kwargs["account"])),
                         ('owner', owner), ('active', active),
                         ('posting', posting), ('memo_key', memo_key),
                         ('json_metadata', String(meta)),
                         ('posting_json_metadata', String(posting_meta)),
                         ('extensions', extensions)]))
Ejemplo n.º 16
0
    def __init__(self, *args, **kwargs):
        if check_for_class(self, args):
            return
        if len(args) == 1 and len(kwargs) == 0:
            kwargs = args[0]
        prefix = kwargs.get("prefix", default_prefix)
        extensions = Array([])

        super(Create_proposal, self).__init__(
            OrderedDict([('creator', String(kwargs["creator"])),
                         ('receiver', String(kwargs["receiver"])),
                         ('start_date', PointInTime(kwargs["start_date"])),
                         ('end_date', PointInTime(kwargs["end_date"])),
                         ('daily_pay',
                          Amount(kwargs["daily_pay"], prefix=prefix)),
                         ('subject', String(kwargs["subject"])),
                         ('permlink', String(kwargs["permlink"])),
                         ('extensions', extensions)]))
Ejemplo n.º 17
0
    def __init__(self, d):
        if isinstance(d, string_types):
            self.amount, self.asset = d.strip().split(" ")
            self.precision = None
            for c in known_chains:
                if self.precision is not None:
                    continue
                for asset in known_chains[c]["chain_assets"]:
                    if self.precision is not None:
                        continue
                    if asset["symbol"] == self.asset:
                        self.precision = asset["precision"]
            if self.precision is None:
                raise Exception("Asset unknown")
            self.amount = int(float(self.amount) * 10**self.precision)

            self.str_repr = '{:.{}f} {}'.format(
                (float(self.amount) / 10**self.precision), self.precision,
                self.asset)
        elif isinstance(d, list):
            self.amount = d[0]
            self.asset = d[2]
            self.precision = d[1]
            a = Array([String(d[0]), d[1], d[2]])
            self.str_repr = str(a.__str__())
        elif isinstance(d, dict) and "nai" in d:
            self.asset = None
            for c in known_chains:
                for asset in known_chains[c]["chain_assets"]:
                    if asset["asset"] == d["nai"]:
                        self.asset = asset["symbol"]
            if not self.asset:
                raise ValueError("Unknown NAI, cannot resolve symbol")
            self.amount = d["amount"]
            self.precision = d["precision"]
            self.str_repr = json.dumps(d)
        else:
            self.amount = d.amount
            self.asset = d.symbol
            self.precision = d.asset["precision"]
            self.amount = int(float(self.amount) * 10**self.precision)
            self.str_repr = str(d)  # json.dumps((d.json()))
Ejemplo n.º 18
0
    def __init__(self, d):
        if isinstance(d, string_types):
            self.amount, self.asset = d.strip().split(" ")
            if self.asset in asset_precision:
                self.precision = asset_precision[self.asset]
            else:
                raise Exception("Asset unknown")
            self.amount = int(float(self.amount) * 10 ** self.precision)

            self.str_repr = '{:.{}f} {}'.format((float(self.amount) / 10 ** self.precision), self.precision, self.asset)
        elif isinstance(d, list):
            self.amount = d[0]
            self.asset = d[2]
            self.precision = d[1]
            a = Array([String(d[0]), d[1], d[2]])
            self.str_repr = str(a.__str__())
        else:
            self.amount = d.amount
            self.asset = d.symbol
            self.precision = d.asset["precision"]
            self.amount = int(float(self.amount) * 10 ** self.precision)
            self.str_repr = json.dumps((d.json()))
Ejemplo n.º 19
0
    def __init__(self, d, prefix=default_prefix, replace_hive_by_steem=True):
        self.replace_hive_by_steem = replace_hive_by_steem
        if isinstance(d, string_types):
            self.amount, self.symbol = d.strip().split(" ")
            self.precision = None
            for c in known_chains:
                if self.precision is not None:
                    continue
                if known_chains[c]["prefix"] != prefix:
                    continue
                for asset in known_chains[c]["chain_assets"]:
                    if self.precision is not None:
                        continue
                    if asset["symbol"] == self.symbol:
                        self.precision = asset["precision"]
                        self.asset = asset["asset"]
                    elif asset["asset"] == self.symbol:
                        self.precision = asset["precision"]
                        self.asset = asset["asset"]
            if self.precision is None:
                raise Exception("Asset unknown")
            self.amount = round(float(self.amount) * 10**self.precision)
            # Workaround to allow transfers in HIVE

            if self.symbol == "HBD" and replace_hive_by_steem:
                self.symbol = "SBD"
            elif self.symbol == "HIVE" and replace_hive_by_steem:
                self.symbol = "STEEM"
            self.str_repr = '{:.{}f} {}'.format(
                (float(self.amount) / 10**self.precision), self.precision,
                self.symbol)
        elif isinstance(d, list):
            self.amount = d[0]
            self.asset = d[2]
            self.precision = d[1]
            self.symbol = None
            for c in known_chains:
                if known_chains[c]["prefix"] != prefix:
                    continue
                for asset in known_chains[c]["chain_assets"]:
                    if asset["asset"] == self.asset:
                        self.symbol = asset["symbol"]
            if self.symbol is None:
                raise ValueError("Unknown NAI, cannot resolve symbol")
            a = Array([String(d[0]), d[1], d[2]])
            self.str_repr = str(a.__str__())
        elif isinstance(d, dict) and "nai" in d:
            self.asset = d["nai"]
            self.symbol = None
            for c in known_chains:
                if known_chains[c]["prefix"] != prefix:
                    continue
                for asset in known_chains[c]["chain_assets"]:
                    if asset["asset"] == d["nai"]:
                        self.symbol = asset["symbol"]
            if self.symbol is None:
                raise ValueError("Unknown NAI, cannot resolve symbol")
            self.amount = d["amount"]
            self.precision = d["precision"]
            self.str_repr = json.dumps(d)
        else:
            self.amount = d.amount
            self.symbol = d.symbol
            # Workaround to allow transfers in HIVE
            if self.symbol == "HBD" and replace_hive_by_steem:
                self.symbol = "SBD"
            elif self.symbol == "HIVE" and replace_hive_by_steem:
                self.symbol = "STEEM"
            self.asset = d.asset["asset"]
            self.precision = d.asset["precision"]
            self.amount = round(float(self.amount) * 10**self.precision)
            self.str_repr = str(d)