diff --git a/peerplays/cli/account.py b/peerplays/cli/account.py index 22ead76..6fa19a4 100644 --- a/peerplays/cli/account.py +++ b/peerplays/cli/account.py @@ -3,6 +3,7 @@ import click from pprint import pprint from prettytable import PrettyTable +from peerplays.block import BlockHeader from peerplays.account import Account from .decorators import onlineChain, unlockWallet from .ui import print_permissions, pprintOperation @@ -73,8 +74,13 @@ def disallow(ctx, foreign_account, permission, threshold, account): ) @click.option("--exclude", type=str, help="Exclude certain types", multiple=True) @click.option("--limit", type=int, help="Limit number of elements", default=15) -@click.option("--raw/--no-raw", default=False) -def history(ctx, account, limit, type, csv, exclude, raw): +@click.option("--raw/--no-raw", default=False, + help="Show raw operation JSON" +) +@click.option("--results/--no-results", default=False, + help="Show operation results" +) +def history(ctx, account, limit, type, csv, exclude, raw, results): """ Show history of an account """ from peerplaysbase.operations import getOperationNameForId @@ -93,11 +99,16 @@ def history(ctx, account, limit, type, csv, exclude, raw): for a in account: account = Account(a, peerplays_instance=ctx.peerplays) for b in account.history(limit=limit, only_ops=type, exclude_ops=exclude): + block = BlockHeader(b["block_num"]) row = [ - b["id"].split(".")[2], - "%s" % (b["block_num"]), + b["id"], + "%s (%s)" % (block.time(), b["block_num"]), "{} ({})".format(getOperationNameForId(b["op"][0]), b["op"][0]), - pprintOperation(b) if not raw else json.dumps(b, indent=4), + ( + pprintOperation(b) if not raw else json.dumps(b, indent=4) + ) + ( + "" if not results else "\n\nresults: %s\n"%b["result"] + ), ] if csv: t.writerow(row) diff --git a/peerplays/cli/ui.py b/peerplays/cli/ui.py index 46abec7..5119d0b 100644 --- a/peerplays/cli/ui.py +++ b/peerplays/cli/ui.py @@ -1,5 +1,6 @@ import json from peerplays.account import Account +from peerplays.amount import Amount from prettytable import PrettyTable, ALL as allBorders import pkg_resources import click @@ -62,8 +63,103 @@ def get_terminal(text="Password", confirm=False, allowedempty=False): return pw -def pprintOperation(op): - return json.dumps(op["op"][1], indent=4) +def pprintOperation(op, show_memo=False, ctx=None): + from peerplays.price import Order, FilledOrder + + if isinstance(op, dict) and "op" in op: + id = op["op"][0] + results = op["result"] + op = op["op"][1] + else: + id = op[0] + op = op[1] + results = [] + if id == 1: + return str(Order(op)) + elif id == 4: + return str(FilledOrder(op)) + elif id == 5: + return "New account created for {}".format(op["name"]) + elif id == 2: + return "Canceled order %s" % op["order"] + elif id == 6: + return "Account {} updated".format(Account(op["account"])["name"]) + elif id == 8: + account_to_upgrade = Account(op["account_to_upgrade"])["name"] + return "Account {} upgraded to Lifetime Membership for {}".format( + account_to_upgrade, Amount(op["fee"]) + ) if op["upgrade_to_lifetime_member"] else "Account {} upgraded".format( + account_to_upgrade + ) + elif id == 32: + return "Account %s vested %s for %s as type %s" % ( + Account(op["creator"])["name"], + Amount(op["amount"]), + Account(op["owner"])["name"], + op["balance_type"] + ) + elif id == 33: + return "Claiming from vesting: %s" % str(Amount(op["amount"])) + elif id == 37: + claimant_account = Account(op["deposit_to_account"]) + amount = Amount(op["total_claimed"]) + return "Claiming {amount} for {claimant_account[name]}".format(**locals()) + elif id == 10: + return "Create asset %s" % op["symbol"] + elif id == 14: + from_account = Account(op["issuer"])["name"] + to_account = Account(op["issue_to_account"])["name"] + amount = Amount(op["asset_to_issue"]) + return "Issuer {from_account} issued {amount} to {to_account}".format( + **locals() + ) + elif id == 15: + return "Reserve {}".format(str(Amount(op["amount_to_reserve"]))) + elif id == 0: + from_account = Account(op["from"]) + to_account = Account(op["to"]) + amount = Amount(op["amount"]) + memo = "" + if show_memo and ctx is not None: + try: + plain_memo = Memo(blockchain_instance=ctx.blockchain).decrypt( + op["memo"] + ) + except Exception as e: + plain_memo = str(e) + memo = " (memo: {plain_memo})".format(**locals()) + return "Transfer from {from_account[name]} to {to_account[name]}: {amount}{memo}".format( + **locals() + ) + elif id == 88: + return "Offer to %s NFTs %s" % ( + "BUY" if op["buying_item"] else "SELL", op["item_ids"] + ) + elif id == 89: + return "Account {} bid {} against offer {}".format( + Account(op["bidder"])["name"], Amount(op["bid_price"]), op["offer_id"] + ) + elif id == 91: + return "Offer %s %s" % (op["offer_id"], op["result"]) + elif id == 92: + return "Create NFT series %s (%s)"%(op["name"], op["symbol"]) + elif id == 93: + return "Update NFT series %s"%(op["nft_metadata_id"]) + elif id == 94: + from_account = Account(op["payer"])["name"] + to_account = Account(op["owner"])["name"] + nft_series = op["nft_metadata_id"] + return "Account {from_account} minted an NFT in series {nft_series} to {to_account}".format( + **locals() + ) + elif id == 101: + return "Created SON" + elif id == 102: + return "Updated SON" + elif id == 104: + return "SON Heartbeat" + else: + return json.dumps(op, indent=4) def pretty_print(o, *args, **kwargs): diff --git a/peerplaysapi/node.py b/peerplaysapi/node.py index ee06af0..b1c7068 100644 --- a/peerplaysapi/node.py +++ b/peerplaysapi/node.py @@ -21,12 +21,6 @@ def post_process_exception(self, e): class PeerPlaysNodeRPC(Api): - def register_apis(self): - self.login("", "", api_id=1) - self.api_id["database"] = self.database(api_id=1) - self.api_id["history"] = self.history(api_id=1) - self.api_id["network_broadcast"] = self.network_broadcast(api_id=1) - def get_account(self, name, **kwargs): """ Get full account details from account name or id diff --git a/peerplaysbase/chains.py b/peerplaysbase/chains.py index 29a1ff4..541cc01 100644 --- a/peerplaysbase/chains.py +++ b/peerplaysbase/chains.py @@ -4,58 +4,16 @@ "core_symbol": "PPY", "prefix": "PPY", }, - "ALPHA": { - "chain_id": "80df3c34bff8469bdaf47e55a2fb6fb6f1eb4a49d6375aaa5689d3ca9e51bff5", - "core_symbol": "PPY", - "prefix": "PPY", - }, - "BEATRICE": { - "chain_id": "b3f7fe1e5ad0d2deca40a626a4404524f78e65c3a48137551c33ea4e7c365672", - "core_symbol": "TEST", - "prefix": "TEST", - }, - "CHARLIE": { - "chain_id": "3de67447ef7e7390371cdf8f2c775b4a6a9b8692ab4376942746dea73f5a37dd", - "core_symbol": "TEST", - "prefix": "TEST", - }, - "DICK": { - "chain_id": "318cea7d376eb81a0beba3623e12af66ab76b736860ae50739d0aaf5cecb5a91", - "core_symbol": "TEST", - "prefix": "TEST", - }, - "ELIZABETH": { - "chain_id": "1d76e264e0a6f27be89d80bbff66c53ea87068bbdd73fc912cbcbcb7be53ec83", - "core_symbol": "TEST", - "prefix": "TEST", - }, - "FRED": { - "chain_id": "ef688290dea16ee55ae83bbe30384c24a8ad06268897dd144fb3a677a88306fe", - "core_symbol": "TEST", - "prefix": "TEST", - }, - "HERCULES": { - "chain_id": "9e770aee9cb04b11f62391b89a38e1ee28981c94e2b8e7047e0902862568d285", - "core_symbol": "TEST", - "prefix": "TEST"}, - "FRED": { - "chain_id": "6d8462f65dc97688de4cd1e295ecbda8f34ca3def0dab96272faee251761cc08", - "core_symbol": "TEST", - "prefix": "TEST"}, - "IRONA": { - "chain_id": "bec1b83fc4752ad319dfc4e9f1fac37d8fb06c77382ad74438a827a4b16f2e9e", - "core_symbol": "TEST", - "prefix": "TEST"}, "QAENV": { "chain_id": "7c1c72eb738b3ff1870350f85daca27e2d0f5dd25af27df7475fbd92815e421e", "core_symbol": "TEST", "prefix": "TEST"}, - "MINT": { + "DEVNET": { "chain_id": "2c25aae5835fd54020329d4f150b04867e72cbd8f7f7b900a7c3da8a329a6014", "core_symbol": "TEST", "prefix": "TEST"}, + "TESTNET": { + "chain_id": "195d4e865e3a27d2b204de759341e4738f778dd5c4e21860c7e8bf1bd9c79203", + "core_symbol": "TEST", + "prefix": "TEST"}, } - -# old fred chain_id in the code -# "chain_id": "735f88594e5b7521047864f7cca7367ff27e95ce7bd40482b85c978d1337f881", -# "chain_id": "09f618610b6449f230f133addd388dc6dc15072e80e39f2c0d76088550413d47", diff --git a/setup.py b/setup.py index 4020ec5..3361a58 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ ascii = codecs.lookup("ascii") codecs.register(lambda name, enc=ascii: {True: enc}.get(name == "mbcs")) -VERSION = "0.5.0" +VERSION = "0.5.3" # Strip some stuff from README for PyPI description: long_desc = open("README.md").read()