From 16d95a4114d5c9b30bd7cf271aa280540ccd1832 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 3 Mar 2025 16:43:49 +0000 Subject: [PATCH] Fix verbose when unpack fails --- .../counterpartycore/lib/api/apiserver.py | 8 +++- .../counterpartycore/lib/api/verbose.py | 46 ++++++++++++++++--- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/apiserver.py b/counterparty-core/counterpartycore/lib/api/apiserver.py index ab7488e55b..e9eb6f26ec 100644 --- a/counterparty-core/counterpartycore/lib/api/apiserver.py +++ b/counterparty-core/counterpartycore/lib/api/apiserver.py @@ -361,8 +361,9 @@ def handle_route(**kwargs): ) as e: return return_result(400, error=str(e), start_time=start_time, query_args=query_args) except Exception as e: # pylint: disable=broad-except - # import traceback - # print(traceback.format_exc()) + import traceback + + print(traceback.format_exc()) capture_exception(e) logger.error("Error in API: %s", e) return return_result( @@ -411,6 +412,9 @@ def handle_route(**kwargs): query_args=query_args, ) except Exception as e: # pylint: disable=broad-except + import traceback + + print(traceback.format_exc()) capture_exception(e) logger.error("Error in API: %s", e) return return_result(500, error="Internal server error") diff --git a/counterparty-core/counterpartycore/lib/api/verbose.py b/counterparty-core/counterpartycore/lib/api/verbose.py index b5fc0d01c4..8fac5efbb0 100644 --- a/counterparty-core/counterpartycore/lib/api/verbose.py +++ b/counterparty-core/counterpartycore/lib/api/verbose.py @@ -72,9 +72,17 @@ def inject_issuances_and_block_times(ledger_db, state_db, result_list): item = result_item if "params" in item: item = item["params"] - if "unpacked_data" in item and item["unpacked_data"]: + if ( + "unpacked_data" in item + and item["unpacked_data"] + and "message_data" in item["unpacked_data"] + ): item = item["unpacked_data"]["message_data"] - elif "unpacked_data" in item and item["unpacked_data"]: + elif ( + "unpacked_data" in item + and item["unpacked_data"] + and "message_data" in item["unpacked_data"] + ): item = item["unpacked_data"]["message_data"] for field_name in asset_fields: if isinstance(item, list): @@ -115,9 +123,17 @@ def inject_issuances_and_block_times(ledger_db, state_db, result_list): item["params"][field_name_time] = block_times[item["params"][field_name]] if "params" in item: item = item["params"] - if "unpacked_data" in item and item["unpacked_data"]: + if ( + "unpacked_data" in item + and item["unpacked_data"] + and "message_data" in item["unpacked_data"] + ): item = item["unpacked_data"]["message_data"] - elif "unpacked_data" in item and item["unpacked_data"]: + elif ( + "unpacked_data" in item + and item["unpacked_data"] + and "message_data" in item["unpacked_data"] + ): item = item["unpacked_data"]["message_data"] for field_name in asset_fields: if isinstance(item, list): @@ -233,7 +249,11 @@ def inject_normalized_quantities(result_list): {"divisible": field_info["divisible"]}, ) ) - if "unpacked_data" in item and item["unpacked_data"]: + if ( + "unpacked_data" in item + and item["unpacked_data"] + and "message_data" in item["unpacked_data"] + ): item["unpacked_data"]["message_data"] = inject_normalized_quantity( item["unpacked_data"]["message_data"], field_name, @@ -254,6 +274,7 @@ def inject_normalized_quantities(result_list): if ( "unpacked_data" in item and item["unpacked_data"] + and "message_data" in item["unpacked_data"] and isinstance(item["unpacked_data"]["message_data"], list) ): # mpma send for pos, sub_item in enumerate(item["unpacked_data"]["message_data"]): @@ -267,6 +288,7 @@ def inject_normalized_quantities(result_list): "params" in item and "unpacked_data" in item["params"] and item["params"]["unpacked_data"] + and "message_data" in item["unpacked_data"] and isinstance(item["params"]["unpacked_data"]["message_data"], list) ): # mpma send for pos, sub_item in enumerate(item["params"]["unpacked_data"]["message_data"]): @@ -285,6 +307,7 @@ def inject_normalized_quantities(result_list): "params" in item and "unpacked_data" in item["params"] and item["params"]["unpacked_data"] + and "message_data" in item["unpacked_data"] and field_info["asset_field"] in item["params"]["unpacked_data"]["message_data"] ): asset_info = item["params"]["unpacked_data"]["message_data"][ @@ -293,6 +316,7 @@ def inject_normalized_quantities(result_list): elif ( "unpacked_data" in item and item["unpacked_data"] + and "message_data" in item["unpacked_data"] and field_info["asset_field"] in item["unpacked_data"]["message_data"] ): asset_info = item["unpacked_data"]["message_data"][field_info["asset_field"]] @@ -305,6 +329,7 @@ def inject_normalized_quantities(result_list): elif ( "unpacked_data" in item and item["unpacked_data"] + and "message_data" in item["unpacked_data"] and "divisible" in item["unpacked_data"]["message_data"] ): asset_info = {"divisible": item["unpacked_data"]["message_data"]["divisible"]} @@ -318,12 +343,14 @@ def inject_normalized_quantities(result_list): "params" in item and "unpacked_data" in item["params"] and item["params"]["unpacked_data"] + and "message_data" in item["unpacked_data"] and "asset_info" in item["params"]["unpacked_data"]["message_data"] ): asset_info = item["params"]["unpacked_data"]["message_data"]["asset_info"] elif ( "unpacked_data" in item and item["unpacked_data"] + and "message_data" in item["unpacked_data"] and "asset_info" in item["unpacked_data"]["message_data"] ): asset_info = item["unpacked_data"]["message_data"]["asset_info"] @@ -340,6 +367,7 @@ def inject_normalized_quantities(result_list): "params" in item and "unpacked_data" in item["params"] and item["params"]["unpacked_data"] + and "message_data" in item["unpacked_data"] and field_name in item["params"]["unpacked_data"]["message_data"] ): item["params"]["unpacked_data"]["message_data"] = inject_normalized_quantity( # noqa @@ -348,6 +376,7 @@ def inject_normalized_quantities(result_list): if ( "unpacked_data" in item and item["unpacked_data"] + and "message_data" in item["unpacked_data"] and field_name in item["unpacked_data"]["message_data"] ): item["unpacked_data"]["message_data"] = inject_normalized_quantity( # noqa @@ -440,7 +469,12 @@ def inject_unpacked_data_in_dict(ledger_db, item): data = binascii.hexlify(item["data"]) if isinstance(item["data"], bytes) else item["data"] if data: block_index = item.get("block_index") - item["unpacked_data"] = compose.unpack(ledger_db, data, block_index=block_index) + try: + item["unpacked_data"] = compose.unpack(ledger_db, data, block_index=block_index) + except Exception: # pylint: disable=broad-exception-caught + item["unpacked_data"] = { + "error": "Could not unpack data", + } return item