rippled
AMM.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2023 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_TEST_JTX_AMM_H_INCLUDED
21 #define RIPPLE_TEST_JTX_AMM_H_INCLUDED
22 
23 #include <ripple/json/json_value.h>
24 #include <ripple/protocol/STAmount.h>
25 #include <ripple/protocol/TxFlags.h>
26 #include <ripple/rpc/GRPCHandlers.h>
27 #include <test/jtx/Account.h>
28 #include <test/jtx/Env.h>
29 #include <test/jtx/multisign.h>
30 #include <test/jtx/seq.h>
31 #include <test/jtx/ter.h>
32 
33 namespace ripple {
34 namespace test {
35 namespace jtx {
36 
37 class LPToken
38 {
40 
41 public:
43  {
44  }
46  {
47  }
48  IOUAmount const&
49  tokens() const
50  {
51  return tokens_;
52  }
53  STAmount
54  tokens(Issue const& ammIssue) const
55  {
56  return STAmount{tokens_, ammIssue};
57  }
58 };
59 
60 struct CreateArg
61 {
62  bool log = false;
66  std::optional<jtx::seq> seq = std::nullopt;
67  std::optional<jtx::msig> ms = std::nullopt;
68  std::optional<ter> err = std::nullopt;
69  bool close = true;
70 };
71 
72 struct DepositArg
73 {
81  std::optional<jtx::seq> seq = std::nullopt;
83  std::optional<ter> err = std::nullopt;
84 };
85 
87 {
95  std::optional<jtx::seq> seq = std::nullopt;
96  std::optional<ter> err = std::nullopt;
97 };
98 
99 struct VoteArg
100 {
104  std::optional<jtx::seq> seq = std::nullopt;
106  std::optional<ter> err = std::nullopt;
107 };
108 
109 struct BidArg
110 {
116  std::optional<jtx::seq> seq = std::nullopt;
118  std::optional<ter> err = std::nullopt;
119 };
120 
123 class AMM
124 {
131  bool log_;
132  bool doClose_;
133  // Predict next purchase price
137  // Multi-signature
139  // Transaction fee
143 
144 public:
145  AMM(Env& env,
146  Account const& account,
147  STAmount const& asset1,
148  STAmount const& asset2,
149  bool log = false,
150  std::uint16_t tfee = 0,
151  std::uint32_t fee = 0,
152  std::optional<std::uint32_t> flags = std::nullopt,
153  std::optional<jtx::seq> seq = std::nullopt,
154  std::optional<jtx::msig> ms = std::nullopt,
155  std::optional<ter> const& ter = std::nullopt,
156  bool close = true);
157  AMM(Env& env,
158  Account const& account,
159  STAmount const& asset1,
160  STAmount const& asset2,
161  ter const& ter,
162  bool log = false,
163  bool close = true);
164  AMM(Env& env,
165  Account const& account,
166  STAmount const& asset1,
167  STAmount const& asset2,
168  CreateArg const& arg);
169 
173  ammRpcInfo(
174  std::optional<AccountID> const& account = std::nullopt,
175  std::optional<std::string> const& ledgerIndex = std::nullopt,
176  std::optional<Issue> issue1 = std::nullopt,
177  std::optional<Issue> issue2 = std::nullopt,
178  std::optional<AccountID> const& ammAccount = std::nullopt,
179  bool ignoreParams = false) const;
180 
183  [[nodiscard]] bool
185  STAmount const& asset1,
186  STAmount const& asset2,
187  IOUAmount const& lpt,
188  std::optional<AccountID> const& account = std::nullopt) const;
189 
193  balances(
194  Issue const& issue1,
195  Issue const& issue2,
196  std::optional<AccountID> const& account = std::nullopt) const;
197 
198  [[nodiscard]] bool
199  expectLPTokens(AccountID const& account, IOUAmount const& tokens) const;
200 
206  [[nodiscard]] bool
210  IOUAmount expectedPrice) const;
211 
212  [[nodiscard]] bool
213  expectAuctionSlot(std::vector<AccountID> const& authAccount) const;
214 
215  [[nodiscard]] bool
217 
218  [[nodiscard]] bool
220  STAmount const& asset1,
221  STAmount const& asset2,
222  IOUAmount const& balance,
223  std::optional<AccountID> const& account = std::nullopt,
224  std::optional<std::string> const& ledger_index = std::nullopt,
225  std::optional<AccountID> const& ammAccount = std::nullopt) const;
226 
227  [[nodiscard]] bool
228  ammExists() const;
229 
230  IOUAmount
231  deposit(
232  std::optional<Account> const& account,
233  LPToken tokens,
234  std::optional<STAmount> const& asset1InDetails = std::nullopt,
235  std::optional<std::uint32_t> const& flags = std::nullopt,
236  std::optional<ter> const& ter = std::nullopt);
237 
238  IOUAmount
239  deposit(
240  std::optional<Account> const& account,
241  STAmount const& asset1InDetails,
242  std::optional<STAmount> const& asset2InAmount = std::nullopt,
243  std::optional<STAmount> const& maxEP = std::nullopt,
244  std::optional<std::uint32_t> const& flags = std::nullopt,
245  std::optional<ter> const& ter = std::nullopt);
246 
247  IOUAmount
248  deposit(
249  std::optional<Account> const& account,
251  std::optional<STAmount> const& asset1In,
252  std::optional<STAmount> const& asset2In,
253  std::optional<STAmount> const& maxEP,
255  std::optional<std::pair<Issue, Issue>> const& assets,
257  std::optional<std::uint16_t> const& tfee = std::nullopt,
258  std::optional<ter> const& ter = std::nullopt);
259 
260  IOUAmount
261  deposit(DepositArg const& arg);
262 
263  IOUAmount
264  withdraw(
265  std::optional<Account> const& account,
267  std::optional<STAmount> const& asset1OutDetails = std::nullopt,
268  std::optional<std::uint32_t> const& flags = std::nullopt,
269  std::optional<ter> const& ter = std::nullopt);
270 
271  IOUAmount
273  std::optional<Account> const& account,
274  std::optional<STAmount> const& asset1OutDetails = std::nullopt,
275  std::optional<ter> const& ter = std::nullopt)
276  {
277  return withdraw(
278  account,
279  std::nullopt,
280  asset1OutDetails,
281  asset1OutDetails ? tfOneAssetWithdrawAll : tfWithdrawAll,
282  ter);
283  }
284 
285  IOUAmount
286  withdraw(
287  std::optional<Account> const& account,
288  STAmount const& asset1Out,
289  std::optional<STAmount> const& asset2Out = std::nullopt,
290  std::optional<IOUAmount> const& maxEP = std::nullopt,
291  std::optional<ter> const& ter = std::nullopt);
292 
293  IOUAmount
294  withdraw(
295  std::optional<Account> const& account,
297  std::optional<STAmount> const& asset1Out,
298  std::optional<STAmount> const& asset2Out,
299  std::optional<IOUAmount> const& maxEP,
301  std::optional<std::pair<Issue, Issue>> const& assets,
303  std::optional<ter> const& ter = std::nullopt);
304 
305  IOUAmount
306  withdraw(WithdrawArg const& arg);
307 
308  void
309  vote(
310  std::optional<Account> const& account,
311  std::uint32_t feeVal,
312  std::optional<std::uint32_t> const& flags = std::nullopt,
313  std::optional<jtx::seq> const& seq = std::nullopt,
314  std::optional<std::pair<Issue, Issue>> const& assets = std::nullopt,
315  std::optional<ter> const& ter = std::nullopt);
316 
317  void
318  vote(VoteArg const& arg);
319 
320  void
321  bid(std::optional<Account> const& account,
323  std::nullopt,
325  std::nullopt,
326  std::vector<Account> const& authAccounts = {},
327  std::optional<std::uint32_t> const& flags = std::nullopt,
328  std::optional<jtx::seq> const& seq = std::nullopt,
329  std::optional<std::pair<Issue, Issue>> const& assets = std::nullopt,
330  std::optional<ter> const& ter = std::nullopt);
331 
332  void
333  bid(BidArg const& arg);
334 
335  AccountID const&
336  ammAccount() const
337  {
338  return ammAccount_;
339  }
340 
341  Issue
342  lptIssue() const
343  {
344  return lptIssue_;
345  }
346 
347  IOUAmount
348  tokens() const
349  {
350  return initialLPTokens_;
351  }
352 
353  IOUAmount
355  std::optional<AccountID> const& account = std::nullopt) const;
356 
357  friend std::ostream&
358  operator<<(std::ostream& s, AMM const& amm)
359  {
360  if (auto const res = amm.ammRpcInfo())
361  s << res.toStyledString();
362  return s;
363  }
364 
367  {
368  return ammRpcInfo(lp).toStyledString();
369  }
370 
373  {
374  return ammRpcInfo(lp);
375  }
376 
377  void
378  ammDelete(
379  AccountID const& deleter,
380  std::optional<ter> const& ter = std::nullopt);
381 
382  void
383  setClose(bool close)
384  {
385  doClose_ = close;
386  }
387 
388  uint256
389  ammID() const
390  {
391  return ammID_;
392  }
393 
394 private:
395  void
396  setTokens(
397  Json::Value& jv,
398  std::optional<std::pair<Issue, Issue>> const& assets = std::nullopt);
399 
400  AccountID
401  create(
402  std::uint32_t tfee = 0,
403  std::optional<std::uint32_t> const& flags = std::nullopt,
404  std::optional<jtx::seq> const& seq = std::nullopt,
405  std::optional<ter> const& ter = std::nullopt);
406 
407  IOUAmount
408  deposit(
409  std::optional<Account> const& account,
410  Json::Value& jv,
411  std::optional<std::pair<Issue, Issue>> const& assets = std::nullopt,
412  std::optional<jtx::seq> const& seq = std::nullopt,
413  std::optional<ter> const& ter = std::nullopt);
414 
415  IOUAmount
416  withdraw(
417  std::optional<Account> const& account,
418  Json::Value& jv,
420  std::optional<std::pair<Issue, Issue>> const& assets = std::nullopt,
421  std::optional<ter> const& ter = std::nullopt);
422 
423  void
424  log(bool log)
425  {
426  log_ = log;
427  }
428 
429  [[nodiscard]] bool
431  STAmount const& asset1,
432  STAmount const& asset2,
433  IOUAmount const& balance,
434  Json::Value const& jv) const;
435 
436  void
437  submit(
438  Json::Value const& jv,
440  std::optional<ter> const& ter);
441 
442  [[nodiscard]] bool
443  expectAuctionSlot(auto&& cb) const;
444 };
445 
446 namespace amm {
448 trust(
449  AccountID const& account,
450  STAmount const& amount,
451  std::uint32_t flags = 0);
453 pay(Account const& account, AccountID const& to, STAmount const& amount);
454 } // namespace amm
455 
456 } // namespace jtx
457 } // namespace test
458 } // namespace ripple
459 
460 #endif // RIPPLE_TEST_JTX_AMM_H_INCLUDED
ripple::test::jtx::WithdrawArg::asset2Out
std::optional< STAmount > asset2Out
Definition: AMM.h:91
ripple::Issue
A currency issued by an account.
Definition: Issue.h:35
std::string
STL class.
ripple::test::jtx::AMM::ammDelete
void ammDelete(AccountID const &deleter, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:809
ripple::test::jtx::CreateArg
Definition: AMM.h:60
ripple::test::jtx::WithdrawArg
Definition: AMM.h:86
ripple::test::jtx::AMM::msig_
const std::optional< msig > msig_
Definition: AMM.h:138
ripple::test::jtx::AMM::ammAccount
AccountID const & ammAccount() const
Definition: AMM.h:336
ripple::test::jtx::ter
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition: ter.h:33
ripple::test::jtx::AMM::setClose
void setClose(bool close)
Definition: AMM.h:383
std::pair
ripple::test::jtx::DepositArg::tfee
std::optional< std::uint16_t > tfee
Definition: AMM.h:82
ripple::test::jtx::AMM::AMM
AMM(Env &env, Account const &account, STAmount const &asset1, STAmount const &asset2, bool log=false, std::uint16_t tfee=0, std::uint32_t fee=0, std::optional< std::uint32_t > flags=std::nullopt, std::optional< jtx::seq > seq=std::nullopt, std::optional< jtx::msig > ms=std::nullopt, std::optional< ter > const &ter=std::nullopt, bool close=true)
Definition: AMM.cpp:49
ripple::test::jtx::balance
A balance matches.
Definition: balance.h:38
std::vector
STL class.
ripple::test::jtx::WithdrawArg::maxEP
std::optional< IOUAmount > maxEP
Definition: AMM.h:92
ripple::test::jtx::DepositArg::asset1In
std::optional< STAmount > asset1In
Definition: AMM.h:76
ripple::test::jtx::BidArg::err
std::optional< ter > err
Definition: AMM.h:118
ripple::test::jtx::LPToken::LPToken
LPToken(std::uint64_t tokens)
Definition: AMM.h:42
ripple::test::jtx::AMM::operator()
Json::Value operator()(AccountID const &lp)
Definition: AMM.h:372
ripple::test::jtx::AMM::vote
void vote(std::optional< Account > const &account, std::uint32_t feeVal, std::optional< std::uint32_t > const &flags=std::nullopt, std::optional< jtx::seq > const &seq=std::nullopt, std::optional< std::pair< Issue, Issue >> const &assets=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:633
ripple::test::jtx::WithdrawArg::asset1Out
std::optional< STAmount > asset1Out
Definition: AMM.h:90
ripple::test::jtx::amm::pay
Json::Value pay(Account const &account, AccountID const &to, STAmount const &amount)
Definition: AMM.cpp:834
ripple::test::jtx::AMM::deposit
IOUAmount deposit(std::optional< Account > const &account, LPToken tokens, std::optional< STAmount > const &asset1InDetails=std::nullopt, std::optional< std::uint32_t > const &flags=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:407
ripple::test::jtx::CreateArg::close
bool close
Definition: AMM.h:69
std::tuple
ripple::test::jtx::AMM::bid
void bid(std::optional< Account > const &account, std::optional< std::variant< int, IOUAmount, STAmount >> const &bidMin=std::nullopt, std::optional< std::variant< int, IOUAmount, STAmount >> const &bidMax=std::nullopt, std::vector< Account > const &authAccounts={}, std::optional< std::uint32_t > const &flags=std::nullopt, std::optional< jtx::seq > const &seq=std::nullopt, std::optional< std::pair< Issue, Issue >> const &assets=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:660
ripple::IOUAmount
Floating point representation of amounts with high dynamic range.
Definition: IOUAmount.h:43
ripple::test::jtx::AMM
Convenience class to test AMM functionality.
Definition: AMM.h:123
ripple::test::jtx::DepositArg::asset2In
std::optional< STAmount > asset2In
Definition: AMM.h:77
Json::Value::toStyledString
std::string toStyledString() const
Definition: json_value.cpp:1039
ripple::test::jtx::DepositArg::err
std::optional< ter > err
Definition: AMM.h:83
ripple::test::jtx::AMM::expectAmmInfo
bool expectAmmInfo(STAmount const &asset1, STAmount const &asset2, IOUAmount const &balance, Json::Value const &jv) const
Definition: AMM.cpp:338
ripple::test::jtx::VoteArg::err
std::optional< ter > err
Definition: AMM.h:106
ripple::test::jtx::AMM::creatorAccount_
const Account creatorAccount_
Definition: AMM.h:126
ripple::test::jtx::VoteArg
Definition: AMM.h:99
ripple::test::jtx::AMM::expectBalances
bool expectBalances(STAmount const &asset1, STAmount const &asset2, IOUAmount const &lpt, std::optional< AccountID > const &account=std::nullopt) const
Verify the AMM balances.
Definition: AMM.cpp:227
ripple::test::jtx::AMM::withdrawAll
IOUAmount withdrawAll(std::optional< Account > const &account, std::optional< STAmount > const &asset1OutDetails=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.h:272
ripple::test::jtx::BidArg::authAccounts
std::vector< Account > authAccounts
Definition: AMM.h:114
ripple::tfOneAssetWithdrawAll
constexpr std::uint32_t tfOneAssetWithdrawAll
Definition: TxFlags.h:169
ripple::test::jtx::AMM::ammRpcInfo
Json::Value ammRpcInfo(std::optional< AccountID > const &account=std::nullopt, std::optional< std::string > const &ledgerIndex=std::nullopt, std::optional< Issue > issue1=std::nullopt, std::optional< Issue > issue2=std::nullopt, std::optional< AccountID > const &ammAccount=std::nullopt, bool ignoreParams=false) const
Send amm_info RPC command.
Definition: AMM.cpp:160
ripple::test::jtx::DepositArg::tokens
std::optional< LPToken > tokens
Definition: AMM.h:75
ripple::base_uint< 256 >
ripple::test::jtx::AMM::expectAmmRpcInfo
bool expectAmmRpcInfo(STAmount const &asset1, STAmount const &asset2, IOUAmount const &balance, std::optional< AccountID > const &account=std::nullopt, std::optional< std::string > const &ledger_index=std::nullopt, std::optional< AccountID > const &ammAccount=std::nullopt) const
Definition: AMM.cpp:324
ripple::tfWithdrawAll
constexpr std::uint32_t tfWithdrawAll
Definition: TxFlags.h:168
ripple::test::jtx::AMM::expectLPTokens
bool expectLPTokens(AccountID const &account, IOUAmount const &tokens) const
Definition: AMM.cpp:258
ripple::test::jtx::AMM::initialLPTokens_
const IOUAmount initialLPTokens_
Definition: AMM.h:130
ripple::test::jtx::WithdrawArg::err
std::optional< ter > err
Definition: AMM.h:96
std::ostream
STL class.
ripple::test::jtx::VoteArg::tfee
std::uint32_t tfee
Definition: AMM.h:102
ripple::test::jtx::AMM::lastPurchasePrice_
IOUAmount lastPurchasePrice_
Definition: AMM.h:134
ripple::test::jtx::AMM::log
void log(bool log)
Definition: AMM.h:424
ripple::test::jtx::AMM::operator[]
std::string operator[](AccountID const &lp)
Definition: AMM.h:366
ripple::test::jtx::AMM::log_
bool log_
Definition: AMM.h:131
ripple::test::jtx::AMM::env_
Env & env_
Definition: AMM.h:125
ripple::test::jtx::CreateArg::ms
std::optional< jtx::msig > ms
Definition: AMM.h:67
ripple::test::jtx::AMM::lptIssue_
const Issue lptIssue_
Definition: AMM.h:142
ripple::test::jtx::AMM::bidMax_
std::optional< IOUAmount > bidMax_
Definition: AMM.h:136
ripple::STAmount
Definition: STAmount.h:46
ripple::test::jtx::AMM::ammID_
const uint256 ammID_
Definition: AMM.h:129
ripple::test::jtx::amm::trust
Json::Value trust(AccountID const &account, STAmount const &amount, std::uint32_t flags=0)
Definition: AMM.cpp:822
ripple::test::jtx::VoteArg::assets
std::optional< std::pair< Issue, Issue > > assets
Definition: AMM.h:105
std::uint64_t
ripple::test::jtx::WithdrawArg::assets
std::optional< std::pair< Issue, Issue > > assets
Definition: AMM.h:94
ripple::test::jtx::DepositArg
Definition: AMM.h:72
ripple::test::jtx::AMM::expectTradingFee
bool expectTradingFee(std::uint16_t fee) const
Definition: AMM.cpp:308
ripple::test::jtx::fee
Set the fee on a JTx.
Definition: fee.h:35
ripple::test::jtx::AMM::asset1_
const STAmount asset1_
Definition: AMM.h:127
ripple::test::jtx::AMM::ammID
uint256 ammID() const
Definition: AMM.h:389
ripple::test::jtx::AMM::withdraw
IOUAmount withdraw(std::optional< Account > const &account, std::optional< LPToken > const &tokens, std::optional< STAmount > const &asset1OutDetails=std::nullopt, std::optional< std::uint32_t > const &flags=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:533
ripple::test::jtx::seq
Set the sequence number on a JTx.
Definition: seq.h:33
ripple::test::jtx::AMM::ammExists
bool ammExists() const
Definition: AMM.cpp:316
ripple::test::jtx::LPToken::LPToken
LPToken(IOUAmount tokens)
Definition: AMM.h:45
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::jtx::AMM::asset2_
const STAmount asset2_
Definition: AMM.h:128
ripple::test::jtx::AMM::setTokens
void setTokens(Json::Value &jv, std::optional< std::pair< Issue, Issue >> const &assets=std::nullopt)
Definition: AMM.cpp:367
ripple::test::jtx::VoteArg::account
std::optional< Account > account
Definition: AMM.h:101
ripple::test::jtx::flags
Match set account flags.
Definition: flags.h:111
ripple::test::jtx::AMM::ammAccount_
const AccountID ammAccount_
Definition: AMM.h:141
ripple::test::jtx::BidArg::account
std::optional< Account > account
Definition: AMM.h:111
ripple::test::jtx::AMM::tokens
IOUAmount tokens() const
Definition: AMM.h:348
ripple::test::jtx::CreateArg::tfee
std::uint16_t tfee
Definition: AMM.h:63
ripple::test::jtx::WithdrawArg::account
std::optional< Account > account
Definition: AMM.h:88
ripple::test::jtx::BidArg::bidMin
std::optional< std::variant< int, IOUAmount, STAmount > > bidMin
Definition: AMM.h:112
ripple::test::jtx::AMM::expectAuctionSlot
bool expectAuctionSlot(std::uint32_t fee, std::optional< std::uint8_t > timeSlot, IOUAmount expectedPrice) const
Definition: AMM.cpp:271
ripple::test::jtx::AMM::doClose_
bool doClose_
Definition: AMM.h:132
ripple::test::jtx::CreateArg::err
std::optional< ter > err
Definition: AMM.h:68
std::optional< std::uint32_t >
ripple::test::jtx::AMM::create
AccountID create(std::uint32_t tfee=0, std::optional< std::uint32_t > const &flags=std::nullopt, std::optional< jtx::seq > const &seq=std::nullopt, std::optional< ter > const &ter=std::nullopt)
Definition: AMM.cpp:128
ripple::test::jtx::Account
Immutable cryptographic account descriptor.
Definition: Account.h:37
ripple::test::jtx::AMM::submit
void submit(Json::Value const &jv, std::optional< jtx::seq > const &seq, std::optional< ter > const &ter)
Definition: AMM.cpp:745
ripple::test::jtx::LPToken::tokens
STAmount tokens(Issue const &ammIssue) const
Definition: AMM.h:54
ripple::test::jtx::LPToken
Definition: AMM.h:37
ripple::test::jtx::BidArg::assets
std::optional< std::pair< Issue, Issue > > assets
Definition: AMM.h:117
ripple::test::jtx::AMM::fee_
const std::uint32_t fee_
Definition: AMM.h:140
ripple::test::jtx::BidArg::bidMax
std::optional< std::variant< int, IOUAmount, STAmount > > bidMax
Definition: AMM.h:113
ripple::test::jtx::AMM::operator<<
friend std::ostream & operator<<(std::ostream &s, AMM const &amm)
Definition: AMM.h:358
ripple::test::jtx::BidArg
Definition: AMM.h:109
ripple::test::jtx::CreateArg::log
bool log
Definition: AMM.h:62
ripple::test::jtx::WithdrawArg::tokens
std::optional< LPToken > tokens
Definition: AMM.h:89
ripple::test::jtx::DepositArg::account
std::optional< Account > account
Definition: AMM.h:74
ripple::test::jtx::LPToken::tokens_
const IOUAmount tokens_
Definition: AMM.h:39
ripple::test::jtx::AMM::lptIssue
Issue lptIssue() const
Definition: AMM.h:342
ripple::test::jtx::AMM::bidMin_
std::optional< IOUAmount > bidMin_
Definition: AMM.h:135
ripple::test::jtx::DepositArg::maxEP
std::optional< STAmount > maxEP
Definition: AMM.h:78
ripple::test::jtx::Env
A transaction testing environment.
Definition: Env.h:116
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::test::jtx::AMM::balances
std::tuple< STAmount, STAmount, STAmount > balances(Issue const &issue1, Issue const &issue2, std::optional< AccountID > const &account=std::nullopt) const
Get AMM balances for the token pair.
Definition: AMM.cpp:202
ripple::test::jtx::LPToken::tokens
IOUAmount const & tokens() const
Definition: AMM.h:49
std::variant
ripple::test::jtx::AMM::getLPTokensBalance
IOUAmount getLPTokensBalance(std::optional< AccountID > const &account=std::nullopt) const
Definition: AMM.cpp:241
ripple::test::jtx::DepositArg::assets
std::optional< std::pair< Issue, Issue > > assets
Definition: AMM.h:80