diff --git a/src/test/jtx/Env.h b/src/test/jtx/Env.h index 1877147d4b..04cbce953a 100644 --- a/src/test/jtx/Env.h +++ b/src/test/jtx/Env.h @@ -562,19 +562,19 @@ public: ownerCount(Account const& account) const; /** Return the number of sponsored objects owned by an account. - * Returns 0 if the account does not exist. + * Throws if the account does not exist. */ [[nodiscard]] std::uint32_t sponsoredOwnerCount(Account const& account) const; /** Return the number of sponsoring objects owned by an account. - * Returns 0 if the account does not exist. + * Throws if the account does not exist. */ [[nodiscard]] std::uint32_t sponsoringOwnerCount(Account const& account) const; /** Return the number of sponsoring accounts owned by an account. - * Returns 0 if the account does not exist. + * Throws if the account does not exist. */ [[nodiscard]] std::uint32_t sponsoringAccountCount(Account const& account) const; diff --git a/src/xrpld/rpc/handlers/account/AccountObjects.cpp b/src/xrpld/rpc/handlers/account/AccountObjects.cpp index 9a016260a2..ce0ce57eb3 100644 --- a/src/xrpld/rpc/handlers/account/AccountObjects.cpp +++ b/src/xrpld/rpc/handlers/account/AccountObjects.cpp @@ -33,8 +33,7 @@ namespace xrpl { @param dirIndex Begin gathering account objects from this directory. @param entryIndex Begin gathering objects from this directory node. @param limit Maximum number of objects to find. - @param hasSponsoredFilter Whether to filter by sponsored objects. - @param sponsored Whether filtered objects should be sponsored. + @param sponsoredFilter If set, only return objects whose sponsored state matches the value. @param jvResult A JSON result that holds the request objects. */ bool @@ -45,8 +44,7 @@ getAccountObjects( uint256 dirIndex, uint256 entryIndex, std::uint32_t const limit, - bool const hasSponsoredFilter, - bool const sponsored, + std::optional const sponsoredFilter, json::Value& jvResult) { // check if dirIndex is valid @@ -59,11 +57,10 @@ getAccountObjects( return it != typeFilter.end(); }; - auto sponsoredMatchesFilter = [](bool const sponsored, - std::optional const& sponsor) { - if (sponsored) - return sponsor.has_value(); - return !sponsor.has_value(); + auto sponsoredMatchesFilter = [&sponsoredFilter](std::optional const& sponsor) { + if (!sponsoredFilter.has_value()) + return true; + return sponsor.has_value() == *sponsoredFilter; }; // if dirIndex != 0, then all NFTs have already been returned. only @@ -104,15 +101,10 @@ getAccountObjects( while (currentPage) { - bool canAppendNFT = true; - if (hasSponsoredFilter) - { - std::optional const nftSponsor = currentPage->isFieldPresent(sfSponsor) - ? currentPage->getAccountID(sfSponsor) - : std::optional(std::nullopt); - if (!sponsoredMatchesFilter(sponsored, nftSponsor)) - canAppendNFT = false; - } + std::optional const nftSponsor = currentPage->isFieldPresent(sfSponsor) + ? currentPage->getAccountID(sfSponsor) + : std::optional(std::nullopt); + bool const canAppendNFT = sponsoredMatchesFilter(nftSponsor); if (canAppendNFT) jvObjects.append(currentPage->getJson(JsonOptions::Values::None)); auto const npm = (*currentPage)[~sfNextPageMin]; @@ -232,7 +224,7 @@ getAccountObjects( }; std::optional const sponsor = getSponsor(); - if (hasSponsoredFilter && !sponsoredMatchesFilter(sponsored, sponsor)) + if (!sponsoredMatchesFilter(sponsor)) canAppend = false; if (canAppend) @@ -383,27 +375,18 @@ doAccountObjects(RPC::JsonContext& context) return RPC::invalidFieldError(jss::marker); } - bool const hasSponsoredFilter = params.isMember(jss::sponsored); - bool sponsored = false; - if (hasSponsoredFilter) + std::optional sponsoredFilter; + if (params.isMember(jss::sponsored)) { auto const& sponsoredJv = params[jss::sponsored]; if (!sponsoredJv.isBool()) return RPC::expectedFieldError(jss::sponsored, "boolean"); - sponsored = sponsoredJv.asBool(); + sponsoredFilter = sponsoredJv.asBool(); } if (!getAccountObjects( - *ledger, - accountID, - typeFilter, - dirIndex, - entryIndex, - limit, - hasSponsoredFilter, - sponsored, - result)) + *ledger, accountID, typeFilter, dirIndex, entryIndex, limit, sponsoredFilter, result)) return RPC::invalidFieldError(jss::marker); result[jss::account] = toBase58(accountID);