diff --git a/include/xrpl/tx/ApplyContext.h b/include/xrpl/tx/ApplyContext.h index e827e69f01..7be7f34b0b 100644 --- a/include/xrpl/tx/ApplyContext.h +++ b/include/xrpl/tx/ApplyContext.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -129,6 +130,14 @@ public: view_->rawDestroyXRP(fee); } + /** + * Registers a newly-created order book directory with the shared, + * process-wide OrderBookDB, unless this transaction is being applied + * under TapDryRun. + */ + void + addOrderBook(Book const& book); + ApplyViewContext getApplyViewContext() { diff --git a/src/libxrpl/tx/ApplyContext.cpp b/src/libxrpl/tx/ApplyContext.cpp index 50f46fceef..96dcd5f587 100644 --- a/src/libxrpl/tx/ApplyContext.cpp +++ b/src/libxrpl/tx/ApplyContext.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include #include #include @@ -54,6 +56,13 @@ ApplyContext::apply(TER ter) return view_->apply(base_, tx, ter, parentBatchId_, (flags_ & TapDryRun) != 0u, journal); } +void +ApplyContext::addOrderBook(Book const& book) +{ + if ((flags_ & TapDryRun) == TapNone) + registry.get().getOrderBookDB().addOrderBook(book); +} + std::size_t ApplyContext::size() { diff --git a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp index 7c7d35497a..2bc9aa5ba1 100644 --- a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp @@ -2,8 +2,6 @@ #include #include -#include -#include #include #include #include @@ -397,7 +395,7 @@ applyCreate(ApplyContext& ctx, Sandbox& sb, AccountID const& account, beast::Jou Book const book{assetIn, assetOut, std::nullopt}; auto const dir = keylet::quality(keylet::book(book), uRate); if (auto const bookExisted = static_cast(sb.read(dir)); !bookExisted) - ctx.registry.get().getOrderBookDB().addOrderBook(book); + ctx.addOrderBook(book); }; addOrderBook(amount.asset(), amount2.asset(), getRate(amount2, amount)); addOrderBook(amount2.asset(), amount.asset(), getRate(amount, amount2)); diff --git a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp index 57ba6eff0d..6c3c04f1a0 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -634,7 +633,7 @@ OfferCreate::applyHybrid( bookArr.pushBack(std::move(bookInfo)); if (!bookExists) - ctx_.registry.get().getOrderBookDB().addOrderBook(book); + ctx_.addOrderBook(book); sleOffer->setFieldArray(sfAdditionalBooks, bookArr); return tesSUCCESS; @@ -1014,7 +1013,7 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) sb.insert(sleOffer); if (!bookExisted) - ctx_.registry.get().getOrderBookDB().addOrderBook(book); + ctx_.addOrderBook(book); JLOG(j_.debug()) << "final result: success";