xrpld
Loading...
Searching...
No Matches
AMMLiquidity.h
1#pragma once
2
3#include <xrpl/basics/Number.h>
4#include <xrpl/beast/utility/Journal.h>
5#include <xrpl/ledger/ReadView.h>
6#include <xrpl/protocol/AccountID.h>
7#include <xrpl/protocol/Concepts.h>
8#include <xrpl/protocol/Quality.h>
9#include <xrpl/tx/transactors/dex/AMMContext.h>
10
11#include <cstdint>
12#include <optional>
13
14namespace xrpl {
15
16template <StepAmount TIn, StepAmount TOut>
17class AMMOffer;
18
34template <typename TIn, typename TOut>
36{
37private:
38 inline static Number const kInitialFibSeqPct = Number(5) / 20000;
44 // Initial AMM pool balances
47
48public:
50 ReadView const& view,
51 AccountID const& ammAccountID,
53 Asset const& in,
54 Asset const& out,
55 AMMContext& ammContext,
57 ~AMMLiquidity() = default;
58 AMMLiquidity(AMMLiquidity const&) = delete;
60 operator=(AMMLiquidity const&) = delete;
61
69 getOffer(ReadView const& view, std::optional<Quality> const& clobQuality) const;
70
71 [[nodiscard]] AccountID const&
72 ammAccount() const
73 {
74 return ammAccountID_;
75 }
76
77 [[nodiscard]] bool
78 multiPath() const
79 {
80 return ammContext_.multiPath();
81 }
82
83 [[nodiscard]] std::uint32_t
84 tradingFee() const
85 {
86 return tradingFee_;
87 }
88
89 [[nodiscard]] AMMContext&
90 context() const
91 {
92 return ammContext_;
93 }
94
95 [[nodiscard]] Asset const&
96 assetIn() const
97 {
98 return assetIn_;
99 }
100
101 [[nodiscard]] Asset const&
102 assetOut() const
103 {
104 return assetOut_;
105 }
106
107private:
111 [[nodiscard]] TAmounts<TIn, TOut>
112 fetchBalances(ReadView const& view) const;
113
122 [[nodiscard]] TAmounts<TIn, TOut>
123 generateFibSeqOffer(TAmounts<TIn, TOut> const& balances) const;
124
131 maxOffer(TAmounts<TIn, TOut> const& balances) const;
132};
133
134} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Maintains AMM info per overall payment engine execution and individual iteration.
Definition AMMContext.h:17
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
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_
std::optional< AMMOffer< TIn, TOut > > maxOffer(TAmounts< TIn, TOut > const &balances) const
Generate max offer.
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:30
Number is a floating point type that can represent a wide range of values.
Definition Number.h:351
A view into a ledger.
Definition ReadView.h:41
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:34
Represents a pair of input and output currencies.
Definition Quality.h:29