From 54f1d60573ab1fe6add9df944216ea2869bbd1a0 Mon Sep 17 00:00:00 2001 From: Bronek Kozicki Date: Mon, 30 Oct 2023 21:19:40 +0000 Subject: [PATCH] Set ledger_hash on closed ledger, even if not validated --- src/ripple/app/ledger/impl/LedgerToJson.cpp | 4 +++- src/ripple/app/misc/NetworkOPs.cpp | 4 +++- src/ripple/rpc/handlers/Tx.cpp | 11 +++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ripple/app/ledger/impl/LedgerToJson.cpp b/src/ripple/app/ledger/impl/LedgerToJson.cpp index c6cfb7cb5a8..796d85779cc 100644 --- a/src/ripple/app/ledger/impl/LedgerToJson.cpp +++ b/src/ripple/app/ledger/impl/LedgerToJson.cpp @@ -155,13 +155,15 @@ fillJsonTx( {txn->getTransactionID(), fill.ledger.seq(), *stMeta}); } + if (!fill.ledger.open()) + txJson[jss::ledger_hash] = to_string(fill.ledger.info().hash); + const bool validated = fill.context->ledgerMaster.isValidated(fill.ledger); txJson[jss::validated] = validated; if (validated) { txJson[jss::ledger_index] = to_string(fill.ledger.seq()); - txJson[jss::ledger_hash] = to_string(fill.ledger.info().hash); if (fill.closeTime) txJson[jss::close_time_iso] = to_string_iso(*fill.closeTime); diff --git a/src/ripple/app/misc/NetworkOPs.cpp b/src/ripple/app/misc/NetworkOPs.cpp index 7413a4c8648..b52dce8c22a 100644 --- a/src/ripple/app/misc/NetworkOPs.cpp +++ b/src/ripple/app/misc/NetworkOPs.cpp @@ -3117,10 +3117,12 @@ NetworkOPsImp::transJson( jvObj[jss::meta], *ledger, transaction, meta->get()); } + if (!ledger->open()) + jvObj[jss::ledger_hash] = to_string(ledger->info().hash); + if (validated) { jvObj[jss::ledger_index] = ledger->info().seq; - jvObj[jss::ledger_hash] = to_string(ledger->info().hash); jvObj[jss::transaction][jss::date] = ledger->info().closeTime.time_since_epoch().count(); jvObj[jss::validated] = true; diff --git a/src/ripple/rpc/handlers/Tx.cpp b/src/ripple/rpc/handlers/Tx.cpp index 39f49b50f7a..96c0548a202 100644 --- a/src/ripple/rpc/handlers/Tx.cpp +++ b/src/ripple/rpc/handlers/Tx.cpp @@ -267,6 +267,9 @@ doTxHelp(RPC::Context& context, TxArgs args) std::shared_ptr ledger = context.ledgerMaster.getLedgerBySeq(txn->getLedger()); + if (ledger && !ledger->open()) + result.ledgerHash = ledger->info().hash; + if (ledger && meta) { if (args.binary) @@ -287,7 +290,6 @@ doTxHelp(RPC::Context& context, TxArgs args) uint32_t lgrSeq = ledger->info().seq; uint32_t txnIdx = meta->getAsObject().getFieldU32(sfTransactionIndex); uint32_t netID = context.app.config().NETWORK_ID; - result.ledgerHash = ledger->info().hash; if (txnIdx <= 0xFFFFU && netID < 0xFFFFU && lgrSeq < 0x0FFF'FFFFUL) result.ctid = @@ -341,13 +343,14 @@ populateJsonResponse( sttx->getTxnType(), context.apiVersion); } + + if (result.ledgerHash) + response[jss::ledger_hash] = to_string(*result.ledgerHash); + response[jss::hash] = hash; if (result.validated) { response[jss::ledger_index] = result.txn->getLedger(); - if (result.ledgerHash) - response[jss::ledger_hash] = to_string(*result.ledgerHash); - if (result.closeTime) response[jss::close_time_iso] = to_string_iso(*result.closeTime);