Allow resetting AssetMaximum to zero

This commit is contained in:
Bronek Kozicki
2025-03-19 17:37:20 +00:00
parent 6db2144912
commit 403ef0d6c2
2 changed files with 12 additions and 4 deletions

View File

@@ -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,

View File

@@ -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];
}