Browse Source

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
patch-4
SomberNight 3 years ago
parent
commit
07bd2fe97d
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 47
      electrum/network.py

47
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")

Loading…
Cancel
Save