From 07bd2fe97db7f5b7a4aa94360753c1d336e9c4a8 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 8 Sep 2021 18:18:08 +0200 Subject: [PATCH] network.py: reorder bitcoin core error msg whitelist test policy.cpp strings last as some of them are short and too generic fixes https://github.com/spesmilo/electrum/issues/7483 --- electrum/network.py | 47 ++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 3109d92b1..ce222ea1e 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -907,27 +907,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): # server_msg is untrusted input so it should not be shown to the user. see #4968 server_msg = str(server_msg) server_msg = server_msg.replace("\n", r"\n") - # https://github.com/bitcoin/bitcoin/blob/5bb64acd9d3ced6e6f95df282a1a0f8b98522cb0/src/policy/policy.cpp - # grep "reason =" - policy_error_messages = { - r"version": _("Transaction uses non-standard version."), - r"tx-size": _("The transaction was rejected because it is too large (in bytes)."), - r"scriptsig-size": None, - r"scriptsig-not-pushonly": None, - r"scriptpubkey": - ("scriptpubkey\n" + - _("Some of the outputs pay to a non-standard script.")), - r"bare-multisig": None, - r"dust": - (_("Transaction could not be broadcast due to dust outputs.\n" - "Some of the outputs are too small in value, probably lower than 1000 satoshis.\n" - "Check the units, make sure you haven't confused e.g. mBTC and BTC.")), - r"multi-op-return": _("The transaction was rejected because it contains multiple OP_RETURN outputs."), - } - for substring in policy_error_messages: - if substring in server_msg: - msg = policy_error_messages[substring] - return msg if msg else substring + # https://github.com/bitcoin/bitcoin/blob/5bb64acd9d3ced6e6f95df282a1a0f8b98522cb0/src/script/script_error.cpp script_error_messages = { r"Script evaluated without error but finished with a false/empty top stack element", @@ -989,7 +969,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): # https://github.com/bitcoin/bitcoin/blob/5bb64acd9d3ced6e6f95df282a1a0f8b98522cb0/src/validation.cpp # grep "REJECT_" # grep "TxValidationResult" - # should come after script_error.cpp (due to e.g. non-mandatory-script-verify-flag) + # should come after script_error.cpp (due to e.g. "non-mandatory-script-verify-flag") validation_error_messages = { r"coinbase": None, r"tx-size-small": None, @@ -1071,6 +1051,29 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): if substring in server_msg: msg = tx_verify_error_messages[substring] return msg if msg else substring + # https://github.com/bitcoin/bitcoin/blob/5bb64acd9d3ced6e6f95df282a1a0f8b98522cb0/src/policy/policy.cpp + # grep "reason =" + # should come after validation.cpp (due to "tx-size" vs "tx-size-small") + # should come after script_error.cpp (due to e.g. "version") + policy_error_messages = { + r"version": _("Transaction uses non-standard version."), + r"tx-size": _("The transaction was rejected because it is too large (in bytes)."), + r"scriptsig-size": None, + r"scriptsig-not-pushonly": None, + r"scriptpubkey": + ("scriptpubkey\n" + + _("Some of the outputs pay to a non-standard script.")), + r"bare-multisig": None, + r"dust": + (_("Transaction could not be broadcast due to dust outputs.\n" + "Some of the outputs are too small in value, probably lower than 1000 satoshis.\n" + "Check the units, make sure you haven't confused e.g. mBTC and BTC.")), + r"multi-op-return": _("The transaction was rejected because it contains multiple OP_RETURN outputs."), + } + for substring in policy_error_messages: + if substring in server_msg: + msg = policy_error_messages[substring] + return msg if msg else substring # otherwise: return _("Unknown error")