diff --git a/include/xrpl/ledger/helpers/WrappedSLEBase.h b/include/xrpl/ledger/helpers/WrappedSLEBase.h index 1b031602f8..42e92e5af6 100644 --- a/include/xrpl/ledger/helpers/WrappedSLEBase.h +++ b/include/xrpl/ledger/helpers/WrappedSLEBase.h @@ -143,6 +143,27 @@ public: return *mutableSle_; } + void + insert() + { + XRPL_ASSERT(canModify(), "xrpl::WritableSLE::insert : can modify"); + applyView_->insert(mutableSle_); + } + + void + erase() + { + XRPL_ASSERT(canModify(), "xrpl::WritableSLE::erase : can modify"); + applyView_->erase(mutableSle_); + } + + void + update() + { + XRPL_ASSERT(canModify(), "xrpl::WritableSLE::update : can modify"); + applyView_->update(mutableSle_); + } + protected: WritableSLE() = default; diff --git a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp index 759b237e57..b0e50bac83 100644 --- a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp @@ -106,7 +106,7 @@ WritableAccountRoot::adjustOwnerCount(std::int32_t amount, beast::Journal j) std::uint32_t const adjusted = confineOwnerCount(current, amount, id, j); applyView_->adjustOwnerCountHook(id_, current, adjusted); mutableSle_->at(sfOwnerCount) = adjusted; - applyView_->update(mutableSle_); + update(); } AccountID diff --git a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp index 6d63122e2b..16c8cb3f59 100644 --- a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp +++ b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp @@ -1461,7 +1461,7 @@ XChainCreateBridge::doApply() wrappedAcct.adjustOwnerCount(1, ctx_.journal); ctx_.view().insert(sleBridge); - ctx_.view().update(wrappedAcct.mutableSle()); + wrappedAcct.update(); return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/check/CheckCash.cpp b/src/libxrpl/tx/transactors/check/CheckCash.cpp index 6048cf9ab5..069bc654f2 100644 --- a/src/libxrpl/tx/transactors/check/CheckCash.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCash.cpp @@ -350,7 +350,7 @@ CheckCash::doApply() } // clang-format on - psb.update(wrappedDst.mutableSle()); + wrappedDst.update(); // Note that we _don't_ need to be careful about destroying // the trust line if the check cashing fails. The transaction diff --git a/src/libxrpl/tx/transactors/did/DIDDelete.cpp b/src/libxrpl/tx/transactors/did/DIDDelete.cpp index 7b70aa6e8a..f923906018 100644 --- a/src/libxrpl/tx/transactors/did/DIDDelete.cpp +++ b/src/libxrpl/tx/transactors/did/DIDDelete.cpp @@ -43,7 +43,7 @@ DIDDelete::deleteSLE( return tecINTERNAL; // LCOV_EXCL_LINE wrappedOwner.adjustOwnerCount(-1, j); - view.update(wrappedOwner.mutableSle()); + wrappedOwner.update(); // Remove object from ledger view.erase(sle); diff --git a/src/libxrpl/tx/transactors/did/DIDSet.cpp b/src/libxrpl/tx/transactors/did/DIDSet.cpp index 3144316e57..737e6962df 100644 --- a/src/libxrpl/tx/transactors/did/DIDSet.cpp +++ b/src/libxrpl/tx/transactors/did/DIDSet.cpp @@ -76,7 +76,7 @@ addSLE(ApplyContext& ctx, std::shared_ptr const& sle, AccountID const& owne (*sle)[sfOwnerNode] = *page; } wrappedAcct.adjustOwnerCount(1, ctx.journal); - ctx.view().update(wrappedAcct.mutableSle()); + wrappedAcct.update(); return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp index 8ff395db3b..87c3c47d34 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp @@ -196,7 +196,7 @@ EscrowCancel::doApply() } wrappedAcct.adjustOwnerCount(-1, ctx_.journal); - ctx_.view().update(wrappedAcct.mutableSle()); + wrappedAcct.update(); // Remove escrow from ledger ctx_.view().erase(slep); diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp index 19f1c65ca6..389cddcda9 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp @@ -498,7 +498,7 @@ EscrowCreate::doApply() // increment owner count wrappedAcct.adjustOwnerCount(1, ctx_.journal); - ctx_.view().update(wrappedAcct.mutableSle()); + wrappedAcct.update(); return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp index eb631540c2..b01b5f5ad6 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp @@ -375,7 +375,7 @@ EscrowFinish::doApply() // Adjust source owner count WritableAccountRoot wrappedAcct(account, &ctx_.view()); wrappedAcct.adjustOwnerCount(-1, ctx_.journal); - ctx_.view().update(wrappedAcct.mutableSle()); + wrappedAcct.update(); // Remove escrow from ledger ctx_.view().erase(slep); diff --git a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h b/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h index 67fef74ec8..8a874b0529 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h +++ b/src/libxrpl/tx/transactors/escrow/EscrowHelpers.h @@ -100,7 +100,7 @@ escrowUnlockApplyHelper( } // clang-format on - view.update(wrappedDest.mutableSle()); + wrappedDest.update(); } if (!view.exists(trustLineKey) && !receiverIssuer) diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp index c7ffd91501..b29b39d2cb 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp @@ -166,7 +166,7 @@ PaymentChannelCreate::doApply() // Deduct owner's balance, increment owner count (*wrappedOwner)[sfBalance] = (*wrappedOwner)[sfBalance] - ctx_.tx[sfAmount]; wrappedOwner.adjustOwnerCount(1, ctx_.journal); - ctx_.view().update(wrappedOwner.mutableSle()); + wrappedOwner.update(); return tesSUCCESS; } diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp index f5e31698ce..d3984e9300 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelHelpers.cpp @@ -51,7 +51,7 @@ closeChannel( (*wrappedOwner)[sfBalance] = (*wrappedOwner)[sfBalance] + (*slep)[sfAmount] - (*slep)[sfBalance]; wrappedOwner.adjustOwnerCount(-1, j); - view.update(wrappedOwner.mutableSle()); + wrappedOwner.update(); // Remove PayChan from ledger view.erase(slep); diff --git a/src/test/app/Invariants_test.cpp b/src/test/app/Invariants_test.cpp index d3c61216eb..694322d2f7 100644 --- a/src/test/app/Invariants_test.cpp +++ b/src/test/app/Invariants_test.cpp @@ -273,7 +273,7 @@ class Invariants_test : public beast::unit_test::suite BEAST_EXPECT(wrappedA1->at(sfOwnerCount) == 0); wrappedA1.adjustOwnerCount(1, ac.journal); - ac.view().erase(wrappedA1.mutableSle()); + wrappedA1.erase(); return true; },