From fe582c1379c66147d5d10b77136eb0a7db16f2a1 Mon Sep 17 00:00:00 2001 From: Gregory Tsipenyuk Date: Thu, 30 Apr 2026 13:57:01 -0400 Subject: [PATCH] Skip isVaultPseudoAccountFrozen() for non-vault shares. --- include/xrpl/protocol/LedgerFormats.h | 3 ++- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 3 ++- src/libxrpl/tx/transactors/vault/VaultCreate.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/xrpl/protocol/LedgerFormats.h b/include/xrpl/protocol/LedgerFormats.h index 009a96533a..3bcf1c60d5 100644 --- a/include/xrpl/protocol/LedgerFormats.h +++ b/include/xrpl/protocol/LedgerFormats.h @@ -188,7 +188,8 @@ enum LedgerEntryType : std::uint16_t { LEDGER_OBJECT(MPToken, \ LSF_FLAG2(lsfMPTLocked, 0x00000001) \ LSF_FLAG(lsfMPTAuthorized, 0x00000002) \ - LSF_FLAG(lsfMPTAMM, 0x00000004)) \ + LSF_FLAG(lsfMPTAMM, 0x00000004) \ + LSF_FLAG(lsfMPTVault, 0x00000008)) \ \ LEDGER_OBJECT(Credential, \ LSF_FLAG(lsfAccepted, 0x00010000)) \ diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index be67a69522..6d8ef9e3df 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -71,8 +71,9 @@ bool isFrozen(ReadView const& view, AccountID const& account, SLE const& mptSLE, int depth) { MPTIssue const mptIssue{mptSLE[sfMPTokenIssuanceID]}; + bool const isVaultShares = mptSLE.isFlag(lsfMPTVault); return isGlobalFrozen(view, mptIssue) || isIndividualFrozen(view, account, mptSLE) || - isVaultPseudoAccountFrozen(view, account, mptSLE, depth); + (isVaultShares && isVaultPseudoAccountFrozen(view, account, mptSLE, depth)); } [[nodiscard]] bool diff --git a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp index cc28abfe65..b6e3d88064 100644 --- a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp @@ -174,7 +174,7 @@ VaultCreate::doApply() : ctx_.tx[~sfScale].value_or(vaultDefaultIOUScale); auto txFlags = tx.getFlags(); - std::uint32_t mptFlags = 0; + std::uint32_t mptFlags = lsfMPTVault; if ((txFlags & tfVaultShareNonTransferable) == 0) mptFlags |= (lsfMPTCanEscrow | lsfMPTCanTrade | lsfMPTCanTransfer); if ((txFlags & tfVaultPrivate) != 0u)