From 4a5ad8925c5cdbaed64f0e0591c96dde339895d1 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 23 Mar 2026 12:46:42 -0700 Subject: [PATCH] fix issues --- include/xrpl/ledger/helpers/MPToken.h | 2 +- include/xrpl/ledger/helpers/RippleState.h | 10 +++----- include/xrpl/ledger/helpers/TokenHolderBase.h | 24 ------------------- .../transactors/token/MPTokenIssuanceSet.cpp | 2 +- .../tx/transactors/vault/VaultDeposit.cpp | 7 ++++-- .../tx/transactors/vault/VaultWithdraw.cpp | 4 ++++ 6 files changed, 14 insertions(+), 35 deletions(-) diff --git a/include/xrpl/ledger/helpers/MPToken.h b/include/xrpl/ledger/helpers/MPToken.h index 01ece59480..61fd9e4bfa 100644 --- a/include/xrpl/ledger/helpers/MPToken.h +++ b/include/xrpl/ledger/helpers/MPToken.h @@ -78,7 +78,7 @@ public: WritableMPToken mptoken(issuance, account); auto const ownerNode = mptoken.applyView().dirInsert( - keylet::ownerDir(account), mptoken.key(), describeOwnerDir(account)); + keylet::ownerDir(account), mptoken->key(), describeOwnerDir(account)); if (!ownerNode) return tecDIR_FULL; // LCOV_EXCL_LINE diff --git a/include/xrpl/ledger/helpers/RippleState.h b/include/xrpl/ledger/helpers/RippleState.h index 14e8ff49f9..a2ef3b1ede 100644 --- a/include/xrpl/ledger/helpers/RippleState.h +++ b/include/xrpl/ledger/helpers/RippleState.h @@ -90,17 +90,13 @@ public: return writableIOUToken_; } - static Expected, TER> - createHolding( - ApplyView& view, - WritableIOUToken& token, - AccountID const& accountID, - beast::Journal journal) + static Expected + makeNew(WritableIOUToken& token, AccountID const& accountID, beast::Journal journal) { auto const ter = token.addEmptyHolding(accountID, XRPAmount{0}, journal); if (ter != tesSUCCESS) return Unexpected(ter); - return std::make_unique(view, token, accountID); + return WritableRippleState{token.applyView(), token, accountID}; } //-------------------------------------------------------------------------- diff --git a/include/xrpl/ledger/helpers/TokenHolderBase.h b/include/xrpl/ledger/helpers/TokenHolderBase.h index 9cea71f29e..2a7537cd4a 100644 --- a/include/xrpl/ledger/helpers/TokenHolderBase.h +++ b/include/xrpl/ledger/helpers/TokenHolderBase.h @@ -20,16 +20,6 @@ public: { } - /** Constructor with explicit keylet (for when SLE lookup is needed) */ - TokenHolderBase( - ReadView const& view, - Keylet const& key, - TokenBase const& token, - AccountID const& holder) - : ReadOnlySLE(key, view), token_(token), holder_(holder), holderAccount_(holder, view) - { - } - TokenHolderBase() = delete; AccountID const& @@ -128,20 +118,6 @@ public: { } - /** Constructor with explicit keylet (for creation or lookup by key) */ - WritableTokenHolderBase( - ApplyView& view, - Keylet const& key, - WritableTokenBase& token, - AccountID const& holder) - : ReadOnlySLE(key, view) - , TokenHolderBase(view, key, token, holder) - , WritableSLE(key, view) - , writableToken_(token) - , writableHolderAccount_(holder, view) - { - } - WritableTokenBase& getWritableToken() { diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp index 2be11b11fa..16b0b7216e 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp @@ -342,7 +342,7 @@ updateMPToken(WritableMPToken& mpt, STTx const& tx) if (txFlags & tfMPTLock) { - mpt->setFlag(flagsIn & lsfMPTLocked); + mpt->setFlag(flagsIn | lsfMPTLocked); } else if (txFlags & tfMPTUnlock) { diff --git a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp index feb87147b6..80bef82176 100644 --- a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp @@ -80,8 +80,11 @@ VaultDeposit::preclaim(PreclaimContext const& ctx) } // Cannot deposit inside Vault an Asset frozen for the depositor - if (token->isFrozen(account)) - return vaultAsset.holds() ? tecFROZEN : tecLOCKED; + if (auto const ret = token->checkFrozen(account)) + return ret; + // Cannot deposit if the vault account's asset holding is frozen/locked + if (token->isFrozen(vaultAccount)) + return tecLOCKED; // Cannot deposit if the shares of the vault are frozen if (shareIssuance.isFrozen(account)) diff --git a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp index 9c5cb9fb61..4063f421fb 100644 --- a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp @@ -82,6 +82,10 @@ VaultWithdraw::preclaim(PreclaimContext const& ctx) if (auto const ret = vaultAssetToken->checkFrozen(dstAcct)) return ret; + // Cannot withdraw if the vault account's asset holding is frozen/locked + if (vaultAssetToken->isFrozen(vaultAccount)) + return tecLOCKED; + // Cannot return shares to the vault, if the underlying asset was frozen for // the submitter if (auto const ret = MPTokenIssuance(ctx.view, vaultShare).checkFrozen(account))