Revert changes preventing deletion of a vault

This commit is contained in:
Bronek Kozicki
2025-04-29 15:29:18 +01:00
parent ffb1959be5
commit 01cc089b0c
3 changed files with 11 additions and 42 deletions

View File

@@ -1248,9 +1248,9 @@ class Vault_test : public beast::unit_test::suite
env(tx);
env.close();
// Cannot delete vault with a global lock
// Can delete empty vault, even if global lock
tx = vault.del({.owner = owner, .id = keylet.key});
env(tx, ter{tecNO_PERMISSION});
env(tx);
});
testCase([this](
@@ -1361,10 +1361,9 @@ class Vault_test : public beast::unit_test::suite
.amount = asset(100)});
env(tx);
// Cannot delete an empty vault, because its shares are
// (transitively, by asset) locked.
// Can delete an empty vault even when asset is locked.
tx = vault.del({.owner = owner, .id = keylet.key});
env(tx, ter{tecNO_PERMISSION});
env(tx);
});
{
@@ -1802,12 +1801,6 @@ class Vault_test : public beast::unit_test::suite
env(tx1);
env.close();
// Cannot delete an empty vault, because its shares are
// (transitively, by asset) locked.
auto tx2 = vault.del({.owner = owner, .id = keylet.key});
env(tx2, ter{tecNO_PERMISSION});
env.close();
tx0[jss::Flags] = tfClearFreeze;
env(tx0);
env.close();
@@ -1928,10 +1921,9 @@ class Vault_test : public beast::unit_test::suite
env(tx3);
env.close();
// Cannot delete an empty vault, because its shares are
// (transitively, by asset) locked.
// Can delete an empty vault, even under asset is under global lock
auto tx4 = vault.del({.owner = owner, .id = keylet.key});
env(tx4, ter{tecNO_PERMISSION});
env(tx4);
env.close();
}
}

View File

@@ -73,23 +73,19 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx)
if (!sleMpt)
return tecOBJECT_NOT_FOUND;
auto const sleMptIssuance =
ctx.view.read(keylet::mptIssuance(ctx.tx[sfMPTokenIssuanceID]));
if ((*sleMpt)[sfMPTAmount] != 0)
{
auto const sleMptIssuance = ctx.view.read(
keylet::mptIssuance(ctx.tx[sfMPTokenIssuanceID]));
if (!sleMptIssuance)
return tefINTERNAL;
return tecHAS_OBLIGATIONS;
}
if (ctx.view.rules().enabled(featureSingleAssetVault))
{
if (sleMptIssuance && sleMptIssuance->isFlag(lsfMPTLocked))
return tecNO_PERMISSION;
else if (sleMpt->isFlag(lsfMPTLocked))
return tecNO_PERMISSION;
}
if (ctx.view.rules().enabled(featureSingleAssetVault) &&
sleMpt->isFlag(lsfMPTLocked))
return tecNO_PERMISSION;
return tesSUCCESS;
}

View File

@@ -1344,17 +1344,6 @@ removeEmptyHolding(
if (line->at(sfBalance)->iou() != beast::zero)
return tecHAS_OBLIGATIONS;
if (view.rules().enabled(featureSingleAssetVault))
{
// Check frozen flag, disallow delete if set
if (auto const issuer = view.read(keylet::account(issue.account));
issuer && issuer->isFlag(lsfGlobalFreeze))
return tecNO_PERMISSION;
if (line->isFlag(
(issue.account > accountID) ? lsfHighFreeze : lsfLowFreeze))
return tecNO_PERMISSION;
}
// Adjust the owner count(s)
if (line->isFlag(lsfLowReserve))
{
@@ -1405,14 +1394,6 @@ removeEmptyHolding(
return tecOBJECT_NOT_FOUND;
if (mptoken->at(sfMPTAmount) != 0)
return tecHAS_OBLIGATIONS;
if (view.rules().enabled(featureSingleAssetVault))
{
auto const sleIssuance = view.read(keylet::mptIssuance(mptID));
if (sleIssuance && sleIssuance->isFlag(lsfMPTLocked))
return tecNO_PERMISSION;
else if (mptoken->isFlag(lsfMPTLocked))
return tecNO_PERMISSION;
}
return MPTokenAuthorize::authorize(
view,