From 1316293878f3dbb7b0108afd0e132238e5dfd1a6 Mon Sep 17 00:00:00 2001 From: JCW Date: Tue, 13 Jan 2026 11:51:47 +0000 Subject: [PATCH] Move OrderBookDB to libxrpl Signed-off-by: JCW --- cmake/XrplCore.cmake | 1 + include/xrpl/core/ServiceRegistry.h | 4 + .../xrpl}/ledger/AcceptedLedgerTx.h | 12 +- .../xrpl}/ledger/BookListeners.h | 5 +- include/xrpl/ledger/OrderBookDB.h | 102 +++++++++++++++++ .../ledger/AcceptedLedgerTx.cpp | 4 +- .../app => libxrpl}/ledger/BookListeners.cpp | 2 +- src/test/app/AmendmentTable_test.cpp | 7 +- src/xrpld/app/ledger/AcceptedLedger.h | 4 +- src/xrpld/app/ledger/OrderBookDB.h | 94 ---------------- .../{OrderBookDB.cpp => OrderBookDBImpl.cpp} | 30 +++-- src/xrpld/app/ledger/OrderBookDBImpl.h | 104 ++++++++++++++++++ src/xrpld/app/ledger/detail/LedgerMaster.cpp | 2 +- src/xrpld/app/main/Application.cpp | 15 ++- src/xrpld/app/misc/AmendmentTable.h | 2 +- src/xrpld/app/misc/NetworkOPs.cpp | 2 +- src/xrpld/app/misc/detail/AmendmentTable.cpp | 12 +- src/xrpld/app/paths/Pathfinder.cpp | 2 +- src/xrpld/app/tx/detail/AMMCreate.cpp | 2 +- src/xrpld/app/tx/detail/CreateOffer.cpp | 2 +- src/xrpld/core/ServiceRegistryImpl.h | 3 + src/xrpld/core/detail/ServiceRegistryImpl.cpp | 6 + 22 files changed, 278 insertions(+), 139 deletions(-) rename {src/xrpld/app => include/xrpl}/ledger/AcceptedLedgerTx.h (87%) rename {src/xrpld/app => include/xrpl}/ledger/BookListeners.h (89%) create mode 100644 include/xrpl/ledger/OrderBookDB.h rename src/{xrpld/app => libxrpl}/ledger/AcceptedLedgerTx.cpp (96%) rename src/{xrpld/app => libxrpl}/ledger/BookListeners.cpp (95%) delete mode 100644 src/xrpld/app/ledger/OrderBookDB.h rename src/xrpld/app/ledger/{OrderBookDB.cpp => OrderBookDBImpl.cpp} (91%) create mode 100644 src/xrpld/app/ledger/OrderBookDBImpl.h diff --git a/cmake/XrplCore.cmake b/cmake/XrplCore.cmake index b470e47dfa..cb24cf3501 100644 --- a/cmake/XrplCore.cmake +++ b/cmake/XrplCore.cmake @@ -162,6 +162,7 @@ target_link_libraries(xrpl.libxrpl.ledger PUBLIC xrpl.libxrpl.json xrpl.libxrpl.protocol xrpl.libxrpl.rdb + xrpl.libxrpl.server xrpl.libxrpl.conditions ) diff --git a/include/xrpl/core/ServiceRegistry.h b/include/xrpl/core/ServiceRegistry.h index c119e60ae6..e26a3e207a 100644 --- a/include/xrpl/core/ServiceRegistry.h +++ b/include/xrpl/core/ServiceRegistry.h @@ -234,6 +234,10 @@ public: virtual std::optional const& trapTxID() const = 0; + /** Retrieve the "wallet database" */ + virtual DatabaseCon& + getWalletDB() = 0; + // Temporary: Get the underlying Application for functions that haven't // been migrated yet. This should be removed once all code is migrated. virtual Application& diff --git a/src/xrpld/app/ledger/AcceptedLedgerTx.h b/include/xrpl/ledger/AcceptedLedgerTx.h similarity index 87% rename from src/xrpld/app/ledger/AcceptedLedgerTx.h rename to include/xrpl/ledger/AcceptedLedgerTx.h index efea5b9162..a042728547 100644 --- a/src/xrpld/app/ledger/AcceptedLedgerTx.h +++ b/include/xrpl/ledger/AcceptedLedgerTx.h @@ -1,16 +1,16 @@ -#ifndef XRPL_APP_LEDGER_ACCEPTEDLEDGERTX_H_INCLUDED -#define XRPL_APP_LEDGER_ACCEPTEDLEDGERTX_H_INCLUDED - -#include +#ifndef XRPL_LEDGER_ACCEPTEDLEDGERTX_H_INCLUDED +#define XRPL_LEDGER_ACCEPTEDLEDGERTX_H_INCLUDED +#include +#include #include +#include +#include #include namespace xrpl { -class Logs; - /** A transaction that is in a closed ledger. diff --git a/src/xrpld/app/ledger/BookListeners.h b/include/xrpl/ledger/BookListeners.h similarity index 89% rename from src/xrpld/app/ledger/BookListeners.h rename to include/xrpl/ledger/BookListeners.h index 9e0fd3959a..63eab228d5 100644 --- a/src/xrpld/app/ledger/BookListeners.h +++ b/include/xrpl/ledger/BookListeners.h @@ -1,6 +1,7 @@ -#ifndef XRPL_APP_LEDGER_BOOKLISTENERS_H_INCLUDED -#define XRPL_APP_LEDGER_BOOKLISTENERS_H_INCLUDED +#ifndef XRPL_LEDGER_BOOKLISTENERS_H_INCLUDED +#define XRPL_LEDGER_BOOKLISTENERS_H_INCLUDED +#include #include #include diff --git a/include/xrpl/ledger/OrderBookDB.h b/include/xrpl/ledger/OrderBookDB.h new file mode 100644 index 0000000000..a00579fc34 --- /dev/null +++ b/include/xrpl/ledger/OrderBookDB.h @@ -0,0 +1,102 @@ +#ifndef XRPL_LEDGER_ORDERBOOKDB_H_INCLUDED +#define XRPL_LEDGER_ORDERBOOKDB_H_INCLUDED + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace xrpl { + +/** Tracks order books in the ledger. + + This interface provides access to order book information, including: + - Which order books exist in the ledger + - Querying order books by issue + - Managing order book subscriptions + + The order book database is updated as ledgers are accepted and provides + efficient lookup of order book information for pathfinding and client + subscriptions. +*/ +class OrderBookDB +{ +public: + virtual ~OrderBookDB() = default; + + /** Initialize or update the order book database with a new ledger. + + This method should be called when a new ledger is accepted to update + the order book database with the current state of all order books. + + @param ledger The ledger to scan for order books + */ + virtual void + setup(std::shared_ptr const& ledger) = 0; + + /** Add an order book to track. + + @param book The order book to add + */ + virtual void + addOrderBook(Book const& book) = 0; + + /** Get all order books that want a specific issue. + + Returns a list of all order books where the taker pays the specified + issue. This is useful for pathfinding to find all possible next hops + from a given currency. + + @param issue The issue to search for + @param domain Optional domain restriction for the order book + @return Vector of books that want this issue + */ + virtual std::vector + getBooksByTakerPays( + Issue const& issue, + std::optional const& domain = std::nullopt) = 0; + + /** Get the count of order books that want a specific issue. + + @param issue The issue to search for + @param domain Optional domain restriction for the order book + @return Number of books that want this issue + */ + virtual int + getBookSize( + Issue const& issue, + std::optional const& domain = std::nullopt) = 0; + + /** Check if an order book to XRP exists for the given issue. + + @param issue The issue to check + @param domain Optional domain restriction for the order book + @return true if a book from this issue to XRP exists + */ + virtual bool + isBookToXRP( + Issue const& issue, + std::optional domain = std::nullopt) = 0; + + virtual void + processTxn( + std::shared_ptr const& ledger, + AcceptedLedgerTx const& alTx, + MultiApiJson const& jvObj) = 0; + + virtual BookListeners::pointer + getBookListeners(Book const&) = 0; + virtual BookListeners::pointer + makeBookListeners(Book const&) = 0; +}; + +} // namespace xrpl + +#endif diff --git a/src/xrpld/app/ledger/AcceptedLedgerTx.cpp b/src/libxrpl/ledger/AcceptedLedgerTx.cpp similarity index 96% rename from src/xrpld/app/ledger/AcceptedLedgerTx.cpp rename to src/libxrpl/ledger/AcceptedLedgerTx.cpp index d57246444f..2e176db1ea 100644 --- a/src/xrpld/app/ledger/AcceptedLedgerTx.cpp +++ b/src/libxrpl/ledger/AcceptedLedgerTx.cpp @@ -1,7 +1,7 @@ -#include - #include #include +#include +#include #include #include diff --git a/src/xrpld/app/ledger/BookListeners.cpp b/src/libxrpl/ledger/BookListeners.cpp similarity index 95% rename from src/xrpld/app/ledger/BookListeners.cpp rename to src/libxrpl/ledger/BookListeners.cpp index 69d03058a9..08afdd7058 100644 --- a/src/xrpld/app/ledger/BookListeners.cpp +++ b/src/libxrpl/ledger/BookListeners.cpp @@ -1,4 +1,4 @@ -#include +#include namespace xrpl { diff --git a/src/test/app/AmendmentTable_test.cpp b/src/test/app/AmendmentTable_test.cpp index 9add892073..eb7ee8d06f 100644 --- a/src/test/app/AmendmentTable_test.cpp +++ b/src/test/app/AmendmentTable_test.cpp @@ -181,7 +181,12 @@ public: Section const& vetoed) { return make_AmendmentTable( - app, majorityTime, supported, enabled, vetoed, journal_); + app.getServiceRegistry(), + majorityTime, + supported, + enabled, + vetoed, + journal_); } std::unique_ptr diff --git a/src/xrpld/app/ledger/AcceptedLedger.h b/src/xrpld/app/ledger/AcceptedLedger.h index 713858fe6e..052beb4476 100644 --- a/src/xrpld/app/ledger/AcceptedLedger.h +++ b/src/xrpld/app/ledger/AcceptedLedger.h @@ -1,9 +1,9 @@ #ifndef XRPL_APP_LEDGER_ACCEPTEDLEDGER_H_INCLUDED #define XRPL_APP_LEDGER_ACCEPTEDLEDGER_H_INCLUDED -#include - +#include #include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/OrderBookDB.h b/src/xrpld/app/ledger/OrderBookDB.h deleted file mode 100644 index a5bcb40080..0000000000 --- a/src/xrpld/app/ledger/OrderBookDB.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef XRPL_APP_LEDGER_ORDERBOOKDB_H_INCLUDED -#define XRPL_APP_LEDGER_ORDERBOOKDB_H_INCLUDED - -#include -#include - -#include -#include -#include - -#include -#include - -namespace xrpl { - -class OrderBookDB -{ -public: - struct Config - { - int pathSearchMax; - bool standalone; - }; - - OrderBookDB(ServiceRegistry& registry, Config const& config); - - void - setup(std::shared_ptr const& ledger); - void - update(std::shared_ptr const& ledger); - - void - addOrderBook(Book const&); - - /** @return a list of all orderbooks that want this issuerID and currencyID. - */ - std::vector - getBooksByTakerPays( - Issue const&, - std::optional const& domain = std::nullopt); - - /** @return a count of all orderbooks that want this issuerID and - currencyID. */ - int - getBookSize( - Issue const&, - std::optional const& domain = std::nullopt); - - bool - isBookToXRP(Issue const&, std::optional domain = std::nullopt); - - BookListeners::pointer - getBookListeners(Book const&); - BookListeners::pointer - makeBookListeners(Book const&); - - // see if this txn effects any orderbook - void - processTxn( - std::shared_ptr const& ledger, - AcceptedLedgerTx const& alTx, - MultiApiJson const& jvObj); - -private: - ServiceRegistry& registry_; - int const pathSearchMax_; - bool const standalone_; - - // Maps order books by "issue in" to "issue out": - hardened_hash_map> allBooks_; - - hardened_hash_map, hardened_hash_set> - domainBooks_; - - // does an order book to XRP exist - hash_set xrpBooks_; - - // does an order book to XRP exist - hash_set> xrpDomainBooks_; - - std::recursive_mutex mLock; - - using BookToListenersMap = hash_map; - - BookToListenersMap mListeners; - - std::atomic seq_; - - beast::Journal const j_; -}; - -} // namespace xrpl - -#endif diff --git a/src/xrpld/app/ledger/OrderBookDB.cpp b/src/xrpld/app/ledger/OrderBookDBImpl.cpp similarity index 91% rename from src/xrpld/app/ledger/OrderBookDB.cpp rename to src/xrpld/app/ledger/OrderBookDBImpl.cpp index ba859a6ecd..4f1d3f381b 100644 --- a/src/xrpld/app/ledger/OrderBookDB.cpp +++ b/src/xrpld/app/ledger/OrderBookDBImpl.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -8,7 +8,9 @@ namespace xrpl { -OrderBookDB::OrderBookDB(ServiceRegistry& registry, Config const& config) +OrderBookDBImpl::OrderBookDBImpl( + ServiceRegistry& registry, + OrderBookDBConfig const& config) : registry_(registry) , pathSearchMax_(config.pathSearchMax) , standalone_(config.standalone) @@ -17,8 +19,14 @@ OrderBookDB::OrderBookDB(ServiceRegistry& registry, Config const& config) { } +std::unique_ptr +make_OrderBookDB(ServiceRegistry& registry, OrderBookDBConfig const& config) +{ + return std::make_unique(registry, config); +} + void -OrderBookDB::setup(std::shared_ptr const& ledger) +OrderBookDBImpl::setup(std::shared_ptr const& ledger) { if (!standalone_ && registry_.getOPs().isNeedNetworkLedger()) { @@ -56,7 +64,7 @@ OrderBookDB::setup(std::shared_ptr const& ledger) } void -OrderBookDB::update(std::shared_ptr const& ledger) +OrderBookDBImpl::update(std::shared_ptr const& ledger) { if (pathSearchMax_ == 0) return; // pathfinding has been disabled @@ -158,7 +166,7 @@ OrderBookDB::update(std::shared_ptr const& ledger) } void -OrderBookDB::addOrderBook(Book const& book) +OrderBookDBImpl::addOrderBook(Book const& book) { bool toXRP = isXRP(book.out); @@ -177,7 +185,7 @@ OrderBookDB::addOrderBook(Book const& book) // return list of all orderbooks that want this issuerID and currencyID std::vector -OrderBookDB::getBooksByTakerPays( +OrderBookDBImpl::getBooksByTakerPays( Issue const& issue, std::optional const& domain) { @@ -207,7 +215,7 @@ OrderBookDB::getBooksByTakerPays( } int -OrderBookDB::getBookSize( +OrderBookDBImpl::getBookSize( Issue const& issue, std::optional const& domain) { @@ -229,7 +237,7 @@ OrderBookDB::getBookSize( } bool -OrderBookDB::isBookToXRP(Issue const& issue, std::optional domain) +OrderBookDBImpl::isBookToXRP(Issue const& issue, std::optional domain) { std::lock_guard sl(mLock); if (domain) @@ -238,7 +246,7 @@ OrderBookDB::isBookToXRP(Issue const& issue, std::optional domain) } BookListeners::pointer -OrderBookDB::makeBookListeners(Book const& book) +OrderBookDBImpl::makeBookListeners(Book const& book) { std::lock_guard sl(mLock); auto ret = getBookListeners(book); @@ -258,7 +266,7 @@ OrderBookDB::makeBookListeners(Book const& book) } BookListeners::pointer -OrderBookDB::getBookListeners(Book const& book) +OrderBookDBImpl::getBookListeners(Book const& book) { BookListeners::pointer ret; std::lock_guard sl(mLock); @@ -273,7 +281,7 @@ OrderBookDB::getBookListeners(Book const& book) // Based on the meta, send the meta to the streams that are listening. // We need to determine which streams a given meta effects. void -OrderBookDB::processTxn( +OrderBookDBImpl::processTxn( std::shared_ptr const& ledger, AcceptedLedgerTx const& alTx, MultiApiJson const& jvObj) diff --git a/src/xrpld/app/ledger/OrderBookDBImpl.h b/src/xrpld/app/ledger/OrderBookDBImpl.h new file mode 100644 index 0000000000..3a223a55cc --- /dev/null +++ b/src/xrpld/app/ledger/OrderBookDBImpl.h @@ -0,0 +1,104 @@ +#ifndef XRPLD_APP_LEDGER_ORDERBOOKDBIMPL_H_INCLUDED +#define XRPLD_APP_LEDGER_ORDERBOOKDBIMPL_H_INCLUDED + +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl { + +/** Configuration for OrderBookDB */ +struct OrderBookDBConfig +{ + int pathSearchMax; + bool standalone; +}; + +/** Create an OrderBookDB instance. + + @param registry Service registry for accessing other services + @param config Configuration parameters + @return A new OrderBookDB instance +*/ +std::unique_ptr +make_OrderBookDB(ServiceRegistry& registry, OrderBookDBConfig const& config); + +class OrderBookDBImpl final : public OrderBookDB +{ +public: + OrderBookDBImpl(ServiceRegistry& registry, OrderBookDBConfig const& config); + + // OrderBookDB interface implementation + void + setup(std::shared_ptr const& ledger) override; + + void + addOrderBook(Book const& book) override; + + std::vector + getBooksByTakerPays( + Issue const& issue, + std::optional const& domain = std::nullopt) override; + + int + getBookSize( + Issue const& issue, + std::optional const& domain = std::nullopt) override; + + bool + isBookToXRP(Issue const& issue, std::optional domain = std::nullopt) + override; + + // OrderBookDBImpl-specific methods + void + update(std::shared_ptr const& ledger); + + // see if this txn effects any orderbook + void + processTxn( + std::shared_ptr const& ledger, + AcceptedLedgerTx const& alTx, + MultiApiJson const& jvObj) override; + + BookListeners::pointer + getBookListeners(Book const&) override; + BookListeners::pointer + makeBookListeners(Book const&) override; + +private: + ServiceRegistry& registry_; + int const pathSearchMax_; + bool const standalone_; + + // Maps order books by "issue in" to "issue out": + hardened_hash_map> allBooks_; + + hardened_hash_map, hardened_hash_set> + domainBooks_; + + // does an order book to XRP exist + hash_set xrpBooks_; + + // does an order book to XRP exist + hash_set> xrpDomainBooks_; + + std::recursive_mutex mLock; + + using BookToListenersMap = hash_map; + + BookToListenersMap mListeners; + + std::atomic seq_; + + beast::Journal const j_; +}; + +} // namespace xrpl + +#endif diff --git a/src/xrpld/app/ledger/detail/LedgerMaster.cpp b/src/xrpld/app/ledger/detail/LedgerMaster.cpp index f05c6750b6..d34c933102 100644 --- a/src/xrpld/app/ledger/detail/LedgerMaster.cpp +++ b/src/xrpld/app/ledger/detail/LedgerMaster.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -22,6 +21,7 @@ #include #include #include +#include #include #include #include diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index c8d60e94b9..45d2efedd2 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -182,8 +182,7 @@ public: std::unique_ptr m_nodeStore; NodeFamily nodeFamily_; - // VFALCO TODO Make OrderBookDB abstract - OrderBookDB m_orderBookDB; + std::unique_ptr m_orderBookDB; std::unique_ptr m_pathRequests; std::unique_ptr m_ledgerMaster; std::unique_ptr ledgerCleaner_; @@ -356,9 +355,9 @@ public: , nodeFamily_(*this, *m_collectorManager) - , m_orderBookDB( + , m_orderBookDB(make_OrderBookDB( *serviceRegistry_, - {config_->PATH_SEARCH_MAX, config_->standalone()}) + {config_->PATH_SEARCH_MAX, config_->standalone()})) , m_pathRequests(std::make_unique( setup_PathRequest(*config_), @@ -712,7 +711,7 @@ public: OrderBookDB& getOrderBookDB() override { - return m_orderBookDB; + return *m_orderBookDB; } PathRequests& @@ -1303,7 +1302,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) Section const& upVoted = config_->section(SECTION_AMENDMENTS); m_amendmentTable = make_AmendmentTable( - *this, + getServiceRegistry(), config().AMENDMENT_MAJORITY_TIME, supported, upVoted, @@ -1367,7 +1366,7 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) forcedRange->first, forcedRange->second); } - m_orderBookDB.setup(getLedgerMaster().getCurrentLedger()); + m_orderBookDB->setup(getLedgerMaster().getCurrentLedger()); nodeIdentity_ = getNodeIdentity(*this, cmdline); diff --git a/src/xrpld/app/misc/AmendmentTable.h b/src/xrpld/app/misc/AmendmentTable.h index 0265e0127f..b4b363b5c7 100644 --- a/src/xrpld/app/misc/AmendmentTable.h +++ b/src/xrpld/app/misc/AmendmentTable.h @@ -170,7 +170,7 @@ public: std::unique_ptr make_AmendmentTable( - Application& app, + ServiceRegistry& registry, std::chrono::seconds majorityTime, std::vector const& supported, Section const& enabled, diff --git a/src/xrpld/app/misc/NetworkOPs.cpp b/src/xrpld/app/misc/NetworkOPs.cpp index 75c1e2a7a0..0b7e0e4367 100644 --- a/src/xrpld/app/misc/NetworkOPs.cpp +++ b/src/xrpld/app/misc/NetworkOPs.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -41,6 +40,7 @@ #include #include #include +#include #include #include #include diff --git a/src/xrpld/app/misc/detail/AmendmentTable.cpp b/src/xrpld/app/misc/detail/AmendmentTable.cpp index 873d8ad7cd..b12d1e1b7e 100644 --- a/src/xrpld/app/misc/detail/AmendmentTable.cpp +++ b/src/xrpld/app/misc/detail/AmendmentTable.cpp @@ -1,7 +1,7 @@ -#include #include #include +#include #include #include #include @@ -429,7 +429,7 @@ private: public: AmendmentTableImpl( - Application& app, + ServiceRegistry& registry, std::chrono::seconds majorityTime, std::vector const& supported, Section const& enabled, @@ -493,7 +493,7 @@ public: //------------------------------------------------------------------------------ AmendmentTableImpl::AmendmentTableImpl( - Application& app, + ServiceRegistry& registry, std::chrono::seconds majorityTime, std::vector const& supported, Section const& enabled, @@ -503,7 +503,7 @@ AmendmentTableImpl::AmendmentTableImpl( , majorityTime_(majorityTime) , unsupportedEnabled_(false) , j_(journal) - , db_(app.getWalletDB()) + , db_(registry.getWalletDB()) { std::lock_guard lock(mutex_); @@ -1031,7 +1031,7 @@ AmendmentTableImpl::getJson(uint256 const& amendmentID, bool isAdmin) const std::unique_ptr make_AmendmentTable( - Application& app, + ServiceRegistry& registry, std::chrono::seconds majorityTime, std::vector const& supported, Section const& enabled, @@ -1039,7 +1039,7 @@ make_AmendmentTable( beast::Journal journal) { return std::make_unique( - app, majorityTime, supported, enabled, vetoed, journal); + registry, majorityTime, supported, enabled, vetoed, journal); } } // namespace xrpl diff --git a/src/xrpld/app/paths/Pathfinder.cpp b/src/xrpld/app/paths/Pathfinder.cpp index 5bb37c962a..d718065b9b 100644 --- a/src/xrpld/app/paths/Pathfinder.cpp +++ b/src/xrpld/app/paths/Pathfinder.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -9,6 +8,7 @@ #include #include #include +#include #include #include diff --git a/src/xrpld/app/tx/detail/AMMCreate.cpp b/src/xrpld/app/tx/detail/AMMCreate.cpp index 26e66830ac..b72caf6281 100644 --- a/src/xrpld/app/tx/detail/AMMCreate.cpp +++ b/src/xrpld/app/tx/detail/AMMCreate.cpp @@ -1,8 +1,8 @@ -#include #include #include #include +#include #include #include #include diff --git a/src/xrpld/app/tx/detail/CreateOffer.cpp b/src/xrpld/app/tx/detail/CreateOffer.cpp index b4618d5f79..d311a81cf5 100644 --- a/src/xrpld/app/tx/detail/CreateOffer.cpp +++ b/src/xrpld/app/tx/detail/CreateOffer.cpp @@ -1,10 +1,10 @@ -#include #include #include #include #include #include +#include #include #include #include diff --git a/src/xrpld/core/ServiceRegistryImpl.h b/src/xrpld/core/ServiceRegistryImpl.h index 395a867ebb..f70a475a46 100644 --- a/src/xrpld/core/ServiceRegistryImpl.h +++ b/src/xrpld/core/ServiceRegistryImpl.h @@ -173,6 +173,9 @@ public: std::optional const& trapTxID() const override; + DatabaseCon& + getWalletDB() override; + // Temporary: Get the underlying Application Application& app() override; diff --git a/src/xrpld/core/detail/ServiceRegistryImpl.cpp b/src/xrpld/core/detail/ServiceRegistryImpl.cpp index fc55fa32de..e2a06206df 100644 --- a/src/xrpld/core/detail/ServiceRegistryImpl.cpp +++ b/src/xrpld/core/detail/ServiceRegistryImpl.cpp @@ -292,6 +292,12 @@ ServiceRegistryImpl::trapTxID() const return app_.trapTxID(); } +DatabaseCon& +ServiceRegistryImpl::getWalletDB() +{ + return app_.getWalletDB(); +} + Application& ServiceRegistryImpl::app() {