fix: Prevent simulate from updating the orderbook db

This commit is contained in:
Mayukha Vadari
2026-09-04 06:17:43 -04:00
committed by GitHub
parent eae0a35415
commit ea6226b8b9
4 changed files with 21 additions and 6 deletions

View File

@@ -8,6 +8,7 @@
#include <xrpl/ledger/ApplyViewImpl.h>
#include <xrpl/ledger/OpenView.h>
#include <xrpl/ledger/RawView.h>
#include <xrpl/protocol/Book.h>
#include <xrpl/protocol/STAmount.h>
#include <xrpl/protocol/STTx.h>
#include <xrpl/protocol/TER.h>
@@ -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()
{

View File

@@ -6,6 +6,8 @@
#include <xrpl/core/ServiceRegistry.h>
#include <xrpl/ledger/ApplyView.h>
#include <xrpl/ledger/OpenView.h>
#include <xrpl/ledger/OrderBookDB.h>
#include <xrpl/protocol/Book.h>
#include <xrpl/protocol/STTx.h>
#include <xrpl/protocol/TER.h>
#include <xrpl/protocol/TxMeta.h>
@@ -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()
{

View File

@@ -2,8 +2,6 @@
#include <xrpl/basics/Log.h>
#include <xrpl/beast/utility/Zero.h>
#include <xrpl/core/ServiceRegistry.h>
#include <xrpl/ledger/OrderBookDB.h>
#include <xrpl/ledger/ReadView.h>
#include <xrpl/ledger/Sandbox.h>
#include <xrpl/ledger/View.h>
@@ -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<bool>(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));

View File

@@ -6,7 +6,6 @@
#include <xrpl/beast/utility/instrumentation.h>
#include <xrpl/core/ServiceRegistry.h>
#include <xrpl/ledger/ApplyView.h>
#include <xrpl/ledger/OrderBookDB.h>
#include <xrpl/ledger/PaymentSandbox.h>
#include <xrpl/ledger/Sandbox.h>
#include <xrpl/ledger/View.h>
@@ -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";