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 ripple {
12namespace test {
13namespace jtx {
14
15class MPTTester;
16
17// Check flags settings on MPT create
19{
20private:
24
25public:
27 MPTTester& tester,
30 : tester_(tester), flags_(flags), holder_(holder)
31 {
32 }
33
34 void
35 operator()(Env& env) const;
36};
37
38// Check mptissuance or mptoken amount balances on payment
40{
41private:
45
46public:
47 mptbalance(MPTTester& tester, Account const& account, std::int64_t amount)
48 : tester_(tester), account_(account), amount_(amount)
49 {
50 }
51
52 void
53 operator()(Env& env) const;
54};
55
57{
58private:
60
61public:
62 requireAny(std::function<bool()> const& cb) : cb_(cb)
63 {
64 }
65
66 void
67 operator()(Env& env) const;
68};
69
70struct MPTInit
71{
73 PrettyAmount const xrp = XRP(10'000);
74 PrettyAmount const xrpHolders = XRP(10'000);
75 bool fund = true;
76 bool close = true;
77};
78static MPTInit const mptInitNoFund{.fund = false};
79
94
104
115
131
133{
138 bool close_;
139
140public:
141 MPTTester(Env& env, Account const& issuer, MPTInit const& constr = {});
142
143 void
144 create(MPTCreate const& arg = MPTCreate{});
145
146 void
147 destroy(MPTDestroy const& arg = MPTDestroy{});
148
149 void
150 authorize(MPTAuthorize const& arg = MPTAuthorize{});
151
152 void
153 set(MPTSet const& set = {});
154
155 [[nodiscard]] bool
157
158 [[nodiscard]] bool
159 checkMPTokenAmount(Account const& holder, std::int64_t expectedAmount)
160 const;
161
162 [[nodiscard]] bool
163 checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const;
164
165 [[nodiscard]] bool
167 uint32_t const expectedFlags,
169
170 [[nodiscard]] bool
171 checkMetadata(std::string const& metadata) const;
172
173 [[nodiscard]] bool
174 isMetadataPresent() const;
175
176 [[nodiscard]] bool
177 checkTransferFee(std::uint16_t transferFee) const;
178
179 [[nodiscard]] bool
180 isTransferFeePresent() const;
181
182 Account const&
183 issuer() const
184 {
185 return issuer_;
186 }
187 Account const&
188 holder(std::string const& h) const;
189
190 void
191 pay(Account const& src,
192 Account const& dest,
193 std::int64_t amount,
196
197 void
198 claw(
199 Account const& issuer,
200 Account const& holder,
201 std::int64_t amount,
203
205 mpt(std::int64_t amount) const;
206
207 MPTID const&
209 {
210 if (!env_.test.BEAST_EXPECT(id_))
211 Throw<std::logic_error>("Uninitialized issuanceID");
212 return *id_;
213 }
214
216 getBalance(Account const& account) const;
217
218 MPT
219 operator[](std::string const& name) const;
220
221private:
223 bool
224 forObject(
225 std::function<bool(SLEP const& sle)> const& cb,
227
228 template <typename A>
229 TER
230 submit(A const& arg, Json::Value const& jv)
231 {
232 env_(
233 jv,
234 txflags(arg.flags.value_or(0)),
235 ter(arg.err.value_or(tesSUCCESS)));
236 auto const err = env_.ter();
237 if (close_)
238 env_.close();
239 if (arg.ownerCount)
240 env_.require(owners(issuer_, *arg.ownerCount));
241 if (arg.holderCount)
242 {
243 for (auto it : holders_)
244 env_.require(owners(it.second, *arg.holderCount));
245 }
246 return err;
247 }
248
250 makeHolders(std::vector<Account> const& holders);
251
254};
255
256} // namespace jtx
257} // namespace test
258} // namespace ripple
259
260#endif
Represents a JSON value.
Definition json_value.h:130
Immutable cryptographic account descriptor.
Definition Account.h:20
A transaction testing environment.
Definition Env.h:102
void require(Args const &... args)
Check a set of requirements.
Definition Env.h:528
TER ter() const
Return the TER for the last JTx.
Definition Env.h:579
beast::unit_test::suite & test
Definition Env.h:104
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition Env.cpp:103
bool checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const
Definition mpt.cpp:324
void authorize(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:131
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:377
static std::unordered_map< std::string, Account > makeHolders(std::vector< Account > const &holders)
Definition mpt.cpp:29
Account const & issuer_
Definition mpt.h:135
bool isMetadataPresent() const
Definition mpt.cpp:351
bool checkTransferFee(std::uint16_t transferFee) const
Definition mpt.cpp:359
MPTID const & issuanceID() const
Definition mpt.h:208
TER submit(A const &arg, Json::Value const &jv)
Definition mpt.h:230
void claw(Account const &issuer, Account const &holder, std::int64_t amount, std::optional< TER > err=std::nullopt)
Definition mpt.cpp:428
PrettyAmount mpt(std::int64_t amount) const
Definition mpt.cpp:451
MPT operator[](std::string const &name) const
Definition mpt.cpp:491
bool checkFlags(uint32_t const expectedFlags, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:332
Account const & holder(std::string const &h) const
Definition mpt.cpp:122
Account const & issuer() const
Definition mpt.h:183
bool checkMetadata(std::string const &metadata) const
Definition mpt.cpp:340
bool forObject(std::function< bool(SLEP const &sle)> const &cb, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:290
bool isTransferFeePresent() const
Definition mpt.cpp:369
std::optional< MPTID > id_
Definition mpt.h:137
std::int64_t getBalance(Account const &account) const
Definition mpt.cpp:459
std::unordered_map< std::string, Account > const holders_
Definition mpt.h:136
bool checkDomainID(std::optional< uint256 > expected) const
Definition mpt.cpp:304
std::uint32_t getFlags(std::optional< Account > const &holder) const
Definition mpt.cpp:477
bool checkMPTokenAmount(Account const &holder, std::int64_t expectedAmount) const
Definition mpt.cpp:314
void create(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:68
Converts to MPT Issue or STAmount.
Match set account flags.
Definition flags.h:109
mptbalance(MPTTester &tester, Account const &account, std::int64_t amount)
Definition mpt.h:47
void operator()(Env &env) const
Definition mpt.cpp:17
Account const & account_
Definition mpt.h:43
std::int64_t const amount_
Definition mpt.h:44
MPTTester const & tester_
Definition mpt.h:42
mptflags(MPTTester &tester, std::uint32_t flags, std::optional< Account > const &holder=std::nullopt)
Definition mpt.h:26
std::uint32_t flags_
Definition mpt.h:22
MPTTester & tester_
Definition mpt.h:21
void operator()(Env &env) const
Definition mpt.cpp:11
std::optional< Account > holder_
Definition mpt.h:23
Match the number of items in the account's owner directory.
Definition owners.h:54
void operator()(Env &env) const
Definition mpt.cpp:23
requireAny(std::function< bool()> const &cb)
Definition mpt.h:62
std::function< bool()> cb_
Definition mpt.h:59
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:78
XRP_t const XRP
Converts to XRP Issue or STAmount.
Definition amount.cpp:92
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
@ tesSUCCESS
Definition TER.h:226
std::optional< TER > err
Definition mpt.h:113
std::optional< std::uint32_t > ownerCount
Definition mpt.h:110
std::optional< Account > holder
Definition mpt.h:108
std::optional< std::uint32_t > holderCount
Definition mpt.h:111
std::optional< Account > account
Definition mpt.h:107
std::optional< std::uint8_t > assetScale
Definition mpt.h:83
std::optional< std::uint16_t > transferFee
Definition mpt.h:84
std::optional< uint256 > domainID
Definition mpt.h:91
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:90
std::optional< std::string > metadata
Definition mpt.h:85
std::optional< std::uint32_t > ownerCount
Definition mpt.h:86
std::optional< TER > err
Definition mpt.h:92
std::optional< std::uint64_t > maxAmt
Definition mpt.h:82
std::optional< std::uint32_t > holderCount
Definition mpt.h:87
std::optional< Account > issuer
Definition mpt.h:97
std::optional< std::uint32_t > holderCount
Definition mpt.h:100
std::optional< TER > err
Definition mpt.h:102
std::optional< std::uint32_t > ownerCount
Definition mpt.h:99
std::vector< Account > holders
Definition mpt.h:72
PrettyAmount const xrpHolders
Definition mpt.h:74
PrettyAmount const xrp
Definition mpt.h:73
std::optional< std::uint16_t > transferFee
Definition mpt.h:125
std::optional< std::uint32_t > ownerCount
Definition mpt.h:121
std::optional< Account > account
Definition mpt.h:118
std::optional< std::string > metadata
Definition mpt.h:126
std::optional< uint256 > domainID
Definition mpt.h:128
std::optional< std::uint32_t > mutableFlags
Definition mpt.h:124
std::optional< std::uint32_t > holderCount
Definition mpt.h:122
std::optional< TER > err
Definition mpt.h:129
std::optional< Account > holder
Definition mpt.h:119
std::optional< Account > delegate
Definition mpt.h:127
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...