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 <expected>
27#include <limits>
28#include <map>
29#include <memory>
30#include <mutex>
31#include <optional>
32#include <utility>
33#include <vector>
34
35namespace xrpl {
36
37class Application;
38class Config;
39
58class TxQ
59{
60public:
64 static constexpr FeeLevel64 kBaseLevel{256};
65
180
227
312
316 TxQ(Setup const& setup, beast::Journal j);
317
321 virtual ~TxQ();
322
333 apply(
334 Application& app,
335 OpenView& view,
337 ApplyFlags flags,
339
351 bool
352 accept(Application& app, OpenView& view);
353
366 void
367 processClosedLedger(Application& app, ReadView const& view, bool timeLeap);
368
373 nextQueuableSeq(SLE::ConstRef sleAccount) const;
374
378 Metrics
379 getMetrics(OpenView const& view) const;
380
387
397 std::expected<FeeAndSeq, TER>
398 getTxRequiredFeeAndSeq(OpenView const& view, std::shared_ptr<STTx const> const& tx) const;
399
408 getAccountTxs(AccountID const& account) const;
409
418 getTxs() const;
419
426 doRPC(Application& app) const;
427
428private:
429 // Implementation for nextQueuableSeq(). The passed lock must be held.
432
439 {
440 private:
464 boost::circular_buffer<std::size_t> recentTxnCounts_;
474
475 public:
481 setup.standAlone ? setup.minimumTxnInLedgerSA : setup.minimumTxnInLedger)
483 setup.targetTxnInLedger < minimumTxnCount_ ? minimumTxnCount_
484 : setup.targetTxnInLedger)
485 , maximumTxnCount_([&]() -> std::optional<std::size_t> {
486 if (!setup.maximumTxnInLedger)
487 return std::nullopt;
489 : *setup.maximumTxnInLedger;
490 }())
492 , recentTxnCounts_(setup.ledgersInQueue)
493 , escalationMultiplier_(setup.minimumEscalationMultiplier)
494 , j_(j)
495 {
496 }
497
509 update(Application& app, ReadView const& view, bool timeLeap, TxQ::Setup const& setup);
510
515 struct Snapshot
516 {
517 // Number of transactions expected per ledger.
518 // One more than this value will be accepted
519 // before escalation kicks in.
521 // Based on the median fee of the LCL. Used
522 // when fee escalation kicks in.
524 };
525
529 [[nodiscard]] Snapshot
531 {
532 return {.txnsExpected = txnsExpected_, .escalationMultiplier = escalationMultiplier_};
533 }
534
544 static FeeLevel64
545 scaleFeeLevel(Snapshot const& snapshot, OpenView const& view);
546
579 Snapshot const& snapshot,
580 OpenView const& view,
581 std::size_t extraCount,
582 std::size_t seriesSize);
583 };
584
590 {
591 public:
597 boost::intrusive::set_member_hook<> byFeeListHook;
598
603
611 TxID const txID;
659
675 static constexpr int kRetriesAllowed = 10;
676
687
688 public:
692 MaybeTx(
694 TxID const& txID,
696 ApplyFlags const flags,
698
704
709 [[nodiscard]] TxConsequences const&
711 {
712 return pfResult->consequences; // NOLINT(bugprone-unchecked-optional-access) invariant:
713 // pfResult is never empty
714 }
715
719 [[nodiscard]] TxDetails
721 {
722 return {
723 feeLevel,
724 lastValid,
725 consequences(),
726 account,
727 seqProxy,
728 txn,
730 pfResult->ter, // NOLINT(bugprone-unchecked-optional-access) invariant: pfResult is
731 // never empty
732 lastResult};
733 }
734 };
735
740 {
741 public:
745 explicit OrderCandidates() = default;
746
762 bool
763 operator()(MaybeTx const& lhs, MaybeTx const& rhs) const
764 {
765 if (lhs.feeLevel == rhs.feeLevel)
767 return lhs.feeLevel > rhs.feeLevel;
768 }
769 };
770
776 {
777 public:
779
788 /* If this account has had any transaction retry more than
789 `retriesAllowed` times so that it was dropped from the
790 queue, then all other transactions for this account will
791 be given at most 2 attempts before being removed. Helps
792 prevent wasting resources on retries that are more likely
793 to fail.
794 */
795 bool retryPenalty = false;
796 /* If this account has had any transaction fail or expire,
797 then when the queue is nearly full, transactions from
798 this account will be discarded. Helps prevent the queue
799 from getting filled and wedged.
800 */
801 bool dropPenalty = false;
802
803 public:
807 explicit TxQAccount(std::shared_ptr<STTx const> const& txn);
811 explicit TxQAccount(AccountID const& account);
812
816 [[nodiscard]] std::size_t
818 {
819 return transactions.size();
820 }
821
825 [[nodiscard]] bool
826 empty() const
827 {
828 return getTxnCount() == 0u;
829 }
830
834 [[nodiscard]] TxMap::const_iterator
835 getPrevTx(SeqProxy seqProx) const;
836
840 MaybeTx&
841 add(MaybeTx&&);
842
849 bool
850 remove(SeqProxy seqProx);
851 };
852
853 // Helper function returns requiredFeeLevel.
854 static FeeLevel64
856 OpenView& view,
857 ApplyFlags flags,
858 FeeMetrics::Snapshot const& metricsSnapshot,
859 std::scoped_lock<std::mutex> const& lock);
860
861 // Helper function for TxQ::apply. If a transaction's fee is high enough,
862 // attempt to directly apply that transaction to the ledger.
865 Application& app,
866 OpenView& view,
868 ApplyFlags flags,
870
871 // Helper function that removes a replaced entry in _byFee.
874 std::optional<TxQAccount::TxMap::iterator> const& replacedTxIter,
876
877 using FeeHook = boost::intrusive::
878 member_hook<MaybeTx, boost::intrusive::set_member_hook<>, &MaybeTx::byFeeListHook>;
879
881 boost::intrusive::multiset<MaybeTx, FeeHook, boost::intrusive::compare<OrderCandidates>>;
882
884
893
923
928
934
935private:
939 template <size_t FillPercentage = 100>
940 bool
941 isFull() const;
942
947 TER
948 canBeHeld(
949 STTx const&,
950 ApplyFlags const,
951 OpenView const&,
952 SLE::ConstRef sleAccount,
953 AccountMap::iterator const&,
955 std::scoped_lock<std::mutex> const& lock);
956
960 FeeMultiSet::iterator_type erase(FeeMultiSet::const_iterator_type);
966 FeeMultiSet::iterator_type eraseAndAdvance(FeeMultiSet::const_iterator_type);
970 TxQAccount::TxMap::iterator
971 erase(
972 TxQAccount& txQAccount,
973 TxQAccount::TxMap::const_iterator begin,
974 TxQAccount::TxMap::const_iterator end);
975
983 Application& app,
984 OpenView& view,
985 STTx const& tx,
986 AccountMap::iterator const& accountIter,
987 TxQAccount::TxMap::iterator,
988 FeeLevel64 feeLevelPaid,
989 PreflightResult const& pfResult,
990 std::size_t const txExtraCount,
991 ApplyFlags flags,
992 FeeMetrics::Snapshot const& metricsSnapshot,
994};
995
1000setupTxQ(Config const&);
1001
1002template <class T>
1004toDrops(FeeLevel<T> const& level, XRPAmount baseFee)
1005{
1007}
1008
1009inline FeeLevel64
1010toFeeLevel(XRPAmount const& drops, XRPAmount const& baseFee)
1011{
1012 return mulDiv(drops, TxQ::kBaseLevel, baseFee)
1014}
1015
1016} // 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 & ConstRef
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:53
Track and use the fee escalation metrics of the current open ledger.
Definition TxQ.h:439
Snapshot getSnapshot() const
Get the current Snapshot.
Definition TxQ.h:530
std::size_t txnsExpected_
Number of transactions expected per ledger.
Definition TxQ.h:459
std::size_t const targetTxnCount_
Number of transactions per ledger that fee escalation "workstowards".
Definition TxQ.h:449
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:205
beast::Journal const j_
Journal.
Definition TxQ.h:473
std::optional< std::size_t > const maximumTxnCount_
Maximum value of txnsExpected.
Definition TxQ.h:453
FeeMetrics(Setup const &setup, beast::Journal j)
Constructor.
Definition TxQ.h:479
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:111
std::size_t const minimumTxnCount_
Minimum value of txnsExpected.
Definition TxQ.h:444
boost::circular_buffer< std::size_t > recentTxnCounts_
Recent history of transaction counts that exceed the targetTxnCount_.
Definition TxQ.h:464
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:263
FeeLevel64 escalationMultiplier_
Based on the median fee of the LCL.
Definition TxQ.h:469
Represents a transaction in the queue which may be applied later to the open ledger.
Definition TxQ.h:590
static LedgerHash parentHashComp
The hash of the parent ledger.
Definition TxQ.h:686
std::optional< LedgerIndex > const lastValid
Expiration ledger for the transaction (sfLastLedgerSequence field).
Definition TxQ.h:620
TxDetails getTxDetails() const
Return a TxDetails based on contained information.
Definition TxQ.h:720
TxID const txID
Transaction ID.
Definition TxQ.h:611
std::optional< TER > lastResult
If the transactor attempted to apply the transaction to the open ledger from the queue and failed,...
Definition TxQ.h:648
FeeLevel64 const feeLevel
Computed fee level that the transaction will pay.
Definition TxQ.h:607
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:597
MaybeTx(std::shared_ptr< STTx const > const &, TxID const &txID, FeeLevel64 feeLevel, ApplyFlags const flags, PreflightResult const &pfResult)
Constructor.
Definition TxQ.cpp:309
TxConsequences const & consequences() const
Potential TxConsequences of applying this transaction to the open ledger.
Definition TxQ.h:710
ApplyFlags const flags
Flags provided to apply.
Definition TxQ.h:640
ApplyResult apply(Application &app, OpenView &view, beast::Journal j)
Attempt to apply the queued transaction to the open ledger.
Definition TxQ.cpp:327
SeqProxy const seqProxy
Transaction SeqProxy number (sfSequence or sfTicketSequence field).
Definition TxQ.h:625
std::shared_ptr< STTx const > txn
The complete transaction.
Definition TxQ.h:602
static constexpr int kRetriesAllowed
Starting retry count for newly queued transactions.
Definition TxQ.h:675
int retriesRemaining
A transaction at the front of the queue will be given several attempts to succeed before being droppe...
Definition TxQ.h:634
AccountID const account
Account submitting the transaction.
Definition TxQ.h:615
std::optional< PreflightResult const > pfResult
Cached result of the preflight operation.
Definition TxQ.h:658
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:763
Used to represent an account to the queue, and stores the transactions queued for that account by Seq...
Definition TxQ.h:776
TxMap::const_iterator getPrevTx(SeqProxy seqProx) const
Find the entry in transactions that precedes seqProx, if one does.
Definition TxQ.cpp:358
TxMap transactions
Sequence number will be used as the key.
Definition TxQ.h:787
bool empty() const
Checks if this account has no transactions queued.
Definition TxQ.h:826
MaybeTx & add(MaybeTx &&)
Add a transaction candidate to this account for queuing.
Definition TxQ.cpp:369
std::size_t getTxnCount() const
Return the number of transactions currently queued for this account.
Definition TxQ.h:817
TxQAccount(std::shared_ptr< STTx const > const &txn)
Construct from a transaction.
Definition TxQ.cpp:348
bool remove(SeqProxy seqProx)
Remove the candidate with given SeqProxy value from this account.
Definition TxQ.cpp:382
AccountID const account
The account.
Definition TxQ.h:783
std::map< SeqProxy, MaybeTx > TxMap
Definition TxQ.h:778
Metrics getMetrics(OpenView const &view) const
Returns fee metrics in reference fee level units.
Definition TxQ.cpp:1786
TER canBeHeld(STTx const &, ApplyFlags const, OpenView const &, SLE::ConstRef 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:408
json::Value doRPC(Application &app) const
Summarize current fee metrics for the fee RPC command.
Definition TxQ.cpp:1870
TxQ(Setup const &setup, beast::Journal j)
Constructor.
Definition TxQ.cpp:389
FeeMetrics feeMetrics_
Tracks the current state of the queue.
Definition TxQ.h:899
SeqProxy nextQueuableSeq(SLE::ConstRef sleAccount) const
Return the next sequence that would go in the TxQ for an account.
Definition TxQ.cpp:1619
std::optional< size_t > maxSize_
Maximum number of transactions allowed in the queue based on the current metrics.
Definition TxQ.h:922
std::expected< FeeAndSeq, TER > 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:1808
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:1376
std::map< AccountID, TxQAccount > AccountMap
Definition TxQ.h:883
std::vector< TxDetails > getAccountTxs(AccountID const &account) const
Returns information about the transactions currently in the queue for the account.
Definition TxQ.cpp:1835
bool isFull() const
Is the queue at least fillPercentage full?
Definition TxQ.cpp:401
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:507
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:553
static FeeLevel64 getRequiredFeeLevel(OpenView &view, ApplyFlags flags, FeeMetrics::Snapshot const &metricsSnapshot, std::scoped_lock< std::mutex > const &lock)
Definition TxQ.cpp:1677
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:761
std::optional< ApplyResult > tryDirectApply(Application &app, OpenView &view, std::shared_ptr< STTx const > const &tx, ApplyFlags flags, beast::Journal j)
Definition TxQ.cpp:1687
virtual ~TxQ()
Destructor.
Definition TxQ.cpp:394
SeqProxy nextQueuableSeqImpl(SLE::ConstRef sleAccount, std::scoped_lock< std::mutex > const &) const
Definition TxQ.cpp:1632
bool accept(Application &app, OpenView &view)
Fill the new open ledger with transactions from the queue.
Definition TxQ.cpp:1447
std::mutex mutex_
Most queue operations are done under the master lock, but use this mutex for the RPC "fee" command,...
Definition TxQ.h:933
std::vector< TxDetails > getTxs() const
Returns information about all transactions currently in the queue.
Definition TxQ.cpp:1855
FeeMultiSet byFee_
The queue itself: the collection of transactions ordered by fee level.
Definition TxQ.h:906
beast::Journal const j_
Journal.
Definition TxQ.h:892
boost::intrusive:: member_hook< MaybeTx, boost::intrusive::set_member_hook<>, &MaybeTx::byFeeListHook > FeeHook
Definition TxQ.h:877
std::optional< TxQAccount::TxMap::iterator > removeFromByFee(std::optional< TxQAccount::TxMap::iterator > const &replacedTxIter, std::shared_ptr< STTx const > const &tx)
Definition TxQ.cpp:1760
boost::intrusive::multiset< MaybeTx, FeeHook, boost::intrusive::compare< OrderCandidates > > FeeMultiSet
Definition TxQ.h:880
LedgerHash parentHash_
parentHash_ used for logging only
Definition TxQ.h:927
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:64
AccountMap byAccount_
All of the accounts which currently have any transactions in the queue.
Definition TxQ.h:914
Setup const setup_
Setup parameters used to control the behavior of the queue.
Definition TxQ.h:888
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.
UInt256 TxID
A transaction identifier.
Definition Protocol.h:403
XRPAmount toDrops(FeeLevel< T > const &level, XRPAmount baseFee)
Definition TxQ.h:1004
UInt256 LedgerHash
FeeLevel< std::uint64_t > FeeLevel64
Definition Units.h:443
FeeLevel64 toFeeLevel(XRPAmount const &drops, XRPAmount const &baseFee)
Definition TxQ.h:1010
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:654
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:1924
Describes the results of the preflight check.
Definition applySteps.h:201
XRPAmount fee
Definition TxQ.h:383
std::uint32_t availableSeq
Definition TxQ.h:385
std::uint32_t accountSeq
Definition TxQ.h:384
Snapshot of the externally relevant FeeMetrics fields at any given time.
Definition TxQ.h:516
std::size_t const txnsExpected
Definition TxQ.h:520
FeeLevel64 const escalationMultiplier
Definition TxQ.h:523
Structure returned by TxQ::getMetrics, expressed in reference fee level units.
Definition TxQ.h:186
std::size_t txCount
Number of transactions in the queue.
Definition TxQ.h:195
Metrics()=default
Default constructor.
std::optional< std::size_t > txQMaxSize
Max transactions currently allowed in queue.
Definition TxQ.h:199
FeeLevel64 openLedgerFeeLevel
Minimum fee level to get into the current open ledger, bypassing the queue.
Definition TxQ.h:225
std::size_t txInLedger
Number of transactions currently in the open ledger.
Definition TxQ.h:203
FeeLevel64 minProcessingFeeLevel
Minimum fee level for a transaction to be considered for the open ledger or the queue.
Definition TxQ.h:216
FeeLevel64 referenceFeeLevel
Reference transaction fee level.
Definition TxQ.h:211
FeeLevel64 medFeeLevel
Median fee level of the last ledger.
Definition TxQ.h:220
std::size_t txPerLedger
Number of transactions expected per ledger.
Definition TxQ.h:207
Structure used to customize TxQ behavior.
Definition TxQ.h:70
bool standAlone
Use standalone mode behavior.
Definition TxQ.h:178
std::uint32_t maximumTxnPerAccount
Maximum number of transactions that can be queued by one account.
Definition TxQ.h:166
FeeLevel64 minimumEscalationMultiplier
Minimum value of the escalation multiplier, regardless of the prior ledger's median fee level.
Definition TxQ.h:107
std::optional< std::uint32_t > maximumTxnInLedger
Optional maximum allowed value of transactions per ledger before fee escalation kicks in.
Definition TxQ.h:134
Setup()=default
Default constructor.
std::uint32_t targetTxnInLedger
Number of transactions per ledger that fee escalation "workstowards".
Definition TxQ.h:122
std::uint32_t minimumLastLedgerBuffer
Minimum difference between the current ledger sequence and a transaction's LastLedgerSequence for the...
Definition TxQ.h:174
std::size_t ledgersInQueue
Number of ledgers' worth of transactions to allow in the queue.
Definition TxQ.h:84
std::uint32_t retrySequencePercent
Extra percentage required on the fee level of a queued transaction to replace that transaction with a...
Definition TxQ.h:102
std::uint32_t minimumTxnInLedgerSA
Like minimumTxnInLedger for standalone mode.
Definition TxQ.h:117
std::uint32_t slowConsensusDecreasePercent
When consensus takes longer than appropriate, the expected ledger size is updated to the lesser of th...
Definition TxQ.h:162
std::size_t queueSizeMin
The smallest limit the queue is allowed.
Definition TxQ.h:91
std::uint32_t minimumTxnInLedger
Minimum number of transactions to allow into the ledger before escalation, regardless of the prior le...
Definition TxQ.h:112
std::uint32_t normalConsensusIncreasePercent
When the ledger has more transactions than "expected", and performance is humming along nicely,...
Definition TxQ.h:147
Structure that describes a transaction in the queue waiting to be applied to the current open ledger.
Definition TxQ.h:234
TER preflightResult
The intermediate result returned by preflight before this transaction was queued, or after it is queu...
Definition TxQ.h:302
std::shared_ptr< STTx const > txn
The full transaction.
Definition TxQ.h:284
FeeLevel64 feeLevel
Fee level of the queued transaction.
Definition TxQ.h:263
SeqProxy seqProxy
SeqProxy of the transaction.
Definition TxQ.h:280
std::optional< LedgerIndex > lastValid
LastValidLedger field of the queued transaction, if any.
Definition TxQ.h:267
std::optional< TER > lastResult
If the transactor attempted to apply the transaction to the open ledger from the queue and failed,...
Definition TxQ.h:310
int retriesRemaining
Number of times the transactor can return a retry / ter result when attempting to apply this transact...
Definition TxQ.h:291
TxConsequences consequences
Potential TxConsequences of applying the queued transaction to the open ledger.
Definition TxQ.h:272
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:238
AccountID account
The account the transaction is queued for.
Definition TxQ.h:276
T value_or(T... args)