Fix VaultClawback and unit test

This commit is contained in:
Bronek Kozicki
2025-03-13 17:24:05 +00:00
parent b397524d85
commit 7b5680f536
2 changed files with 14 additions and 7 deletions

View File

@@ -321,7 +321,9 @@ class Vault_test : public beast::unit_test::suite
Account const& issuer,
Account const& depositor) -> Asset {
MPTTester mptt{env, issuer, mptInitNoFund};
mptt.create({.flags = tfMPTCanTransfer | tfMPTCanLock});
mptt.create(
{.flags =
tfMPTCanClawback | tfMPTCanTransfer | tfMPTCanLock});
PrettyAsset asset = mptt.issuanceID();
mptt.authorize({.account = depositor});
env(pay(issuer, depositor, asset(1000)));

View File

@@ -85,16 +85,21 @@ VaultClawback::preclaim(PreclaimContext const& ctx)
if (amount && asset != amount->asset())
return tecWRONG_ASSET;
std::uint32_t const issuerFlags = issuer->getFieldU32(sfFlags);
if (asset.holds<Issue>())
if (asset.holds<MPTIssue>())
{
if (!(issuerFlags & lsfMPTCanClawback) ||
!(issuerFlags & lsfMPTCanLock))
auto const mpt = asset.get<MPTIssue>();
auto const mptIssue =
ctx.view.read(keylet::mptIssuance(mpt.getMptID()));
if (mptIssue == nullptr)
return tecWRONG_ASSET;
std::uint32_t const issueFlags = mptIssue->getFieldU32(sfFlags);
if (!(issueFlags & lsfMPTCanClawback) || !(issueFlags & lsfMPTCanLock))
return tecNO_PERMISSION;
}
else if (asset.holds<MPTIssue>())
else if (asset.holds<Issue>())
{
std::uint32_t const issuerFlags = issuer->getFieldU32(sfFlags);
if (!(issuerFlags & lsfAllowTrustLineClawback) ||
(issuerFlags & lsfNoFreeze))
return tecNO_PERMISSION;