mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-23 15:20:54 +00:00
Enforce defult rippling in VaultCreate::preclaim
This commit is contained in:
@@ -1090,22 +1090,44 @@ class Vault_test : public beast::unit_test::suite
|
||||
{
|
||||
using namespace test::jtx;
|
||||
{
|
||||
testcase("IOU fail create frozen");
|
||||
Env env{*this, supported_amendments() | featureSingleAssetVault};
|
||||
Account issuer{"issuer"};
|
||||
Account owner{"owner"};
|
||||
Account depositor{"depositor"};
|
||||
env.fund(XRP(1000), issuer, owner, depositor);
|
||||
env.close();
|
||||
Vault vault{env};
|
||||
Asset asset = issuer["IOU"];
|
||||
{
|
||||
testcase("IOU fail create frozen");
|
||||
Env env{
|
||||
*this, supported_amendments() | featureSingleAssetVault};
|
||||
Account issuer{"issuer"};
|
||||
Account owner{"owner"};
|
||||
env.fund(XRP(1000), issuer, owner);
|
||||
env.close();
|
||||
env(fset(issuer, asfGlobalFreeze));
|
||||
env.close();
|
||||
|
||||
auto [tx, keylet] = vault.create({.owner = owner, .asset = asset});
|
||||
Vault vault{env};
|
||||
Asset asset = issuer["IOU"];
|
||||
auto [tx, keylet] =
|
||||
vault.create({.owner = owner, .asset = asset});
|
||||
|
||||
env(fset(issuer, asfGlobalFreeze));
|
||||
env.close();
|
||||
env(tx, ter(tecFROZEN));
|
||||
env.close();
|
||||
env(tx, ter(tecFROZEN));
|
||||
env.close();
|
||||
}
|
||||
|
||||
{
|
||||
testcase("IOU fail create no ripling");
|
||||
Env env{
|
||||
*this, supported_amendments() | featureSingleAssetVault};
|
||||
Account issuer{"issuer"};
|
||||
Account owner{"owner"};
|
||||
env.fund(XRP(1000), issuer, owner);
|
||||
env.close();
|
||||
env(fclear(issuer, asfDefaultRipple));
|
||||
env.close();
|
||||
|
||||
Vault vault{env};
|
||||
Asset asset = issuer["IOU"];
|
||||
auto [tx, keylet] =
|
||||
vault.create({.owner = owner, .asset = asset});
|
||||
env(tx, ter(terNO_RIPPLE));
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -100,7 +100,9 @@ VaultCreate::preclaim(PreclaimContext const& ctx)
|
||||
auto vaultAsset = ctx.tx[sfAsset];
|
||||
auto account = ctx.tx[sfAccount];
|
||||
|
||||
if (vaultAsset.holds<MPTIssue>())
|
||||
if (vaultAsset.native())
|
||||
; // No special checks for XRP
|
||||
else if (vaultAsset.holds<MPTIssue>())
|
||||
{
|
||||
auto mptID = vaultAsset.get<MPTIssue>().getMptID();
|
||||
auto issuance = ctx.view.read(keylet::mptIssuance(mptID));
|
||||
@@ -109,6 +111,15 @@ VaultCreate::preclaim(PreclaimContext const& ctx)
|
||||
if ((issuance->getFlags() & lsfMPTCanTransfer) == 0)
|
||||
return tecNO_AUTH;
|
||||
}
|
||||
else if (vaultAsset.holds<Issue>())
|
||||
{
|
||||
auto const issuer =
|
||||
ctx.view.read(keylet::account(vaultAsset.getIssuer()));
|
||||
if (!issuer)
|
||||
return terNO_ACCOUNT; // LCOV_EXCL_LINE
|
||||
else if (!issuer->isFlag(lsfDefaultRipple))
|
||||
return terNO_RIPPLE;
|
||||
}
|
||||
|
||||
// Check for pseudo-account issuers - we do not want a vault to hold such
|
||||
// assets (e.g. MPT shares to other vaults or AMM LPTokens) as they would be
|
||||
|
||||
@@ -1147,7 +1147,7 @@ addEmptyHolding(
|
||||
auto const& issuerId = issue.getIssuer();
|
||||
auto const& currency = issue.currency;
|
||||
if (isGlobalFrozen(view, issuerId))
|
||||
return tecFROZEN;
|
||||
return tecINTERNAL; // LCOV_EXCL_LINE
|
||||
|
||||
auto const& srcId = issuerId;
|
||||
auto const& dstId = accountID;
|
||||
|
||||
Reference in New Issue
Block a user