1#include <xrpld/app/paths/AMMContext.h>
2#include <xrpld/app/paths/Credit.h>
3#include <xrpld/app/paths/Flow.h>
4#include <xrpld/app/paths/detail/AmountSpec.h>
5#include <xrpld/app/paths/detail/Steps.h>
6#include <xrpld/app/paths/detail/StrandFlow.h>
8#include <xrpl/basics/Log.h>
9#include <xrpl/protocol/IOUAmount.h>
10#include <xrpl/protocol/XRPAmount.h>
14template <
class FlowResult>
18 Issue const& srcIssue,
19 Issue const& dstIssue,
35path::RippleCalc::Output
44 bool ownerPaysTransferFee,
52 Issue const srcIssue = [&] {
54 return sendMax->issue();
64 sendMaxIssue = sendMax->issue();
97 j.
trace() <<
"\nsrc: " << src <<
"\ndst: " << dst
98 <<
"\nsrcIssue: " << srcIssue <<
"\ndstIssue: " << dstIssue;
99 j.
trace() <<
"\nNumStrands: " << strands.size();
100 for (
auto const& curStrand : strands)
102 j.
trace() <<
"NumSteps: " << curStrand.size();
103 for (
auto const& step : curStrand)
105 j.
trace() <<
'\n' << *step <<
'\n';
118 if (srcIsXRP && dstIsXRP)
124 flow<XRPAmount, XRPAmount>(
137 if (srcIsXRP && !dstIsXRP)
143 flow<XRPAmount, IOUAmount>(
156 if (!srcIsXRP && dstIsXRP)
162 flow<IOUAmount, XRPAmount>(
175 XRPL_ASSERT(!srcIsXRP && !dstIsXRP,
"ripple::flow : neither is XRP");
180 flow<IOUAmount, IOUAmount>(
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)
A currency issued by an account.
A wrapper which makes credits unavailable to balances.
Issue const & issue() const
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
bool isXRP(AccountID const &c)
STAmount toSTAmount(IOUAmount const &iou, Issue const &iss)
static auto finishFlow(PaymentSandbox &sb, Issue const &srcIssue, Issue const &dstIssue, FlowResult &&f)
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.
AmountSpec toAmountSpec(STAmount const &amt)
std::pair< TER, std::vector< Strand > > toStrands(ReadView const &view, AccountID const &src, AccountID const &dst, Issue const &deliver, std::optional< Quality > const &limitQuality, std::optional< Issue > 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)
boost::container::flat_set< uint256 > removableOffers
void setResult(TER const value)