diff --git a/include/xrpl/protocol/TxFlags.h b/include/xrpl/protocol/TxFlags.h index ad5ad8e46a..90da8d79cd 100644 --- a/include/xrpl/protocol/TxFlags.h +++ b/include/xrpl/protocol/TxFlags.h @@ -352,7 +352,8 @@ inline constexpr FlagValue tfMPTPaymentMask = ~(tfUniversal | tfPartialPayment); inline constexpr FlagValue tfTrustSetPermissionMask = ~(tfUniversal | tfSetfAuth | tfSetFreeze | tfClearFreeze); inline constexpr FlagValue tfSponsorshipSetPermissionMask = - ~(tfUniversal | tfSponsorshipSetRequireSignForFee | tfSponsorshipSetRequireSignForReserve); + ~(tfUniversal | tfSponsorshipSetRequireSignForFee | tfSponsorshipSetRequireSignForReserve | + tfSponsorshipClearRequireSignForFee | tfSponsorshipClearRequireSignForReserve); // MPTokenIssuanceCreate MutableFlags: // Indicating specific fields or flags may be changed after issuance. diff --git a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp index 073226b96b..8f1dcb567f 100644 --- a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp +++ b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp @@ -112,9 +112,10 @@ SponsorshipSet::checkPermission(ReadView const& view, STTx const& tx) loadGranularPermission(sle, ttSPONSORSHIP_SET, granularPermissions); auto const sponsoringFee = tx.isFieldPresent(sfFeeAmount) || tx.isFieldPresent(sfMaxFee) || - txFlags & tfSponsorshipSetRequireSignForFee; + (txFlags & (tfSponsorshipSetRequireSignForFee | tfSponsorshipClearRequireSignForFee)); auto const sponsoringReserve = - tx.isFieldPresent(sfReserveCount) || txFlags & tfSponsorshipSetRequireSignForReserve; + tx.isFieldPresent(sfReserveCount) || + (txFlags & (tfSponsorshipSetRequireSignForReserve | tfSponsorshipClearRequireSignForReserve)); if (sponsoringFee && !granularPermissions.contains(SponsorFee)) return terNO_DELEGATE_PERMISSION; diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index 0297a023d9..e3e230479f 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -5138,6 +5138,11 @@ public: sponsor::sponseeAcc(bob), delegate::as(carol), ter(result)); + // ClearRequireSignForFee flag + env(sponsor::set(alice, tfSponsorshipClearRequireSignForFee), + sponsor::sponseeAcc(bob), + delegate::as(carol), + ter(result)); env.close(); }; @@ -5182,6 +5187,11 @@ public: sponsor::sponseeAcc(bob), delegate::as(carol), ter(result)); + // ClearRequireSignForReserve flag + env(sponsor::set(alice, tfSponsorshipClearRequireSignForReserve), + sponsor::sponseeAcc(bob), + delegate::as(carol), + ter(result)); env.close(); };