mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-01 03:21:04 +00:00
replace sponsorshipSet checkPermission with macro
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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}}))
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -7,22 +7,18 @@
|
||||
#include <xrpl/ledger/ApplyView.h>
|
||||
#include <xrpl/ledger/ReadView.h>
|
||||
#include <xrpl/ledger/helpers/AccountRootHelpers.h>
|
||||
#include <xrpl/ledger/helpers/DelegateHelpers.h>
|
||||
#include <xrpl/ledger/helpers/DirectoryHelpers.h>
|
||||
#include <xrpl/ledger/helpers/SponsorHelpers.h>
|
||||
#include <xrpl/protocol/Indexes.h>
|
||||
#include <xrpl/protocol/LedgerFormats.h>
|
||||
#include <xrpl/protocol/Permissions.h>
|
||||
#include <xrpl/protocol/SField.h>
|
||||
#include <xrpl/protocol/STAmount.h>
|
||||
#include <xrpl/protocol/TER.h>
|
||||
#include <xrpl/protocol/TxFlags.h>
|
||||
#include <xrpl/protocol/TxFormats.h>
|
||||
#include <xrpl/tx/Transactor.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <unordered_set>
|
||||
|
||||
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<GranularPermissionType> 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)
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user