1#include <xrpl/tx/paths/Flow.h>
3#include <xrpl/basics/base_uint.h>
4#include <xrpl/beast/utility/Journal.h>
5#include <xrpl/protocol/AccountID.h>
6#include <xrpl/protocol/Asset.h>
7#include <xrpl/protocol/Issue.h>
8#include <xrpl/protocol/MPTIssue.h>
9#include <xrpl/protocol/Quality.h>
10#include <xrpl/protocol/STAmount.h>
11#include <xrpl/protocol/STPathSet.h>
12#include <xrpl/tx/paths/RippleCalc.h>
13#include <xrpl/tx/paths/detail/Steps.h>
14#include <xrpl/tx/paths/detail/StrandFlow.h>
15#include <xrpl/tx/transactors/dex/AMMContext.h>
22template <
class FlowResult>
43path::RippleCalc::Output
52 bool ownerPaysTransferFee,
62 return sendMax->asset();
76 sendMaxAsset = sendMax->asset();
109 j.
trace() <<
"\nsrc: " << src <<
"\ndst: " << dst <<
"\nsrcAsset: " << srcAsset
110 <<
"\ndstAsset: " << dstAsset;
111 j.
trace() <<
"\nNumStrands: " << strands.size();
112 for (
auto const& curStrand : strands)
114 j.
trace() <<
"NumSteps: " << curStrand.size();
115 for (
auto const& step : curStrand)
117 j.
trace() <<
'\n' << *step <<
'\n';
127 [&, &strands = strands]<
typename TIn,
typename TOut>(TIn
const&, TOut
const&) {
128 using TIn_ = TIn::amount_type;
129 using TOut_ = TOut::amount_type;
A generic endpoint for log messages.
Stream trace() const
Severity stream access functions.
Maintains AMM info per overall payment engine execution and individual iteration.
void setMultiPath(bool fs)
constexpr auto visit(Visitors &&... visitors) const -> decltype(auto)
constexpr AmtType getAmountType() const
A currency issued by an account.
A wrapper which makes credits unavailable to balances.
Asset const & asset() const
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::pair< TER, std::vector< Strand > > toStrands(ReadView const &sb, AccountID const &src, AccountID const &dst, Asset const &deliver, std::optional< Quality > const &limitQuality, std::optional< Asset > const &sendMax, STPathSet const &paths, bool addDefaultPath, bool ownerPaysTransferFee, OfferCrossing offerCrossing, AMMContext &ammContext, std::optional< uint256 > const &domainID, beast::Journal j)
Create a Strand for each specified path (including the default path, if indicated).
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
bool isXRP(AccountID const &c)
T get(Section const §ion, std::string const &name, T const &defaultValue=T{})
Retrieve a key/value pair from a section.
StrandResult< TInAmt, TOutAmt > flow(PaymentSandbox const &baseView, Strand const &strand, std::optional< TInAmt > const &maxIn, TOutAmt const &out, beast::Journal j)
Request out amount from a strand.
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
bool isTesSuccess(TER x) noexcept
static auto finishFlow(PaymentSandbox &sb, Asset const &srcAsset, Asset const &dstAsset, FlowResult &&f)
STAmount toSTAmount(IOUAmount const &iou, Asset const &asset)
void setResult(TER const value)
boost::container::flat_set< uint256 > removableOffers