Merge pull request #2452
0aaaca29
tx_pool: set the "invalid input" bit when check_tx_inputs fails (moneromooo-monero)9236823b
simplewallet: print tx rejection reason where it was missing (moneromooo-monero)3dee3301
core_rpc_server: print tx rejection reason at L0 too (moneromooo-monero)
This commit is contained in:
commit
0e74777071
|
@ -249,6 +249,7 @@ namespace cryptonote
|
||||||
{
|
{
|
||||||
LOG_PRINT_L1("tx used wrong inputs, rejected");
|
LOG_PRINT_L1("tx used wrong inputs, rejected");
|
||||||
tvc.m_verifivation_failed = true;
|
tvc.m_verifivation_failed = true;
|
||||||
|
tvc.m_invalid_input = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
|
|
|
@ -50,6 +50,16 @@ using namespace epee;
|
||||||
#define MAX_RESTRICTED_FAKE_OUTS_COUNT 40
|
#define MAX_RESTRICTED_FAKE_OUTS_COUNT 40
|
||||||
#define MAX_RESTRICTED_GLOBAL_FAKE_OUTS_COUNT 500
|
#define MAX_RESTRICTED_GLOBAL_FAKE_OUTS_COUNT 500
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
void add_reason(std::string &reasons, const char *reason)
|
||||||
|
{
|
||||||
|
if (!reasons.empty())
|
||||||
|
reasons += ", ";
|
||||||
|
reasons += reason;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
namespace cryptonote
|
namespace cryptonote
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -632,31 +642,33 @@ namespace cryptonote
|
||||||
tx_verification_context tvc = AUTO_VAL_INIT(tvc);
|
tx_verification_context tvc = AUTO_VAL_INIT(tvc);
|
||||||
if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false, req.do_not_relay) || tvc.m_verifivation_failed)
|
if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false, req.do_not_relay) || tvc.m_verifivation_failed)
|
||||||
{
|
{
|
||||||
|
res.status = "Failed";
|
||||||
|
res.reason = "";
|
||||||
|
if ((res.low_mixin = tvc.m_low_mixin))
|
||||||
|
add_reason(res.reason, "ring size too small");
|
||||||
|
if ((res.double_spend = tvc.m_double_spend))
|
||||||
|
add_reason(res.reason, "double spend");
|
||||||
|
if ((res.invalid_input = tvc.m_invalid_input))
|
||||||
|
add_reason(res.reason, "invalid input");
|
||||||
|
if ((res.invalid_output = tvc.m_invalid_output))
|
||||||
|
add_reason(res.reason, "invalid output");
|
||||||
|
if ((res.too_big = tvc.m_too_big))
|
||||||
|
add_reason(res.reason, "too big");
|
||||||
|
if ((res.overspend = tvc.m_overspend))
|
||||||
|
add_reason(res.reason, "overspend");
|
||||||
|
if ((res.fee_too_low = tvc.m_fee_too_low))
|
||||||
|
add_reason(res.reason, "fee too low");
|
||||||
|
if ((res.not_rct = tvc.m_not_rct))
|
||||||
|
add_reason(res.reason, "tx is not ringct");
|
||||||
|
const std::string punctuation = res.reason.empty() ? "" : ": ";
|
||||||
if (tvc.m_verifivation_failed)
|
if (tvc.m_verifivation_failed)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L0("[on_send_raw_tx]: tx verification failed");
|
LOG_PRINT_L0("[on_send_raw_tx]: tx verification failed" << punctuation << res.reason);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_PRINT_L0("[on_send_raw_tx]: Failed to process tx");
|
LOG_PRINT_L0("[on_send_raw_tx]: Failed to process tx" << punctuation << res.reason);
|
||||||
}
|
}
|
||||||
res.status = "Failed";
|
|
||||||
if ((res.low_mixin = tvc.m_low_mixin))
|
|
||||||
res.reason = "ring size too small";
|
|
||||||
if ((res.double_spend = tvc.m_double_spend))
|
|
||||||
res.reason = "double spend";
|
|
||||||
if ((res.invalid_input = tvc.m_invalid_input))
|
|
||||||
res.reason = "invalid input";
|
|
||||||
if ((res.invalid_output = tvc.m_invalid_output))
|
|
||||||
res.reason = "invalid output";
|
|
||||||
if ((res.too_big = tvc.m_too_big))
|
|
||||||
res.reason = "too big";
|
|
||||||
if ((res.overspend = tvc.m_overspend))
|
|
||||||
res.reason = "overspend";
|
|
||||||
if ((res.fee_too_low = tvc.m_fee_too_low))
|
|
||||||
res.reason = "fee too low";
|
|
||||||
if ((res.not_rct = tvc.m_not_rct))
|
|
||||||
res.reason = "tx is not ringct";
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3511,6 +3511,9 @@ bool simple_wallet::submit_transfer(const std::vector<std::string> &args_)
|
||||||
catch (const tools::error::tx_rejected& e)
|
catch (const tools::error::tx_rejected& e)
|
||||||
{
|
{
|
||||||
fail_msg_writer() << (boost::format(tr("transaction %s was rejected by daemon with status: ")) % get_transaction_hash(e.tx())) << e.status();
|
fail_msg_writer() << (boost::format(tr("transaction %s was rejected by daemon with status: ")) % get_transaction_hash(e.tx())) << e.status();
|
||||||
|
std::string reason = e.reason();
|
||||||
|
if (!reason.empty())
|
||||||
|
fail_msg_writer() << tr("Reason: ") << reason;
|
||||||
}
|
}
|
||||||
catch (const tools::error::tx_sum_overflow& e)
|
catch (const tools::error::tx_sum_overflow& e)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue