Fix clang, minor refactor of createPseudoAccount

This commit is contained in:
Bronek Kozicki
2025-03-27 14:07:37 +00:00
parent 0f99955ae9
commit abaf213336
3 changed files with 32 additions and 24 deletions

View File

@@ -348,7 +348,7 @@ class Vault_test : public beast::unit_test::suite
Account issuer{"issuer"};
Account owner{"owner"};
Account depositor{"depositor"};
Vault vault(env);
Vault vault{env};
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
env(fset(issuer, asfAllowTrustLineClawback));
@@ -413,7 +413,7 @@ class Vault_test : public beast::unit_test::suite
Account depositor{"depositor"};
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
Vault vault(env);
Vault vault{env};
Asset asset = xrpIssue();
test(env, issuer, owner, depositor, asset, vault);
@@ -635,7 +635,7 @@ class Vault_test : public beast::unit_test::suite
Account depositor{"depositor"};
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
Vault vault(env);
Vault vault{env};
Asset asset = issuer["IOU"];
auto [tx, keylet] = vault.create({.owner = owner, .asset = asset});
@@ -656,7 +656,7 @@ class Vault_test : public beast::unit_test::suite
Account depositor{"depositor"};
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
Vault vault(env);
Vault vault{env};
MPTTester mptt{env, issuer, mptInitNoFund};
@@ -678,7 +678,7 @@ class Vault_test : public beast::unit_test::suite
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
Vault vault(env);
Vault vault{env};
PrettyAsset asset = issuer["IOU"];
env.trust(asset(1000), owner);
env(pay(issuer, owner, asset(100)));
@@ -801,7 +801,7 @@ class Vault_test : public beast::unit_test::suite
Account depositor{"depositor"};
env.fund(XRP(1000), issuer, owner, depositor);
env.close();
Vault vault(env);
Vault vault{env};
MPTTester mptt{env, issuer, mptInitNoFund};
mptt.create({.flags = tfMPTCanTransfer | tfMPTCanLock});
@@ -888,7 +888,7 @@ class Vault_test : public beast::unit_test::suite
Account credIssuer1{"credIssuer1"};
Account credIssuer2{"credIssuer2"};
std::string const credType = "credential";
Vault vault(env);
Vault vault{env};
env.fund(
XRP(1000),
issuer,
@@ -1063,7 +1063,7 @@ class Vault_test : public beast::unit_test::suite
Account const owner{"owner"};
Account const issuer{"issuer"};
Account const charlie{"charlie"};
Vault vault(env);
Vault vault{env};
env.fund(XRP(1000), issuer, owner, charlie);
env.close();
@@ -1113,12 +1113,13 @@ class Vault_test : public beast::unit_test::suite
BEAST_EXPECT(
keylet::vault(ownerAccount, env.seq(owner) - 1).key == keylet.key);
auto const vaultBalance = [&]() -> PrettyAmount {
auto const sle = env.le(keylet::line(vaultAccount, issue));
auto const vaultBalance = //
[&, account = vaultAccount]() -> PrettyAmount {
auto const sle = env.le(keylet::line(account, issue));
BEAST_EXPECT(sle != nullptr);
auto amount = sle->getFieldAmount(sfBalance);
amount.setIssuer(issue.account);
if (vaultAccount > issue.account)
if (account > issue.account)
amount.negate();
return {amount, env.lookup(issue.account).name()};
};

View File

@@ -659,7 +659,7 @@ requireAuth(
/** Enforce account has MPToken to match its authorization.
*
* Called from doApply - it will check for expired (and delete if found any)
* credentials maching DomainID set in MPTIssuance. Must be called if
* credentials matching DomainID set in MPTIssuance. Must be called if
* requireAuth(...MPTIssue...) returned tesSUCCESS or tecEXPIRED in preclaim.
* Will create MPToken (if needed) on the basis of any non-expired credentals
* and delete any expried credentials (indirectly via verifyValidDomain)

View File

@@ -1043,18 +1043,25 @@ createPseudoAccount(
uint256 const& pseudoOwnerKey,
PseudoAccountOwnerType type)
{
AccountID accountId;
for (auto i = 0;; ++i)
{
if (i >= 256)
return Unexpected(tecDUPLICATE);
ripesha_hasher rsh;
auto const hash = sha512Half(i, view.info().parentHash, pseudoOwnerKey);
rsh(hash.data(), hash.size());
accountId = static_cast<ripesha_hasher::result_type>(rsh);
if (!view.read(keylet::account(accountId)))
break;
}
auto const accountId = [&]() -> AccountID {
AccountID ret = beast::zero;
// This number must not be changed without an amendment
constexpr int maxAccountAttempts = 256;
for (auto i = 0; i < maxAccountAttempts; ++i)
{
ripesha_hasher rsh;
auto const hash =
sha512Half(i, view.info().parentHash, pseudoOwnerKey);
rsh(hash.data(), hash.size());
ret = static_cast<ripesha_hasher::result_type>(rsh);
if (!view.read(keylet::account(ret)))
return ret;
}
return ret;
}();
if (accountId == beast::zero)
return Unexpected(tecDUPLICATE);
// Create pseudo-account.
auto account = std::make_shared<SLE>(keylet::account(accountId));