rippled
Loading...
Searching...
No Matches
mpt.h
1#ifndef XRPL_TEST_JTX_MPT_H_INCLUDED
2#define XRPL_TEST_JTX_MPT_H_INCLUDED
3
4#include <test/jtx/Account.h>
5#include <test/jtx/Env.h>
6#include <test/jtx/ter.h>
7#include <test/jtx/txflags.h>
8
9#include <xrpl/protocol/UintTypes.h>
10
11namespace xrpl {
12namespace test {
13namespace jtx {
14
15class MPTTester;
16
18
19// Check flags settings on MPT create
21{
22private:
26
27public:
29 MPTTester& tester,
32 : tester_(tester), flags_(flags), holder_(holder)
33 {
34 }
35
36 void
37 operator()(Env& env) const;
38};
39
40// Check mptissuance or mptoken amount balances on payment
42{
43private:
47
48public:
50 : tester_(tester), account_(account), amount_(amount)
51 {
52 }
53
54 void
55 operator()(Env& env) const;
56};
57
59{
60private:
62
63public:
64 requireAny(std::function<bool()> const& cb) : cb_(cb)
65 {
66 }
67
68 void
69 operator()(Env& env) const;
70};
71
73
97
98struct MPTInit
99{
101 PrettyAmount const xrp = XRP(10'000);
102 PrettyAmount const xrpHolders = XRP(10'000);
103 bool fund = true;
104 bool close = true;
105 // create MPTIssuanceID if seated and follow rules for MPTCreate args
107};
108static MPTInit const mptInitNoFund{.fund = false};
109
124
134
145
161
163{
168 bool close_;
169
170public:
171 MPTTester(Env& env, Account const& issuer, MPTInit const& constr = {});
172 MPTTester(MPTInitDef const& constr);
173 MPTTester(
174 Env& env,
175 Account const& issuer,
176 MPTID const& id,
177 std::vector<Account> const& holders = {},
178 bool close = true);
179 operator MPT() const;
180
181 void
182 create(MPTCreate const& arg = MPTCreate{});
183
184 static Json::Value
185 createjv(MPTCreate const& arg = MPTCreate{});
186
187 void
188 destroy(MPTDestroy const& arg = MPTDestroy{});
189
190 static Json::Value
191 destroyjv(MPTDestroy const& arg = MPTDestroy{});
192
193 void
194 authorize(MPTAuthorize const& arg = MPTAuthorize{});
195
196 static Json::Value
197 authorizejv(MPTAuthorize const& arg = MPTAuthorize{});
198
199 void
200 authorizeHolders(Holders const& holders);
201
202 void
203 set(MPTSet const& set = {});
204
205 static Json::Value
206 setjv(MPTSet const& set = {});
207
208 [[nodiscard]] bool
210
211 [[nodiscard]] bool
212 checkMPTokenAmount(Account const& holder, std::int64_t expectedAmount)
213 const;
214
215 [[nodiscard]] bool
216 checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const;
217
218 [[nodiscard]] bool
220 uint32_t const expectedFlags,
222
223 [[nodiscard]] bool
224 checkMetadata(std::string const& metadata) const;
225
226 [[nodiscard]] bool
227 isMetadataPresent() const;
228
229 [[nodiscard]] bool
230 checkTransferFee(std::uint16_t transferFee) const;
231
232 [[nodiscard]] bool
233 isTransferFeePresent() const;
234
235 Account const&
236 issuer() const
237 {
238 return issuer_;
239 }
240 Account const&
241 holder(std::string const& h) const;
242
243 void
244 pay(Account const& src,
245 Account const& dest,
249
250 void
251 claw(
252 Account const& issuer,
253 Account const& holder,
256
258 mpt(std::int64_t amount) const;
259
260 MPTID const&
262 {
263 if (!env_.test.BEAST_EXPECT(id_))
264 Throw<std::logic_error>("Uninitialized issuanceID");
265 return *id_;
266 }
267
269 getBalance(Account const& account) const;
270
271 MPT
272 operator[](std::string const& name) const;
273
276
277 operator Asset() const;
278
279private:
281 bool
282 forObject(
283 std::function<bool(SLEP const& sle)> const& cb,
285
286 template <typename A>
287 TER
288 submit(A const& arg, Json::Value const& jv)
289 {
290 env_(
291 jv,
292 txflags(arg.flags.value_or(0)),
293 ter(arg.err.value_or(tesSUCCESS)));
294 auto const err = env_.ter();
295 if (close_)
296 env_.close();
297 if (arg.ownerCount)
298 env_.require(owners(issuer_, *arg.ownerCount));
299 if (arg.holderCount)
300 {
301 for (auto it : holders_)
302 env_.require(owners(it.second, *arg.holderCount));
303 }
304 return err;
305 }
306
308 makeHolders(std::vector<Account> const& holders);
309
312};
313
314} // namespace jtx
315} // namespace test
316} // namespace xrpl
317
318#endif
Represents a JSON value.
Definition json_value.h:131
std::shared_ptr< STLedgerEntry const > const_pointer
Immutable cryptographic account descriptor.
Definition Account.h:20
A transaction testing environment.
Definition Env.h:102
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition Env.cpp:104
TER ter() const
Return the TER for the last JTx.
Definition Env.h:581
beast::unit_test::suite & test
Definition Env.h:104
void require(Args const &... args)
Check a set of requirements.
Definition Env.h:530
std::unordered_map< std::string, Account > const holders_
Definition mpt.h:166
bool forObject(std::function< bool(SLEP const &sle)> const &cb, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:433
void set(MPTSet const &set={})
Definition mpt.cpp:360
bool checkMPTokenAmount(Account const &holder, std::int64_t expectedAmount) const
Definition mpt.cpp:457
std::optional< MPTID > id_
Definition mpt.h:167
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:520
Account const & holder(std::string const &h) const
Definition mpt.cpp:227
void create(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:144
bool isTransferFeePresent() const
Definition mpt.cpp:512
bool checkMetadata(std::string const &metadata) const
Definition mpt.cpp:483
bool checkFlags(uint32_t const expectedFlags, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:475
bool isMetadataPresent() const
Definition mpt.cpp:494
MPT operator[](std::string const &name) const
Definition mpt.cpp:641
void authorizeHolders(Holders const &holders)
Definition mpt.cpp:316
Account const & issuer() const
Definition mpt.h:236
void authorize(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:252
MPTID const & issuanceID() const
Definition mpt.h:261
std::int64_t getBalance(Account const &account) const
Definition mpt.cpp:609
Account const issuer_
Definition mpt.h:165
void claw(Account const &issuer, Account const &holder, std::int64_t amount, std::optional< TER > err=std::nullopt)
Definition mpt.cpp:571
TER submit(A const &arg, Json::Value const &jv)
Definition mpt.h:288
static Json::Value setjv(MPTSet const &set={})
Definition mpt.cpp:325
static Json::Value destroyjv(MPTDestroy const &arg=MPTDestroy{})
Definition mpt.cpp:203
static Json::Value createjv(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:120
PrettyAmount mpt(std::int64_t amount) const
Definition mpt.cpp:594
static Json::Value authorizejv(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:236
bool checkTransferFee(std::uint16_t transferFee) const
Definition mpt.cpp:502
bool checkDomainID(std::optional< uint256 > expected) const
Definition mpt.cpp:447
std::uint32_t getFlags(std::optional< Account > const &holder) const
Definition mpt.cpp:627
static std::unordered_map< std::string, Account > makeHolders(std::vector< Account > const &holders)
Definition mpt.cpp:29
PrettyAmount operator()(std::uint64_t amount) const
Definition mpt.cpp:647
bool checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const
Definition mpt.cpp:467
Converts to MPT Issue or STAmount.
Match set account flags.
Definition flags.h:109
Account const & account_
Definition mpt.h:45
MPTTester const & tester_
Definition mpt.h:44
std::int64_t const amount_
Definition mpt.h:46
mptbalance(MPTTester &tester, Account const &account, std::int64_t amount)
Definition mpt.h:49
void operator()(Env &env) const
Definition mpt.cpp:17
std::uint32_t flags_
Definition mpt.h:24
std::optional< Account > holder_
Definition mpt.h:25
MPTTester & tester_
Definition mpt.h:23
mptflags(MPTTester &tester, std::uint32_t flags, std::optional< Account > const &holder=std::nullopt)
Definition mpt.h:28
void operator()(Env &env) const
Definition mpt.cpp:11
Match the number of items in the account's owner directory.
Definition owners.h:54
std::function< bool()> cb_
Definition mpt.h:61
requireAny(std::function< bool()> const &cb)
Definition mpt.h:64
void operator()(Env &env) const
Definition mpt.cpp:23
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition ter.h:16
Set the flags on a JTx.
Definition txflags.h:12
T is_same_v
static MPTInit const mptInitNoFund
Definition mpt.h:108
std::vector< Account > Holders
Definition mpt.h:72
XRP_t const XRP
Converts to XRP Issue or STAmount.
Definition amount.cpp:92
auto const amount
auto const MPTDEXFlags
Definition mpt.h:17
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
constexpr std::uint32_t const tfMPTCanTransfer
Definition TxFlags.h:133
constexpr std::uint32_t const tfMPTCanTrade
Definition TxFlags.h:132
@ tesSUCCESS
Definition TER.h:226
std::optional< std::uint32_t > ownerCount
Definition mpt.h:140
std::optional< std::uint32_t > holderCount
Definition mpt.h:141
std::optional< Account > holder
Definition mpt.h:138
std::optional< Account > account
Definition mpt.h:137
std::optional< TER > err
Definition mpt.h:143
std::optional< std::uint8_t > assetScale
Definition mpt.h:79
static std::vector< Account > AllHolders
Definition mpt.h:76
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:92
std::optional< std::uint32_t > holderCount
Definition mpt.h:83
std::optional< std::string > metadata
Definition mpt.h:81
std::optional< uint256 > domainID
Definition mpt.h:94
std::optional< TER > err
Definition mpt.h:95
std::optional< std::uint64_t > maxAmt
Definition mpt.h:78
std::optional< std::uint32_t > ownerCount
Definition mpt.h:82
std::optional< Account > issuer
Definition mpt.h:77
std::optional< std::pair< std::vector< Account >, std::uint64_t > > pay
Definition mpt.h:89
std::optional< std::uint16_t > transferFee
Definition mpt.h:80
std::optional< std::vector< Account > > authorize
Definition mpt.h:86
std::optional< Account > issuer
Definition mpt.h:127
std::optional< std::uint32_t > holderCount
Definition mpt.h:130
std::optional< std::uint32_t > ownerCount
Definition mpt.h:129
std::optional< TER > err
Definition mpt.h:132
std::uint16_t transferFee
Definition mpt.h:115
std::optional< TER > err
Definition mpt.h:122
std::optional< std::uint64_t > maxAmt
Definition mpt.h:121
std::optional< std::uint64_t > pay
Definition mpt.h:116
std::optional< MPTCreate > create
Definition mpt.h:106
PrettyAmount const xrp
Definition mpt.h:101
PrettyAmount const xrpHolders
Definition mpt.h:102
std::optional< uint256 > domainID
Definition mpt.h:158
std::optional< Account > account
Definition mpt.h:148
std::optional< std::uint32_t > holderCount
Definition mpt.h:152
std::optional< TER > err
Definition mpt.h:159
std::optional< std::uint16_t > transferFee
Definition mpt.h:155
std::optional< std::variant< Account, AccountID > > holder
Definition mpt.h:149
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:154
std::optional< std::string > metadata
Definition mpt.h:156
std::optional< std::uint32_t > ownerCount
Definition mpt.h:151
std::optional< Account > delegate
Definition mpt.h:157
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...