extra checks after sync with target

This commit is contained in:
Valentin Balaschenko
2025-12-24 12:16:21 +00:00
parent 9449ce931e
commit 1e21180332
4 changed files with 14 additions and 12 deletions

View File

@@ -257,6 +257,9 @@ isFrozen(
MPTIssue const& mptIssue,
int depth)
{
if (account == mptIssue.getIssuer())
return false;
return isGlobalFrozen(view, mptIssue) ||
isIndividualFrozen(view, account, mptIssue) ||
isVaultPseudoAccountFrozen(view, account, mptIssue, depth);

View File

@@ -41,11 +41,6 @@ LoanBrokerCoverDeposit::preclaim(PreclaimContext const& ctx)
JLOG(ctx.j.warn()) << "LoanBroker does not exist.";
return tecNO_ENTRY;
}
if (account != sleBroker->at(sfOwner))
{
JLOG(ctx.j.warn()) << "Account is not the owner of the LoanBroker.";
return tecNO_PERMISSION;
}
auto const vault = ctx.view.read(keylet::vault(sleBroker->at(sfVaultID)));
if (!vault)
{

View File

@@ -59,11 +59,6 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx)
JLOG(ctx.j.warn()) << "LoanBroker does not exist.";
return tecNO_ENTRY;
}
if (account != sleBroker->at(sfOwner))
{
JLOG(ctx.j.warn()) << "Account is not the owner of the LoanBroker.";
return tecNO_PERMISSION;
}
auto const vault = ctx.view.read(keylet::vault(sleBroker->at(sfVaultID)));
if (!vault)
{
@@ -131,11 +126,19 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx)
if ((coverAvail - amount) < minimumCover)
return tecINSUFFICIENT_FUNDS;
// Allow returning frozen/locked assets to issuer for both IOUs and MPTs.
// When withdrawing to the issuer, ignore freeze since frozen IOUs and
// locked MPTs can both be sent back to their issuer.
FreezeHandling const freezeHandling =
(dstAcct == vaultAsset.getIssuer() || account == vaultAsset.getIssuer())
? FreezeHandling::fhIGNORE_FREEZE
: FreezeHandling::fhZERO_IF_FROZEN;
if (accountHolds(
ctx.view,
pseudoAccountID,
vaultAsset,
FreezeHandling::fhZERO_IF_FROZEN,
freezeHandling,
AuthHandling::ahZERO_IF_UNAUTHORIZED,
ctx.j) < amount)
return tecINSUFFICIENT_FUNDS;

View File

@@ -86,7 +86,8 @@ VaultDeposit::preclaim(PreclaimContext const& ctx)
return vaultAsset.holds<Issue>() ? tecFROZEN : tecLOCKED;
// Cannot deposit if the shares of the vault are frozen
if (isFrozen(ctx.view, account, vaultShare))
bool const isAssetIssuer = (account == vaultAsset.getIssuer());
if (!isAssetIssuer && isFrozen(ctx.view, account, vaultShare))
return tecLOCKED;
if (vault->isFlag(lsfVaultPrivate) && account != vault->at(sfOwner))