3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5#include <test/jtx/multisign.h>
6#include <test/jtx/seq.h>
7#include <test/jtx/ter.h>
9#include <xrpld/rpc/GRPCHandlers.h>
11#include <xrpl/json/json_value.h>
12#include <xrpl/protocol/STAmount.h>
13#include <xrpl/protocol/TxFlags.h>
15#include <nudb/detail/stream.hpp>
180 bool ignoreParams =
false,
191 unsigned apiVersion)
const;
305 asset1OutDetails ? tfOneAssetWithdrawAll : tfWithdrawAll,
377 if (
auto const res =
amm.ammRpcInfo())
378 s << res.toStyledString();
435 if (jv.isMember(jss::value))
447 out(jr[jss::amm][jss::amount]);
448 out(jr[jss::amm][jss::amount2]);
449 out(jr[jss::amm][jss::lp_token]);
453 for (
auto const& n : p.
names)
454 out(jr[jss::amm][n]);
470 if (
jv.isMember(jss::value))
472 s <<
jv[jss::value].asString();
479 for (
auto const& o :
offers.jv[jss::offers])
482 out(o[jss::taker_pays]);
483 s <<
" taker_gets: ";
484 out(o[jss::taker_gets]);
std::string toStyledString() const
Floating point representation of amounts with high dynamic range.
A currency issued by an account.
Number is a floating point type that can represent a wide range of values.
bool expectTradingFee(std::uint16_t fee) const
bool expectAmmRpcInfo(STAmount const &asset1, STAmount const &asset2, IOUAmount const &balance, std::optional< AccountID > const &account=std::nullopt, std::optional< std::string > const &ledgerIndex=std::nullopt, std::optional< AccountID > const &ammAccount=std::nullopt) const
json::Value bid(BidArg const &arg)
IOUAmount getLPTokensBalance(std::optional< AccountID > const &account=std::nullopt) const
std::optional< IOUAmount > bidMax_
static json::Value withdrawJv(WithdrawArg const &arg)
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)
AccountID const ammAccount_
IOUAmount withdrawAll(std::optional< Account > const &account, std::optional< STAmount > const &asset1OutDetails=std::nullopt, std::optional< Ter > const &ter=std::nullopt)
IOUAmount lastPurchasePrice_
friend std::ostream & operator<<(std::ostream &s, AMM const &amm)
json::Value operator()(AccountID const &lp) const
static json::Value deleteJv(AccountID const &account, Asset const &asset1, Asset const &assets)
bool expectAuctionSlot(std::uint32_t fee, std::optional< std::uint8_t > timeSlot, IOUAmount expectedPrice) const
Asset const & operator[](std::uint8_t i)
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)
Account const creatorAccount_
void submit(json::Value const &jv, std::optional< jtx::Seq > const &seq, std::optional< Ter > const &ter)
void ammDelete(AccountID const &account, std::optional< Ter > const &ter=std::nullopt)
AccountID const & ammAccount() const
std::optional< Msig > const msig_
static json::Value createJv(AccountID const &account, STAmount const &asset1, STAmount const &asset2, std::uint16_t const &tfee)
void setTokens(json::Value &jv, std::optional< std::pair< Asset, Asset > > const &assets=std::nullopt)
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< Asset, Asset > > const &assets=std::nullopt, std::optional< Ter > const &ter=std::nullopt)
std::tuple< STAmount, STAmount, STAmount > balances(std::optional< AccountID > const &account=std::nullopt) const
static json::Value voteJv(VoteArg const &arg)
void setClose(bool close)
std::optional< IOUAmount > bidMin_
bool expectLPTokens(AccountID const &account, IOUAmount const &tokens) const
bool expectAmmInfo(STAmount const &asset1, STAmount const &asset2, IOUAmount const &balance, json::Value const &jv) const
IOUAmount initialTokens()
AMM(Env &env, Account account, STAmount asset1, STAmount 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)
void clawback(ClawbackArg const &arg)
json::Value ammRpcInfo(std::optional< AccountID > const &account=std::nullopt, std::optional< std::string > const &ledgerIndex=std::nullopt, std::optional< Asset > const &asset1=std::nullopt, std::optional< Asset > const &asset2=std::nullopt, std::optional< AccountID > const &ammAccount=std::nullopt, bool ignoreParams=false, unsigned apiVersion=RPC::kApiInvalidVersion) const
Send amm_info RPC command.
std::tuple< STAmount, STAmount, STAmount > balances(Asset const &asset1, Asset const &asset2, std::optional< AccountID > const &account=std::nullopt) const
Get AMM balances for the token pair.
std::string operator[](AccountID const &lp) const
static json::Value depositJv(DepositArg const &arg)
bool expectBalances(STAmount const &asset1, STAmount const &asset2, IOUAmount const &lpt, std::optional< AccountID > const &account=std::nullopt) const
Verify the AMM balances.
IOUAmount const initialLPTokens_
Immutable cryptographic account descriptor.
A transaction testing environment.
STAmount tokens(Issue const &ammIssue) const
LPToken(std::uint64_t tokens)
LPToken(IOUAmount tokens)
Set the expected result code for a JTx The test will fail if the code doesn't match.
static constexpr auto kApiInvalidVersion
json::Value ammClawback(Account const &issuer, Account const &holder, Asset const &asset, Asset const &asset2, std::optional< STAmount > const &amount)
Deposit preauthorize operations.
OwnerCount< ltOFFER > offers
Match the number of offers in the account's owner directory.
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
friend std::ostream & operator<<(std::ostream &s, Offers const &offers)
Offers(json::Value const &j)
std::vector< json::StaticString > names
friend std::ostream & operator<<(std::ostream &s, Pool const &p)
Pool(AMM const &a, std::vector< json::StaticString > const &n={})
std::optional< Account > account
std::optional< std::variant< int, IOUAmount, STAmount > > bidMin
std::vector< Account > authAccounts
std::optional< std::variant< int, IOUAmount, STAmount > > bidMax
std::optional< std::uint32_t > flags
std::optional< std::pair< Asset, Asset > > assets
std::optional< STAmount > amount
std::optional< std::uint32_t > flags
std::optional< std::pair< Asset, Asset > > assets
std::optional< jtx::Msig > ms
std::optional< jtx::Seq > seq
std::optional< std::uint32_t > flags
std::optional< std::uint32_t > flags
std::optional< std::uint16_t > tfee
std::optional< LPToken > tokens
std::optional< STAmount > maxEP
std::optional< std::pair< Asset, Asset > > assets
std::optional< jtx::Seq > seq
std::optional< Account > account
std::optional< STAmount > asset2In
std::optional< STAmount > asset1In
std::optional< std::pair< Asset, Asset > > assets
std::optional< jtx::Seq > seq
std::optional< Account > account
std::optional< std::uint32_t > flags
std::optional< STAmount > asset2Out
std::optional< jtx::Seq > seq
std::optional< std::pair< Asset, Asset > > assets
std::optional< LPToken > maxEP
std::optional< STAmount > asset1Out
std::optional< std::uint32_t > flags
std::optional< Account > account
std::optional< LPToken > tokens