Example #1
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]

            assert kwargs['proposed_operations'], 'proposed_operations cannot be empty!'

            if isinstance(kwargs['proposed_operations'][0], GrapheneObject):
                proposed_operations = [OperationWrapper(Operation(op)) for op in kwargs['proposed_operations']]
            else:
                proposed_operations = [OperationWrapper(Operation(op['op'])) for op in kwargs['proposed_operations']]

            review_period_time = PointInTime(kwargs['review_period_time']) if kwargs.get('review_period_time') else None

            super().__init__(OrderedDict([
                ('author', String(kwargs['author'])),
                ('title', String(kwargs['title'])),
                ('memo', String(kwargs.get('memo', ''))),
                ('expiration_time', PointInTime(kwargs['expiration_time'])),
                ('proposed_operations', Array(proposed_operations)),
                ('review_period_time', Optional(review_period_time)),
                ('extensions', Array(kwargs.get('extensions') or [])),
            ]))
Example #2
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]
            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().__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)),
                ]))
Example #3
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]

            # handle beneficiaries
            extensions = Array([])
            beneficiaries = kwargs.get('beneficiaries')
            # TODO: Explore this 2 lines
            if not beneficiaries and kwargs['extensions'] and len(kwargs['extensions'][0]) == 2:
                beneficiaries = kwargs['extensions'][0][1].get('beneficiaries')
            if beneficiaries and type(beneficiaries) == list:
                ext_obj = [0, {'beneficiaries': beneficiaries}]
                ext = CommentOptionExtensions(ext_obj)
                extensions = Array([ext])

            super().__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),
            ]))
Example #4
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]
            if "extensions" not in kwargs:
                kwargs["extensions"] = Set([])
            elif not kwargs.get("extensions"):
                kwargs["extensions"] = Set([])
            if "signatures" not in kwargs:
                kwargs["signatures"] = Array([])
            else:
                kwargs["signatures"] = Array(
                    [Signature(unhexlify(a)) for a in kwargs["signatures"]])

            if "operations" in kwargs:
                if all([
                        not isinstance(a, Operation)
                        for a in kwargs["operations"]
                ]):
                    kwargs['operations'] = Array(
                        [Operation(a) for a in kwargs["operations"]])
                else:
                    kwargs['operations'] = Array(kwargs["operations"])

            super().__init__(
                OrderedDict([
                    ('ref_block_num', Uint16(kwargs['ref_block_num'])),
                    ('ref_block_prefix', Uint32(kwargs['ref_block_prefix'])),
                    ('expiration', PointInTime(kwargs['expiration'])),
                    ('operations', kwargs['operations']),
                    ('extensions', kwargs['extensions']),
                    ('signatures', kwargs['signatures']),
                ]))
Example #5
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]

            active_approvals_to_add = [String(str(x)) for x in kwargs.get('active_approvals_to_add') or []]
            active_approvals_to_remove = [String(str(x)) for x in kwargs.get('active_approvals_to_remove') or []]
            owner_approvals_to_add = [String(str(x)) for x in kwargs.get('owner_approvals_to_add') or []]
            owner_approvals_to_remove = [String(str(x)) for x in kwargs.get('owner_approvals_to_remove') or []]
            posting_approvals_to_add = [String(str(x)) for x in kwargs.get('posting_approvals_to_add') or []]
            posting_approvals_to_remove = [String(str(x)) for x in kwargs.get('posting_approvals_to_remove') or []]
            key_approvals_to_add = [String(str(x)) for x in kwargs.get('key_approvals_to_add') or []]
            key_approvals_to_remove = [String(str(x)) for x in kwargs.get('key_approvals_to_remove') or []]

            super().__init__(OrderedDict([
                ('author', String(kwargs['author'])),
                ('title', String(kwargs['title'])),
                ('active_approvals_to_add', Array(active_approvals_to_add)),
                ('active_approvals_to_remove', Array(active_approvals_to_remove)),
                ('owner_approvals_to_add', Array(owner_approvals_to_add)),
                ('owner_approvals_to_remove', Array(owner_approvals_to_remove)),
                ('posting_approvals_to_add', Array(posting_approvals_to_add)),
                ('posting_approvals_to_remove', Array(posting_approvals_to_remove)),
                ('key_approvals_to_add', Array(key_approvals_to_add)),
                ('key_approvals_to_remove', Array(key_approvals_to_remove)),
                ('extensions', Array(kwargs.get('extensions') or [])),
            ]))
