From 2c69d58f261fb2489f989f4b6c80dd12fee34355 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 22 Jul 2026 18:09:19 -0400 Subject: [PATCH] export error reason via submit/simulate --- include/xrpl/protocol/jss.h | 1 + src/xrpld/app/misc/NetworkOPs.cpp | 1 + src/xrpld/rpc/detail/TransactionSign.cpp | 1 + src/xrpld/rpc/handlers/transaction/Simulate.cpp | 2 ++ src/xrpld/rpc/handlers/transaction/Submit.cpp | 1 + 5 files changed, 6 insertions(+) diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index 63e877ca31..95864f0b41 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -239,6 +239,7 @@ JSS(enabled); // out: AmendmentTable JSS(engine_result); // out: NetworkOPs, TransactionSign, Submit JSS(engine_result_code); // out: NetworkOPs, TransactionSign, Submit JSS(engine_result_message); // out: NetworkOPs, TransactionSign, Submit +JSS(engine_result_reason); // out: NetworkOPs, TransactionSign, Submit JSS(entire_set); // out: get_aggregate_price JSS(ephemeral_key); // out: ValidatorInfo // in/out: Manifest diff --git a/src/xrpld/app/misc/NetworkOPs.cpp b/src/xrpld/app/misc/NetworkOPs.cpp index 4b0091dff6..b0f55e2d9f 100644 --- a/src/xrpld/app/misc/NetworkOPs.cpp +++ b/src/xrpld/app/misc/NetworkOPs.cpp @@ -3321,6 +3321,7 @@ NetworkOPsImp::transJson( jvObj[jss::engine_result] = sToken; jvObj[jss::engine_result_code] = result; jvObj[jss::engine_result_message] = sHuman; + jvObj[jss::engine_result_reason] = result.reason; if (transaction->getTxnType() == ttOFFER_CREATE) { diff --git a/src/xrpld/rpc/detail/TransactionSign.cpp b/src/xrpld/rpc/detail/TransactionSign.cpp index e1c5180b5c..ceaad9ab23 100644 --- a/src/xrpld/rpc/detail/TransactionSign.cpp +++ b/src/xrpld/rpc/detail/TransactionSign.cpp @@ -804,6 +804,7 @@ transactionFormatResultImpl(Transaction::pointer tpTrans, unsigned apiVersion) jvResult[jss::engine_result] = sToken; jvResult[jss::engine_result_code] = tpTrans->getResult(); jvResult[jss::engine_result_message] = sHuman; + jvResult[jss::engine_result_reason] = tpTrans->getResult().reason; } } catch (std::exception&) diff --git a/src/xrpld/rpc/handlers/transaction/Simulate.cpp b/src/xrpld/rpc/handlers/transaction/Simulate.cpp index 0f163c7356..f52720b376 100644 --- a/src/xrpld/rpc/handlers/transaction/Simulate.cpp +++ b/src/xrpld/rpc/handlers/transaction/Simulate.cpp @@ -264,6 +264,7 @@ simulateTxn(RPC::JsonContext& context, std::shared_ptr transaction) jvResult[jss::engine_result] = token; jvResult[jss::engine_result_code] = result.ter; jvResult[jss::engine_result_message] = message; + jvResult[jss::engine_result_reason] = result.ter.reason; } else { @@ -272,6 +273,7 @@ simulateTxn(RPC::JsonContext& context, std::shared_ptr transaction) jvResult[jss::engine_result] = "unknown"; jvResult[jss::engine_result_code] = result.ter; jvResult[jss::engine_result_message] = "unknown"; + jvResult[jss::engine_result_reason] = "unknown"; // LCOV_EXCL_STOP } diff --git a/src/xrpld/rpc/handlers/transaction/Submit.cpp b/src/xrpld/rpc/handlers/transaction/Submit.cpp index 79f3680684..769c75799c 100644 --- a/src/xrpld/rpc/handlers/transaction/Submit.cpp +++ b/src/xrpld/rpc/handlers/transaction/Submit.cpp @@ -154,6 +154,7 @@ doSubmit(RPC::JsonContext& context) jvResult[jss::engine_result] = sToken; jvResult[jss::engine_result_code] = transaction->getResult(); jvResult[jss::engine_result_message] = sHuman; + jvResult[jss::engine_result_reason] = transaction->getResult().reason; auto const submitResult = transaction->getSubmitResult();