From 403ef0d6c28b1f8af6936af95bdf6b9c551b2c88 Mon Sep 17 00:00:00 2001 From: Bronek Kozicki Date: Wed, 19 Mar 2025 17:37:20 +0000 Subject: [PATCH] Allow resetting AssetMaximum to zero --- src/test/app/Vault_test.cpp | 13 ++++++++++--- src/xrpld/app/tx/detail/VaultSet.cpp | 3 ++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 14fe9bc910..5400ae2dcb 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -139,7 +139,7 @@ class Vault_test : public beast::unit_test::suite { testcase(prefix + " set maximum higher than current amount"); auto tx = vault.set({.owner = owner, .id = keylet.key}); - tx[sfAssetMaximum] = asset(200).number(); + tx[sfAssetMaximum] = asset(150).number(); env(tx); } @@ -162,10 +162,17 @@ class Vault_test : public beast::unit_test::suite auto tx = vault.deposit( {.depositor = depositor, .id = keylet.key, - .amount = asset(200)}); + .amount = asset(100)}); env(tx, ter(tecLIMIT_EXCEEDED)); } + { + testcase(prefix + " reset maximum to zero i.e. not enforced"); + auto tx = vault.set({.owner = owner, .id = keylet.key}); + tx[sfAssetMaximum] = asset(0).number(); + env(tx); + } + { testcase(prefix + " fail to withdraw negative amount"); auto tx = vault.withdraw( @@ -194,7 +201,7 @@ class Vault_test : public beast::unit_test::suite } { - testcase(prefix + " deposit up to maximum"); + testcase(prefix + " deposit some more"); auto tx = vault.deposit( {.depositor = depositor, .id = keylet.key, diff --git a/src/xrpld/app/tx/detail/VaultSet.cpp b/src/xrpld/app/tx/detail/VaultSet.cpp index 547f53132c..d7a15e8df2 100644 --- a/src/xrpld/app/tx/detail/VaultSet.cpp +++ b/src/xrpld/app/tx/detail/VaultSet.cpp @@ -138,7 +138,8 @@ VaultSet::doApply() vault->at(sfData) = tx[sfData]; if (tx.isFieldPresent(sfAssetMaximum)) { - if (tx[sfAssetMaximum] < *vault->at(sfAssetTotal)) + if (tx[sfAssetMaximum] != 0 && + tx[sfAssetMaximum] < *vault->at(sfAssetTotal)) return tecLIMIT_EXCEEDED; vault->at(sfAssetMaximum) = tx[sfAssetMaximum]; }