From 93d027648305dc0684f194838eea2f9c6bb56e01 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 30 Apr 2026 15:26:29 -0400 Subject: [PATCH] keylet::nftpage -> keylet::nftokenPage --- include/xrpl/protocol/Indexes.h | 14 +-- .../xrpl/protocol/detail/ledger_entries.macro | 2 +- src/libxrpl/ledger/helpers/NFTokenHelpers.cpp | 20 ++--- src/libxrpl/protocol/Indexes.cpp | 8 +- src/libxrpl/tx/invariants/InvariantCheck.cpp | 4 +- .../tx/transactors/account/AccountDelete.cpp | 4 +- src/test/app/FixNFTokenPageLinks_test.cpp | 73 ++++++++-------- src/test/app/Invariants_test.cpp | 28 +++--- src/test/app/NFTokenBurn_test.cpp | 85 ++++++++++--------- src/test/rpc/LedgerEntry_test.cpp | 2 +- .../rpc/handlers/account/AccountNFTs.cpp | 4 +- .../rpc/handlers/account/AccountObjects.cpp | 4 +- 12 files changed, 127 insertions(+), 121 deletions(-) diff --git a/include/xrpl/protocol/Indexes.h b/include/xrpl/protocol/Indexes.h index d4f2d71d9b..6bb097db4d 100644 --- a/include/xrpl/protocol/Indexes.h +++ b/include/xrpl/protocol/Indexes.h @@ -221,14 +221,14 @@ payChannel(AccountID const& src, AccountID const& dst, std::uint32_t seq) noexce /** @{ */ /** A keylet for the owner's first possible NFT page. */ Keylet -nftpage_min(AccountID const& owner); +nftokenPage_min(AccountID const& owner); /** A keylet for the owner's last possible NFT page. */ Keylet -nftpage_max(AccountID const& owner); +nftokenPage_max(AccountID const& owner); Keylet -nftpage(Keylet const& k, uint256 const& token); +nftokenPage(Keylet const& k, uint256 const& token); /** @} */ /** An offer from an account to buy or sell an NFT */ @@ -379,8 +379,12 @@ std::array, 6> const directAccountKeylets{ {.function = &keylet::signerList, .expectedLEName = jss::SignerList, .includeInTests = true}, // It's normally impossible to create an item at nftpage_min, but // test it anyway, since the invariant checks for it. - {.function = &keylet::nftpage_min, .expectedLEName = jss::NFTokenPage, .includeInTests = true}, - {.function = &keylet::nftpage_max, .expectedLEName = jss::NFTokenPage, .includeInTests = true}, + {.function = &keylet::nftokenPage_min, + .expectedLEName = jss::NFTokenPage, + .includeInTests = true}, + {.function = &keylet::nftokenPage_max, + .expectedLEName = jss::NFTokenPage, + .includeInTests = true}, {.function = &keylet::did, .expectedLEName = jss::DID, .includeInTests = true}}}; MPTID diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index cbdeb76748..044eea03a7 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -84,7 +84,7 @@ LEDGER_ENTRY(ltNEGATIVE_UNL, 0x004e, NegativeUNL, nunl, ({ /** A ledger object which contains a list of NFTs - \sa keylet::nftpage_min, keylet::nftpage_max, keylet::nftpage + \sa keylet::nftokenPage_min, keylet::nftokenPage_max, keylet::nftokenPage */ LEDGER_ENTRY(ltNFTOKEN_PAGE, 0x0050, NFTokenPage, nft_page, ({ {sfPreviousPageMin, soeOPTIONAL}, diff --git a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp index ea2d025b00..802bf02714 100644 --- a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp @@ -43,8 +43,8 @@ namespace xrpl::nft { static std::shared_ptr locatePage(ReadView const& view, AccountID const& owner, uint256 const& id) { - auto const first = keylet::nftpage(keylet::nftpage_min(owner), id); - auto const last = keylet::nftpage_max(owner); + auto const first = keylet::nftokenPage(keylet::nftokenPage_min(owner), id); + auto const last = keylet::nftokenPage_max(owner); // This NFT can only be found in the first page with a key that's strictly // greater than `first`, so look for that, up until the maximum possible @@ -56,8 +56,8 @@ locatePage(ReadView const& view, AccountID const& owner, uint256 const& id) static std::shared_ptr locatePage(ApplyView& view, AccountID const& owner, uint256 const& id) { - auto const first = keylet::nftpage(keylet::nftpage_min(owner), id); - auto const last = keylet::nftpage_max(owner); + auto const first = keylet::nftokenPage(keylet::nftokenPage_min(owner), id); + auto const last = keylet::nftokenPage_max(owner); // This NFT can only be found in the first page with a key that's strictly // greater than `first`, so look for that, up until the maximum possible @@ -73,9 +73,9 @@ getPageForToken( uint256 const& id, std::function const& createCallback) { - auto const base = keylet::nftpage_min(owner); - auto const first = keylet::nftpage(base, id); - auto const last = keylet::nftpage_max(owner); + auto const base = keylet::nftokenPage_min(owner); + auto const first = keylet::nftokenPage(base, id); + auto const last = keylet::nftokenPage_max(owner); // This NFT can only be found in the first page with a key that's strictly // greater than `first`, so look for that, up until the maximum possible @@ -181,7 +181,7 @@ getPageForToken( ? narr[dirMaxTokensPerPage - 1].getFieldH256(sfNFTokenID).next() : carr[0].getFieldH256(sfNFTokenID); - auto np = std::make_shared(keylet::nftpage(base, tokenIDForNewPage)); + auto np = std::make_shared(keylet::nftokenPage(base, tokenIDForNewPage)); XRPL_ASSERT(np->key() > base.key, "xrpl::nft::getPageForToken : valid NFT page index"); np->setFieldArray(sfNFTokens, narr); np->setFieldH256(sfNextPageMin, cp->key()); @@ -654,11 +654,11 @@ repairNFTokenDirectoryLinks(ApplyView& view, AccountID const& owner) { bool didRepair = false; - auto const last = keylet::nftpage_max(owner); + auto const last = keylet::nftokenPage_max(owner); std::shared_ptr page = view.peek(Keylet( ltNFTOKEN_PAGE, - view.succ(keylet::nftpage_min(owner).key, last.key.next()).value_or(last.key))); + view.succ(keylet::nftokenPage_min(owner).key, last.key.next()).value_or(last.key))); if (!page) return didRepair; diff --git a/src/libxrpl/protocol/Indexes.cpp b/src/libxrpl/protocol/Indexes.cpp index fb71bc6df2..67e58fa779 100644 --- a/src/libxrpl/protocol/Indexes.cpp +++ b/src/libxrpl/protocol/Indexes.cpp @@ -382,7 +382,7 @@ payChannel(AccountID const& src, AccountID const& dst, std::uint32_t seq) noexce } Keylet -nftpage_min(AccountID const& owner) +nftokenPage_min(AccountID const& owner) { std::array buf{}; std::memcpy(buf.data(), owner.data(), owner.size()); @@ -390,7 +390,7 @@ nftpage_min(AccountID const& owner) } Keylet -nftpage_max(AccountID const& owner) +nftokenPage_max(AccountID const& owner) { uint256 id = nft::pageMask; std::memcpy(id.data(), owner.data(), owner.size()); @@ -398,9 +398,9 @@ nftpage_max(AccountID const& owner) } Keylet -nftpage(Keylet const& k, uint256 const& token) +nftokenPage(Keylet const& k, uint256 const& token) { - XRPL_ASSERT(k.type == ltNFTOKEN_PAGE, "xrpl::keylet::nftpage : valid input type"); + XRPL_ASSERT(k.type == ltNFTOKEN_PAGE, "xrpl::keylet::nftokenPage : valid input type"); return {ltNFTOKEN_PAGE, (k.key & ~nft::pageMask) + (token & nft::pageMask)}; } diff --git a/src/libxrpl/tx/invariants/InvariantCheck.cpp b/src/libxrpl/tx/invariants/InvariantCheck.cpp index 2f12c7ce1e..3f3d2220a5 100644 --- a/src/libxrpl/tx/invariants/InvariantCheck.cpp +++ b/src/libxrpl/tx/invariants/InvariantCheck.cpp @@ -537,8 +537,8 @@ AccountRootsDeletedClean::finalize( // checked above as entries in directAccountKeylets. This uses // view.succ() to check for any NFT pages in between the two // endpoints. - Keylet const first = keylet::nftpage_min(accountID); - Keylet const last = keylet::nftpage_max(accountID); + Keylet const first = keylet::nftokenPage_min(accountID); + Keylet const last = keylet::nftokenPage_max(accountID); std::optional key = view.succ(first.key, last.key.next()); diff --git a/src/libxrpl/tx/transactors/account/AccountDelete.cpp b/src/libxrpl/tx/transactors/account/AccountDelete.cpp index b687ed0bd7..a2d65c6b83 100644 --- a/src/libxrpl/tx/transactors/account/AccountDelete.cpp +++ b/src/libxrpl/tx/transactors/account/AccountDelete.cpp @@ -261,8 +261,8 @@ AccountDelete::preclaim(PreclaimContext const& ctx) return tecHAS_OBLIGATIONS; // If the account owns any NFTs it cannot be deleted. - Keylet const first = keylet::nftpage_min(account); - Keylet const last = keylet::nftpage_max(account); + Keylet const first = keylet::nftokenPage_min(account); + Keylet const last = keylet::nftokenPage_max(account); auto const cp = ctx.view.read( Keylet(ltNFTOKEN_PAGE, ctx.view.succ(first.key, last.key.next()).value_or(last.key))); diff --git a/src/test/app/FixNFTokenPageLinks_test.cpp b/src/test/app/FixNFTokenPageLinks_test.cpp index 56484bb396..6f778318b3 100644 --- a/src/test/app/FixNFTokenPageLinks_test.cpp +++ b/src/test/app/FixNFTokenPageLinks_test.cpp @@ -260,7 +260,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Get the index of the middle page. uint256 const aliceMiddleNFTokenPageIndex = [&env, &alice]() { - auto lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); return lastNFTokenPage->at(sfPreviousPageMin); }(); @@ -283,12 +283,12 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Removing the last token from the last page deletes the last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - BEAST_EXPECT(!env.le(keylet::nftpage_max(alice))); + BEAST_EXPECT(!env.le(keylet::nftokenPage_max(alice))); // alice's "middle" page is still present, but has no links. { - auto aliceMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), aliceMiddleNFTokenPageIndex)); + auto aliceMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), aliceMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(aliceMiddleNFTokenPage)) return; @@ -308,7 +308,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Get the index of the middle page. uint256 const bobMiddleNFTokenPageIndex = [&env, &bob]() { - auto lastNFTokenPage = env.le(keylet::nftpage_max(bob)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(bob)); return lastNFTokenPage->at(sfPreviousPageMin); }(); @@ -325,13 +325,13 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Removing the last token from the last page deletes the last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - BEAST_EXPECT(!env.le(keylet::nftpage_max(bob))); + BEAST_EXPECT(!env.le(keylet::nftokenPage_max(bob))); // bob's "middle" page is still present, but has lost the // NextPageMin field. { - auto bobMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(bob), bobMiddleNFTokenPageIndex)); + auto bobMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(bob), bobMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(bobMiddleNFTokenPage)) return; @@ -351,7 +351,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Get the index of the middle page. uint256 const carolMiddleNFTokenPageIndex = [&env, &carol]() { - auto lastNFTokenPage = env.le(keylet::nftpage_max(carol)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(carol)); return lastNFTokenPage->at(sfPreviousPageMin); }(); @@ -376,12 +376,12 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Removing the last token from the last page deletes the last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - BEAST_EXPECT(!env.le(keylet::nftpage_max(carol))); + BEAST_EXPECT(!env.le(keylet::nftokenPage_max(carol))); // carol's "middle" page is still present, but has lost the // NextPageMin field. - auto carolMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(carol), carolMiddleNFTokenPageIndex)); + auto carolMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(carol), carolMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(carolMiddleNFTokenPage)) return; @@ -411,8 +411,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // carol's "middle" page is present and still has no NextPageMin field. { - auto carolMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(carol), carolMiddleNFTokenPageIndex)); + auto carolMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(carol), carolMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(carolMiddleNFTokenPage)) return; @@ -421,7 +421,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite } // carol has a "last" page again, but it has no PreviousPageMin field. { - auto carolLastNFTokenPage = env.le(keylet::nftpage_max(carol)); + auto carolLastNFTokenPage = env.le(keylet::nftokenPage_max(carol)); BEAST_EXPECT(!carolLastNFTokenPage->isFieldPresent(sfPreviousPageMin)); BEAST_EXPECT(!carolLastNFTokenPage->isFieldPresent(sfNextPageMin)); @@ -449,12 +449,12 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Verify that alice's NFToken directory is still damaged. // alice's last page should still be missing. - BEAST_EXPECT(!env.le(keylet::nftpage_max(alice))); + BEAST_EXPECT(!env.le(keylet::nftokenPage_max(alice))); // alice's "middle" page is still present and has no links. { - auto aliceMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), aliceMiddleNFTokenPageIndex)); + auto aliceMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), aliceMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(aliceMiddleNFTokenPage)) return; @@ -473,7 +473,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // alice's last page should now be present and include no links. { - auto aliceLastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto aliceLastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(aliceLastNFTokenPage)) return; @@ -482,8 +482,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite } // alice's middle page should be gone. - BEAST_EXPECT( - !env.le(keylet::nftpage(keylet::nftpage_min(alice), aliceMiddleNFTokenPageIndex))); + BEAST_EXPECT(!env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), aliceMiddleNFTokenPageIndex))); BEAST_EXPECT(nftCount(env, alice) == 32); BEAST_EXPECT(ownerCount(env, alice) == 1); @@ -495,12 +495,12 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Verify that bob's NFToken directory is still damaged. // bob's last page should still be missing. - BEAST_EXPECT(!env.le(keylet::nftpage_max(bob))); + BEAST_EXPECT(!env.le(keylet::nftokenPage_max(bob))); // bob's "middle" page is still present and missing NextPageMin. { - auto bobMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(bob), bobMiddleNFTokenPageIndex)); + auto bobMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(bob), bobMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(bobMiddleNFTokenPage)) return; @@ -515,7 +515,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // bob's last page should now be present and include a previous // link but no next link. { - auto const lastPageKeylet = keylet::nftpage_max(bob); + auto const lastPageKeylet = keylet::nftokenPage_max(bob); auto const bobLastNFTokenPage = env.le(lastPageKeylet); if (!BEAST_EXPECT(bobLastNFTokenPage)) return; @@ -525,8 +525,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite BEAST_EXPECT(!bobLastNFTokenPage->isFieldPresent(sfNextPageMin)); auto const bobNewFirstNFTokenPage = env.le( - keylet::nftpage( - keylet::nftpage_min(bob), bobLastNFTokenPage->at(sfPreviousPageMin))); + keylet::nftokenPage( + keylet::nftokenPage_min(bob), bobLastNFTokenPage->at(sfPreviousPageMin))); if (!BEAST_EXPECT(bobNewFirstNFTokenPage)) return; @@ -537,7 +537,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite } // bob's middle page should be gone. - BEAST_EXPECT(!env.le(keylet::nftpage(keylet::nftpage_min(bob), bobMiddleNFTokenPageIndex))); + BEAST_EXPECT( + !env.le(keylet::nftokenPage(keylet::nftokenPage_min(bob), bobMiddleNFTokenPageIndex))); BEAST_EXPECT(nftCount(env, bob) == 64); BEAST_EXPECT(ownerCount(env, bob) == 2); @@ -550,8 +551,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // carol's "middle" page is present and has no NextPageMin field. { - auto carolMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(carol), carolMiddleNFTokenPageIndex)); + auto carolMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(carol), carolMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(carolMiddleNFTokenPage)) return; @@ -560,7 +561,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite } // carol has a "last" page, but it has no PreviousPageMin field. { - auto carolLastNFTokenPage = env.le(keylet::nftpage_max(carol)); + auto carolLastNFTokenPage = env.le(keylet::nftokenPage_max(carol)); BEAST_EXPECT(!carolLastNFTokenPage->isFieldPresent(sfPreviousPageMin)); BEAST_EXPECT(!carolLastNFTokenPage->isFieldPresent(sfNextPageMin)); @@ -572,9 +573,9 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite { // carol's "middle" page is present and now has a NextPageMin field. - auto const lastPageKeylet = keylet::nftpage_max(carol); - auto carolMiddleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(carol), carolMiddleNFTokenPageIndex)); + auto const lastPageKeylet = keylet::nftokenPage_max(carol); + auto carolMiddleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(carol), carolMiddleNFTokenPageIndex)); if (!BEAST_EXPECT(carolMiddleNFTokenPage)) return; @@ -595,8 +596,8 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // carol also has a "first" page that includes a NextPageMin field. auto carolFirstNFTokenPage = env.le( - keylet::nftpage( - keylet::nftpage_min(carol), carolMiddleNFTokenPage->at(sfPreviousPageMin))); + keylet::nftokenPage( + keylet::nftokenPage_min(carol), carolMiddleNFTokenPage->at(sfPreviousPageMin))); if (!BEAST_EXPECT(carolFirstNFTokenPage)) return; diff --git a/src/test/app/Invariants_test.cpp b/src/test/app/Invariants_test.cpp index ed2ed59b20..9ecd6f53f3 100644 --- a/src/test/app/Invariants_test.cpp +++ b/src/test/app/Invariants_test.cpp @@ -1175,7 +1175,7 @@ class Invariants_test : public beast::unit_test::suite doInvariantCheck( {{"NFT page has invalid size"}}, [&makeNFTokenIDs](Account const& A1, Account const&, ApplyContext& ac) { - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, makeNFTokenIDs(0)); ac.view().insert(nftPage); @@ -1185,7 +1185,7 @@ class Invariants_test : public beast::unit_test::suite doInvariantCheck( {{"NFT page has invalid size"}}, [&makeNFTokenIDs](Account const& A1, Account const&, ApplyContext& ac) { - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, makeNFTokenIDs(33)); ac.view().insert(nftPage); @@ -1198,7 +1198,7 @@ class Invariants_test : public beast::unit_test::suite STArray nfTokens = makeNFTokenIDs(2); std::iter_swap(nfTokens.begin(), nfTokens.begin() + 1); - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, nfTokens); ac.view().insert(nftPage); @@ -1211,7 +1211,7 @@ class Invariants_test : public beast::unit_test::suite STArray nfTokens = makeNFTokenIDs(1); nfTokens[0].setFieldVL(sfURI, Blob{}); - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, nfTokens); ac.view().insert(nftPage); @@ -1221,9 +1221,9 @@ class Invariants_test : public beast::unit_test::suite doInvariantCheck( {{"NFT page is improperly linked"}}, [&makeNFTokenIDs](Account const& A1, Account const&, ApplyContext& ac) { - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, makeNFTokenIDs(1)); - nftPage->setFieldH256(sfPreviousPageMin, keylet::nftpage_max(A1).key); + nftPage->setFieldH256(sfPreviousPageMin, keylet::nftokenPage_max(A1).key); ac.view().insert(nftPage); return true; @@ -1232,9 +1232,9 @@ class Invariants_test : public beast::unit_test::suite doInvariantCheck( {{"NFT page is improperly linked"}}, [&makeNFTokenIDs](Account const& A1, Account const& A2, ApplyContext& ac) { - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, makeNFTokenIDs(1)); - nftPage->setFieldH256(sfPreviousPageMin, keylet::nftpage_min(A2).key); + nftPage->setFieldH256(sfPreviousPageMin, keylet::nftokenPage_min(A2).key); ac.view().insert(nftPage); return true; @@ -1243,7 +1243,7 @@ class Invariants_test : public beast::unit_test::suite doInvariantCheck( {{"NFT page is improperly linked"}}, [&makeNFTokenIDs](Account const& A1, Account const&, ApplyContext& ac) { - auto nftPage = std::make_shared(keylet::nftpage_max(A1)); + auto nftPage = std::make_shared(keylet::nftokenPage_max(A1)); nftPage->setFieldArray(sfNFTokens, makeNFTokenIDs(1)); nftPage->setFieldH256(sfNextPageMin, nftPage->key()); @@ -1255,10 +1255,10 @@ class Invariants_test : public beast::unit_test::suite {{"NFT page is improperly linked"}}, [&makeNFTokenIDs](Account const& A1, Account const& A2, ApplyContext& ac) { STArray nfTokens = makeNFTokenIDs(1); - auto nftPage = std::make_shared(keylet::nftpage( - keylet::nftpage_max(A1), ++(nfTokens[0].getFieldH256(sfNFTokenID)))); + auto nftPage = std::make_shared(keylet::nftokenPage( + keylet::nftokenPage_max(A1), ++(nfTokens[0].getFieldH256(sfNFTokenID)))); nftPage->setFieldArray(sfNFTokens, nfTokens); - nftPage->setFieldH256(sfNextPageMin, keylet::nftpage_max(A2).key); + nftPage->setFieldH256(sfNextPageMin, keylet::nftokenPage_max(A2).key); ac.view().insert(nftPage); return true; @@ -1268,8 +1268,8 @@ class Invariants_test : public beast::unit_test::suite {{"NFT found in incorrect page"}}, [&makeNFTokenIDs](Account const& A1, Account const&, ApplyContext& ac) { STArray nfTokens = makeNFTokenIDs(2); - auto nftPage = std::make_shared(keylet::nftpage( - keylet::nftpage_max(A1), (nfTokens[1].getFieldH256(sfNFTokenID)))); + auto nftPage = std::make_shared(keylet::nftokenPage( + keylet::nftokenPage_max(A1), (nfTokens[1].getFieldH256(sfNFTokenID)))); nftPage->setFieldArray(sfNFTokens, nfTokens); ac.view().insert(nftPage); diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index efb255ea2d..4707433a75 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -472,19 +472,19 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that that all three pages are present and remember the // indexes. - auto lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; uint256 const middleNFTokenPageIndex = lastNFTokenPage->at(sfPreviousPageMin); auto middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; uint256 const firstNFTokenPageIndex = middleNFTokenPage->at(sfPreviousPageMin); auto firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); if (!BEAST_EXPECT(firstNFTokenPage)) return; @@ -498,7 +498,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that the last page is still present and contains just one // NFT. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; @@ -517,21 +517,21 @@ class NFTokenBurn_test : public beast::unit_test::suite // _previous_ page because we need to preserve that last // page an an anchor. The contents of the next-to-last page // are moved into the last page. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(lastNFTokenPage); BEAST_EXPECT(lastNFTokenPage->at(~sfPreviousPageMin) == firstNFTokenPageIndex); BEAST_EXPECT(!lastNFTokenPage->isFieldPresent(sfNextPageMin)); BEAST_EXPECT(lastNFTokenPage->getFieldArray(sfNFTokens).size() == 32); // The "middle" page should be gone. - middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + middleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); BEAST_EXPECT(!middleNFTokenPage); // The "first" page should still be present and linked to // the last page. - firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + firstNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); BEAST_EXPECT(firstNFTokenPage); BEAST_EXPECT(!firstNFTokenPage->isFieldPresent(sfPreviousPageMin)); BEAST_EXPECT(firstNFTokenPage->at(~sfNextPageMin) == lastNFTokenPage->key()); @@ -542,13 +542,13 @@ class NFTokenBurn_test : public beast::unit_test::suite // Removing the last token from the last page deletes the last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(!lastNFTokenPage); // The "middle" page is still present, but has lost the // NextPageMin field. - middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + middleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; BEAST_EXPECT(middleNFTokenPage->isFieldPresent(sfPreviousPageMin)); @@ -576,19 +576,19 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that that all three pages are present and remember the // indexes. - auto lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; uint256 const middleNFTokenPageIndex = lastNFTokenPage->at(sfPreviousPageMin); auto middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; uint256 const firstNFTokenPageIndex = middleNFTokenPage->at(sfPreviousPageMin); auto firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); if (!BEAST_EXPECT(firstNFTokenPage)) return; @@ -604,17 +604,18 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that middle page is gone and the links in the two // remaining pages are correct. middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); BEAST_EXPECT(!middleNFTokenPage); - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(!lastNFTokenPage->isFieldPresent(sfNextPageMin)); BEAST_EXPECT(lastNFTokenPage->getFieldH256(sfPreviousPageMin) == firstNFTokenPageIndex); firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); BEAST_EXPECT( - firstNFTokenPage->getFieldH256(sfNextPageMin) == keylet::nftpage_max(alice).key); + firstNFTokenPage->getFieldH256(sfNextPageMin) == + keylet::nftokenPage_max(alice).key); BEAST_EXPECT(!firstNFTokenPage->isFieldPresent(sfPreviousPageMin)); // Burn the remaining nfts. @@ -637,19 +638,19 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that that all three pages are present and remember the // indexes. - auto lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; uint256 const middleNFTokenPageIndex = lastNFTokenPage->at(sfPreviousPageMin); auto middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; uint256 const firstNFTokenPageIndex = middleNFTokenPage->at(sfPreviousPageMin); auto firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); if (!BEAST_EXPECT(firstNFTokenPage)) return; @@ -664,18 +665,18 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify the first page is gone. firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); BEAST_EXPECT(!firstNFTokenPage); // Check the links in the other two pages. middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; BEAST_EXPECT(!middleNFTokenPage->isFieldPresent(sfPreviousPageMin)); BEAST_EXPECT(middleNFTokenPage->isFieldPresent(sfNextPageMin)); - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; BEAST_EXPECT(lastNFTokenPage->isFieldPresent(sfPreviousPageMin)); @@ -696,20 +697,20 @@ class NFTokenBurn_test : public beast::unit_test::suite // _previous_ page because we need to preserve that last // page an an anchor. The contents of the next-to-last page // are moved into the last page. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(lastNFTokenPage); BEAST_EXPECT(!lastNFTokenPage->isFieldPresent(sfPreviousPageMin)); BEAST_EXPECT(!lastNFTokenPage->isFieldPresent(sfNextPageMin)); BEAST_EXPECT(lastNFTokenPage->getFieldArray(sfNFTokens).size() == 32); // The "middle" page should be gone. - middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + middleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); BEAST_EXPECT(!middleNFTokenPage); // The "first" page should still be gone. - firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + firstNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); BEAST_EXPECT(!firstNFTokenPage); } else @@ -717,13 +718,13 @@ class NFTokenBurn_test : public beast::unit_test::suite // Removing the last token from the last page deletes the last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(!lastNFTokenPage); // The "middle" page is still present, but has lost the // NextPageMin field. - middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + middleNFTokenPage = env.le( + keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; BEAST_EXPECT(!middleNFTokenPage->isFieldPresent(sfPreviousPageMin)); @@ -777,7 +778,7 @@ class NFTokenBurn_test : public beast::unit_test::suite env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; // Verify that the last page is present and contains one NFT. - auto lastNFTokenPage = ac.view().peek(keylet::nftpage_max(alice)); + auto lastNFTokenPage = ac.view().peek(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; BEAST_EXPECT(lastNFTokenPage->getFieldArray(sfNFTokens).size() == 1); @@ -810,10 +811,10 @@ class NFTokenBurn_test : public beast::unit_test::suite env.app(), ov, tx, tesSUCCESS, env.current()->fees().base, tapNONE, jlog}; // Verify that the middle page is present. - auto lastNFTokenPage = ac.view().peek(keylet::nftpage_max(alice)); + auto lastNFTokenPage = ac.view().peek(keylet::nftokenPage_max(alice)); auto middleNFTokenPage = ac.view().peek( - keylet::nftpage( - keylet::nftpage_min(alice), + keylet::nftokenPage( + keylet::nftokenPage_min(alice), lastNFTokenPage->getFieldH256(sfPreviousPageMin))); BEAST_EXPECT(middleNFTokenPage); @@ -1093,19 +1094,19 @@ class NFTokenBurn_test : public beast::unit_test::suite // Verify that that all three pages are present and remember the // indexes. - auto lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + auto lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); if (!BEAST_EXPECT(lastNFTokenPage)) return; uint256 const middleNFTokenPageIndex = lastNFTokenPage->at(sfPreviousPageMin); auto middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; uint256 const firstNFTokenPageIndex = middleNFTokenPage->at(sfPreviousPageMin); auto firstNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), firstNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), firstNFTokenPageIndex)); if (!BEAST_EXPECT(firstNFTokenPage)) return; @@ -1129,14 +1130,14 @@ class NFTokenBurn_test : public beast::unit_test::suite // Removing the last token from the last page deletes alice's last // page. This is a bug. The contents of the next-to-last page // should have been moved into the last page. - lastNFTokenPage = env.le(keylet::nftpage_max(alice)); + lastNFTokenPage = env.le(keylet::nftokenPage_max(alice)); BEAST_EXPECT(!lastNFTokenPage); BEAST_EXPECT(ownerCount(env, alice) == 2); // The "middle" page is still present, but has lost the // NextPageMin field. middleNFTokenPage = - env.le(keylet::nftpage(keylet::nftpage_min(alice), middleNFTokenPageIndex)); + env.le(keylet::nftokenPage(keylet::nftokenPage_min(alice), middleNFTokenPageIndex)); if (!BEAST_EXPECT(middleNFTokenPage)) return; BEAST_EXPECT(middleNFTokenPage->isFieldPresent(sfPreviousPageMin)); diff --git a/src/test/rpc/LedgerEntry_test.cpp b/src/test/rpc/LedgerEntry_test.cpp index e88c70fb76..f50b32e4a8 100644 --- a/src/test/rpc/LedgerEntry_test.cpp +++ b/src/test/rpc/LedgerEntry_test.cpp @@ -1561,7 +1561,7 @@ class LedgerEntry_test : public beast::unit_test::suite env(token::mint(issuer, 0), txflags(tfTransferable)); env.close(); - auto const nftpage = keylet::nftpage_max(issuer); + auto const nftpage = keylet::nftokenPage_max(issuer); BEAST_EXPECT(env.le(nftpage) != nullptr); { diff --git a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp index 605dd3b07c..7d619ca655 100644 --- a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp +++ b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp @@ -74,8 +74,8 @@ doAccountNFTs(RPC::JsonContext& context) return RPC::invalid_field_error(jss::marker); } - auto const first = keylet::nftpage(keylet::nftpage_min(accountID), marker); - auto const last = keylet::nftpage_max(accountID); + auto const first = keylet::nftokenPage(keylet::nftokenPage_min(accountID), marker); + auto const last = keylet::nftokenPage_max(accountID); auto cp = ledger->read( Keylet(ltNFTOKEN_PAGE, ledger->succ(first.key, last.key.next()).value_or(last.key))); diff --git a/src/xrpld/rpc/handlers/account/AccountObjects.cpp b/src/xrpld/rpc/handlers/account/AccountObjects.cpp index 5b172cd4c3..200f4bce25 100644 --- a/src/xrpld/rpc/handlers/account/AccountObjects.cpp +++ b/src/xrpld/rpc/handlers/account/AccountObjects.cpp @@ -61,7 +61,7 @@ getAccountObjects( (!typeFilter.has_value() || typeMatchesFilter(typeFilter.value(), ltNFTOKEN_PAGE)) && dirIndex == beast::zero; - Keylet const firstNFTPage = keylet::nftpage_min(account); + Keylet const firstNFTPage = keylet::nftokenPage_min(account); // we need to check the marker to see if it is an NFTTokenPage index. if (iterateNFTPages && entryIndex != beast::zero) @@ -85,7 +85,7 @@ getAccountObjects( Keylet const first = entryIndex == beast::zero ? firstNFTPage : Keylet{ltNFTOKEN_PAGE, entryIndex}; - Keylet const last = keylet::nftpage_max(account); + Keylet const last = keylet::nftokenPage_max(account); // current key uint256 ck = ledger.succ(first.key, last.key.next()).value_or(last.key);