xrpld
Loading...
Searching...
No Matches
TxQ.h
1#pragma once
2
3#include <xrpl/beast/utility/Journal.h>
4#include <xrpl/beast/utility/Zero.h>
5#include <xrpl/json/json_value.h>
6#include <xrpl/ledger/ApplyView.h>
7#include <xrpl/ledger/OpenView.h>
8#include <xrpl/ledger/ReadView.h>
9#include <xrpl/protocol/AccountID.h>
10#include <xrpl/protocol/Protocol.h>
11#include <xrpl/protocol/RippleLedgerHash.h>
12#include <xrpl/protocol/STAmount.h>
13#include <xrpl/protocol/STLedgerEntry.h>
14#include <xrpl/protocol/STTx.h>
15#include <xrpl/protocol/SeqProxy.h>
16#include <xrpl/protocol/TER.h>
17#include <xrpl/protocol/Units.h>
18#include <xrpl/protocol/XRPAmount.h>
19#include <xrpl/tx/applySteps.h>
20
21#include <boost/circular_buffer.hpp>
22#include <boost/intrusive/set.hpp>
23
24#include <cstddef>
25#include <cstdint>
26#include <limits>
27#include <map>
28#include <memory>
29#include <mutex>
30#include <optional>
31#include <utility>
32#include <vector>
33
34namespace xrpl {
35
36class Application;
37class Config;
38
57class TxQ
58{
59public:
63 static constexpr FeeLevel64 kBaseLevel{256};
64
179
226
311
315 TxQ(Setup const& setup, beast::Journal j);
316
320 virtual ~TxQ();
321
332 apply(
333 Application& app,
334 OpenView& view,
336 ApplyFlags flags,
338
350 bool
351 accept(Application& app, OpenView& view);
352
365 void
366 processClosedLedger(Application& app, ReadView const& view, bool timeLeap);
367
372 nextQueuableSeq(SLE::const_ref sleAccount) const;
373
377 Metrics
378 getMetrics(OpenView const& view) const;
379
386
397 getTxRequiredFeeAndSeq(OpenView const& view, std::shared_ptr<STTx const> const& tx) const;
398
407 getAccountTxs(AccountID const& account) const;
408
417 getTxs() const;
418
425 doRPC(Application& app) const;
426
427private:
428 // Implementation for nextQueuableSeq(). The passed lock must be held.
431
438 {
439 private:
463 boost::circular_buffer<std::size_t> recentTxnCounts_;
473
474 public:
480 setup.standAlone ? setup.minimumTxnInLedgerSA : setup.minimumTxnInLedger)
482 setup.targetTxnInLedger < minimumTxnCount_ ? minimumTxnCount_
483 : setup.targetTxnInLedger)
484 , maximumTxnCount_([&]() -> std::optional<std::size_t> {
485 if (!setup.maximumTxnInLedger)
486 return std::nullopt;
488 : *setup.maximumTxnInLedger;
489 }())
491 , recentTxnCounts_(setup.ledgersInQueue)
492 , escalationMultiplier_(setup.minimumEscalationMultiplier)
493 , j_(j)
494 {
495 }
496
508 update(Application& app, ReadView const& view, bool timeLeap, TxQ::Setup const& setup);
509
514 struct Snapshot
515 {
516 // Number of transactions expected per ledger.
517 // One more than this value will be accepted
518 // before escalation kicks in.
520 // Based on the median fee of the LCL. Used
521 // when fee escalation kicks in.
523 };
524
528 [[nodiscard]] Snapshot
530 {
531 return {.txnsExpected = txnsExpected_, .escalationMultiplier = escalationMultiplier_};
532 }
533
543 static FeeLevel64
544 scaleFeeLevel(Snapshot const& snapshot, OpenView const& view);
545
578 Snapshot const& snapshot,
579 OpenView const& view,
580 std::size_t extraCount,
581 std::size_t seriesSize);
582 };
583
589 {
590 public:
596 boost::intrusive::set_member_hook<> byFeeListHook;
597
602
610 TxID const txID;
658
674 static constexpr int kRetriesAllowed = 10;
675
686
687 public:
691 MaybeTx(
693 TxID const& txID,
695 ApplyFlags const flags,
697
703
708 [[nodiscard]] TxConsequences const&
710 {
711 return pfResult->consequences; // NOLINT(bugprone-unchecked-optional-access) invariant:
712 // pfResult is never empty
713 }
714
718 [[nodiscard]] TxDetails
720 {
721 return {
722 feeLevel,
723 lastValid,
724 consequences(),
725 account,
726 seqProxy,
727 txn,
729 pfResult->ter, // NOLINT(bugprone-unchecked-optional-access) invariant: pfResult is
730 // never empty
731 lastResult};
732 }
733 };
734
739 {
740 public:
744 explicit OrderCandidates() = default;
745
761 bool
762 operator()(MaybeTx const& lhs, MaybeTx const& rhs) const
763 {
764 if (lhs.feeLevel == rhs.feeLevel)
766 return lhs.feeLevel > rhs.feeLevel;
767 }
768 };
769
775 {
776 public:
778
787 /* If this account has had any transaction retry more than
788 `retriesAllowed` times so that it was dropped from the
789 queue, then all other transactions for this account will
790 be given at most 2 attempts before being removed. Helps
791 prevent wasting resources on retries that are more likely
792 to fail.
793 */
794 bool retryPenalty = false;
795 /* If this account has had any transaction fail or expire,
796 then when the queue is nearly full, transactions from
797 this account will be discarded. Helps prevent the queue
798 from getting filled and wedged.
799 */
800 bool dropPenalty = false;
801
802 public:
806 explicit TxQAccount(std::shared_ptr<STTx const> const& txn);
810 explicit TxQAccount(AccountID const& account);
811
815 [[nodiscard]] std::size_t
817 {
818 return transactions.size();
819 }
820
824 [[nodiscard]] bool
825 empty() const
826 {
827 return getTxnCount() == 0u;
828 }
829
833 [[nodiscard]] TxMap::const_iterator
834 getPrevTx(SeqProxy seqProx) const;
835
839 MaybeTx&
840 add(MaybeTx&&);
841
848 bool
849 remove(SeqProxy seqProx);
850 };
851
852 // Helper function returns requiredFeeLevel.
853 static FeeLevel64
855 OpenView& view,
856 ApplyFlags flags,
857 FeeMetrics::Snapshot const& metricsSnapshot,
858 std::scoped_lock<std::mutex> const& lock);
859
860 // Helper function for TxQ::apply. If a transaction's fee is high enough,
861 // attempt to directly apply that transaction to the ledger.
864 Application& app,
865 OpenView& view,
867 ApplyFlags flags,
869
870 // Helper function that removes a replaced entry in _byFee.
873 std::optional<TxQAccount::TxMap::iterator> const& replacedTxIter,
875
876 using FeeHook = boost::intrusive::
877 member_hook<MaybeTx, boost::intrusive::set_member_hook<>, &MaybeTx::byFeeListHook>;
878
880 boost::intrusive::multiset<MaybeTx, FeeHook, boost::intrusive::compare<OrderCandidates>>;
881
883
892
922
927
933
934private:
938 template <size_t FillPercentage = 100>
939 bool
940 isFull() const;
941
946 TER
947 canBeHeld(
948 STTx const&,
949 ApplyFlags const,
950 OpenView const&,
951 SLE::const_ref sleAccount,
952 AccountMap::iterator const&,
954 std::scoped_lock<std::mutex> const& lock);
955
959 FeeMultiSet::iterator_type erase(FeeMultiSet::const_iterator_type);
965 FeeMultiSet::iterator_type eraseAndAdvance(FeeMultiSet::const_iterator_type);
969 TxQAccount::TxMap::iterator
970 erase(
971 TxQAccount& txQAccount,
972 TxQAccount::TxMap::const_iterator begin,
973 TxQAccount::TxMap::const_iterator end);
974
982 Application& app,
983 OpenView& view,
984 STTx const& tx,
985 AccountMap::iterator const& accountIter,
986 TxQAccount::TxMap::iterator,
987 FeeLevel64 feeLevelPaid,
988 PreflightResult const& pfResult,
989 std::size_t const txExtraCount,
990 ApplyFlags flags,
991 FeeMetrics::Snapshot const& metricsSnapshot,
993};
994
999setupTxQ(Config const&);
1000
1001template <class T>
1003toDrops(FeeLevel<T> const& level, XRPAmount baseFee)
1004{
1006}
1007
1008inline FeeLevel64
1009toFeeLevel(XRPAmount const& drops, XRPAmount const& baseFee)
1010{
1011 return mulDiv(drops, TxQ::kBaseLevel, baseFee)
1013}
1014
1015} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Represents a JSON value.
Definition json_value.h:117
Writable ledger view that accumulates state and tx changes.
Definition OpenView.h:59
A view into a ledger.
Definition ReadView.h:41
static constexpr std::uint64_t kMaxNativeN
Definition STAmount.h:72
std::shared_ptr< STLedgerEntry const > const & const_ref
A type that represents either a sequence value or a ticket value.
Definition SeqProxy.h:37
Class describing the consequences to the account of applying a transaction if the transaction consume...
Definition applySteps.h:52
Track and use the fee escalation metrics of the current open ledger.
Definition TxQ.h:438
Snapshot getSnapshot() const
Get the current Snapshot.
Definition TxQ.h:529
std::size_t txnsExpected_
Number of transactions expected per ledger.
Definition TxQ.h:458
std::size_t const targetTxnCount_
Number of transactions per ledger that fee escalation "workstowards".
Definition TxQ.h:448
static FeeLevel64 scaleFeeLevel(Snapshot const &snapshot, OpenView const &view)
Use the number of transactions in the current open ledger to compute the fee level a transaction must...
Definition TxQ.cpp:183
beast::Journal const j_
Journal.
Definition TxQ.h:472
std::optional< std::size_t > const maximumTxnCount_
Maximum value of txnsExpected.
Definition TxQ.h:452
FeeMetrics(Setup const &setup, beast::Journal j)
Constructor.
Definition TxQ.h:478
std::size_t update(Application &app, ReadView const &view, bool timeLeap, TxQ::Setup const &setup)
Updates fee metrics based on the transactions in the ReadView for use in fee escalation calculations.
Definition TxQ.cpp:103
std::size_t const minimumTxnCount_
Minimum value of txnsExpected.
Definition TxQ.h:443
boost::circular_buffer< std::size_t > recentTxnCounts_
Recent history of transaction counts that exceed the targetTxnCount_.
Definition TxQ.h:463
static std::pair< bool, FeeLevel64 > escalatedSeriesFeeLevel(Snapshot const &snapshot, OpenView const &view, std::size_t extraCount, std::size_t seriesSize)
Computes the total fee level for all transactions in a series.
Definition TxQ.cpp:241
FeeLevel64 escalationMultiplier_
Based on the median fee of the LCL.
Definition TxQ.h:468
Represents a transaction in the queue which may be applied later to the open ledger.
Definition TxQ.h:589
static LedgerHash parentHashComp
The hash of the parent ledger.
Definition TxQ.h:685
std::optional< LedgerIndex > const lastValid
Expiration ledger for the transaction (sfLastLedgerSequence field).
Definition TxQ.h:619
TxDetails getTxDetails() const
Return a TxDetails based on contained information.
Definition TxQ.h:719
TxID const txID
Transaction ID.
Definition TxQ.h:610
std::optional< TER > lastResult
If the transactor attempted to apply the transaction to the open ledger from the queue and failed,...
Definition TxQ.h:647
FeeLevel64 const feeLevel
Computed fee level that the transaction will pay.
Definition TxQ.h:606
boost::intrusive::set_member_hook byFeeListHook
Used by the TxQ::FeeHook and TxQ::FeeMultiSet below to put each MaybeTx object into more than one set...
Definition TxQ.h:596
MaybeTx(std::shared_ptr< STTx const > const &, TxID const &txID, FeeLevel64 feeLevel, ApplyFlags const flags, PreflightResult const &pfResult)
Constructor.
Definition TxQ.cpp:287
TxConsequences const & consequences() const
Potential TxConsequences of applying this transaction to the open ledger.
Definition TxQ.h:709
ApplyFlags const flags
Flags provided to apply.
Definition TxQ.h:639
ApplyResult apply(Application &app, OpenView &view, beast::Journal j)
Attempt to apply the queued transaction to the open ledger.
Definition TxQ.cpp:305
SeqProxy const seqProxy
Transaction SeqProxy number (sfSequence or sfTicketSequence field).
Definition TxQ.h:624
std::shared_ptr< STTx const > txn
The complete transaction.
Definition TxQ.h:601
static constexpr int kRetriesAllowed
Starting retry count for newly queued transactions.
Definition TxQ.h:674
int retriesRemaining
A transaction at the front of the queue will be given several attempts to succeed before being droppe...
Definition TxQ.h:633
AccountID const account
Account submitting the transaction.
Definition TxQ.h:614
std::optional< PreflightResult const > pfResult
Cached result of the preflight operation.
Definition TxQ.h:657
OrderCandidates()=default
Default constructor.
bool operator()(MaybeTx const &lhs, MaybeTx const &rhs) const
Sort MaybeTx by feeLevel descending, then by pseudo-randomized transaction ID ascending.
Definition TxQ.h:762
Used to represent an account to the queue, and stores the transactions queued for that account by Seq...
Definition TxQ.h:775
TxMap::const_iterator getPrevTx(SeqProxy seqProx) const
Find the entry in transactions that precedes seqProx, if one does.
Definition TxQ.cpp:336
TxMap transactions
Sequence number will be used as the key.
Definition TxQ.h:786
bool empty() const
Checks if this account has no transactions queued.
Definition TxQ.h:825
MaybeTx & add(MaybeTx &&)
Add a transaction candidate to this account for queuing.
Definition TxQ.cpp:347
std::size_t getTxnCount() const
Return the number of transactions currently queued for this account.
Definition TxQ.h:816
TxQAccount(std::shared_ptr< STTx const > const &txn)
Construct from a transaction.
Definition TxQ.cpp:326
bool remove(SeqProxy seqProx)
Remove the candidate with given SeqProxy value from this account.
Definition TxQ.cpp:360
AccountID const account
The account.
Definition TxQ.h:782
std::map< SeqProxy, MaybeTx > TxMap
Definition TxQ.h:777
Metrics getMetrics(OpenView const &view) const
Returns fee metrics in reference fee level units.
Definition TxQ.cpp:1750
json::Value doRPC(Application &app) const
Summarize current fee metrics for the fee RPC command.
Definition TxQ.cpp:1829
TxQ(Setup const &setup, beast::Journal j)
Constructor.
Definition TxQ.cpp:367
SeqProxy nextQueuableSeq(SLE::const_ref sleAccount) const
Return the next sequence that would go in the TxQ for an account.
Definition TxQ.cpp:1590
FeeMetrics feeMetrics_
Tracks the current state of the queue.
Definition TxQ.h:898
std::optional< size_t > maxSize_
Maximum number of transactions allowed in the queue based on the current metrics.
Definition TxQ.h:921
void processClosedLedger(Application &app, ReadView const &view, bool timeLeap)
Update fee metrics and clean up the queue in preparation for the next ledger.
Definition TxQ.cpp:1347
std::map< AccountID, TxQAccount > AccountMap
Definition TxQ.h:882
std::vector< TxDetails > getAccountTxs(AccountID const &account) const
Returns information about the transactions currently in the queue for the account.
Definition TxQ.cpp:1794
SeqProxy nextQueuableSeqImpl(SLE::const_ref sleAccount, std::scoped_lock< std::mutex > const &) const
Definition TxQ.cpp:1603
bool isFull() const
Is the queue at least fillPercentage full?
Definition TxQ.cpp:379
FeeMultiSet::iterator_type eraseAndAdvance(FeeMultiSet::const_iterator_type)
Erase and return the next entry for the account (if fee level is higher), or next entry in byFee_ (lo...
Definition TxQ.cpp:485
ApplyResult tryClearAccountQueueUpThruTx(Application &app, OpenView &view, STTx const &tx, AccountMap::iterator const &accountIter, TxQAccount::TxMap::iterator, FeeLevel64 feeLevelPaid, PreflightResult const &pfResult, std::size_t const txExtraCount, ApplyFlags flags, FeeMetrics::Snapshot const &metricsSnapshot, beast::Journal j)
All-or-nothing attempt to try to apply the queued txs for accountIter up to and including tx.
Definition TxQ.cpp:531
static FeeLevel64 getRequiredFeeLevel(OpenView &view, ApplyFlags flags, FeeMetrics::Snapshot const &metricsSnapshot, std::scoped_lock< std::mutex > const &lock)
Definition TxQ.cpp:1648
ApplyResult apply(Application &app, OpenView &view, std::shared_ptr< STTx const > const &tx, ApplyFlags flags, beast::Journal j)
Add a new transaction to the open ledger, hold it in the queue, or reject it.
Definition TxQ.cpp:739
FeeAndSeq getTxRequiredFeeAndSeq(OpenView const &view, std::shared_ptr< STTx const > const &tx) const
Returns minimum required fee for tx and two sequences: first valid sequence for this account in curre...
Definition TxQ.cpp:1772
std::optional< ApplyResult > tryDirectApply(Application &app, OpenView &view, std::shared_ptr< STTx const > const &tx, ApplyFlags flags, beast::Journal j)
Definition TxQ.cpp:1658
virtual ~TxQ()
Destructor.
Definition TxQ.cpp:372
bool accept(Application &app, OpenView &view)
Fill the new open ledger with transactions from the queue.
Definition TxQ.cpp:1418
std::mutex mutex_
Most queue operations are done under the master lock, but use this mutex for the RPC "fee" command,...
Definition TxQ.h:932
std::vector< TxDetails > getTxs() const
Returns information about all transactions currently in the queue.
Definition TxQ.cpp:1814
FeeMultiSet byFee_
The queue itself: the collection of transactions ordered by fee level.
Definition TxQ.h:905
beast::Journal const j_
Journal.
Definition TxQ.h:891
boost::intrusive:: member_hook< MaybeTx, boost::intrusive::set_member_hook<>, &MaybeTx::byFeeListHook > FeeHook
Definition TxQ.h:876
std::optional< TxQAccount::TxMap::iterator > removeFromByFee(std::optional< TxQAccount::TxMap::iterator > const &replacedTxIter, std::shared_ptr< STTx const > const &tx)
Definition TxQ.cpp:1724
boost::intrusive::multiset< MaybeTx, FeeHook, boost::intrusive::compare< OrderCandidates > > FeeMultiSet
Definition TxQ.h:879
LedgerHash parentHash_
parentHash_ used for logging only
Definition TxQ.h:926
FeeMultiSet::iterator_type erase(FeeMultiSet::const_iterator_type)
Erase and return the next entry in byFee_ (lower fee level).
static constexpr FeeLevel64 kBaseLevel
Fee level for single-signed reference transaction.
Definition TxQ.h:63
TER canBeHeld(STTx const &, ApplyFlags const, OpenView const &, SLE::const_ref sleAccount, AccountMap::iterator const &, std::optional< TxQAccount::TxMap::iterator > const &, std::scoped_lock< std::mutex > const &lock)
Checks if the indicated transaction fits the conditions for being stored in the queue.
Definition TxQ.cpp:386
AccountMap byAccount_
All of the accounts which currently have any transactions in the queue.
Definition TxQ.h:913
Setup const setup_
Setup parameters used to control the behavior of the queue.
Definition TxQ.h:887
T max(T... args)
constexpr Zero kZero
Definition Zero.h:30
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.
XRPAmount toDrops(FeeLevel< T > const &level, XRPAmount baseFee)
Definition TxQ.h:1003
uint256 LedgerHash
FeeLevel< std::uint64_t > FeeLevel64
Definition Units.h:443
FeeLevel64 toFeeLevel(XRPAmount const &drops, XRPAmount const &baseFee)
Definition TxQ.h:1009
ApplyFlags
Definition ApplyView.h:27
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
TERSubset< CanCvtToTER > TER
Definition TER.h:647
unit::ValueUnit< unit::feelevelTag, T > FeeLevel
Definition Units.h:442
TxQ::Setup setupTxQ(Config const &config)
Build a TxQ::Setup object from application configuration.
Definition TxQ.cpp:1883
uint256 TxID
A transaction identifier.
Definition Protocol.h:391
Describes the results of the preflight check.
Definition applySteps.h:200
XRPAmount fee
Definition TxQ.h:382
std::uint32_t availableSeq
Definition TxQ.h:384
std::uint32_t accountSeq
Definition TxQ.h:383
Snapshot of the externally relevant FeeMetrics fields at any given time.
Definition TxQ.h:515
std::size_t const txnsExpected
Definition TxQ.h:519
FeeLevel64 const escalationMultiplier
Definition TxQ.h:522
Structure returned by TxQ::getMetrics, expressed in reference fee level units.
Definition TxQ.h:185
std::size_t txCount
Number of transactions in the queue.
Definition TxQ.h:194
Metrics()=default
Default constructor.
std::optional< std::size_t > txQMaxSize
Max transactions currently allowed in queue.
Definition TxQ.h:198
FeeLevel64 openLedgerFeeLevel
Minimum fee level to get into the current open ledger, bypassing the queue.
Definition TxQ.h:224
std::size_t txInLedger
Number of transactions currently in the open ledger.
Definition TxQ.h:202
FeeLevel64 minProcessingFeeLevel
Minimum fee level for a transaction to be considered for the open ledger or the queue.
Definition TxQ.h:215
FeeLevel64 referenceFeeLevel
Reference transaction fee level.
Definition TxQ.h:210
FeeLevel64 medFeeLevel
Median fee level of the last ledger.
Definition TxQ.h:219
std::size_t txPerLedger
Number of transactions expected per ledger.
Definition TxQ.h:206
Structure used to customize TxQ behavior.
Definition TxQ.h:69
bool standAlone
Use standalone mode behavior.
Definition TxQ.h:177
std::uint32_t maximumTxnPerAccount
Maximum number of transactions that can be queued by one account.
Definition TxQ.h:165
FeeLevel64 minimumEscalationMultiplier
Minimum value of the escalation multiplier, regardless of the prior ledger's median fee level.
Definition TxQ.h:106
std::optional< std::uint32_t > maximumTxnInLedger
Optional maximum allowed value of transactions per ledger before fee escalation kicks in.
Definition TxQ.h:133
Setup()=default
Default constructor.
std::uint32_t targetTxnInLedger
Number of transactions per ledger that fee escalation "workstowards".
Definition TxQ.h:121
std::uint32_t minimumLastLedgerBuffer
Minimum difference between the current ledger sequence and a transaction's LastLedgerSequence for the...
Definition TxQ.h:173
std::size_t ledgersInQueue
Number of ledgers' worth of transactions to allow in the queue.
Definition TxQ.h:83
std::uint32_t retrySequencePercent
Extra percentage required on the fee level of a queued transaction to replace that transaction with a...
Definition TxQ.h:101
std::uint32_t minimumTxnInLedgerSA
Like minimumTxnInLedger for standalone mode.
Definition TxQ.h:116
std::uint32_t slowConsensusDecreasePercent
When consensus takes longer than appropriate, the expected ledger size is updated to the lesser of th...
Definition TxQ.h:161
std::size_t queueSizeMin
The smallest limit the queue is allowed.
Definition TxQ.h:90
std::uint32_t minimumTxnInLedger
Minimum number of transactions to allow into the ledger before escalation, regardless of the prior le...
Definition TxQ.h:111
std::uint32_t normalConsensusIncreasePercent
When the ledger has more transactions than "expected", and performance is humming along nicely,...
Definition TxQ.h:146
Structure that describes a transaction in the queue waiting to be applied to the current open ledger.
Definition TxQ.h:233
TER preflightResult
The intermediate result returned by preflight before this transaction was queued, or after it is queu...
Definition TxQ.h:301
std::shared_ptr< STTx const > txn
The full transaction.
Definition TxQ.h:283
FeeLevel64 feeLevel
Fee level of the queued transaction.
Definition TxQ.h:262
SeqProxy seqProxy
SeqProxy of the transaction.
Definition TxQ.h:279
std::optional< LedgerIndex > lastValid
LastValidLedger field of the queued transaction, if any.
Definition TxQ.h:266
std::optional< TER > lastResult
If the transactor attempted to apply the transaction to the open ledger from the queue and failed,...
Definition TxQ.h:309
int retriesRemaining
Number of times the transactor can return a retry / ter result when attempting to apply this transact...
Definition TxQ.h:290
TxConsequences consequences
Potential TxConsequences of applying the queued transaction to the open ledger.
Definition TxQ.h:271
TxDetails(FeeLevel64 feeLevel, std::optional< LedgerIndex > const &lastValid, TxConsequences const &consequences, AccountID const &account, SeqProxy seqProxy, std::shared_ptr< STTx const > const &txn, int retriesRemaining, TER preflightResult, std::optional< TER > lastResult)
Full initialization.
Definition TxQ.h:237
AccountID account
The account the transaction is queued for.
Definition TxQ.h:275
T value_or(T... args)