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 [])), ]))
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)), ]))
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), ]))
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']), ]))
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 [])), ]))
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 [])), ]))
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), ]))
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([])), ]))
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 [])) ]))
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 [])), ]))
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([])), ]))
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 [])), ]))
def __init__(self, kwargs): super().__init__(OrderedDict([ ('beneficiaries', Array([Beneficiary(o) for o in kwargs["beneficiaries"]])), ]))
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