mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-22 06:40:53 +00:00
Fix VaultClawback and unit test
This commit is contained in:
@@ -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)));
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user