diff --git a/include/xrpl/protocol/TxFlags.h b/include/xrpl/protocol/TxFlags.h index 0d5644aa33..d61e4fc09c 100644 --- a/include/xrpl/protocol/TxFlags.h +++ b/include/xrpl/protocol/TxFlags.h @@ -353,9 +353,6 @@ getAllTxFlags() inline constexpr FlagValue tfMPTPaymentMask = ~(tfUniversal | tfPartialPayment); inline constexpr FlagValue tfTrustSetPermissionMask = ~(tfUniversal | tfSetfAuth | tfSetFreeze | tfClearFreeze); -inline constexpr FlagValue tfSponsorshipSetPermissionMask = - ~(tfUniversal | tfSponsorshipSetRequireSignForFee | tfSponsorshipSetRequireSignForReserve | - tfSponsorshipClearRequireSignForFee | tfSponsorshipClearRequireSignForReserve); // MPTokenIssuanceCreate MutableFlags: // Indicating specific fields or flags may be changed after issuance. diff --git a/include/xrpl/protocol/detail/permissions.macro b/include/xrpl/protocol/detail/permissions.macro index a60dadd5a1..d64e09024b 100644 --- a/include/xrpl/protocol/detail/permissions.macro +++ b/include/xrpl/protocol/detail/permissions.macro @@ -74,7 +74,14 @@ GRANULAR_PERMISSION(MPTokenIssuanceUnlock, ttMPTOKEN_ISSUANCE_SET, 65548, tfUniv {sfHolder, SoeOptional}})) /** This permission grants the delegated account the ability to set SponsorFee. */ -GRANULAR_PERMISSION(SponsorFee, ttSPONSORSHIP_SET, 65549) +GRANULAR_PERMISSION(SponsorFee, ttSPONSORSHIP_SET, 65549, + tfUniversal | tfSponsorshipSetRequireSignForFee | tfSponsorshipClearRequireSignForFee, + ({{sfSponsee, SoeOptional}, + {sfFeeAmount, SoeOptional}, + {sfMaxFee, SoeOptional}})) /** This permission grants the delegated account the ability to set SponsorReserve. */ -GRANULAR_PERMISSION(SponsorReserve, ttSPONSORSHIP_SET, 65550) +GRANULAR_PERMISSION(SponsorReserve, ttSPONSORSHIP_SET, 65550, + tfUniversal | tfSponsorshipSetRequireSignForReserve | tfSponsorshipClearRequireSignForReserve, + ({{sfSponsee, SoeOptional}, + {sfRemainingOwnerCount, SoeOptional}})) diff --git a/include/xrpl/tx/transactors/sponsor/SponsorshipSet.h b/include/xrpl/tx/transactors/sponsor/SponsorshipSet.h index d7e78da2ca..53aa74d3dd 100644 --- a/include/xrpl/tx/transactors/sponsor/SponsorshipSet.h +++ b/include/xrpl/tx/transactors/sponsor/SponsorshipSet.h @@ -19,9 +19,6 @@ public: static NotTEC preflight(PreflightContext const& ctx); - static NotTEC - checkPermission(ReadView const& view, STTx const& tx); - static TER preclaim(PreclaimContext const& ctx); diff --git a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp index b93c36995e..3cf63c4bf2 100644 --- a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp +++ b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp @@ -7,22 +7,18 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include #include -#include #include #include #include -#include namespace xrpl { @@ -104,48 +100,6 @@ SponsorshipSet::preflight(PreflightContext const& ctx) return tesSUCCESS; } -NotTEC -SponsorshipSet::checkPermission(ReadView const& view, STTx const& tx) -{ - auto const delegate = tx[~sfDelegate]; - if (!delegate) - return tesSUCCESS; - - auto const delegateKey = keylet::delegate(tx[sfAccount], *delegate); - auto const sle = view.read(delegateKey); - - if (!sle) - return terNO_DELEGATE_PERMISSION; - - if (checkTxPermission(sle, tx) == tesSUCCESS) - return tesSUCCESS; - - auto const txFlags = tx.getFlags(); - - // this is added in case more flags will be added for SponsorshipSet - // in the future. Currently unreachable. - if ((txFlags & tfSponsorshipSetPermissionMask) != 0u) - return terNO_DELEGATE_PERMISSION; - - std::unordered_set granularPermissions; - loadGranularPermission(sle, ttSPONSORSHIP_SET, granularPermissions); - - auto const sponsoringFee = tx.isFieldPresent(sfFeeAmount) || tx.isFieldPresent(sfMaxFee) || - ((txFlags & (tfSponsorshipSetRequireSignForFee | tfSponsorshipClearRequireSignForFee)) != - 0u); - auto const sponsoringReserve = tx.isFieldPresent(sfRemainingOwnerCount) || - ((txFlags & - (tfSponsorshipSetRequireSignForReserve | tfSponsorshipClearRequireSignForReserve)) != 0u); - - if (sponsoringFee && !granularPermissions.contains(SponsorFee)) - return terNO_DELEGATE_PERMISSION; - - if (sponsoringReserve && !granularPermissions.contains(SponsorReserve)) - return terNO_DELEGATE_PERMISSION; - - return tesSUCCESS; -} - TER SponsorshipSet::preclaim(PreclaimContext const& ctx) { diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index 8c90464c5d..59a9b4f6ef 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -5043,10 +5043,10 @@ public: sponsor::As(sponsor, spfSponsorReserve)); env.close(); - auto const sponsorshipSle = env.le(keylet::sponsor(sponsor, alice)); + auto const sponsorshipSle = env.le(keylet::sponsorship(sponsor, alice)); if (!BEAST_EXPECT(sponsorshipSle)) return; - BEAST_EXPECT(sponsorshipSle->getFieldU32(sfReserveCount) == 0); + BEAST_EXPECT(sponsorshipSle->getFieldU32(sfRemainingOwnerCount) == 0); } BEAST_EXPECT(env.le(vaultKeylet)->getAccountID(sfSponsor) == sponsor.id());