20#include <xrpld/app/paths/AMMContext.h> 
   21#include <xrpld/app/paths/Credit.h> 
   22#include <xrpld/app/paths/Flow.h> 
   23#include <xrpld/app/paths/detail/AmountSpec.h> 
   24#include <xrpld/app/paths/detail/Steps.h> 
   25#include <xrpld/app/paths/detail/StrandFlow.h> 
   27#include <xrpl/basics/Log.h> 
   28#include <xrpl/protocol/IOUAmount.h> 
   29#include <xrpl/protocol/XRPAmount.h> 
   33template <
class FlowResult>
 
   37    Issue const& srcIssue,
 
   38    Issue const& dstIssue,
 
 
   54path::RippleCalc::Output
 
   63    bool ownerPaysTransferFee,
 
   71    Issue const srcIssue = [&] {
 
   73            return sendMax->issue();
 
   83        sendMaxIssue = sendMax->issue();
 
  116        j.
trace() << 
"\nsrc: " << src << 
"\ndst: " << dst
 
  117                  << 
"\nsrcIssue: " << srcIssue << 
"\ndstIssue: " << dstIssue;
 
  118        j.
trace() << 
"\nNumStrands: " << strands.size();
 
  119        for (
auto const& curStrand : strands)
 
  121            j.
trace() << 
"NumSteps: " << curStrand.size();
 
  122            for (
auto const& step : curStrand)
 
  124                j.
trace() << 
'\n' << *step << 
'\n';
 
  137    if (srcIsXRP && dstIsXRP)
 
  143            flow<XRPAmount, XRPAmount>(
 
  156    if (srcIsXRP && !dstIsXRP)
 
  162            flow<XRPAmount, IOUAmount>(
 
  175    if (!srcIsXRP && dstIsXRP)
 
  181            flow<IOUAmount, XRPAmount>(
 
  194    XRPL_ASSERT(!srcIsXRP && !dstIsXRP, 
"ripple::flow : neither is XRP");
 
  199        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)