rippled
Loading...
Searching...
No Matches
mpt.h
1#pragma once
2
3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5#include <test/jtx/ter.h>
6#include <test/jtx/txflags.h>
7
8#include <xrpl/protocol/UintTypes.h>
9
10namespace xrpl {
11namespace test {
12namespace jtx {
13
14class MPTTester;
15
16auto const MPTDEXFlags = tfMPTCanTrade | tfMPTCanTransfer;
17
18// Check flags settings on MPT create
20{
21private:
25
26public:
28 MPTTester& tester,
31 : tester_(tester), flags_(flags), holder_(holder)
32 {
33 }
34
35 void
36 operator()(Env& env) const;
37};
38
39// Check mptissuance or mptoken amount balances on payment
41{
42private:
46
47public:
49 : tester_(tester), account_(account), amount_(amount)
50 {
51 }
52
53 void
54 operator()(Env& env) const;
55};
56
58{
59private:
61
62public:
63 requireAny(std::function<bool()> const& cb) : cb_(cb)
64 {
65 }
66
67 void
68 operator()(Env& env) const;
69};
70
72
95
96struct MPTInit
97{
99 PrettyAmount const xrp = XRP(10'000);
100 PrettyAmount const xrpHolders = XRP(10'000);
101 bool fund = true;
102 bool close = true;
103 // create MPTIssuanceID if seated and follow rules for MPTCreate args
105};
106static MPTInit const mptInitNoFund{.fund = false};
107
122
132
143
159
161{
166 bool close_;
167
168public:
169 MPTTester(Env& env, Account const& issuer, MPTInit const& constr = {});
170 MPTTester(MPTInitDef const& constr);
171 MPTTester(
172 Env& env,
173 Account const& issuer,
174 MPTID const& id,
175 std::vector<Account> const& holders = {},
176 bool close = true);
177 operator MPT() const;
178
179 void
180 create(MPTCreate const& arg = MPTCreate{});
181
182 static Json::Value
183 createJV(MPTCreate const& arg = MPTCreate{});
184
185 void
186 destroy(MPTDestroy const& arg = MPTDestroy{});
187
188 static Json::Value
189 destroyJV(MPTDestroy const& arg = MPTDestroy{});
190
191 void
192 authorize(MPTAuthorize const& arg = MPTAuthorize{});
193
194 static Json::Value
195 authorizeJV(MPTAuthorize const& arg = MPTAuthorize{});
196
197 void
198 authorizeHolders(Holders const& holders);
199
200 void
201 set(MPTSet const& set = {});
202
203 static Json::Value
204 setJV(MPTSet const& set = {});
205
206 [[nodiscard]] bool
208
209 [[nodiscard]] bool
210 checkMPTokenAmount(Account const& holder, std::int64_t expectedAmount) const;
211
212 [[nodiscard]] bool
213 checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const;
214
215 [[nodiscard]] bool
216 checkFlags(uint32_t const expectedFlags, std::optional<Account> const& holder = std::nullopt)
217 const;
218
219 [[nodiscard]] bool
220 checkMetadata(std::string const& metadata) const;
221
222 [[nodiscard]] bool
223 isMetadataPresent() const;
224
225 [[nodiscard]] bool
226 checkTransferFee(std::uint16_t transferFee) const;
227
228 [[nodiscard]] bool
229 isTransferFeePresent() const;
230
231 Account const&
232 issuer() const
233 {
234 return issuer_;
235 }
236 Account const&
237 holder(std::string const& h) const;
238
239 void
240 pay(Account const& src,
241 Account const& dest,
245
246 void
247 claw(
248 Account const& issuer,
249 Account const& holder,
252
254 mpt(std::int64_t amount) const;
255
256 MPTID const&
258 {
259 if (!env_.test.BEAST_EXPECT(id_))
260 Throw<std::logic_error>("Uninitialized issuanceID");
261 return *id_;
262 }
263
265 getBalance(Account const& account) const;
266
267 MPT
268 operator[](std::string const& name) const;
269
272
273 operator Asset() const;
274
275private:
277 bool
278 forObject(
279 std::function<bool(SLEP const& sle)> const& cb,
281
282 template <typename A>
283 TER
284 submit(A const& arg, Json::Value const& jv)
285 {
286 env_(jv, txflags(arg.flags.value_or(0)), ter(arg.err.value_or(tesSUCCESS)));
287 auto const err = env_.ter();
288 if (close_)
289 env_.close();
290 if (arg.ownerCount)
291 env_.require(owners(issuer_, *arg.ownerCount));
292 if (arg.holderCount)
293 {
294 for (auto const& it : holders_)
295 env_.require(owners(it.second, *arg.holderCount));
296 }
297 return err;
298 }
299
301 makeHolders(std::vector<Account> const& holders);
302
305};
306
307} // namespace jtx
308} // namespace test
309} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
std::shared_ptr< STLedgerEntry const > const_pointer
Immutable cryptographic account descriptor.
Definition Account.h:19
A transaction testing environment.
Definition Env.h:122
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition Env.cpp:100
TER ter() const
Return the TER for the last JTx.
Definition Env.h:658
beast::unit_test::suite & test
Definition Env.h:124
void require(Args const &... args)
Check a set of requirements.
Definition Env.h:588
std::unordered_map< std::string, Account > const holders_
Definition mpt.h:164
bool forObject(std::function< bool(SLEP const &sle)> const &cb, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:458
void set(MPTSet const &set={})
Definition mpt.cpp:360
bool checkMPTokenAmount(Account const &holder, std::int64_t expectedAmount) const
Definition mpt.cpp:481
std::optional< MPTID > id_
Definition mpt.h:165
void pay(Account const &src, Account const &dest, std::int64_t amount, std::optional< TER > err=std::nullopt, std::optional< std::vector< std::string > > credentials=std::nullopt)
Definition mpt.cpp:534
Account const & holder(std::string const &h) const
Definition mpt.cpp:226
void create(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:138
bool isTransferFeePresent() const
Definition mpt.cpp:528
bool checkMetadata(std::string const &metadata) const
Definition mpt.cpp:501
bool checkFlags(uint32_t const expectedFlags, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:495
bool isMetadataPresent() const
Definition mpt.cpp:511
MPT operator[](std::string const &name) const
Definition mpt.cpp:655
void authorizeHolders(Holders const &holders)
Definition mpt.cpp:312
static Json::Value authorizeJV(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:235
Account const & issuer() const
Definition mpt.h:232
void authorize(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:250
MPTID const & issuanceID() const
Definition mpt.h:257
static Json::Value destroyJV(MPTDestroy const &arg=MPTDestroy{})
Definition mpt.cpp:203
std::int64_t getBalance(Account const &account) const
Definition mpt.cpp:623
static Json::Value createJV(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:114
Account const issuer_
Definition mpt.h:163
void claw(Account const &issuer, Account const &holder, std::int64_t amount, std::optional< TER > err=std::nullopt)
Definition mpt.cpp:586
TER submit(A const &arg, Json::Value const &jv)
Definition mpt.h:284
PrettyAmount mpt(std::int64_t amount) const
Definition mpt.cpp:607
bool checkTransferFee(std::uint16_t transferFee) const
Definition mpt.cpp:518
static Json::Value setJV(MPTSet const &set={})
Definition mpt.cpp:321
bool checkDomainID(std::optional< uint256 > expected) const
Definition mpt.cpp:471
PrettyAmount operator()(std::int64_t amount) const
Definition mpt.cpp:661
std::uint32_t getFlags(std::optional< Account > const &holder) const
Definition mpt.cpp:641
static std::unordered_map< std::string, Account > makeHolders(std::vector< Account > const &holders)
Definition mpt.cpp:30
bool checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const
Definition mpt.cpp:488
Converts to MPT Issue or STAmount.
Match set account flags.
Definition flags.h:108
Account const & account_
Definition mpt.h:44
MPTTester const & tester_
Definition mpt.h:43
std::int64_t const amount_
Definition mpt.h:45
mptbalance(MPTTester &tester, Account const &account, std::int64_t amount)
Definition mpt.h:48
void operator()(Env &env) const
Definition mpt.cpp:18
std::uint32_t flags_
Definition mpt.h:23
std::optional< Account > holder_
Definition mpt.h:24
MPTTester & tester_
Definition mpt.h:22
mptflags(MPTTester &tester, std::uint32_t flags, std::optional< Account > const &holder=std::nullopt)
Definition mpt.h:27
void operator()(Env &env) const
Definition mpt.cpp:12
Match the number of items in the account's owner directory.
Definition owners.h:52
std::function< bool()> cb_
Definition mpt.h:60
requireAny(std::function< bool()> const &cb)
Definition mpt.h:63
void operator()(Env &env) const
Definition mpt.cpp:24
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition ter.h:15
Set the flags on a JTx.
Definition txflags.h:11
T is_same_v
static MPTInit const mptInitNoFund
Definition mpt.h:106
std::vector< Account > Holders
Definition mpt.h:71
XRP_t const XRP
Converts to XRP Issue or STAmount.
Definition amount.cpp:95
auto const MPTDEXFlags
Definition mpt.h:16
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
@ tesSUCCESS
Definition TER.h:225
std::optional< std::uint32_t > ownerCount
Definition mpt.h:138
std::optional< std::uint32_t > holderCount
Definition mpt.h:139
std::optional< Account > holder
Definition mpt.h:136
std::optional< Account > account
Definition mpt.h:135
std::optional< TER > err
Definition mpt.h:141
std::optional< std::uint8_t > assetScale
Definition mpt.h:78
static std::vector< Account > AllHolders
Definition mpt.h:75
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:90
std::optional< std::uint32_t > holderCount
Definition mpt.h:82
std::optional< std::string > metadata
Definition mpt.h:80
std::optional< uint256 > domainID
Definition mpt.h:92
std::optional< TER > err
Definition mpt.h:93
std::optional< std::uint64_t > maxAmt
Definition mpt.h:77
std::optional< std::uint32_t > ownerCount
Definition mpt.h:81
std::optional< Account > issuer
Definition mpt.h:76
std::optional< std::pair< std::vector< Account >, std::uint64_t > > pay
Definition mpt.h:88
std::optional< std::uint16_t > transferFee
Definition mpt.h:79
std::optional< std::vector< Account > > authorize
Definition mpt.h:85
std::optional< Account > issuer
Definition mpt.h:125
std::optional< std::uint32_t > holderCount
Definition mpt.h:128
std::optional< std::uint32_t > ownerCount
Definition mpt.h:127
std::optional< TER > err
Definition mpt.h:130
std::uint16_t transferFee
Definition mpt.h:113
std::optional< TER > err
Definition mpt.h:120
std::optional< std::uint64_t > maxAmt
Definition mpt.h:119
std::optional< std::uint64_t > pay
Definition mpt.h:114
std::optional< MPTCreate > create
Definition mpt.h:104
PrettyAmount const xrp
Definition mpt.h:99
PrettyAmount const xrpHolders
Definition mpt.h:100
std::optional< uint256 > domainID
Definition mpt.h:156
std::optional< Account > account
Definition mpt.h:146
std::optional< std::uint32_t > holderCount
Definition mpt.h:150
std::optional< TER > err
Definition mpt.h:157
std::optional< std::uint16_t > transferFee
Definition mpt.h:153
std::optional< std::variant< Account, AccountID > > holder
Definition mpt.h:147
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:152
std::optional< std::string > metadata
Definition mpt.h:154
std::optional< std::uint32_t > ownerCount
Definition mpt.h:149
std::optional< Account > delegate
Definition mpt.h:155
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...