Example #6
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]

            active_approvals_to_add = [
                String(str(x))
                for x in kwargs.get("active_approvals_to_add") or []
            ]
            active_approvals_to_remove = [
                String(str(x))
                for x in kwargs.get("active_approvals_to_remove") or []
            ]
            owner_approvals_to_add = [
                String(str(x))
                for x in kwargs.get("owner_approvals_to_add") or []
            ]
            owner_approvals_to_remove = [
                String(str(x))
                for x in kwargs.get("owner_approvals_to_remove") or []
            ]
            posting_approvals_to_add = [
                String(str(x))
                for x in kwargs.get("posting_approvals_to_add") or []
            ]
            posting_approvals_to_remove = [
                String(str(x))
                for x in kwargs.get("posting_approvals_to_remove") or []
            ]
            key_approvals_to_add = [
                String(str(x))
                for x in kwargs.get("key_approvals_to_add") or []
            ]
            key_approvals_to_remove = [
                String(str(x))
                for x in kwargs.get("key_approvals_to_remove") or []
            ]

            super().__init__(
                OrderedDict([
                    ("author", String(kwargs["author"])),
                    ("title", String(kwargs["title"])),
                    ("active_approvals_to_add",
                     Array(active_approvals_to_add)),
                    ("active_approvals_to_remove",
                     Array(active_approvals_to_remove)),
                    ("owner_approvals_to_add", Array(owner_approvals_to_add)),
                    ("owner_approvals_to_remove",
                     Array(owner_approvals_to_remove)),
                    ("posting_approvals_to_add",
                     Array(posting_approvals_to_add)),
                    ("posting_approvals_to_remove",
                     Array(posting_approvals_to_remove)),
                    ("key_approvals_to_add", Array(key_approvals_to_add)),
                    ("key_approvals_to_remove",
                     Array(key_approvals_to_remove)),
                    ("extensions", Array(kwargs.get("extensions") or [])),
                ]))
Example #7
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]

            new_extensions = []

            # handle beneficiaries
            if "beneficiaries" in kwargs and kwargs["beneficiaries"]:
                new_extensions.append(
                    [0, {
                        "beneficiaries": kwargs["beneficiaries"]
                    }])

            if "auction_window_reward_destination" in kwargs and kwargs[
                    "auction_window_reward_destination"]:
                new_extensions.append([
                    1, {
                        "destination":
                        kwargs["auction_window_reward_destination"]
                    }
                ])

            if "curation_rewards_percent" in kwargs and kwargs[
                    "curation_rewards_percent"]:
                new_extensions.append(
                    [2, {
                        "percent": kwargs["curation_rewards_percent"]
                    }])

            if new_extensions:
                kwargs["extensions"] = new_extensions

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

            super().__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),
                ]))
Example #8
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]
            prefix = kwargs.pop("prefix", default_prefix)

            assert len(kwargs["new_account_name"]) <= 16, "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().__init__(OrderedDict([
                ('fee', Amount(kwargs["fee"])),
                ('delegation', Amount(kwargs["delegation"])),
                ('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([])),
            ]))
Example #9
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().__init__(OrderedDict([
             ('author', String(kwargs['author'])),
             ('title', String(kwargs['title'])),
             ('requester', String(kwargs['requester'])),
             ('extensions', Array(kwargs.get('extensions') or []))
         ]))
Example #10
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().__init__(
             OrderedDict([
                 ("author", String(kwargs["author"])),
                 ("title", String(kwargs["title"])),
                 ("requester", String(kwargs["requester"])),
                 ("extensions", Array(kwargs.get("extensions") or [])),
             ]))
Example #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().__init__(
             OrderedDict([
                 ("from", String(kwargs["from"])),
                 ("to", String(kwargs["to"])),
                 ("amount", Amount(kwargs["amount"])),
                 ("to_vesting", Bool(bool(kwargs["to_vesting"]))),
                 ("extensions", Array([])),
             ]))
