refactor: Clean up spf flag usage (#7608)

Co-authored-by: xrplf-ai-reviewer[bot] <266832837+xrplf-ai-reviewer[bot]@users.noreply.github.com>
This commit is contained in:
Mayukha Vadari
2026-06-24 10:25:15 -04:00
committed by GitHub
parent 8c98b50de8
commit 6ecf413c64
4 changed files with 13 additions and 26 deletions

View File

@@ -12,6 +12,12 @@
namespace xrpl {
inline bool
isFeeSponsored(STTx const& tx)
{
return (tx.getFieldU32(sfSponsorFlags) & spfSponsorFee) != 0u;
}
inline bool
isReserveSponsored(STTx const& tx)
{
@@ -125,13 +131,4 @@ removeSponsorFromLedgerEntry(SLE::ref sle, SF_ACCOUNT const& field = sfSponsor)
sle->makeFieldAbsent(field);
}
// namespace sponsor
// {
// // Accessing the ledger to check if provided sponsor is valid.
// [[nodiscard]] TER
// valid(ReadView const& view, STTx const& tx, beast::Journal j)
// {
// }
// }
} // namespace xrpl

View File

@@ -458,6 +458,7 @@ getAsfFlagMap()
inline constexpr FlagValue spfSponsorFee = 1;
inline constexpr FlagValue spfSponsorReserve = 2;
inline constexpr FlagValue spfSponsorFlagMask = ~(spfSponsorFee | spfSponsorReserve);
} // namespace xrpl

View File

@@ -180,13 +180,6 @@ preflight1Sponsor(PreflightContext const& ctx, AccountID const& id)
if ((hasSponsor || hasSponsorFlags || hasSponsorSig) && !ctx.rules.enabled(featureSponsor))
return temDISABLED;
if (hasSponsorFlags &&
((ctx.tx.getFieldU32(sfSponsorFlags) & ~(spfSponsorFee | spfSponsorReserve)) != 0u))
{
JLOG(ctx.j.debug()) << "preflight1: invalid sponsor flags";
return temINVALID_FLAG;
}
if (!hasSponsor)
{
if (hasSponsorFlags)
@@ -204,7 +197,7 @@ preflight1Sponsor(PreflightContext const& ctx, AccountID const& id)
else if (hasSponsorFlags)
{
auto const sponsorFlags = ctx.tx.getFieldU32(sfSponsorFlags);
if (((sponsorFlags & ~(spfSponsorFee | spfSponsorReserve)) != 0u) || sponsorFlags == 0)
if (((sponsorFlags & spfSponsorFlagMask) != 0u) || sponsorFlags == 0)
{
JLOG(ctx.j.debug()) << "preflight1: invalid sponsor flags";
return temINVALID_FLAG;
@@ -420,14 +413,10 @@ Transactor::checkSponsor(ReadView const& view, STTx const& tx)
if (!sponsorshipSle)
return terNO_SPONSORSHIP;
auto const sponsorFlags = tx.getFieldU32(sfSponsorFlags);
if (((sponsorFlags & spfSponsorFee) != 0u) &&
sponsorshipSle->isFlag(lsfSponsorshipRequireSignForFee))
if (isFeeSponsored(tx) && sponsorshipSle->isFlag(lsfSponsorshipRequireSignForFee))
return terNO_SPONSORSHIP;
if (((sponsorFlags & spfSponsorReserve) != 0u) &&
sponsorshipSle->isFlag(lsfSponsorshipRequireSignForReserve))
if (isReserveSponsored(tx) && sponsorshipSle->isFlag(lsfSponsorshipRequireSignForReserve))
return terNO_SPONSORSHIP;
return tesSUCCESS;
@@ -1324,7 +1313,7 @@ Transactor::reset(XRPAmount fee)
FeePayer
Transactor::getFeePayer(ReadView const& view, STTx const& tx)
{
if (tx.isFieldPresent(sfSponsor) && ((tx.getFieldU32(sfSponsorFlags) & spfSponsorFee) != 0u))
if (tx.isFieldPresent(sfSponsor) && isFeeSponsored(tx))
{
auto const sponsorID = tx.getAccountID(sfSponsor);
auto const sponseeID = tx.getAccountID(sfAccount);

View File

@@ -5,6 +5,7 @@
#include <xrpl/beast/utility/Zero.h>
#include <xrpl/ledger/ApplyView.h>
#include <xrpl/ledger/ReadView.h>
#include <xrpl/ledger/helpers/SponsorHelpers.h>
#include <xrpl/protocol/AccountID.h>
#include <xrpl/protocol/Protocol.h>
#include <xrpl/protocol/SField.h>
@@ -214,8 +215,7 @@ Batch::preflight(PreflightContext const& ctx)
if (ctx.tx.isFieldPresent(sfSponsorFlags))
{
auto const sponsorFlags = ctx.tx.getFieldU32(sfSponsorFlags);
if ((sponsorFlags & spfSponsorReserve) != 0u)
if (isReserveSponsored(ctx.tx))
{
JLOG(ctx.j.debug()) << "BatchTrace[" << parentBatchId << "]:"
<< "spfSponsorReserve is not allowed on outer Batch.";