diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 708f747f65..ac0df1702c 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -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(); } } diff --git a/src/xrpld/app/tx/detail/MPTokenAuthorize.cpp b/src/xrpld/app/tx/detail/MPTokenAuthorize.cpp index b8e828e33c..748c05869f 100644 --- a/src/xrpld/app/tx/detail/MPTokenAuthorize.cpp +++ b/src/xrpld/app/tx/detail/MPTokenAuthorize.cpp @@ -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; } diff --git a/src/xrpld/ledger/detail/View.cpp b/src/xrpld/ledger/detail/View.cpp index d9fdd451d8..c1062d056c 100644 --- a/src/xrpld/ledger/detail/View.cpp +++ b/src/xrpld/ledger/detail/View.cpp @@ -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,