Example #12
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]

            assert kwargs[
                "proposed_operations"], "proposed_operations cannot be empty!"

            if isinstance(kwargs["proposed_operations"][0], GrapheneObject):
                proposed_operations = [
                    OperationWrapper(Operation(op))
                    for op in kwargs["proposed_operations"]
                ]
            else:
                proposed_operations = [
                    OperationWrapper(Operation(op["op"]))
                    for op in kwargs["proposed_operations"]
                ]

            review_period_time = PointInTime(
                kwargs["review_period_time"]) if kwargs.get(
                    "review_period_time") else None

            super().__init__(
                OrderedDict([
                    ("author", String(kwargs["author"])),
                    ("title", String(kwargs["title"])),
                    ("memo", String(kwargs.get("memo", ""))),
                    ("expiration_time",
                     PointInTime(kwargs["expiration_time"])),
                    ("proposed_operations", Array(proposed_operations)),
                    ("review_period_time", Optional(review_period_time)),
                    ("extensions", Array(kwargs.get("extensions") or [])),
                ]))
Example #13
0
 def __init__(self, kwargs):
     super().__init__(OrderedDict([
         ('beneficiaries',
          Array([Beneficiary(o) for o in kwargs["beneficiaries"]])),
     ]))
Example #14
0
    def sign(self, wifkeys, chain=None):
        """ Sign the transaction with the provided private keys.

            :param list wifkeys: Array of wif keys
            :param str chain: identifier for the chain

        """
        if not chain:
            raise ValueError("Chain needs to be provided!")
        self.deriveDigest(chain)

        # Get Unique private keys
        self.privkeys = []
        [
            self.privkeys.append(item) for item in wifkeys
            if item not in self.privkeys
        ]

        # Sign the message with every private key given!
        sigs = []
        for wif in self.privkeys:
            p = bytes(PrivateKey(wif))
            i = 0
            if USE_SECP256K1:
                ndata = secp256k1.ffi.new("const int *ndata")
                ndata[0] = 0
                while True:
                    ndata[0] += 1
                    privkey = secp256k1.PrivateKey(p, raw=True)
                    sig = secp256k1.ffi.new(
                        'secp256k1_ecdsa_recoverable_signature *')
                    signed = secp256k1.lib.secp256k1_ecdsa_sign_recoverable(
                        privkey.ctx, sig, self.digest, privkey.private_key,
                        secp256k1.ffi.NULL, ndata)
                    assert signed == 1
                    signature, i = privkey.ecdsa_recoverable_serialize(sig)
                    if self._is_canonical(signature):
                        i += 4  # compressed
                        i += 27  # compact
                        break
            else:
                cnt = 0
                sk = ecdsa.SigningKey.from_string(p, curve=ecdsa.SECP256k1)
                while 1:
                    cnt += 1
                    if not cnt % 20:
                        log.info(
                            "Still searching for a canonical signature. Tried %d times already!"
                            % cnt)

                    # Deterministic k
                    #
                    k = ecdsa.rfc6979.generate_k(
                        sk.curve.generator.order(),
                        sk.privkey.secret_multiplier,
                        hashlib.sha256,
                        hashlib.sha256(
                            self.digest + struct.pack("d", time.time(
                            ))  # use the local time to randomize the signature
                        ).digest())

                    # Sign message
                    #
                    sigder = sk.sign_digest(self.digest,
                                            sigencode=ecdsa.util.sigencode_der,
                                            k=k)

                    # Reformating of signature
                    #
                    r, s = ecdsa.util.sigdecode_der(sigder,
                                                    sk.curve.generator.order())
                    signature = ecdsa.util.sigencode_string(
                        r, s, sk.curve.generator.order())

                    # Make sure signature is canonical!
                    #
                    lenR = sigder[3]
                    lenS = sigder[5 + lenR]
                    if lenR is 32 and lenS is 32:
                        # Derive the recovery parameter
                        #
                        i = self.recoverPubkeyParameter(
                            self.digest, signature, sk.get_verifying_key())
                        i += 4  # compressed
                        i += 27  # compact
                        break

            # pack signature
            #
            sigstr = struct.pack("<B", i)
            sigstr += signature

            sigs.append(Signature(sigstr))

        self.data["signatures"] = Array(sigs)
        return self