xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
protocol
QualityFunction.h
1
#pragma once
2
3
#include <xrpl/basics/Number.h>
4
#include <xrpl/basics/contract.h>
5
#include <xrpl/beast/utility/Zero.h>
6
#include <xrpl/protocol/AMMCore.h>
7
#include <xrpl/protocol/Quality.h>
8
9
#include <
cstdint
>
10
#include <
optional
>
11
#include <
stdexcept
>
12
13
namespace
xrpl
{
14
26
class
QualityFunction
27
{
28
private
:
29
// slope
30
Number
m_
;
31
// intercept
32
Number
b_
;
33
// seated if QF is for CLOB offer.
34
std::optional<Quality>
quality_
;
35
36
public
:
37
struct
AMMTag
38
{
39
};
40
// AMMOffer for multi-path is like CLOB, i.e. the offer size
41
// changes proportionally to its quality.
42
struct
CLOBLikeTag
43
{
44
};
45
QualityFunction
(
Quality
const
&
quality
,
CLOBLikeTag
);
46
template
<
typename
TIn,
typename
TOut>
47
QualityFunction
(
TAmounts<TIn, TOut>
const
& amounts,
std::uint32_t
tfee,
AMMTag
);
48
52
void
53
combine
(
QualityFunction
const
& qf);
54
60
std::optional<Number>
61
outFromAvgQ
(
Quality
const
&
quality
);
62
69
[[nodiscard]]
bool
70
satisfiesAvgQ
(
Quality
const
&
quality
,
Number
const
& out)
const
;
71
75
[[nodiscard]]
bool
76
isConst
()
const
77
{
78
return
quality_
.has_value();
79
}
80
81
[[nodiscard]]
std::optional<Quality>
const
&
82
quality
()
const
83
{
84
return
quality_
;
85
}
86
};
87
88
template
<
typename
TIn,
typename
TOut>
89
QualityFunction::QualityFunction
(
90
TAmounts<TIn, TOut>
const
& amounts,
91
std::uint32_t
tfee,
92
QualityFunction::AMMTag
)
93
{
94
if
(amounts.
in
<=
beast::kZero
|| amounts.
out
<=
beast::kZero
)
95
Throw<std::runtime_error>
(
"QualityFunction amounts are 0."
);
96
Number
const
cfee =
feeMult
(tfee);
97
m_
= -cfee / amounts.
in
;
98
b_
= amounts.
out
* cfee / amounts.
in
;
99
}
100
101
}
// namespace xrpl
xrpl::Number
Number is a floating point type that can represent a wide range of values.
Definition
Number.h:351
xrpl::QualityFunction::quality
std::optional< Quality > const & quality() const
Definition
QualityFunction.h:82
xrpl::QualityFunction::QualityFunction
QualityFunction(Quality const &quality, CLOBLikeTag)
Definition
QualityFunction.cpp:13
xrpl::QualityFunction::m_
Number m_
Definition
QualityFunction.h:30
xrpl::QualityFunction::combine
void combine(QualityFunction const &qf)
Combines QF with the next step QF.
Definition
QualityFunction.cpp:22
xrpl::QualityFunction::b_
Number b_
Definition
QualityFunction.h:32
xrpl::QualityFunction::quality_
std::optional< Quality > quality_
Definition
QualityFunction.h:34
xrpl::QualityFunction::outFromAvgQ
std::optional< Number > outFromAvgQ(Quality const &quality)
Find output to produce the requested average quality.
Definition
QualityFunction.cpp:31
xrpl::QualityFunction::satisfiesAvgQ
bool satisfiesAvgQ(Quality const &quality, Number const &out) const
Return whether out produces at least the requested average quality.
Definition
QualityFunction.cpp:49
xrpl::QualityFunction::isConst
bool isConst() const
Return true if the quality function is constant.
Definition
QualityFunction.h:76
xrpl::Quality
Represents the logical ratio of output currency to input currency.
Definition
Quality.h:90
cstdint
std::uint32_t
beast::kZero
constexpr Zero kZero
Definition
Zero.h:30
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::feeMult
Number feeMult(std::uint16_t tfee)
Get fee multiplier (1 - tfee) @tfee trading fee in basis points.
Definition
AMMCore.h:110
xrpl::Throw
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition
contract.h:52
optional
stdexcept
xrpl::QualityFunction::AMMTag
Definition
QualityFunction.h:38
xrpl::QualityFunction::CLOBLikeTag
Definition
QualityFunction.h:43
xrpl::TAmounts
Represents a pair of input and output currencies.
Definition
Quality.h:29
xrpl::TAmounts::in
In in
Definition
Quality.h:65
xrpl::TAmounts::out
Out out
Definition
Quality.h:66
Generated by
1.17.0