Disallow deleting locked MPToken

This commit is contained in:
Bronek Kozicki
2025-04-07 13:01:02 +01:00
parent 442795bfeb
commit 9c967f83be
2 changed files with 23 additions and 0 deletions

View File

@@ -621,6 +621,25 @@ class MPToken_test : public beast::unit_test::suite
// locks up bob's mptoken again
mptAlice.set({.account = alice, .holder = bob, .flags = tfMPTLock});
if (!features[featureSingleAssetVault])
{
// Delete bobs' mptoken even though it is locked
mptAlice.authorize({.account = bob, .flags = tfMPTUnauthorize});
mptAlice.set(
{.account = alice,
.holder = bob,
.flags = tfMPTUnlock,
.err = tecOBJECT_NOT_FOUND});
return;
}
// Cannot delete locked MPToken
mptAlice.authorize(
{.account = bob,
.flags = tfMPTUnauthorize,
.err = tecNO_PERMISSION});
// alice unlocks mptissuance
mptAlice.set({.account = alice, .flags = tfMPTUnlock});
@@ -2297,6 +2316,7 @@ public:
// MPTokenIssuanceSet
testSetValidation(all);
testSetEnabled(all);
testSetEnabled(all | featureSingleAssetVault);
// MPT clawback
testClawbackValidation(all);

View File

@@ -164,6 +164,9 @@ MPTokenAuthorize::authorize(
return tecOBJECT_NOT_FOUND;
if ((*sleMpt)[sfMPTAmount] != 0)
return tecHAS_OBLIGATIONS;
if (view.rules().enabled(featureSingleAssetVault) &&
(sleMpt->getFlags() & lsfMPTLocked))
return tecNO_PERMISSION;
if (!view.dirRemove(
keylet::ownerDir(args.accountID),