xrpld
Loading...
Searching...
No Matches
AccountTxPaging.cpp
1#include <xrpld/app/misc/detail/AccountTxPaging.h>
2
3#include <xrpld/app/ledger/LedgerMaster.h>
4#include <xrpld/app/ledger/LedgerPersistence.h>
5#include <xrpld/app/main/Application.h>
6#include <xrpld/app/misc/Transaction.h>
7
8#include <xrpl/basics/Blob.h>
9#include <xrpl/basics/Slice.h>
10#include <xrpl/core/NetworkIDService.h>
11#include <xrpl/protocol/SField.h>
12#include <xrpl/protocol/STTx.h>
13#include <xrpl/protocol/Serializer.h>
14#include <xrpl/protocol/TxMeta.h>
15
16#include <cstdint>
17#include <memory>
18#include <string>
19#include <utility>
20
21namespace xrpl {
22
23void
26 std::uint32_t ledgerIndex,
27 std::string const& status,
28 Blob const& rawTxn,
29 Blob const& rawMeta,
30 Application& app)
31{
32 SerialIter it(makeSlice(rawTxn));
33 auto txn = std::make_shared<STTx const>(it);
34 std::string reason;
35
36 auto tr = std::make_shared<Transaction>(txn, reason, app);
37
38 auto metaset = std::make_shared<TxMeta>(tr->getID(), ledgerIndex, rawMeta);
39
40 // if properly formed meta is available we can use it to generate ctid
41 if (metaset->getAsObject().isFieldPresent(sfTransactionIndex))
42 {
43 tr->setStatus(
45 ledgerIndex,
46 metaset->getAsObject().getFieldU32(sfTransactionIndex),
48 }
49 else
50 {
51 tr->setStatus(Transaction::sqlTransactionStatus(status), ledgerIndex);
52 }
53
54 to.emplace_back(std::move(tr), metaset);
55};
56
57void
59{
60 if (auto l = app.getLedgerMaster().getLedgerBySeq(seq))
61 pendSaveValidated(app, l, false, false);
62}
63
64} // namespace xrpl
std::shared_ptr< Ledger const > getLedgerBySeq(std::uint32_t index)
virtual std::uint32_t getNetworkID() const noexcept=0
Get the configured network ID.
std::vector< AccountTx > AccountTxs
virtual NetworkIDService & getNetworkIDService()=0
virtual LedgerMaster & getLedgerMaster()=0
static TransStatus sqlTransactionStatus(boost::optional< std::string > const &status)
T emplace_back(T... args)
T make_shared(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
void convertBlobsToTxResult(RelationalDatabase::AccountTxs &to, std::uint32_t ledgerIndex, std::string const &status, Blob const &rawTxn, Blob const &rawMeta, Application &app)
void saveLedgerAsync(Application &app, std::uint32_t seq)
bool pendSaveValidated(ServiceRegistry &registry, std::shared_ptr< Ledger const > const &ledger, bool isSynchronous, bool isCurrent)
Save, or arrange to save, a fully-validated ledger.
std::vector< unsigned char > Blob
Storage for linear binary data.
Definition Blob.h:10
std::enable_if_t< std::is_same_v< T, char >||std::is_same_v< T, unsigned char >, Slice > makeSlice(std::array< T, N > const &a)
Definition Slice.h:215