mirror of
https://github.com/monero-project/monero.git
synced 2026-01-08 03:11:00 -08:00
Convey tx verification failure reasons to the RPC client
This allows appropriate action to be taken, like displaying the reason to the user. Do just that in simplewallet, which should help a lot in determining why users fail to send. Also make it so a tx which is accepted but not relayed is seen as a success rather than a failure.
This commit is contained in:
@@ -355,24 +355,40 @@ namespace cryptonote
|
||||
|
||||
cryptonote_connection_context fake_context = AUTO_VAL_INIT(fake_context);
|
||||
tx_verification_context tvc = AUTO_VAL_INIT(tvc);
|
||||
if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false))
|
||||
if(!m_core.handle_incoming_tx(tx_blob, tvc, false, false) || tvc.m_verifivation_failed)
|
||||
{
|
||||
LOG_PRINT_L0("[on_send_raw_tx]: Failed to process tx");
|
||||
res.status = "Failed";
|
||||
return true;
|
||||
}
|
||||
|
||||
if(tvc.m_verifivation_failed)
|
||||
{
|
||||
LOG_PRINT_L0("[on_send_raw_tx]: tx verification failed");
|
||||
if (tvc.m_verifivation_failed)
|
||||
{
|
||||
LOG_PRINT_L0("[on_send_raw_tx]: tx verification failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_PRINT_L0("[on_send_raw_tx]: Failed to process tx");
|
||||
}
|
||||
res.status = "Failed";
|
||||
if ((res.low_mixin = tvc.m_low_mixin))
|
||||
res.reason = "mixin too low";
|
||||
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";
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!tvc.m_should_be_relayed)
|
||||
{
|
||||
LOG_PRINT_L0("[on_send_raw_tx]: tx accepted, but not relayed");
|
||||
res.status = "Not relayed";
|
||||
res.reason = "Not relayed";
|
||||
res.not_relayed = true;
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user