20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/jss.h>
23 #include <test/jtx/AMM.h>
24 #include <test/jtx/AMMTest.h>
43 auto const USD =
gw[
"USD"];
46 BEAST_EXPECT(jv[jss::error_message] ==
"Account not found.");
53 BEAST_EXPECT(jv[jss::error_message] ==
"Account malformed.");
60 testcase(
"RPC simple");
72 testcase(
"Vote and Bid");
80 for (
int i = 0; i < 7; ++i)
84 fund(env,
gw, {a}, {
USD(10000)}, Fund::Acct);
86 ammAlice.
vote(a, 50 * (i + 1));
98 auto const& amm = ammInfo[jss::amm];
102 auto const voteSlots = amm[jss::vote_slots];
106 votes[voteSlots[i][jss::account].asString()] ==
107 voteSlots[i][jss::trading_fee].asUInt() &&
108 voteSlots[i][jss::vote_weight].asUInt() == 12500))
110 votes.
erase(voteSlots[i][jss::account].asString());
112 if (!BEAST_EXPECT(votes.
empty()))
116 auto const auctionSlot = amm[jss::auction_slot];
119 if (!BEAST_EXPECT(authAccounts.
contains(
120 auctionSlot[jss::auth_accounts][i][jss::account]
124 auctionSlot[jss::auth_accounts][i][jss::account]
127 if (!BEAST_EXPECT(authAccounts.
empty()))
130 auctionSlot[jss::account].asString() ==
alice.
human() &&
131 auctionSlot[jss::discounted_fee].asUInt() == 17 &&
132 auctionSlot[jss::price][jss::value].asString() ==
"5600" &&
133 auctionSlot[jss::price][jss::currency].asString() ==
135 auctionSlot[jss::price][jss::issuer].asString() ==
140 fail(e.
what(), __FILE__, __LINE__);
152 auto test = [&](
bool freeze) {
155 info[jss::amm][jss::asset2_frozen].asBool() ==
freeze);
const XRP_t XRP
Converts to XRP Issue or STAmount.
Json::Value ammRpcInfo(std::optional< AccountID > const &account=std::nullopt, std::optional< std::string > const &ledgerIndex=std::nullopt, std::optional< std::pair< Issue, Issue >> tokens=std::nullopt) const
Send amm_info RPC command.
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)
std::string const & human() const
Returns the human readable public key.
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)
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)
Floating point representation of amounts with high dynamic range.
Convenience class to test AMM functionality.
AccountID id() const
Returns the Account ID.
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) const
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
bool expectTradingFee(std::uint16_t fee) const
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
void fund(jtx::Env &env, jtx::Account const &gw, std::vector< jtx::Account > const &accounts, std::vector< STAmount > const &amts, Fund how)
constexpr std::uint32_t asfGlobalFreeze
std::string to_string(Manifest const &m)
Format the specified manifest to a string for debugging purposes.
Immutable cryptographic account descriptor.
void testAMM(std::function< void(jtx::AMM &, jtx::Env &)> &&cb, std::optional< std::pair< STAmount, STAmount >> const &pool=std::nullopt, std::uint16_t tfee=0, std::optional< jtx::ter > const &ter=std::nullopt, std::optional< FeatureBitset > const &features=std::nullopt)
testAMM() funds 30,000XRP and 30,000IOU for each non-XRP asset to Alice and Carol
A transaction testing environment.
BEAST_DEFINE_TESTSUITE(DeliverMin, app, ripple)