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
17
18// Check flags settings on MPT create
20{
21private:
25
26public:
28 : tester_(tester), flags_(flags), holder_(holder)
29 {
30 }
31
32 void
33 operator()(Env& env) const;
34};
35
36// Check mptissuance or mptoken amount balances on payment
38{
39private:
43
44public:
46 : tester_(tester), account_(account), amount_(amount)
47 {
48 }
49
50 void
51 operator()(Env& env) const;
52};
53
55{
56private:
58
59public:
60 requireAny(std::function<bool()> const& cb) : cb_(cb)
61 {
62 }
63
64 void
65 operator()(Env& env) const;
66};
67
69
92
93struct MPTInit
94{
96 PrettyAmount const xrp = XRP(10'000);
97 PrettyAmount const xrpHolders = XRP(10'000);
98 bool fund = true;
99 bool close = true;
100 // create MPTIssuanceID if seated and follow rules for MPTCreate args
102};
103static MPTInit const mptInitNoFund{.fund = false};
104
119
129
140
156
158{
163 bool close_;
164
165public:
166 MPTTester(Env& env, Account const& issuer, MPTInit const& constr = {});
167 MPTTester(MPTInitDef const& constr);
168 MPTTester(
169 Env& env,
170 Account const& issuer,
171 MPTID const& id,
172 std::vector<Account> const& holders = {},
173 bool close = true);
174 operator MPT() const;
175
176 void
177 create(MPTCreate const& arg = MPTCreate{});
178
179 static Json::Value
180 createJV(MPTCreate const& arg = MPTCreate{});
181
182 void
183 destroy(MPTDestroy const& arg = MPTDestroy{});
184
185 static Json::Value
186 destroyJV(MPTDestroy const& arg = MPTDestroy{});
187
188 void
189 authorize(MPTAuthorize const& arg = MPTAuthorize{});
190
191 static Json::Value
192 authorizeJV(MPTAuthorize const& arg = MPTAuthorize{});
193
194 void
195 authorizeHolders(Holders const& holders);
196
197 void
198 set(MPTSet const& set = {});
199
200 static Json::Value
201 setJV(MPTSet const& set = {});
202
203 [[nodiscard]] bool
205
206 [[nodiscard]] bool
207 checkMPTokenAmount(Account const& holder, std::int64_t expectedAmount) const;
208
209 [[nodiscard]] bool
210 checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const;
211
212 [[nodiscard]] bool
213 checkFlags(uint32_t const expectedFlags, std::optional<Account> const& holder = std::nullopt) const;
214
215 [[nodiscard]] bool
216 checkMetadata(std::string const& metadata) const;
217
218 [[nodiscard]] bool
219 isMetadataPresent() const;
220
221 [[nodiscard]] bool
222 checkTransferFee(std::uint16_t transferFee) const;
223
224 [[nodiscard]] bool
225 isTransferFeePresent() const;
226
227 Account const&
228 issuer() const
229 {
230 return issuer_;
231 }
232 Account const&
233 holder(std::string const& h) const;
234
235 void
236 pay(Account const& src,
237 Account const& dest,
241
242 void
244
246 mpt(std::int64_t amount) const;
247
248 MPTID const&
250 {
251 if (!env_.test.BEAST_EXPECT(id_))
252 Throw<std::logic_error>("Uninitialized issuanceID");
253 return *id_;
254 }
255
257 getBalance(Account const& account) const;
258
259 MPT
260 operator[](std::string const& name) const;
261
264
265 operator Asset() const;
266
267private:
269 bool
270 forObject(std::function<bool(SLEP const& sle)> const& cb, std::optional<Account> const& holder = std::nullopt)
271 const;
272
273 template <typename A>
274 TER
275 submit(A const& arg, Json::Value const& jv)
276 {
277 env_(jv, txflags(arg.flags.value_or(0)), ter(arg.err.value_or(tesSUCCESS)));
278 auto const err = env_.ter();
279 if (close_)
280 env_.close();
281 if (arg.ownerCount)
282 env_.require(owners(issuer_, *arg.ownerCount));
283 if (arg.holderCount)
284 {
285 for (auto it : holders_)
286 env_.require(owners(it.second, *arg.holderCount));
287 }
288 return err;
289 }
290
292 makeHolders(std::vector<Account> const& holders);
293
296};
297
298} // namespace jtx
299} // namespace test
300} // 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:119
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition Env.cpp:98
TER ter() const
Return the TER for the last JTx.
Definition Env.h:603
beast::unit_test::suite & test
Definition Env.h:121
void require(Args const &... args)
Check a set of requirements.
Definition Env.h:533
std::unordered_map< std::string, Account > const holders_
Definition mpt.h:161
bool forObject(std::function< bool(SLEP const &sle)> const &cb, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:397
void set(MPTSet const &set={})
Definition mpt.cpp:327
bool checkMPTokenAmount(Account const &holder, std::int64_t expectedAmount) const
Definition mpt.cpp:418
std::optional< MPTID > id_
Definition mpt.h:162
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:468
Account const & holder(std::string const &h) const
Definition mpt.cpp:204
void create(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:126
bool isTransferFeePresent() const
Definition mpt.cpp:462
bool checkMetadata(std::string const &metadata) const
Definition mpt.cpp:436
bool checkFlags(uint32_t const expectedFlags, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:430
bool isMetadataPresent() const
Definition mpt.cpp:446
MPT operator[](std::string const &name) const
Definition mpt.cpp:577
void authorizeHolders(Holders const &holders)
Definition mpt.cpp:283
static Json::Value authorizeJV(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:213
Account const & issuer() const
Definition mpt.h:228
void authorize(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:228
MPTID const & issuanceID() const
Definition mpt.h:249
static Json::Value destroyJV(MPTDestroy const &arg=MPTDestroy{})
Definition mpt.cpp:182
std::int64_t getBalance(Account const &account) const
Definition mpt.cpp:545
static Json::Value createJV(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:102
Account const issuer_
Definition mpt.h:160
void claw(Account const &issuer, Account const &holder, std::int64_t amount, std::optional< TER > err=std::nullopt)
Definition mpt.cpp:513
TER submit(A const &arg, Json::Value const &jv)
Definition mpt.h:275
PrettyAmount mpt(std::int64_t amount) const
Definition mpt.cpp:530
bool checkTransferFee(std::uint16_t transferFee) const
Definition mpt.cpp:452
static Json::Value setJV(MPTSet const &set={})
Definition mpt.cpp:292
bool checkDomainID(std::optional< uint256 > expected) const
Definition mpt.cpp:408
PrettyAmount operator()(std::int64_t amount) const
Definition mpt.cpp:583
std::uint32_t getFlags(std::optional< Account > const &holder) const
Definition mpt.cpp:563
static std::unordered_map< std::string, Account > makeHolders(std::vector< Account > const &holders)
Definition mpt.cpp:29
bool checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const
Definition mpt.cpp:424
Converts to MPT Issue or STAmount.
Match set account flags.
Definition flags.h:108
Account const & account_
Definition mpt.h:41
MPTTester const & tester_
Definition mpt.h:40
std::int64_t const amount_
Definition mpt.h:42
mptbalance(MPTTester &tester, Account const &account, std::int64_t amount)
Definition mpt.h:45
void operator()(Env &env) const
Definition mpt.cpp:17
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:11
Match the number of items in the account's owner directory.
Definition owners.h:48
std::function< bool()> cb_
Definition mpt.h:57
requireAny(std::function< bool()> const &cb)
Definition mpt.h:60
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:15
Set the flags on a JTx.
Definition txflags.h:11
T is_same_v
static MPTInit const mptInitNoFund
Definition mpt.h:103
std::vector< Account > Holders
Definition mpt.h:68
XRP_t const XRP
Converts to XRP Issue or STAmount.
Definition amount.cpp:90
auto const amount
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
constexpr std::uint32_t const tfMPTCanTransfer
Definition TxFlags.h:132
constexpr std::uint32_t const tfMPTCanTrade
Definition TxFlags.h:131
@ tesSUCCESS
Definition TER.h:225
std::optional< std::uint32_t > ownerCount
Definition mpt.h:135
std::optional< std::uint32_t > holderCount
Definition mpt.h:136
std::optional< Account > holder
Definition mpt.h:133
std::optional< Account > account
Definition mpt.h:132
std::optional< TER > err
Definition mpt.h:138
std::optional< std::uint8_t > assetScale
Definition mpt.h:75
static std::vector< Account > AllHolders
Definition mpt.h:72
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:87
std::optional< std::uint32_t > holderCount
Definition mpt.h:79
std::optional< std::string > metadata
Definition mpt.h:77
std::optional< uint256 > domainID
Definition mpt.h:89
std::optional< TER > err
Definition mpt.h:90
std::optional< std::uint64_t > maxAmt
Definition mpt.h:74
std::optional< std::uint32_t > ownerCount
Definition mpt.h:78
std::optional< Account > issuer
Definition mpt.h:73
std::optional< std::pair< std::vector< Account >, std::uint64_t > > pay
Definition mpt.h:85
std::optional< std::uint16_t > transferFee
Definition mpt.h:76
std::optional< std::vector< Account > > authorize
Definition mpt.h:82
std::optional< Account > issuer
Definition mpt.h:122
std::optional< std::uint32_t > holderCount
Definition mpt.h:125
std::optional< std::uint32_t > ownerCount
Definition mpt.h:124
std::optional< TER > err
Definition mpt.h:127
std::uint16_t transferFee
Definition mpt.h:110
std::optional< TER > err
Definition mpt.h:117
std::optional< std::uint64_t > maxAmt
Definition mpt.h:116
std::optional< std::uint64_t > pay
Definition mpt.h:111
std::optional< MPTCreate > create
Definition mpt.h:101
PrettyAmount const xrp
Definition mpt.h:96
PrettyAmount const xrpHolders
Definition mpt.h:97
std::optional< uint256 > domainID
Definition mpt.h:153
std::optional< Account > account
Definition mpt.h:143
std::optional< std::uint32_t > holderCount
Definition mpt.h:147
std::optional< TER > err
Definition mpt.h:154
std::optional< std::uint16_t > transferFee
Definition mpt.h:150
std::optional< std::variant< Account, AccountID > > holder
Definition mpt.h:144
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:149
std::optional< std::string > metadata
Definition mpt.h:151
std::optional< std::uint32_t > ownerCount
Definition mpt.h:146
std::optional< Account > delegate
Definition mpt.h:152
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...