diff --git a/include/xrpl/ledger/helpers/MPTokenHelpers.h b/include/xrpl/ledger/helpers/MPTokenHelpers.h index 002977c9cc..f8ff786768 100644 --- a/include/xrpl/ledger/helpers/MPTokenHelpers.h +++ b/include/xrpl/ledger/helpers/MPTokenHelpers.h @@ -108,7 +108,8 @@ enforceMPTokenAuthorization( MPTID const& mptIssuanceID, AccountID const& account, XRPAmount const& priorBalance, - beast::Journal j); + beast::Journal j, + std::uint32_t flags = 0); /** Check if the destination account is allowed * to receive MPT. Return tecNO_AUTH if it doesn't diff --git a/src/libxrpl/ledger/View.cpp b/src/libxrpl/ledger/View.cpp index 10ba4270d4..fe50545ba8 100644 --- a/src/libxrpl/ledger/View.cpp +++ b/src/libxrpl/ledger/View.cpp @@ -74,7 +74,8 @@ isVaultPseudoAccountFrozen( } if constexpr (std::is_same_v) { - return mptShare[sfAccount]; + MPTID const mptID = mptShare[sfMPTokenIssuanceID]; + return getMPTIssuer(mptID); } }(); diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index 6d8ef9e3df..0f40e489a0 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -410,7 +410,8 @@ enforceMPTokenAuthorization( MPTID const& mptIssuanceID, AccountID const& account, XRPAmount const& priorBalance, // for MPToken authorization - beast::Journal j) + beast::Journal j, + std::uint32_t flags) { auto const sleIssuance = view.read(keylet::mptIssuance(mptIssuanceID)); if (!sleIssuance) @@ -491,7 +492,8 @@ enforceMPTokenAuthorization( priorBalance, // priorBalance mptIssuanceID, // mptIssuanceID account, // account - j); + j, + flags); !isTesSuccess(err)) return err; diff --git a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp index b6e3d88064..eaaae51003 100644 --- a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp @@ -230,8 +230,8 @@ VaultCreate::doApply() view().insert(vault); // Explicitly create MPToken for the vault owner - if (auto const err = - authorizeMPToken(view(), preFeeBalance_, mptIssuanceID, account_, ctx_.journal); + if (auto const err = authorizeMPToken( + view(), preFeeBalance_, mptIssuanceID, account_, ctx_.journal, lsfMPTVault); !isTesSuccess(err)) return err; diff --git a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp index fbb8908ddb..4ff15aee3b 100644 --- a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp @@ -159,7 +159,7 @@ VaultDeposit::doApply() if (vault->isFlag(lsfVaultPrivate) && account_ != vault->at(sfOwner)) { if (auto const err = enforceMPTokenAuthorization( - ctx_.view(), mptIssuanceID, account_, preFeeBalance_, j_); + ctx_.view(), mptIssuanceID, account_, preFeeBalance_, j_, lsfMPTVault); !isTesSuccess(err)) return err; } @@ -169,7 +169,12 @@ VaultDeposit::doApply() if (!view().exists(keylet::mptoken(mptIssuanceID, account_))) { if (auto const err = authorizeMPToken( - view(), preFeeBalance_, mptIssuanceID->value(), account_, ctx_.journal); + view(), + preFeeBalance_, + mptIssuanceID->value(), + account_, + ctx_.journal, + lsfMPTVault); !isTesSuccess(err)) return err; }