From 0ca2a1bcf42803ff1dd793262b4a7b5e8f014af9 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 29 Jun 2026 18:20:36 -0400 Subject: [PATCH] more progress --- include/xrpl/ledger/ApplyView.h | 4 ++-- include/xrpl/ledger/helpers/NFTokenHelpers.h | 2 +- src/libxrpl/ledger/ApplyView.cpp | 17 ++++++++++------- .../ledger/helpers/AccountRootHelpers.cpp | 19 +++++++++---------- src/libxrpl/ledger/helpers/NFTokenHelpers.cpp | 15 ++++++++------- src/libxrpl/ledger/helpers/OfferHelpers.cpp | 1 + src/libxrpl/ledger/helpers/TokenHelpers.cpp | 4 ++-- 7 files changed, 33 insertions(+), 29 deletions(-) diff --git a/include/xrpl/ledger/ApplyView.h b/include/xrpl/ledger/ApplyView.h index e29135629d..7937bd330e 100644 --- a/include/xrpl/ledger/ApplyView.h +++ b/include/xrpl/ledger/ApplyView.h @@ -407,7 +407,7 @@ struct ReserveContext SLE::pointer sponsorshipSle; bool - isSponsored() + isSponsored() const { XRPL_ASSERT( sponsorID.has_value() == !!sponsorSle, @@ -416,7 +416,7 @@ struct ReserveContext } bool - hasSponsorshipObj() + hasSponsorshipObj() const { return !!sponsorshipSle; } diff --git a/include/xrpl/ledger/helpers/NFTokenHelpers.h b/include/xrpl/ledger/helpers/NFTokenHelpers.h index 362cfe5a8c..da8acf526a 100644 --- a/include/xrpl/ledger/helpers/NFTokenHelpers.h +++ b/include/xrpl/ledger/helpers/NFTokenHelpers.h @@ -39,7 +39,7 @@ findTokenAndPage(ApplyView& view, AccountID const& owner, uint256 const& nftoken /** Insert the token in the owner's token directory. */ TER -insertToken(ApplyView& view, AccountID owner, STObject&& nft); +insertToken(ApplyViewContext& view, AccountID owner, STObject&& nft); /** Remove the token from the owner's token directory. */ TER diff --git a/src/libxrpl/ledger/ApplyView.cpp b/src/libxrpl/ledger/ApplyView.cpp index 7d7a19484e..9700918345 100644 --- a/src/libxrpl/ledger/ApplyView.cpp +++ b/src/libxrpl/ledger/ApplyView.cpp @@ -416,17 +416,20 @@ ApplyView::dirDelete(Keylet const& directory, std::functiongetAccountID(sfAccount); SLE::ref sponsorSle = getLedgerEntryReserveSponsor(view, objectSle); std::optional const sponsorID = - sponsorSle ? sponsorSle->getAccountID(sfAccount) : std::nullopt; - return - { - ownerSle->getAccountID(sfAccount), ownerSle, sponsorID, sponsorSle, - sponsorID ? view.peek(keylet::sponsorship(*sponsorID, account)) : nullptr, - } + sponsorSle ? std::optional{sponsorSle->getAccountID(sfAccount)} : std::nullopt; + return { + accountID, + ownerSle, + sponsorID, + sponsorSle, + sponsorID ? view.peek(keylet::sponsorship(*sponsorID, accountID)) : nullptr, + }; } } // namespace xrpl diff --git a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp index fed98d254c..f8e71a01d1 100644 --- a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp @@ -215,7 +215,7 @@ adjustOwnerCountValue( void adjustOwnerCountImpl( ApplyView& view, - ReserveContext& reserveCtx, + ReserveContext const& reserveCtx, std::int32_t ownerCountAdj, beast::Journal j) { @@ -240,14 +240,14 @@ adjustOwnerCountImpl( Throw("xrpl::adjustOwnerCount : valid sponsor sle type"); adjustOwnerCountValue( - ctx.view, + view, reserveCtx.accountSle, sfSponsoredOwnerCount, reserveCtx.accountID, ownerCountAdj, j); adjustOwnerCountValue( - ctx.view, + view, reserveCtx.sponsorSle, sfSponsoringOwnerCount, *reserveCtx.sponsorID, @@ -260,7 +260,7 @@ adjustOwnerCountImpl( // Remaining owner count moves opposite to ownerCountAdj: // +ownerCountAdj => consume reserve (-), adjustOwnerCountValue( - ctx.view, + view, reserveCtx.sponsorshipSle, sfRemainingOwnerCount, *reserveCtx.sponsorID, @@ -270,20 +270,20 @@ adjustOwnerCountImpl( } } adjustOwnerCountValue( - ctx.view, reserveCtx.accountSle, sfOwnerCount, reserveCtx.accountID, ownerCountAdj, j); + view, reserveCtx.accountSle, sfOwnerCount, reserveCtx.accountID, ownerCountAdj, j); } void adjustOwnerCount(ApplyViewContext& ctx, std::int32_t ownerCountAdj, beast::Journal j) { - return adjustOwnerCountImpl(ctx.view, ctx.reserveCtx, ownerCountAdj, j); + return adjustOwnerCountImpl(ctx.view, ctx.reserveContext, ownerCountAdj, j); } void adjustOwnerCountObj( ApplyViewContext& ctx, SLE::ref objectSle, - std::int32_t accountCountAdj, + std::int32_t ownerCountAdj, beast::Journal j) { if (!objectSle) @@ -291,11 +291,10 @@ adjustOwnerCountObj( if (objectSle->getType() == ltACCOUNT_ROOT) Throw("xrpl::adjustOwnerCount : valid object sle type"); - SLE::ref sponsorSle = getLedgerEntryReserveSponsor(ctx.view, objectSle); adjustOwnerCountImpl( ctx.view, - ReserveContext::makeFromObj(ctx.view, objectSle, ctx.reserveCtx.accountSle), - amount, + ReserveContext::makeFromObject(ctx.view, objectSle, ctx.reserveContext.accountSle), + ownerCountAdj, j); } diff --git a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp index 93dbae0467..bf3538493f 100644 --- a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp @@ -69,11 +69,12 @@ locatePage(ApplyView& view, AccountID const& owner, uint256 const& id) static SLE::pointer getPageForToken( - ApplyView& view, + ApplyViewContext& ctx, AccountID const& owner, uint256 const& id, - std::function const& createCallback) + std::function const& createCallback) { + auto& view = ctx.view; auto const base = keylet::nftpageMin(owner); auto const first = keylet::nftpage(base, id); auto const last = keylet::nftpageMax(owner); @@ -91,7 +92,7 @@ getPageForToken( cp = std::make_shared(last); cp->setFieldArray(sfNFTokens, arr); view.insert(cp); - createCallback(view, owner); + createCallback(ctx, owner); return cp; } @@ -260,16 +261,16 @@ changeTokenURI( /** Insert the token in the owner's token directory. */ TER -insertToken(ApplyView& view, AccountID owner, STObject&& nft) +insertToken(ApplyViewContext& ctx, AccountID owner, STObject&& nft) { XRPL_ASSERT(nft.isFieldPresent(sfNFTokenID), "xrpl::nft::insertToken : has NFT token"); // First, we need to locate the page the NFT belongs to, creating it // if necessary. This operation may fail if it is impossible to insert // the NFT. - SLE::pointer const page = - getPageForToken(view, owner, nft[sfNFTokenID], [](ApplyView& view, AccountID const& owner) { - adjustOwnerCount(view, owner, {}, 1, beast::Journal{beast::Journal::getNullSink()}); + SLE::pointer const page = getPageForToken( + ctx, owner, nft[sfNFTokenID], [](ApplyViewContext& ctx, AccountID const& owner) { + adjustOwnerCount(ctx, owner, {}, 1, beast::Journal{beast::Journal::getNullSink()}); }); if (!page) diff --git a/src/libxrpl/ledger/helpers/OfferHelpers.cpp b/src/libxrpl/ledger/helpers/OfferHelpers.cpp index 67d85d8371..31cc68e88f 100644 --- a/src/libxrpl/ledger/helpers/OfferHelpers.cpp +++ b/src/libxrpl/ledger/helpers/OfferHelpers.cpp @@ -21,6 +21,7 @@ offerDelete(ApplyViewContext& ctx, SLE::ref sle, beast::Journal j) return tesSUCCESS; auto offerIndex = sle->key(); auto owner = sle->getAccountID(sfAccount); + auto& view = ctx.view(); // Detect legacy directories. uint256 const uDirectory = sle->getFieldH256(sfBookDirectory); diff --git a/src/libxrpl/ledger/helpers/TokenHelpers.cpp b/src/libxrpl/ledger/helpers/TokenHelpers.cpp index 188d11b456..fbeae0d5c1 100644 --- a/src/libxrpl/ledger/helpers/TokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/TokenHelpers.cpp @@ -551,7 +551,7 @@ canTransfer( // --> bCheckIssuer : normally require issuer to be involved. static TER directSendNoFeeIOU( - ApplyView& view, + ApplyViewContext& ctx, AccountID const& uSenderID, AccountID const& uReceiverID, STAmount const& saAmount, @@ -629,7 +629,7 @@ directSendNoFeeIOU( // Clear the reserve of the sender, possibly delete the line! auto const currentSponsor = getLedgerEntryReserveSponsor( view, sleRippleState, !bSenderHigh ? sfLowSponsor : sfHighSponsor); - adjustOwnerCountObj(view, view.peek(keylet::account(uSenderID)), currentSponsor, -1, j); + adjustOwnerCountObj(ctx, currentSponsor, -1, j); removeSponsorFromLedgerEntry( sleRippleState, !bSenderHigh ? sfLowSponsor : sfHighSponsor);