diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7d529efa3ea8083aea665d4378d26a8ce828e28a..717e5a74ba3651e79b45236b9b573d1fd59ff136 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,12 @@ Changelog ========= +0.24.4 +------ +* add get_replace_hive_by_steem() to Hive(), which is True on HF23 +* Replace HIVE by STEEM and SBD by HBD only when Hive HF < 24 +* Replace steem and sbd paramter names for Hive HF >= 24 by hive and hbd +* Add get follow list to Account (only for HIVE and HF >= 24) + 0.24.3 ------ * Fix encrypted memo decryption diff --git a/beem/account.py b/beem/account.py index 03a7e588742d75c80a96ffc89cabf78d2f21af24..de53fc446e90f774fcdbdf676da2fd48e302aef2 100644 --- a/beem/account.py +++ b/beem/account.py @@ -1043,6 +1043,34 @@ class Account(BlockchainObject): else: return Accounts(name_list, blockchain_instance=self.blockchain) + def get_follow_list(self, follow_type, starting_account=None, limit=100, raw_name_list=True): + """ Returns the follow list for the specified follow_type (Only HIVE with HF >= 24) + + :param list follow_type: follow_type can be `blacklisted`, `follow_blacklist` `muted`, or `follow_muted` + """ + if not self.blockchain.is_connected(): + raise OfflineHasNoRPCException("No RPC available in offline mode!") + limit_reached = True + cnt = 0 + while limit_reached: + self.blockchain.rpc.set_next_node_on_empty_reply(False) + query = {'observer': self.name, 'follow_type': follow_type, 'starting_account': starting_account, 'limit': limit} + followers = self.blockchain.rpc.get_follow_list(query, api='bridge') + if cnt == 0: + name_list = followers + elif followers is not None and len(followers) > 1: + name_list += followers[1:] + if followers is not None and len(followers) >= limit: + starting_account = followers[-1] + limit_reached = True + cnt += 1 + else: + limit_reached = False + if raw_name_list: + return name_list + else: + return Accounts(name_list, blockchain_instance=self.blockchain) + def _get_followers(self, direction="follower", last_user="", what="blog", limit=100): """ Help function, used in get_followers and get_following """ @@ -2728,11 +2756,11 @@ class Account(BlockchainObject): .. code-block:: python from beem.account import Account - from beem import Steem + from beem import Hive active_wif = "5xxxx" - stm = Steem(keys=[active_wif]) + stm = Hive(keys=[active_wif]) acc = Account("test", blockchain_instance=stm) - acc.transfer("test1", 1, "STEEM", "test") + acc.transfer("test1", 1, "HIVE", "test") """ @@ -2742,6 +2770,7 @@ class Account(BlockchainObject): account = Account(account, blockchain_instance=self.blockchain) amount = Amount(amount, asset, blockchain_instance=self.blockchain) to = Account(to, blockchain_instance=self.blockchain) + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() if memo and memo[0] == "#": from .memo import Memo memoObj = Memo( @@ -2757,6 +2786,7 @@ class Account(BlockchainObject): "memo": memo, "from": account["name"], "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active", **kwargs) @@ -2777,7 +2807,7 @@ class Account(BlockchainObject): else: to = Account(to, blockchain_instance=self.blockchain) amount = self._check_amount(amount, self.blockchain.token_symbol) - + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() to = Account(to, blockchain_instance=self.blockchain) op = operations.Transfer_to_vesting(**{ @@ -2785,6 +2815,7 @@ class Account(BlockchainObject): "to": to["name"], "amount": amount, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active", **kwargs) @@ -2807,12 +2838,14 @@ class Account(BlockchainObject): request_id = int(request_id) else: request_id = random.getrandbits(32) + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() op = operations.Convert( **{ "owner": account["name"], "requestid": request_id, "amount": amount, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active") @@ -2842,7 +2875,7 @@ class Account(BlockchainObject): to = account # move to savings on same account else: to = Account(to, blockchain_instance=self.blockchain) - + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() op = operations.Transfer_to_savings( **{ "from": account["name"], @@ -2850,6 +2883,7 @@ class Account(BlockchainObject): "amount": amount, "memo": memo, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active", **kwargs) @@ -2890,6 +2924,8 @@ class Account(BlockchainObject): else: request_id = random.getrandbits(32) + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() + op = operations.Transfer_from_savings( **{ "from": account["name"], @@ -2898,6 +2934,7 @@ class Account(BlockchainObject): "amount": amount, "memo": memo, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active", **kwargs) @@ -2935,15 +2972,19 @@ class Account(BlockchainObject): def claim_reward_balance(self, reward_steem=0, reward_sbd=0, + reward_hive=0, + reward_hbd=0, reward_vests=0, account=None, **kwargs): """ Claim reward balances. By default, this will claim ``all`` outstanding balances. To bypass this behaviour, set desired claim amount by setting any of - `reward_steem`, `reward_sbd` or `reward_vests`. + `reward_steem`/``reward_hive, `reward_sbd`/``reward_hbd or `reward_vests`. :param str reward_steem: Amount of STEEM you would like to claim. + :param str reward_hive: Amount of HIVE you would like to claim. :param str reward_sbd: Amount of SBD you would like to claim. + :param str reward_hbd: Amount of HBD you would like to claim. :param str reward_vests: Amount of VESTS you would like to claim. :param str account: The source account for the claim if not ``default_account`` is used. @@ -2959,9 +3000,16 @@ class Account(BlockchainObject): # if no values were set by user, claim all outstanding balances on # account - reward_steem = self._check_amount(reward_steem, self.blockchain.token_symbol) - reward_sbd = self._check_amount(reward_sbd, self.blockchain.backed_token_symbol) + reward_steem = self._check_amount(reward_steem + reward_hive, self.blockchain.token_symbol) + reward_sbd = self._check_amount(reward_sbd + reward_hbd, self.blockchain.backed_token_symbol) reward_vests = self._check_amount(reward_vests, self.blockchain.vest_token_symbol) + + reward_token = "reward_steem" + reward_backed_token = "reward_sbd" + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() + if not replace_hive_by_steem: + reward_token = "reward_hive" + reward_backed_token = "reward_hbd" if reward_steem.amount == 0 and reward_sbd.amount == 0 and reward_vests.amount == 0: if len(account.balances["rewards"]) == 3: @@ -2971,18 +3019,19 @@ class Account(BlockchainObject): op = operations.Claim_reward_balance( **{ "account": account["name"], - "reward_steem": reward_steem, - "reward_sbd": reward_sbd, + reward_token: reward_steem, + reward_backed_token: reward_sbd, "reward_vests": reward_vests, "prefix": self.blockchain.prefix, - }) + "replace_hive_by_steem": replace_hive_by_steem + }) else: reward_steem = account.balances["rewards"][0] reward_vests = account.balances["rewards"][1] op = operations.Claim_reward_balance( **{ "account": account["name"], - "reward_steem": reward_steem, + reward_token: reward_steem, "reward_vests": reward_vests, "prefix": self.blockchain.prefix, }) diff --git a/beem/blockchaininstance.py b/beem/blockchaininstance.py index 817c24f8294bdf85e87e65a8b3f87ce06e37f878..cf244c63a5c0d4aa52e91c25fef2e6cf59e7ca1f 100644 --- a/beem/blockchaininstance.py +++ b/beem/blockchaininstance.py @@ -739,6 +739,13 @@ class BlockChainInstance(object): return False return 'STEEM_CHAIN_ID' in self.get_config() + def get_replace_hive_by_steem(self): + hf_version = int(self.get_blockchain_version().split('.')[1]) + replace_hive_by_steem = True + if self.is_hive and hf_version >= 24: + replace_hive_by_steem = False + return replace_hive_by_steem + def set_default_account(self, account): """ Set the default account to be used """ @@ -1016,10 +1023,12 @@ class BlockChainInstance(object): "Not creator account given. Define it with " + "creator=x, or set the default_account using beempy") creator = Account(creator, blockchain_instance=self) + replace_hive_by_steem = self.get_replace_hive_by_steem() op = { "fee": Amount(fee, blockchain_instance=self), "creator": creator["name"], "prefix": self.prefix, + "replace_hive_by_steem": replace_hive_by_steem, } op = operations.Claim_account(**op) return self.finalizeOp(op, creator, "active", **kwargs) @@ -1194,10 +1203,12 @@ class BlockChainInstance(object): addaccount = Account(k, blockchain_instance=self) posting_accounts_authority.append([addaccount["name"], 1]) if combine_with_claim_account: + replace_hive_by_steem = self.get_replace_hive_by_steem() op = { "fee": Amount(fee, blockchain_instance=self), "creator": creator["name"], "prefix": self.prefix, + "replace_hive_by_steem": replace_hive_by_steem, } op = operations.Claim_account(**op) ops = [op] @@ -1395,6 +1406,7 @@ class BlockChainInstance(object): required_fee_steem = Amount(props["account_creation_fee"], blockchain_instance=self) else: required_fee_steem = Amount(props["account_creation_fee"], blockchain_instance=self) * 30 + replace_hive_by_steem = self.get_replace_hive_by_steem() op = { "fee": required_fee_steem, "creator": creator["name"], @@ -1414,6 +1426,7 @@ class BlockChainInstance(object): 'memo_key': memo, "json_metadata": json_meta or {}, "prefix": self.prefix, + "replace_hive_by_steem": replace_hive_by_steem, } op = operations.Account_create(**op) return self.finalizeOp(op, creator, "active", **kwargs) @@ -1622,8 +1635,8 @@ class BlockChainInstance(object): props_list = [["key", repr(PrivateKey(wif, prefix=self.prefix).pubkey)]] for k in props: props_list.append([k, props[k]]) - - op = operations.Witness_set_properties({"owner": owner["name"], "props": props_list, "prefix": self.prefix}) + replace_hive_by_steem = self.get_replace_hive_by_steem() + op = operations.Witness_set_properties({"owner": owner["name"], "props": props_list, "prefix": self.prefix, "replace_hive_by_steem": replace_hive_by_steem}) tb = TransactionBuilder(use_condenser_api=use_condenser_api, blockchain_instance=self) tb.appendOps([op]) tb.appendWif(wif) @@ -1660,6 +1673,7 @@ class BlockChainInstance(object): raise e if "account_creation_fee" in props: props["account_creation_fee"] = Amount(props["account_creation_fee"], blockchain_instance=self) + replace_hive_by_steem = self.get_replace_hive_by_steem() op = operations.Witness_update( **{ "owner": account["name"], @@ -1668,6 +1682,7 @@ class BlockChainInstance(object): "props": props, "fee": Amount(0, self.token_symbol, blockchain_instance=self), "prefix": self.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.finalizeOp(op, account, "active", **kwargs) @@ -2078,26 +2093,51 @@ class BlockChainInstance(object): options['beneficiaries'] = beneficiaries default_max_payout = "1000000.000 %s" % (self.backed_token_symbol) - comment_op = operations.Comment_options( - **{ - "author": - author, - "permlink": - permlink, - "max_accepted_payout": - options.get("max_accepted_payout", default_max_payout), - "percent_steem_dollars": - int(options.get("percent_steem_dollars", STEEM_100_PERCENT)), - "allow_votes": - options.get("allow_votes", True), - "allow_curation_rewards": - options.get("allow_curation_rewards", True), - "extensions": - options.get("extensions", []), - "beneficiaries": - options.get("beneficiaries", []), - "prefix": self.prefix, - }) + replace_hive_by_steem = self.get_replace_hive_by_steem() + if not replace_hive_by_steem: + comment_op = operations.Comment_options( + **{ + "author": + author, + "permlink": + permlink, + "max_accepted_payout": + options.get("max_accepted_payout", default_max_payout), + "percent_hive_dollars": + int(options.get("percent_hive_dollars", STEEM_100_PERCENT)), + "allow_votes": + options.get("allow_votes", True), + "allow_curation_rewards": + options.get("allow_curation_rewards", True), + "extensions": + options.get("extensions", []), + "beneficiaries": + options.get("beneficiaries", []), + "prefix": self.prefix, + "replace_hive_by_steem": False, + }) + else: + comment_op = operations.Comment_options( + **{ + "author": + author, + "permlink": + permlink, + "max_accepted_payout": + options.get("max_accepted_payout", default_max_payout), + "percent_steem_dollars": + int(options.get("percent_steem_dollars", STEEM_100_PERCENT)), + "allow_votes": + options.get("allow_votes", True), + "allow_curation_rewards": + options.get("allow_curation_rewards", True), + "extensions": + options.get("extensions", []), + "beneficiaries": + options.get("beneficiaries", []), + "prefix": self.prefix, + "replace_hive_by_steem": True, + }) return comment_op def get_api_methods(self): diff --git a/beem/market.py b/beem/market.py index 650b45790cc75d0b2be975c5fd6b4d6996959302..94635b7e5d201049eec274159900c7eff35d19cd 100644 --- a/beem/market.py +++ b/beem/market.py @@ -590,7 +590,7 @@ class Market(dict): amount = Amount(amount, blockchain_instance=self.blockchain) else: amount = Amount(amount, self["quote"]["symbol"], blockchain_instance=self.blockchain) - + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() order = operations.Limit_order_create(**{ "owner": account["name"], "orderid": orderid or random.getrandbits(32), @@ -607,6 +607,7 @@ class Market(dict): "expiration": formatTimeFromNow(expiration), "fill_or_kill": killfill, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) if returnOrderId: @@ -674,7 +675,7 @@ class Market(dict): amount = Amount(amount, blockchain_instance=self.blockchain) else: amount = Amount(amount, self["quote"]["symbol"], blockchain_instance=self.blockchain) - + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() order = operations.Limit_order_create(**{ "owner": account["name"], "orderid": orderid or random.getrandbits(32), @@ -691,6 +692,7 @@ class Market(dict): "expiration": formatTimeFromNow(expiration), "fill_or_kill": killfill, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) if returnOrderId: # Make blocking broadcasts diff --git a/beem/version.py b/beem/version.py index cc4ed752761fe3e3eba8d9fbc638ed7f3956f9c6..5d831152dcf569797b1e73f40975fd74c989f9ce 100644 --- a/beem/version.py +++ b/beem/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.24.3' +version = '0.24.4' diff --git a/beem/witness.py b/beem/witness.py index 742b2aa69d2081cb8a9007bf1b243eef1e52f8f3..1474ee16c1d80d97d822d5a773b3636a1598f520 100644 --- a/beem/witness.py +++ b/beem/witness.py @@ -158,7 +158,7 @@ class Witness(BlockchainObject): raise AssertionError() if not quote.symbol == self.blockchain.token_symbol: raise AssertionError() - + replace_hive_by_steem = self.blockchain.get_replace_hive_by_steem() op = operations.Feed_publish( **{ "publisher": account["name"], @@ -167,6 +167,7 @@ class Witness(BlockchainObject): "quote": quote, }, "prefix": self.blockchain.prefix, + "replace_hive_by_steem": replace_hive_by_steem, }) return self.blockchain.finalizeOp(op, account, "active") diff --git a/beemapi/version.py b/beemapi/version.py index cc4ed752761fe3e3eba8d9fbc638ed7f3956f9c6..5d831152dcf569797b1e73f40975fd74c989f9ce 100644 --- a/beemapi/version.py +++ b/beemapi/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.24.3' +version = '0.24.4' diff --git a/beembase/objects.py b/beembase/objects.py index de71c8e3ea6ab30d282fdd6f92aa1e22f56ca230..b0e1f41eb40946dfc4471b9b549a8336715c836f 100644 --- a/beembase/objects.py +++ b/beembase/objects.py @@ -27,7 +27,8 @@ default_prefix = "STM" @python_2_unicode_compatible class Amount(object): - def __init__(self, d, prefix=default_prefix): + 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 @@ -49,9 +50,10 @@ class Amount(object): raise Exception("Asset unknown") self.amount = round(float(self.amount) * 10 ** self.precision) # Workaround to allow transfers in HIVE - if self.symbol == "HBD": + + if self.symbol == "HBD" and replace_hive_by_steem: self.symbol = "SBD" - elif self.symbol == "HIVE": + 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): @@ -87,9 +89,9 @@ class Amount(object): self.amount = d.amount self.symbol = d.symbol # Workaround to allow transfers in HIVE - if self.symbol == "HBD": + if self.symbol == "HBD" and replace_hive_by_steem: self.symbol = "SBD" - elif self.symbol == "HIVE": + elif self.symbol == "HIVE" and replace_hive_by_steem: self.symbol = "STEEM" self.asset = d.asset["asset"] self.precision = d.asset["precision"] @@ -101,9 +103,9 @@ class Amount(object): def __bytes__(self): # padding # Workaround to allow transfers in HIVE - if self.symbol == "HBD": + if self.symbol == "HBD" and self.replace_hive_by_steem: self.symbol = "SBD" - elif self.symbol == "HIVE": + elif self.symbol == "HIVE" and self.replace_hive_by_steem: self.symbol = "STEEM" symbol = self.symbol + "\x00" * (7 - len(self.symbol)) return (struct.pack("<q", int(self.amount)) + struct.pack("<b", self.precision) + @@ -182,15 +184,22 @@ class WitnessProps(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if "sbd_interest_rate" in kwargs: super(WitnessProps, self).__init__(OrderedDict([ - ('account_creation_fee', Amount(kwargs["account_creation_fee"], prefix=prefix)), + ('account_creation_fee', Amount(kwargs["account_creation_fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('maximum_block_size', Uint32(kwargs["maximum_block_size"])), ('sbd_interest_rate', Uint16(kwargs["sbd_interest_rate"])), ])) + elif "hbd_interest_rate" in kwargs: + super(WitnessProps, self).__init__(OrderedDict([ + ('account_creation_fee', Amount(kwargs["account_creation_fee"], prefix=prefix, replace_hive_by_steem=False)), + ('maximum_block_size', Uint32(kwargs["maximum_block_size"])), + ('hbd_interest_rate', Uint16(kwargs["hbd_interest_rate"])), + ])) else: super(WitnessProps, self).__init__(OrderedDict([ - ('account_creation_fee', Amount(kwargs["account_creation_fee"], prefix=prefix)), + ('account_creation_fee', Amount(kwargs["account_creation_fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('maximum_block_size', Uint32(kwargs["maximum_block_size"])), ])) @@ -203,9 +212,10 @@ class Price(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(Price, self).__init__(OrderedDict([ - ('base', Amount(kwargs["base"], prefix=prefix)), - ('quote', Amount(kwargs["quote"], prefix=prefix)) + ('base', Amount(kwargs["base"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('quote', Amount(kwargs["quote"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)) ])) @@ -264,10 +274,11 @@ class ExchangeRate(GrapheneObject): kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(ExchangeRate, self).__init__( OrderedDict([ - ('base', Amount(kwargs["base"], prefix=prefix)), - ('quote', Amount(kwargs["quote"], prefix=prefix)), + ('base', Amount(kwargs["base"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('quote', Amount(kwargs["quote"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ])) diff --git a/beembase/operations.py b/beembase/operations.py index 11bea656f669911d728a8b5e0bc6dbd7f82c4e05..20bc44bd65ce9a2a1d7ea76182689f58dd27bf82 100644 --- a/beembase/operations.py +++ b/beembase/operations.py @@ -52,6 +52,7 @@ class Transfer(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if "memo" not in kwargs: kwargs["memo"] = "" if isinstance(kwargs["memo"], dict): @@ -65,7 +66,7 @@ class Transfer(GrapheneObject): super(Transfer, self).__init__(OrderedDict([ ('from', String(kwargs["from"])), ('to', String(kwargs["to"])), - ('amount', Amount(kwargs["amount"], prefix=prefix)), + ('amount', Amount(kwargs["amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('memo', memo), ])) @@ -91,10 +92,11 @@ class Transfer_to_vesting(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(Transfer_to_vesting, self).__init__(OrderedDict([ ('from', String(kwargs["from"])), ('to', String(kwargs["to"])), - ('amount', Amount(kwargs["amount"], prefix=prefix)), + ('amount', Amount(kwargs["amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ])) @@ -182,7 +184,7 @@ class Account_create(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) - + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if not len(kwargs["new_account_name"]) <= 16: raise AssertionError("Account name must be at most 16 chars long") @@ -194,7 +196,7 @@ class Account_create(GrapheneObject): meta = kwargs["json_metadata"] super(Account_create, self).__init__(OrderedDict([ - ('fee', Amount(kwargs["fee"], prefix=prefix)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('creator', String(kwargs["creator"])), ('new_account_name', String(kwargs["new_account_name"])), ('owner', Permission(kwargs["owner"], prefix=prefix)), @@ -213,7 +215,7 @@ class Account_create_with_delegation(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) - + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if not len(kwargs["new_account_name"]) <= 16: raise AssertionError("Account name must be at most 16 chars long") @@ -225,8 +227,8 @@ class Account_create_with_delegation(GrapheneObject): meta = kwargs["json_metadata"] super(Account_create_with_delegation, self).__init__(OrderedDict([ - ('fee', Amount(kwargs["fee"], prefix=prefix)), - ('delegation', Amount(kwargs["delegation"], prefix=prefix)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('delegation', Amount(kwargs["delegation"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('creator', String(kwargs["creator"])), ('new_account_name', String(kwargs["new_account_name"])), ('owner', Permission(kwargs["owner"], prefix=prefix)), @@ -340,6 +342,7 @@ class Create_proposal(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) extensions = Array([]) super(Create_proposal, self).__init__( @@ -348,7 +351,7 @@ class Create_proposal(GrapheneObject): ('receiver', String(kwargs["receiver"])), ('start_date', PointInTime(kwargs["start_date"])), ('end_date', PointInTime(kwargs["end_date"])), - ('daily_pay', Amount(kwargs["daily_pay"], prefix=prefix)), + ('daily_pay', Amount(kwargs["daily_pay"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('subject', String(kwargs["subject"])), ('permlink', String(kwargs["permlink"])), ('extensions', extensions) @@ -402,6 +405,7 @@ class Witness_set_properties(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.pop("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) extensions = Array([]) props = {} for k in kwargs["props"]: @@ -424,14 +428,20 @@ class Witness_set_properties(GrapheneObject): 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 isinstance(k[1], int) and k[0] in ["hbd_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() + props[k[0]] = (hexlify(Amount(k[1], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem).__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() + props[k[0]] = (hexlify(Amount(k[1], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem).__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() + props[k[0]] = (hexlify(ExchangeRate(k[1], replace_hive_by_steem=replace_hive_by_steem).__bytes__())).decode() + elif not isinstance(k[1], str) and k[0] in ["hbd_exchange_rate"]: + if 'prefix' not in k[1]: + k[1]['prefix'] = prefix + props[k[0]] = (hexlify(ExchangeRate(k[1], replace_hive_by_steem=False).__bytes__())).decode() elif not is_hex and k[0] in ["url"]: props[k[0]] = (hexlify(String(k[1]).__bytes__())).decode() else: @@ -460,7 +470,7 @@ class Witness_update(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.pop("prefix", default_prefix) - + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if "block_signing_key" in kwargs and kwargs["block_signing_key"]: block_signing_key = (PublicKey(kwargs["block_signing_key"], prefix=prefix)) else: @@ -473,8 +483,8 @@ class Witness_update(GrapheneObject): ('owner', String(kwargs["owner"])), ('url', String(kwargs["url"])), ('block_signing_key', block_signing_key), - ('props', WitnessProps(kwargs["props"])), - ('fee', Amount(kwargs["fee"], prefix=prefix)), + ('props', WitnessProps(kwargs["props"], replace_hive_by_steem=replace_hive_by_steem)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ])) @@ -538,7 +548,7 @@ class Comment_options(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) - + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) # handle beneficiaries if "beneficiaries" in kwargs and kwargs['beneficiaries']: kwargs['extensions'] = [[0, {'beneficiaries': kwargs['beneficiaries']}]] @@ -546,20 +556,34 @@ class Comment_options(GrapheneObject): 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), - ])) + if "percent_steem_dollars" in kwargs: + super(Comment_options, self).__init__( + OrderedDict([ + ('author', String(kwargs["author"])), + ('permlink', String(kwargs["permlink"])), + ('max_accepted_payout', + Amount(kwargs["max_accepted_payout"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('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), + ])) + else: + super(Comment_options, self).__init__( + OrderedDict([ + ('author', String(kwargs["author"])), + ('permlink', String(kwargs["permlink"])), + ('max_accepted_payout', + Amount(kwargs["max_accepted_payout"], prefix=prefix, replace_hive_by_steem=False)), + ('percent_hive_dollars', + Uint16(int(kwargs["percent_hive_dollars"]))), + ('allow_votes', Bool(bool(kwargs["allow_votes"]))), + ('allow_curation_rewards', + Bool(bool(kwargs["allow_curation_rewards"]))), + ('extensions', extensions), + ])) class Delete_comment(GrapheneObject): @@ -582,12 +606,13 @@ class Feed_publish(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if 'prefix' not in kwargs['exchange_rate']: kwargs['exchange_rate']['prefix'] = prefix super(Feed_publish, self).__init__( OrderedDict([ ('publisher', String(kwargs["publisher"])), - ('exchange_rate', ExchangeRate(kwargs["exchange_rate"])), + ('exchange_rate', ExchangeRate(kwargs["exchange_rate"], replace_hive_by_steem=replace_hive_by_steem)), ])) @@ -598,11 +623,12 @@ class Convert(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(Convert, self).__init__( OrderedDict([ ('owner', String(kwargs["owner"])), ('requestid', Uint32(kwargs["requestid"])), - ('amount', Amount(kwargs["amount"], prefix=prefix)), + ('amount', Amount(kwargs["amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ])) @@ -641,10 +667,11 @@ class Claim_account(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(Claim_account, self).__init__( OrderedDict([ ('creator', String(kwargs["creator"])), - ('fee', Amount(kwargs["fee"], prefix=prefix)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('extensions', Array([])), ])) @@ -702,12 +729,13 @@ class Limit_order_create(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) super(Limit_order_create, self).__init__( OrderedDict([ ('owner', String(kwargs["owner"])), ('orderid', Uint32(kwargs["orderid"])), - ('amount_to_sell', Amount(kwargs["amount_to_sell"], prefix=prefix)), - ('min_to_receive', Amount(kwargs["min_to_receive"], prefix=prefix)), + ('amount_to_sell', Amount(kwargs["amount_to_sell"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('min_to_receive', Amount(kwargs["min_to_receive"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('fill_or_kill', Bool(kwargs["fill_or_kill"])), ('expiration', PointInTime(kwargs["expiration"])), ])) @@ -720,15 +748,16 @@ class Limit_order_create2(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if 'prefix' not in kwargs['exchange_rate']: kwargs['exchange_rate']['prefix'] = prefix super(Limit_order_create2, self).__init__( OrderedDict([ ('owner', String(kwargs["owner"])), ('orderid', Uint32(kwargs["orderid"])), - ('amount_to_sell', Amount(kwargs["amount_to_sell"], prefix=prefix)), + ('amount_to_sell', Amount(kwargs["amount_to_sell"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('fill_or_kill', Bool(kwargs["fill_or_kill"])), - ('exchange_rate', ExchangeRate(kwargs["exchange_rate"])), + ('exchange_rate', ExchangeRate(kwargs["exchange_rate"], replace_hive_by_steem=replace_hive_by_steem)), ('expiration', PointInTime(kwargs["expiration"])), ])) @@ -754,6 +783,7 @@ class Transfer_from_savings(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if "memo" not in kwargs: kwargs["memo"] = "" @@ -762,7 +792,7 @@ class Transfer_from_savings(GrapheneObject): ('from', String(kwargs["from"])), ('request_id', Uint32(kwargs["request_id"])), ('to', String(kwargs["to"])), - ('amount', Amount(kwargs["amount"], prefix=prefix)), + ('amount', Amount(kwargs["amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('memo', String(kwargs["memo"])), ])) @@ -787,21 +817,37 @@ class Claim_reward_balance(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) - if "reward_sbd" in kwargs: + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) + if "reward_sbd" in kwargs and "reward_steem" in kwargs: super(Claim_reward_balance, self).__init__( OrderedDict([ ('account', String(kwargs["account"])), - ('reward_steem', Amount(kwargs["reward_steem"], prefix=prefix)), - ('reward_sbd', Amount(kwargs["reward_sbd"], prefix=prefix)), + ('reward_steem', Amount(kwargs["reward_steem"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('reward_sbd', Amount(kwargs["reward_sbd"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('reward_vests', Amount(kwargs["reward_vests"], prefix=prefix)), ])) - else: + elif "reward_hbd" in kwargs and "reward_hive" in kwargs: super(Claim_reward_balance, self).__init__( OrderedDict([ ('account', String(kwargs["account"])), - ('reward_steem', Amount(kwargs["reward_steem"], prefix=prefix)), + ('reward_hive', Amount(kwargs["reward_hive"], prefix=prefix, replace_hive_by_steem=False)), + ('reward_hbd', Amount(kwargs["reward_hbd"], prefix=prefix, replace_hive_by_steem=False)), + ('reward_vests', Amount(kwargs["reward_vests"], prefix=prefix)), + ])) + elif "reward_steem" in kwargs: + super(Claim_reward_balance, self).__init__( + OrderedDict([ + ('account', String(kwargs["account"])), + ('reward_steem', Amount(kwargs["reward_steem"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('reward_vests', Amount(kwargs["reward_vests"], prefix=prefix)), ])) + else: + super(Claim_reward_balance, self).__init__( + OrderedDict([ + ('account', String(kwargs["account"])), + ('reward_hive', Amount(kwargs["reward_hive"], prefix=prefix, replace_hive_by_steem=False)), + ('reward_vests', Amount(kwargs["reward_vests"], prefix=prefix)), + ])) class Transfer_to_savings(GrapheneObject): @@ -811,13 +857,14 @@ class Transfer_to_savings(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) if "memo" not in kwargs: kwargs["memo"] = "" super(Transfer_to_savings, self).__init__( OrderedDict([ ('from', String(kwargs["from"])), ('to', String(kwargs["to"])), - ('amount', Amount(kwargs["amount"], prefix=prefix)), + ('amount', Amount(kwargs["amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), ('memo', String(kwargs["memo"])), ])) @@ -864,25 +911,41 @@ class Escrow_transfer(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) meta = "" if "json_meta" in kwargs and kwargs["json_meta"]: if (isinstance(kwargs["json_meta"], dict) or isinstance(kwargs["json_meta"], list)): meta = json.dumps(kwargs["json_meta"]) else: meta = kwargs["json_meta"] - super(Escrow_transfer, self).__init__( - OrderedDict([ - ('from', String(kwargs["from"])), - ('to', String(kwargs["to"])), - ('agent', String(kwargs["agent"])), - ('escrow_id', Uint32(kwargs["escrow_id"])), - ('sbd_amount', Amount(kwargs["sbd_amount"], prefix=prefix)), - ('steem_amount', Amount(kwargs["steem_amount"], prefix=prefix)), - ('fee', Amount(kwargs["fee"], prefix=prefix)), - ('ratification_deadline', PointInTime(kwargs["ratification_deadline"])), - ('escrow_expiration', PointInTime(kwargs["escrow_expiration"])), - ('json_meta', String(meta)), - ])) + if "sbd_amount" in kwargs and "steem_amount" in kwargs: + super(Escrow_transfer, self).__init__( + OrderedDict([ + ('from', String(kwargs["from"])), + ('to', String(kwargs["to"])), + ('agent', String(kwargs["agent"])), + ('escrow_id', Uint32(kwargs["escrow_id"])), + ('sbd_amount', Amount(kwargs["sbd_amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('steem_amount', Amount(kwargs["steem_amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('ratification_deadline', PointInTime(kwargs["ratification_deadline"])), + ('escrow_expiration', PointInTime(kwargs["escrow_expiration"])), + ('json_meta', String(meta)), + ])) + else: + super(Escrow_transfer, self).__init__( + OrderedDict([ + ('from', String(kwargs["from"])), + ('to', String(kwargs["to"])), + ('agent', String(kwargs["agent"])), + ('escrow_id', Uint32(kwargs["escrow_id"])), + ('hbd_amount', Amount(kwargs["hbd_amount"], prefix=prefix, replace_hive_by_steem=False)), + ('hive_amount', Amount(kwargs["hive_amount"], prefix=prefix, replace_hive_by_steem=False)), + ('fee', Amount(kwargs["fee"], prefix=prefix, replace_hive_by_steem=False)), + ('ratification_deadline', PointInTime(kwargs["ratification_deadline"])), + ('escrow_expiration', PointInTime(kwargs["escrow_expiration"])), + ('json_meta', String(meta)), + ])) class Escrow_dispute(GrapheneObject): @@ -907,15 +970,27 @@ class Escrow_release(GrapheneObject): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] prefix = kwargs.get("prefix", default_prefix) - super(Escrow_release, self).__init__( - OrderedDict([ - ('from', String(kwargs["from"])), - ('to', String(kwargs["to"])), - ('who', String(kwargs["who"])), - ('escrow_id', Uint32(kwargs["escrow_id"])), - ('sbd_amount', Amount(kwargs["sbd_amount"], prefix=prefix)), - ('steem_amount', Amount(kwargs["steem_amount"], prefix=prefix)), - ])) + replace_hive_by_steem = kwargs.get("replace_hive_by_steem", True) + if "steem_amount" in kwargs and "sbd_amount" in kwargs: + super(Escrow_release, self).__init__( + OrderedDict([ + ('from', String(kwargs["from"])), + ('to', String(kwargs["to"])), + ('who', String(kwargs["who"])), + ('escrow_id', Uint32(kwargs["escrow_id"])), + ('sbd_amount', Amount(kwargs["sbd_amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ('steem_amount', Amount(kwargs["steem_amount"], prefix=prefix, replace_hive_by_steem=replace_hive_by_steem)), + ])) + else: + super(Escrow_release, self).__init__( + OrderedDict([ + ('from', String(kwargs["from"])), + ('to', String(kwargs["to"])), + ('who', String(kwargs["who"])), + ('escrow_id', Uint32(kwargs["escrow_id"])), + ('hbd_amount', Amount(kwargs["hbd_amount"], prefix=prefix, replace_hive_by_steem=False)), + ('hive_amount', Amount(kwargs["hive_amount"], prefix=prefix, replace_hive_by_steem=False)), + ])) class Escrow_approve(GrapheneObject): diff --git a/beembase/version.py b/beembase/version.py index cc4ed752761fe3e3eba8d9fbc638ed7f3956f9c6..5d831152dcf569797b1e73f40975fd74c989f9ce 100644 --- a/beembase/version.py +++ b/beembase/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.24.3' +version = '0.24.4' diff --git a/beemgraphenebase/version.py b/beemgraphenebase/version.py index cc4ed752761fe3e3eba8d9fbc638ed7f3956f9c6..5d831152dcf569797b1e73f40975fd74c989f9ce 100644 --- a/beemgraphenebase/version.py +++ b/beemgraphenebase/version.py @@ -1,2 +1,2 @@ """THIS FILE IS GENERATED FROM beem SETUP.PY.""" -version = '0.24.3' +version = '0.24.4' diff --git a/setup.py b/setup.py index 3643e0713fb422068b014195a36f559fd83f85c1..8bbb71c6e30a0e6c596d7a553f0e5533d20e5d1a 100755 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ except LookupError: ascii = codecs.lookup('ascii') codecs.register(lambda name, enc=ascii: {True: enc}.get(name == 'mbcs')) -VERSION = '0.24.3' +VERSION = '0.24.4' tests_require = ['mock >= 2.0.0', 'pytest', 'pytest-mock', 'parameterized']