diff --git a/include/xrpl/ledger/helpers/AccountRootHelpers.h b/include/xrpl/ledger/helpers/AccountRootHelpers.h index ebbf736f87..b155022225 100644 --- a/include/xrpl/ledger/helpers/AccountRootHelpers.h +++ b/include/xrpl/ledger/helpers/AccountRootHelpers.h @@ -197,19 +197,6 @@ isPseudoAccount( std::shared_ptr sleAcct, std::set const& pseudoFieldFilter = {}); -/** Convenience overload that reads the account from the view. */ -[[nodiscard]] inline bool -isPseudoAccount( - ReadView const& view, - AccountID const& accountId, - std::set const& pseudoFieldFilter = {}) -{ - AccountRoot const acct(accountId, view); - if (!acct) - return false; - return acct.isPseudoAccount(pseudoFieldFilter); -} - /** * Create pseudo-account, storing pseudoOwnerKey into ownerField. * diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index eecc5d795a..bf8bdcea3e 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -351,7 +351,8 @@ requireAuth( if (featureSAVEnabled) { // Implicitly authorize Vault and LoanBroker pseudo-accounts - if (isPseudoAccount(view, account, {&sfVaultID, &sfLoanBrokerID})) + AccountRoot const accountRoot(account, view); + if (accountRoot.isPseudoAccount({&sfVaultID, &sfLoanBrokerID})) return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp index 624347c3c6..c0e0715d73 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp @@ -48,9 +48,9 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx) auto const brokerID = tx[sfLoanBrokerID]; auto const amount = tx[sfAmount]; - auto const dstAcct = tx[~sfDestination].value_or(account); + auto const dstAcct = AccountRoot(tx[~sfDestination].value_or(account), ctx.view); - if (isPseudoAccount(ctx.view, dstAcct)) + if (dstAcct.isPseudoAccount()) { JLOG(ctx.j.warn()) << "Trying to withdraw into a pseudo-account."; return tecPSEUDO_ACCOUNT; @@ -82,13 +82,14 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx) // The broker's pseudo-account is the source of funds. auto const pseudoAccountID = sleBroker->at(sfAccount); // Cannot transfer a non-transferable Asset - if (auto const ret = canTransfer(ctx.view, vaultAsset, pseudoAccountID, dstAcct)) + if (auto const ret = canTransfer(ctx.view, vaultAsset, pseudoAccountID, dstAcct.id()); + !isTesSuccess(ret)) return ret; // Withdrawal to a 3rd party destination account is essentially a transfer. // Enforce all the usual asset transfer checks. AuthType authType = AuthType::WeakAuth; - if (account != dstAcct) + if (account != dstAcct.id()) { if (auto const ret = canWithdraw(ctx.view, tx)) return ret; @@ -99,17 +100,17 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx) } // Destination MPToken must exist (if asset is an MPT) - if (auto const ter = requireAuth(ctx.view, vaultAsset, dstAcct, authType)) + if (auto const ter = requireAuth(ctx.view, vaultAsset, dstAcct.id(), authType)) return ter; // Check for freezes, unless sending directly to the issuer - if (dstAcct != vaultAsset.getIssuer()) + if (dstAcct.id() != vaultAsset.getIssuer()) { // Cannot send a frozen Asset if (auto const ret = checkFrozen(ctx.view, pseudoAccountID, vaultAsset)) return ret; // Destination account cannot receive if asset is deep frozen - if (auto const ret = checkDeepFrozen(ctx.view, dstAcct, vaultAsset)) + if (auto const ret = checkDeepFrozen(ctx.view, dstAcct.id(), vaultAsset)) return ret; } diff --git a/src/libxrpl/tx/transactors/system/TicketCreate.cpp b/src/libxrpl/tx/transactors/system/TicketCreate.cpp index 35dd2c5778..fe990fa0ec 100644 --- a/src/libxrpl/tx/transactors/system/TicketCreate.cpp +++ b/src/libxrpl/tx/transactors/system/TicketCreate.cpp @@ -70,8 +70,6 @@ TicketCreate::doApply() return tecINSUFFICIENT_RESERVE; } - beast::Journal const viewJ{ctx_.registry.get().getJournal("View")}; - // The starting ticket sequence is the same as the current account // root sequence. Before we got here to doApply(), the transaction // machinery already incremented the account root sequence if that diff --git a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp index 67397a9908..99729132ca 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp @@ -94,7 +94,8 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) return tesSUCCESS; } - if (AccountRoot const acctHolder(*holderID, ctx.view); !acctHolder) + AccountRoot const holder(*holderID, ctx.view); + if (!holder) return tecNO_DST; auto const sleMptIssuance = ctx.view.read(keylet::mptIssuance(ctx.tx[sfMPTokenIssuanceID])); @@ -125,7 +126,7 @@ MPTokenAuthorize::preclaim(PreclaimContext const& ctx) // Can't unauthorize the pseudo-accounts because they are implicitly // always authorized. No need to amendment gate since Vault and LoanBroker // can only be created if the Vault amendment is enabled. - if (isPseudoAccount(ctx.view, *holderID, {&sfVaultID, &sfLoanBrokerID})) + if (holder.isPseudoAccount({&sfVaultID, &sfLoanBrokerID})) return tecNO_PERMISSION; return tesSUCCESS; diff --git a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp index f3ccd6567b..0cdae4a0e6 100644 --- a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp @@ -91,7 +91,8 @@ TER VaultCreate::preclaim(PreclaimContext const& ctx) { auto const vaultAsset = ctx.tx[sfAsset]; - auto const account = ctx.tx[sfAccount]; + auto const& account = ctx.tx[sfAccount]; + auto const issuer = AccountRoot(vaultAsset.getIssuer(), ctx.view); if (auto const ter = canAddHolding(ctx.view, vaultAsset)) return ter; @@ -101,7 +102,7 @@ VaultCreate::preclaim(PreclaimContext const& ctx) // impossible to clawback (should the need arise) if (!vaultAsset.native()) { - if (isPseudoAccount(ctx.view, vaultAsset.getIssuer())) + if (issuer.isPseudoAccount()) return tecWRONG_ASSET; }