xrpld
Loading...
Searching...
No Matches
MPTokenIssuanceTests.cpp
1// Auto-generated unit tests for ledger entry MPTokenIssuance
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/STLedgerEntry.h>
9#include <xrpl/protocol_autogen/ledger_entries/MPTokenIssuance.h>
10#include <xrpl/protocol_autogen/ledger_entries/Ticket.h>
11
12#include <string>
13
14namespace xrpl::ledger_entries {
15
16// 1 & 4) Set fields via builder setters, build, then read them back via
17// wrapper getters. After build(), validate() should succeed for both the
18// builder's STObject and the wrapper's SLE.
19TEST(MPTokenIssuanceTests, BuilderSettersRoundTrip)
20{
21 UInt256 const index{1u};
22
23 auto const issuerValue = canonical_ACCOUNT();
24 auto const sequenceValue = canonical_UINT32();
25 auto const transferFeeValue = canonical_UINT16();
26 auto const ownerNodeValue = canonical_UINT64();
27 auto const assetScaleValue = canonical_UINT8();
28 auto const maximumAmountValue = canonical_UINT64();
29 auto const outstandingAmountValue = canonical_UINT64();
30 auto const lockedAmountValue = canonical_UINT64();
31 auto const mPTokenMetadataValue = canonical_VL();
32 auto const previousTxnIDValue = canonical_UINT256();
33 auto const previousTxnLgrSeqValue = canonical_UINT32();
34 auto const domainIDValue = canonical_UINT256();
35 auto const immutableFlagsValue = canonical_UINT32();
36 auto const referenceHoldingValue = canonical_UINT256();
37 auto const issuerEncryptionKeyValue = canonical_VL();
38 auto const auditorEncryptionKeyValue = canonical_VL();
39 auto const issuerKeyEpochValue = canonical_UINT32();
40 auto const auditorKeyEpochValue = canonical_UINT32();
41 auto const confidentialOutstandingAmountValue = canonical_UINT64();
42
44 issuerValue,
45 sequenceValue,
46 ownerNodeValue,
47 outstandingAmountValue,
48 previousTxnIDValue,
49 previousTxnLgrSeqValue
50 };
51
52 builder.setTransferFee(transferFeeValue);
53 builder.setAssetScale(assetScaleValue);
54 builder.setMaximumAmount(maximumAmountValue);
55 builder.setLockedAmount(lockedAmountValue);
56 builder.setMPTokenMetadata(mPTokenMetadataValue);
57 builder.setDomainID(domainIDValue);
58 builder.setImmutableFlags(immutableFlagsValue);
59 builder.setReferenceHolding(referenceHoldingValue);
60 builder.setIssuerEncryptionKey(issuerEncryptionKeyValue);
61 builder.setAuditorEncryptionKey(auditorEncryptionKeyValue);
62 builder.setIssuerKeyEpoch(issuerKeyEpochValue);
63 builder.setAuditorKeyEpoch(auditorKeyEpochValue);
64 builder.setConfidentialOutstandingAmount(confidentialOutstandingAmountValue);
65
66 builder.setLedgerIndex(index);
67 builder.setFlags(0x1u);
68
69 EXPECT_TRUE(builder.validate());
70
71 auto const entry = builder.build(index);
72
73 EXPECT_TRUE(entry.validate());
74
75 {
76 auto const& expected = issuerValue;
77 auto const actual = entry.getIssuer();
78 expectEqualField(expected, actual, "sfIssuer");
79 }
80
81 {
82 auto const& expected = sequenceValue;
83 auto const actual = entry.getSequence();
84 expectEqualField(expected, actual, "sfSequence");
85 }
86
87 {
88 auto const& expected = ownerNodeValue;
89 auto const actual = entry.getOwnerNode();
90 expectEqualField(expected, actual, "sfOwnerNode");
91 }
92
93 {
94 auto const& expected = outstandingAmountValue;
95 auto const actual = entry.getOutstandingAmount();
96 expectEqualField(expected, actual, "sfOutstandingAmount");
97 }
98
99 {
100 auto const& expected = previousTxnIDValue;
101 auto const actual = entry.getPreviousTxnID();
102 expectEqualField(expected, actual, "sfPreviousTxnID");
103 }
104
105 {
106 auto const& expected = previousTxnLgrSeqValue;
107 auto const actual = entry.getPreviousTxnLgrSeq();
108 expectEqualField(expected, actual, "sfPreviousTxnLgrSeq");
109 }
110
111 {
112 auto const& expected = transferFeeValue;
113 auto const actualOpt = entry.getTransferFee();
114 ASSERT_TRUE(actualOpt.has_value());
115 expectEqualField(expected, *actualOpt, "sfTransferFee");
116 EXPECT_TRUE(entry.hasTransferFee());
117 }
118
119 {
120 auto const& expected = assetScaleValue;
121 auto const actualOpt = entry.getAssetScale();
122 ASSERT_TRUE(actualOpt.has_value());
123 expectEqualField(expected, *actualOpt, "sfAssetScale");
124 EXPECT_TRUE(entry.hasAssetScale());
125 }
126
127 {
128 auto const& expected = maximumAmountValue;
129 auto const actualOpt = entry.getMaximumAmount();
130 ASSERT_TRUE(actualOpt.has_value());
131 expectEqualField(expected, *actualOpt, "sfMaximumAmount");
132 EXPECT_TRUE(entry.hasMaximumAmount());
133 }
134
135 {
136 auto const& expected = lockedAmountValue;
137 auto const actualOpt = entry.getLockedAmount();
138 ASSERT_TRUE(actualOpt.has_value());
139 expectEqualField(expected, *actualOpt, "sfLockedAmount");
140 EXPECT_TRUE(entry.hasLockedAmount());
141 }
142
143 {
144 auto const& expected = mPTokenMetadataValue;
145 auto const actualOpt = entry.getMPTokenMetadata();
146 ASSERT_TRUE(actualOpt.has_value());
147 expectEqualField(expected, *actualOpt, "sfMPTokenMetadata");
148 EXPECT_TRUE(entry.hasMPTokenMetadata());
149 }
150
151 {
152 auto const& expected = domainIDValue;
153 auto const actualOpt = entry.getDomainID();
154 ASSERT_TRUE(actualOpt.has_value());
155 expectEqualField(expected, *actualOpt, "sfDomainID");
156 EXPECT_TRUE(entry.hasDomainID());
157 }
158
159 {
160 auto const& expected = immutableFlagsValue;
161 auto const actualOpt = entry.getImmutableFlags();
162 ASSERT_TRUE(actualOpt.has_value());
163 expectEqualField(expected, *actualOpt, "sfImmutableFlags");
164 EXPECT_TRUE(entry.hasImmutableFlags());
165 }
166
167 {
168 auto const& expected = referenceHoldingValue;
169 auto const actualOpt = entry.getReferenceHolding();
170 ASSERT_TRUE(actualOpt.has_value());
171 expectEqualField(expected, *actualOpt, "sfReferenceHolding");
172 EXPECT_TRUE(entry.hasReferenceHolding());
173 }
174
175 {
176 auto const& expected = issuerEncryptionKeyValue;
177 auto const actualOpt = entry.getIssuerEncryptionKey();
178 ASSERT_TRUE(actualOpt.has_value());
179 expectEqualField(expected, *actualOpt, "sfIssuerEncryptionKey");
180 EXPECT_TRUE(entry.hasIssuerEncryptionKey());
181 }
182
183 {
184 auto const& expected = auditorEncryptionKeyValue;
185 auto const actualOpt = entry.getAuditorEncryptionKey();
186 ASSERT_TRUE(actualOpt.has_value());
187 expectEqualField(expected, *actualOpt, "sfAuditorEncryptionKey");
188 EXPECT_TRUE(entry.hasAuditorEncryptionKey());
189 }
190
191 {
192 auto const& expected = issuerKeyEpochValue;
193 auto const actualOpt = entry.getIssuerKeyEpoch();
194 ASSERT_TRUE(actualOpt.has_value());
195 expectEqualField(expected, *actualOpt, "sfIssuerKeyEpoch");
196 EXPECT_TRUE(entry.hasIssuerKeyEpoch());
197 }
198
199 {
200 auto const& expected = auditorKeyEpochValue;
201 auto const actualOpt = entry.getAuditorKeyEpoch();
202 ASSERT_TRUE(actualOpt.has_value());
203 expectEqualField(expected, *actualOpt, "sfAuditorKeyEpoch");
204 EXPECT_TRUE(entry.hasAuditorKeyEpoch());
205 }
206
207 {
208 auto const& expected = confidentialOutstandingAmountValue;
209 auto const actualOpt = entry.getConfidentialOutstandingAmount();
210 ASSERT_TRUE(actualOpt.has_value());
211 expectEqualField(expected, *actualOpt, "sfConfidentialOutstandingAmount");
212 EXPECT_TRUE(entry.hasConfidentialOutstandingAmount());
213 }
214
215 EXPECT_TRUE(entry.hasLedgerIndex());
216 auto const ledgerIndex = entry.getLedgerIndex();
217 ASSERT_TRUE(ledgerIndex.has_value());
218 EXPECT_EQ(*ledgerIndex, index);
219 EXPECT_EQ(entry.getKey(), index);
220}
221
222// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
223// from that SLE, build a new wrapper, and verify all fields (and validate()).
224TEST(MPTokenIssuanceTests, BuilderFromSleRoundTrip)
225{
226 UInt256 const index{2u};
227
228 auto const issuerValue = canonical_ACCOUNT();
229 auto const sequenceValue = canonical_UINT32();
230 auto const transferFeeValue = canonical_UINT16();
231 auto const ownerNodeValue = canonical_UINT64();
232 auto const assetScaleValue = canonical_UINT8();
233 auto const maximumAmountValue = canonical_UINT64();
234 auto const outstandingAmountValue = canonical_UINT64();
235 auto const lockedAmountValue = canonical_UINT64();
236 auto const mPTokenMetadataValue = canonical_VL();
237 auto const previousTxnIDValue = canonical_UINT256();
238 auto const previousTxnLgrSeqValue = canonical_UINT32();
239 auto const domainIDValue = canonical_UINT256();
240 auto const immutableFlagsValue = canonical_UINT32();
241 auto const referenceHoldingValue = canonical_UINT256();
242 auto const issuerEncryptionKeyValue = canonical_VL();
243 auto const auditorEncryptionKeyValue = canonical_VL();
244 auto const issuerKeyEpochValue = canonical_UINT32();
245 auto const auditorKeyEpochValue = canonical_UINT32();
246 auto const confidentialOutstandingAmountValue = canonical_UINT64();
247
249
250 sle->at(sfIssuer) = issuerValue;
251 sle->at(sfSequence) = sequenceValue;
252 sle->at(sfTransferFee) = transferFeeValue;
253 sle->at(sfOwnerNode) = ownerNodeValue;
254 sle->at(sfAssetScale) = assetScaleValue;
255 sle->at(sfMaximumAmount) = maximumAmountValue;
256 sle->at(sfOutstandingAmount) = outstandingAmountValue;
257 sle->at(sfLockedAmount) = lockedAmountValue;
258 sle->at(sfMPTokenMetadata) = mPTokenMetadataValue;
259 sle->at(sfPreviousTxnID) = previousTxnIDValue;
260 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
261 sle->at(sfDomainID) = domainIDValue;
262 sle->at(sfImmutableFlags) = immutableFlagsValue;
263 sle->at(sfReferenceHolding) = referenceHoldingValue;
264 sle->at(sfIssuerEncryptionKey) = issuerEncryptionKeyValue;
265 sle->at(sfAuditorEncryptionKey) = auditorEncryptionKeyValue;
266 sle->at(sfIssuerKeyEpoch) = issuerKeyEpochValue;
267 sle->at(sfAuditorKeyEpoch) = auditorKeyEpochValue;
268 sle->at(sfConfidentialOutstandingAmount) = confidentialOutstandingAmountValue;
269
270 MPTokenIssuanceBuilder builderFromSle{sle};
271 EXPECT_TRUE(builderFromSle.validate());
272
273 auto const entryFromBuilder = builderFromSle.build(index);
274
275 MPTokenIssuance entryFromSle{sle};
276 EXPECT_TRUE(entryFromBuilder.validate());
277 EXPECT_TRUE(entryFromSle.validate());
278
279 {
280 auto const& expected = issuerValue;
281
282 auto const fromSle = entryFromSle.getIssuer();
283 auto const fromBuilder = entryFromBuilder.getIssuer();
284
285 expectEqualField(expected, fromSle, "sfIssuer");
286 expectEqualField(expected, fromBuilder, "sfIssuer");
287 }
288
289 {
290 auto const& expected = sequenceValue;
291
292 auto const fromSle = entryFromSle.getSequence();
293 auto const fromBuilder = entryFromBuilder.getSequence();
294
295 expectEqualField(expected, fromSle, "sfSequence");
296 expectEqualField(expected, fromBuilder, "sfSequence");
297 }
298
299 {
300 auto const& expected = ownerNodeValue;
301
302 auto const fromSle = entryFromSle.getOwnerNode();
303 auto const fromBuilder = entryFromBuilder.getOwnerNode();
304
305 expectEqualField(expected, fromSle, "sfOwnerNode");
306 expectEqualField(expected, fromBuilder, "sfOwnerNode");
307 }
308
309 {
310 auto const& expected = outstandingAmountValue;
311
312 auto const fromSle = entryFromSle.getOutstandingAmount();
313 auto const fromBuilder = entryFromBuilder.getOutstandingAmount();
314
315 expectEqualField(expected, fromSle, "sfOutstandingAmount");
316 expectEqualField(expected, fromBuilder, "sfOutstandingAmount");
317 }
318
319 {
320 auto const& expected = previousTxnIDValue;
321
322 auto const fromSle = entryFromSle.getPreviousTxnID();
323 auto const fromBuilder = entryFromBuilder.getPreviousTxnID();
324
325 expectEqualField(expected, fromSle, "sfPreviousTxnID");
326 expectEqualField(expected, fromBuilder, "sfPreviousTxnID");
327 }
328
329 {
330 auto const& expected = previousTxnLgrSeqValue;
331
332 auto const fromSle = entryFromSle.getPreviousTxnLgrSeq();
333 auto const fromBuilder = entryFromBuilder.getPreviousTxnLgrSeq();
334
335 expectEqualField(expected, fromSle, "sfPreviousTxnLgrSeq");
336 expectEqualField(expected, fromBuilder, "sfPreviousTxnLgrSeq");
337 }
338
339 {
340 auto const& expected = transferFeeValue;
341
342 auto const fromSleOpt = entryFromSle.getTransferFee();
343 auto const fromBuilderOpt = entryFromBuilder.getTransferFee();
344
345 ASSERT_TRUE(fromSleOpt.has_value());
346 ASSERT_TRUE(fromBuilderOpt.has_value());
347
348 expectEqualField(expected, *fromSleOpt, "sfTransferFee");
349 expectEqualField(expected, *fromBuilderOpt, "sfTransferFee");
350 }
351
352 {
353 auto const& expected = assetScaleValue;
354
355 auto const fromSleOpt = entryFromSle.getAssetScale();
356 auto const fromBuilderOpt = entryFromBuilder.getAssetScale();
357
358 ASSERT_TRUE(fromSleOpt.has_value());
359 ASSERT_TRUE(fromBuilderOpt.has_value());
360
361 expectEqualField(expected, *fromSleOpt, "sfAssetScale");
362 expectEqualField(expected, *fromBuilderOpt, "sfAssetScale");
363 }
364
365 {
366 auto const& expected = maximumAmountValue;
367
368 auto const fromSleOpt = entryFromSle.getMaximumAmount();
369 auto const fromBuilderOpt = entryFromBuilder.getMaximumAmount();
370
371 ASSERT_TRUE(fromSleOpt.has_value());
372 ASSERT_TRUE(fromBuilderOpt.has_value());
373
374 expectEqualField(expected, *fromSleOpt, "sfMaximumAmount");
375 expectEqualField(expected, *fromBuilderOpt, "sfMaximumAmount");
376 }
377
378 {
379 auto const& expected = lockedAmountValue;
380
381 auto const fromSleOpt = entryFromSle.getLockedAmount();
382 auto const fromBuilderOpt = entryFromBuilder.getLockedAmount();
383
384 ASSERT_TRUE(fromSleOpt.has_value());
385 ASSERT_TRUE(fromBuilderOpt.has_value());
386
387 expectEqualField(expected, *fromSleOpt, "sfLockedAmount");
388 expectEqualField(expected, *fromBuilderOpt, "sfLockedAmount");
389 }
390
391 {
392 auto const& expected = mPTokenMetadataValue;
393
394 auto const fromSleOpt = entryFromSle.getMPTokenMetadata();
395 auto const fromBuilderOpt = entryFromBuilder.getMPTokenMetadata();
396
397 ASSERT_TRUE(fromSleOpt.has_value());
398 ASSERT_TRUE(fromBuilderOpt.has_value());
399
400 expectEqualField(expected, *fromSleOpt, "sfMPTokenMetadata");
401 expectEqualField(expected, *fromBuilderOpt, "sfMPTokenMetadata");
402 }
403
404 {
405 auto const& expected = domainIDValue;
406
407 auto const fromSleOpt = entryFromSle.getDomainID();
408 auto const fromBuilderOpt = entryFromBuilder.getDomainID();
409
410 ASSERT_TRUE(fromSleOpt.has_value());
411 ASSERT_TRUE(fromBuilderOpt.has_value());
412
413 expectEqualField(expected, *fromSleOpt, "sfDomainID");
414 expectEqualField(expected, *fromBuilderOpt, "sfDomainID");
415 }
416
417 {
418 auto const& expected = immutableFlagsValue;
419
420 auto const fromSleOpt = entryFromSle.getImmutableFlags();
421 auto const fromBuilderOpt = entryFromBuilder.getImmutableFlags();
422
423 ASSERT_TRUE(fromSleOpt.has_value());
424 ASSERT_TRUE(fromBuilderOpt.has_value());
425
426 expectEqualField(expected, *fromSleOpt, "sfImmutableFlags");
427 expectEqualField(expected, *fromBuilderOpt, "sfImmutableFlags");
428 }
429
430 {
431 auto const& expected = referenceHoldingValue;
432
433 auto const fromSleOpt = entryFromSle.getReferenceHolding();
434 auto const fromBuilderOpt = entryFromBuilder.getReferenceHolding();
435
436 ASSERT_TRUE(fromSleOpt.has_value());
437 ASSERT_TRUE(fromBuilderOpt.has_value());
438
439 expectEqualField(expected, *fromSleOpt, "sfReferenceHolding");
440 expectEqualField(expected, *fromBuilderOpt, "sfReferenceHolding");
441 }
442
443 {
444 auto const& expected = issuerEncryptionKeyValue;
445
446 auto const fromSleOpt = entryFromSle.getIssuerEncryptionKey();
447 auto const fromBuilderOpt = entryFromBuilder.getIssuerEncryptionKey();
448
449 ASSERT_TRUE(fromSleOpt.has_value());
450 ASSERT_TRUE(fromBuilderOpt.has_value());
451
452 expectEqualField(expected, *fromSleOpt, "sfIssuerEncryptionKey");
453 expectEqualField(expected, *fromBuilderOpt, "sfIssuerEncryptionKey");
454 }
455
456 {
457 auto const& expected = auditorEncryptionKeyValue;
458
459 auto const fromSleOpt = entryFromSle.getAuditorEncryptionKey();
460 auto const fromBuilderOpt = entryFromBuilder.getAuditorEncryptionKey();
461
462 ASSERT_TRUE(fromSleOpt.has_value());
463 ASSERT_TRUE(fromBuilderOpt.has_value());
464
465 expectEqualField(expected, *fromSleOpt, "sfAuditorEncryptionKey");
466 expectEqualField(expected, *fromBuilderOpt, "sfAuditorEncryptionKey");
467 }
468
469 {
470 auto const& expected = issuerKeyEpochValue;
471
472 auto const fromSleOpt = entryFromSle.getIssuerKeyEpoch();
473 auto const fromBuilderOpt = entryFromBuilder.getIssuerKeyEpoch();
474
475 ASSERT_TRUE(fromSleOpt.has_value());
476 ASSERT_TRUE(fromBuilderOpt.has_value());
477
478 expectEqualField(expected, *fromSleOpt, "sfIssuerKeyEpoch");
479 expectEqualField(expected, *fromBuilderOpt, "sfIssuerKeyEpoch");
480 }
481
482 {
483 auto const& expected = auditorKeyEpochValue;
484
485 auto const fromSleOpt = entryFromSle.getAuditorKeyEpoch();
486 auto const fromBuilderOpt = entryFromBuilder.getAuditorKeyEpoch();
487
488 ASSERT_TRUE(fromSleOpt.has_value());
489 ASSERT_TRUE(fromBuilderOpt.has_value());
490
491 expectEqualField(expected, *fromSleOpt, "sfAuditorKeyEpoch");
492 expectEqualField(expected, *fromBuilderOpt, "sfAuditorKeyEpoch");
493 }
494
495 {
496 auto const& expected = confidentialOutstandingAmountValue;
497
498 auto const fromSleOpt = entryFromSle.getConfidentialOutstandingAmount();
499 auto const fromBuilderOpt = entryFromBuilder.getConfidentialOutstandingAmount();
500
501 ASSERT_TRUE(fromSleOpt.has_value());
502 ASSERT_TRUE(fromBuilderOpt.has_value());
503
504 expectEqualField(expected, *fromSleOpt, "sfConfidentialOutstandingAmount");
505 expectEqualField(expected, *fromBuilderOpt, "sfConfidentialOutstandingAmount");
506 }
507
508 EXPECT_EQ(entryFromSle.getKey(), index);
509 EXPECT_EQ(entryFromBuilder.getKey(), index);
510}
511
512// 3) Verify wrapper throws when constructed from wrong ledger entry type.
513TEST(MPTokenIssuanceTests, WrapperThrowsOnWrongEntryType)
514{
515 UInt256 const index{3u};
516
517 // Build a valid ledger entry of a different type
518 // Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
519 // Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
520 TicketBuilder wrongBuilder{
526 auto wrongEntry = wrongBuilder.build(index);
527
528 EXPECT_THROW(MPTokenIssuance{wrongEntry.getSle()}, std::runtime_error);
529}
530
531// 4) Verify builder throws when constructed from wrong ledger entry type.
532TEST(MPTokenIssuanceTests, BuilderThrowsOnWrongEntryType)
533{
534 UInt256 const index{4u};
535
536 // Build a valid ledger entry of a different type
537 TicketBuilder wrongBuilder{
543 auto wrongEntry = wrongBuilder.build(index);
544
545 EXPECT_THROW(MPTokenIssuanceBuilder{wrongEntry.getSle()}, std::runtime_error);
546}
547
548// 5) Build with only required fields and verify optional fields return nullopt.
549TEST(MPTokenIssuanceTests, OptionalFieldsReturnNullopt)
550{
551 UInt256 const index{3u};
552
553 auto const issuerValue = canonical_ACCOUNT();
554 auto const sequenceValue = canonical_UINT32();
555 auto const ownerNodeValue = canonical_UINT64();
556 auto const outstandingAmountValue = canonical_UINT64();
557 auto const previousTxnIDValue = canonical_UINT256();
558 auto const previousTxnLgrSeqValue = canonical_UINT32();
559
561 issuerValue,
562 sequenceValue,
563 ownerNodeValue,
564 outstandingAmountValue,
565 previousTxnIDValue,
566 previousTxnLgrSeqValue
567 };
568
569 auto const entry = builder.build(index);
570
571 // Verify optional fields are not present
572 EXPECT_FALSE(entry.hasTransferFee());
573 EXPECT_FALSE(entry.getTransferFee().has_value());
574 EXPECT_FALSE(entry.hasAssetScale());
575 EXPECT_FALSE(entry.getAssetScale().has_value());
576 EXPECT_FALSE(entry.hasMaximumAmount());
577 EXPECT_FALSE(entry.getMaximumAmount().has_value());
578 EXPECT_FALSE(entry.hasLockedAmount());
579 EXPECT_FALSE(entry.getLockedAmount().has_value());
580 EXPECT_FALSE(entry.hasMPTokenMetadata());
581 EXPECT_FALSE(entry.getMPTokenMetadata().has_value());
582 EXPECT_FALSE(entry.hasDomainID());
583 EXPECT_FALSE(entry.getDomainID().has_value());
584 EXPECT_FALSE(entry.hasImmutableFlags());
585 EXPECT_FALSE(entry.getImmutableFlags().has_value());
586 EXPECT_FALSE(entry.hasReferenceHolding());
587 EXPECT_FALSE(entry.getReferenceHolding().has_value());
588 EXPECT_FALSE(entry.hasIssuerEncryptionKey());
589 EXPECT_FALSE(entry.getIssuerEncryptionKey().has_value());
590 EXPECT_FALSE(entry.hasAuditorEncryptionKey());
591 EXPECT_FALSE(entry.getAuditorEncryptionKey().has_value());
592 EXPECT_FALSE(entry.hasIssuerKeyEpoch());
593 EXPECT_FALSE(entry.getIssuerKeyEpoch().has_value());
594 EXPECT_FALSE(entry.hasAuditorKeyEpoch());
595 EXPECT_FALSE(entry.getAuditorKeyEpoch().has_value());
596 EXPECT_FALSE(entry.hasConfidentialOutstandingAmount());
597 EXPECT_FALSE(entry.getConfidentialOutstandingAmount().has_value());
598}
599}
UInt256 const & getKey() const
Get the key (index) of this ledger entry.
bool validate() const
Validate the ledger entry.
Derived & setLedgerIndex(UInt256 const &value)
Set the ledger index.
Derived & setFlags(uint32_t value)
Set the flags.
bool validate() const
Validate the ledger entry.
Builder for MPTokenIssuance ledger entries.
MPTokenIssuanceBuilder & setImmutableFlags(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfImmutableFlags (SoeDefault).
MPTokenIssuanceBuilder & setIssuerEncryptionKey(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfIssuerEncryptionKey (SoeOptional).
MPTokenIssuanceBuilder & setAuditorEncryptionKey(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfAuditorEncryptionKey (SoeOptional).
MPTokenIssuanceBuilder & setLockedAmount(std::decay_t< typename SF_UINT64::type::value_type > const &value)
Set sfLockedAmount (SoeOptional).
MPTokenIssuanceBuilder & setMaximumAmount(std::decay_t< typename SF_UINT64::type::value_type > const &value)
Set sfMaximumAmount (SoeOptional).
MPTokenIssuanceBuilder & setDomainID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfDomainID (SoeOptional).
MPTokenIssuanceBuilder & setTransferFee(std::decay_t< typename SF_UINT16::type::value_type > const &value)
Set sfTransferFee (SoeDefault).
MPTokenIssuanceBuilder & setConfidentialOutstandingAmount(std::decay_t< typename SF_UINT64::type::value_type > const &value)
Set sfConfidentialOutstandingAmount (SoeDefault).
MPTokenIssuanceBuilder & setMPTokenMetadata(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfMPTokenMetadata (SoeOptional).
MPTokenIssuanceBuilder & setAssetScale(std::decay_t< typename SF_UINT8::type::value_type > const &value)
Set sfAssetScale (SoeDefault).
MPTokenIssuanceBuilder & setIssuerKeyEpoch(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfIssuerKeyEpoch (SoeOptional).
MPTokenIssuanceBuilder & setAuditorKeyEpoch(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfAuditorKeyEpoch (SoeOptional).
MPTokenIssuanceBuilder & setReferenceHolding(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfReferenceHolding (SoeOptional).
MPTokenIssuance build(UInt256 const &index)
Build and return the completed MPTokenIssuance wrapper.
Ledger Entry: MPTokenIssuance.
protocol_autogen::Optional< SF_UINT64::type::value_type > getMaximumAmount() const
Get sfMaximumAmount (SoeOptional).
SF_UINT64::type::value_type getOutstandingAmount() const
Get sfOutstandingAmount (SoeRequired).
protocol_autogen::Optional< SF_UINT8::type::value_type > getAssetScale() const
Get sfAssetScale (SoeDefault).
protocol_autogen::Optional< SF_UINT32::type::value_type > getAuditorKeyEpoch() const
Get sfAuditorKeyEpoch (SoeOptional).
protocol_autogen::Optional< SF_UINT64::type::value_type > getLockedAmount() const
Get sfLockedAmount (SoeOptional).
protocol_autogen::Optional< SF_UINT256::type::value_type > getDomainID() const
Get sfDomainID (SoeOptional).
SF_ACCOUNT::type::value_type getIssuer() const
Get sfIssuer (SoeRequired).
protocol_autogen::Optional< SF_UINT32::type::value_type > getImmutableFlags() const
Get sfImmutableFlags (SoeDefault).
protocol_autogen::Optional< SF_VL::type::value_type > getAuditorEncryptionKey() const
Get sfAuditorEncryptionKey (SoeOptional).
SF_UINT32::type::value_type getSequence() const
Get sfSequence (SoeRequired).
protocol_autogen::Optional< SF_UINT256::type::value_type > getReferenceHolding() const
Get sfReferenceHolding (SoeOptional).
SF_UINT256::type::value_type getPreviousTxnID() const
Get sfPreviousTxnID (SoeRequired).
SF_UINT64::type::value_type getOwnerNode() const
Get sfOwnerNode (SoeRequired).
protocol_autogen::Optional< SF_UINT32::type::value_type > getIssuerKeyEpoch() const
Get sfIssuerKeyEpoch (SoeOptional).
protocol_autogen::Optional< SF_VL::type::value_type > getIssuerEncryptionKey() const
Get sfIssuerEncryptionKey (SoeOptional).
protocol_autogen::Optional< SF_UINT64::type::value_type > getConfidentialOutstandingAmount() const
Get sfConfidentialOutstandingAmount (SoeDefault).
protocol_autogen::Optional< SF_VL::type::value_type > getMPTokenMetadata() const
Get sfMPTokenMetadata (SoeOptional).
protocol_autogen::Optional< SF_UINT16::type::value_type > getTransferFee() const
Get sfTransferFee (SoeDefault).
SF_UINT32::type::value_type getPreviousTxnLgrSeq() const
Get sfPreviousTxnLgrSeq (SoeRequired).
static constexpr LedgerEntryType entryType
Builder for Ticket ledger entries.
Definition Ticket.h:112
Ticket build(UInt256 const &index)
Build and return the completed Ticket wrapper.
Definition Ticket.h:211
T make_shared(T... args)
TEST(AccountRootTests, BuilderSettersRoundTrip)
BaseUInt< 256 > UInt256
Definition base_uint.h:580
void expectEqualField(T const &expected, T const &actual, char const *fieldName)