xrpld
Loading...
Searching...
No Matches
AMMLiquidity.h
1#pragma once
2
3#include <xrpl/basics/Log.h>
4#include <xrpl/ledger/ReadView.h>
5#include <xrpl/ledger/View.h>
6#include <xrpl/ledger/helpers/AMMHelpers.h>
7#include <xrpl/protocol/Concepts.h>
8#include <xrpl/protocol/Quality.h>
9#include <xrpl/tx/transactors/dex/AMMContext.h>
10
11namespace xrpl {
12
13template <StepAmount TIn, StepAmount TOut>
14class AMMOffer;
15
30template <typename TIn, typename TOut>
32{
33private:
34 inline static Number const kInitialFibSeqPct = Number(5) / 20000;
40 // Initial AMM pool balances
43
44public:
46 ReadView const& view,
47 AccountID const& ammAccountID,
49 Asset const& in,
50 Asset const& out,
51 AMMContext& ammContext,
53 ~AMMLiquidity() = default;
54 AMMLiquidity(AMMLiquidity const&) = delete;
56 operator=(AMMLiquidity const&) = delete;
57
64 getOffer(ReadView const& view, std::optional<Quality> const& clobQuality) const;
65
66 [[nodiscard]] AccountID const&
67 ammAccount() const
68 {
69 return ammAccountID_;
70 }
71
72 [[nodiscard]] bool
73 multiPath() const
74 {
75 return ammContext_.multiPath();
76 }
77
78 [[nodiscard]] std::uint32_t
79 tradingFee() const
80 {
81 return tradingFee_;
82 }
83
84 [[nodiscard]] AMMContext&
85 context() const
86 {
87 return ammContext_;
88 }
89
90 [[nodiscard]] Asset const&
91 assetIn() const
92 {
93 return assetIn_;
94 }
95
96 [[nodiscard]] Asset const&
97 assetOut() const
98 {
99 return assetOut_;
100 }
101
102private:
105 [[nodiscard]] TAmounts<TIn, TOut>
106 fetchBalances(ReadView const& view) const;
107
115 [[nodiscard]] TAmounts<TIn, TOut>
116 generateFibSeqOffer(TAmounts<TIn, TOut> const& balances) const;
117
128 maxOffer(TAmounts<TIn, TOut> const& balances, Rules const& rules) const;
129};
130
131} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:38
Maintains AMM info per overall payment engine execution and individual iteration.
Definition AMMContext.h:16
beast::Journal const j_
TAmounts< TIn, TOut > generateFibSeqOffer(TAmounts< TIn, TOut > const &balances) const
Generate AMM offers with the offer size based on Fibonacci sequence.
bool multiPath() const
~AMMLiquidity()=default
Asset const & assetOut() const
AccountID const & ammAccount() const
AMMLiquidity(AMMLiquidity const &)=delete
TAmounts< TIn, TOut > const initialBalances_
Asset const assetIn_
AccountID const ammAccountID_
AMMLiquidity & operator=(AMMLiquidity const &)=delete
std::optional< AMMOffer< TIn, TOut > > maxOffer(TAmounts< TIn, TOut > const &balances, Rules const &rules) const
Generate max offer.
TAmounts< TIn, TOut > fetchBalances(ReadView const &view) const
Fetches current AMM balances.
Asset const & assetIn() const
std::optional< AMMOffer< TIn, TOut > > getOffer(ReadView const &view, std::optional< Quality > const &clobQuality) const
Generate AMM offer.
Asset const assetOut_
AMMLiquidity(ReadView const &view, AccountID const &ammAccountID, std::uint32_t tradingFee, Asset const &in, Asset const &out, AMMContext &ammContext, beast::Journal j)
static Number const kInitialFibSeqPct
AMMContext & context() const
std::uint32_t const tradingFee_
std::uint32_t tradingFee() const
AMMContext & ammContext_
Represents synthetic AMM offer in BookStep.
Definition AMMOffer.h:22
Number is a floating point type that can represent a wide range of values.
Definition Number.h:306
A view into a ledger.
Definition ReadView.h:31
Rules controlling protocol behavior.
Definition Rules.h:33
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
Represents a pair of input and output currencies.
Definition Quality.h:26