From d4ab995bce01e388bf5ca7c9a31b57148a71e401 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 30 Jun 2026 13:02:33 -0400 Subject: [PATCH] refactor based on Vito's comments --- include/xrpl/ledger/ApplyView.h | 22 +++++++++++++------ src/libxrpl/ledger/ApplyView.cpp | 6 ----- .../ledger/helpers/AccountRootHelpers.cpp | 8 +++---- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 4 ++-- src/libxrpl/ledger/helpers/NFTokenHelpers.cpp | 2 +- .../ledger/helpers/RippleStateHelpers.cpp | 2 +- src/libxrpl/tx/paths/BookStep.cpp | 2 +- src/libxrpl/tx/paths/MPTEndpointStep.cpp | 7 +----- 8 files changed, 25 insertions(+), 28 deletions(-) diff --git a/include/xrpl/ledger/ApplyView.h b/include/xrpl/ledger/ApplyView.h index cc4a841913..5e7440b6cb 100644 --- a/include/xrpl/ledger/ApplyView.h +++ b/include/xrpl/ledger/ApplyView.h @@ -400,25 +400,33 @@ public: struct ReserveContext { - AccountID const accountID; SLE::pointer accountSle; - std::optional const sponsorID; SLE::pointer sponsorSle; SLE::pointer sponsorshipSle; + [[nodiscard]] AccountID const + accountID() const + { + return accountSle->getAccountID(sfAccount); + } + + [[nodiscard]] std::optional const + sponsorID() const + { + return sponsorSle ? std::optional{sponsorSle->getAccountID(sfAccount)} + : std::nullopt; + } + [[nodiscard]] bool isSponsored() const { - XRPL_ASSERT( - sponsorID.has_value() == !!sponsorSle, - "ReserveContext::isSponsored : sponsor existence matches sponsorSle existence"); - return sponsorID.has_value(); + return sponsorSle != nullptr; } [[nodiscard]] bool hasSponsorshipObj() const { - return !!sponsorshipSle; + return sponsorshipSle != nullptr; } static ReserveContext diff --git a/src/libxrpl/ledger/ApplyView.cpp b/src/libxrpl/ledger/ApplyView.cpp index 0f85497bb8..59630a643c 100644 --- a/src/libxrpl/ledger/ApplyView.cpp +++ b/src/libxrpl/ledger/ApplyView.cpp @@ -426,9 +426,7 @@ ReserveContext::makeFromTx(ApplyView& view, STTx const& tx) isReserveSponsored(tx) ? std::optional{tx[sfSponsor]} : std::nullopt; return { - .accountID = account, .accountSle = view.peek(keylet::account(account)), - .sponsorID = sponsor, .sponsorSle = sponsor ? view.peek(keylet::account(*sponsor)) : nullptr, .sponsorshipSle = sponsor ? view.peek(keylet::sponsorship(*sponsor, account)) : nullptr, }; @@ -444,9 +442,7 @@ ReserveContext::makeFromAccount(ApplyView& view, SLE::pointer accountSle, SLE::p std::optional const sponsorID = sponsorSle ? std::optional{sponsorSle->getAccountID(sfAccount)} : std::nullopt; return { - .accountID = accountID, .accountSle = accountSle, - .sponsorID = sponsorID, .sponsorSle = sponsorSle, .sponsorshipSle = sponsorID ? view.peek(keylet::sponsorship(*sponsorID, accountID)) : nullptr, @@ -461,9 +457,7 @@ ReserveContext::makeFromObject(ApplyView& view, SLE::ref objectSle, SLE::pointer std::optional const sponsorID = sponsorSle ? std::optional{sponsorSle->getAccountID(sfAccount)} : std::nullopt; return { - .accountID = accountID, .accountSle = ownerSle, - .sponsorID = sponsorID, .sponsorSle = sponsorSle, .sponsorshipSle = sponsorID ? view.peek(keylet::sponsorship(*sponsorID, accountID)) : nullptr, diff --git a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp index 8f46ccaa95..7c08d5027a 100644 --- a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp @@ -243,14 +243,14 @@ adjustOwnerCount( view, reserveCtx.accountSle, sfSponsoredOwnerCount, - reserveCtx.accountID, + reserveCtx.accountID(), ownerCountAdj, j); adjustOwnerCountValue( view, reserveCtx.sponsorSle, sfSponsoringOwnerCount, - *reserveCtx.sponsorID, + reserveCtx.sponsorID().value(), ownerCountAdj, j); @@ -263,14 +263,14 @@ adjustOwnerCount( view, reserveCtx.sponsorshipSle, sfRemainingOwnerCount, - *reserveCtx.sponsorID, + reserveCtx.sponsorID().value(), -ownerCountAdj, j, false); } } adjustOwnerCountValue( - view, reserveCtx.accountSle, sfOwnerCount, reserveCtx.accountID, ownerCountAdj, j); + view, reserveCtx.accountSle, sfOwnerCount, reserveCtx.accountID(), ownerCountAdj, j); } void diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index 47677c1563..278efdcdad 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -162,7 +162,7 @@ authorizeMPToken( if (!sleAcct) return tecINTERNAL; // LCOV_EXCL_LINE - auto const reserveCtx = account == ctx.reserveContext.accountID + auto const reserveCtx = account == ctx.reserveContext.accountID() ? ctx.reserveContext : ReserveContext::makeFromAccount(view, sleAcct, nullptr); @@ -945,7 +945,7 @@ checkCreateMPT( beast::Journal j) { XRPL_ASSERT( - reserveCtx.accountID == holder, "xrpl::checkCreateMPT : reserve context matches holder"); + reserveCtx.accountID() == holder, "xrpl::checkCreateMPT : reserve context matches holder"); if (mptIssue.getIssuer() == holder) return tesSUCCESS; diff --git a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp index 423622f4c6..8f15e50e57 100644 --- a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp @@ -271,7 +271,7 @@ insertToken(ApplyViewContext& ctx, AccountID owner, STObject&& nft) // the NFT. SLE::pointer const page = getPageForToken( ctx, owner, nft[sfNFTokenID], [](ApplyViewContext& ctx, AccountID const& owner) { - auto const reserveCtx = owner == ctx.reserveContext.accountID + auto const reserveCtx = owner == ctx.reserveContext.accountID() ? ctx.reserveContext : ReserveContext::makeFromAccount( ctx.view, ctx.view.peek(keylet::account(owner)), nullptr); diff --git a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp index 9c0761f3ee..8f0f703eec 100644 --- a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp +++ b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp @@ -662,7 +662,7 @@ addEmptyHolding( if (view.read(index)) return tecDUPLICATE; - auto const reserveCtx = accountID == ctx.reserveContext.accountID + auto const reserveCtx = accountID == ctx.reserveContext.accountID() ? ctx.reserveContext : ReserveContext::makeFromAccount(view, sleDst, nullptr); SLE::pointer const sponsorSle = isPseudoAccount(sleDst) ? nullptr : reserveCtx.sponsorSle; diff --git a/src/libxrpl/tx/paths/BookStep.cpp b/src/libxrpl/tx/paths/BookStep.cpp index 2fdba82092..fcbab9ae11 100644 --- a/src/libxrpl/tx/paths/BookStep.cpp +++ b/src/libxrpl/tx/paths/BookStep.cpp @@ -733,7 +733,7 @@ BookStep::forEachOffer( // Therefore, the owner count remains the same. if (auto const err = checkCreateMPT( sb, - ReserveContext{owner, sb.peek(keylet::account(owner)), {}, nullptr, nullptr}, + ReserveContext::makeFromAccount(sb, sb.peek(keylet::account(owner)), nullptr), assetIn.get(), owner, j_); diff --git a/src/libxrpl/tx/paths/MPTEndpointStep.cpp b/src/libxrpl/tx/paths/MPTEndpointStep.cpp index d052109bea..6d1adceac2 100644 --- a/src/libxrpl/tx/paths/MPTEndpointStep.cpp +++ b/src/libxrpl/tx/paths/MPTEndpointStep.cpp @@ -413,12 +413,7 @@ MPTEndpointOfferCrossingStep::checkCreateMPTForStep(ApplyView& view, xrpl::DebtD // crossed. See CreateOffer::applyGuts() for reserve check. if (auto const err = xrpl::checkCreateMPT( view, - ReserveContext{ - .accountID = dst_, - .accountSle = view.peek(keylet::account(dst_)), - .sponsorID = {}, - .sponsorSle = nullptr, - .sponsorshipSle = nullptr}, + ReserveContext::makeFromAccount(view, view.peek(keylet::account(dst_)), nullptr), mptIssue_, dst_, j_);