xrpld
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/amount.h>
6#include <test/jtx/delegate.h>
7#include <test/jtx/owners.h>
8#include <test/jtx/tag.h>
9#include <test/jtx/ter.h>
10#include <test/jtx/ticket.h>
11#include <test/jtx/txflags.h>
12
13#include <xrpl/basics/Buffer.h>
14#include <xrpl/basics/Slice.h>
15#include <xrpl/basics/base_uint.h>
16#include <xrpl/basics/contract.h>
17#include <xrpl/beast/unit_test/suite.h>
18#include <xrpl/core/ServiceRegistry.h>
19#include <xrpl/json/json_value.h>
20#include <xrpl/protocol/AccountID.h>
21#include <xrpl/protocol/Asset.h>
22#include <xrpl/protocol/ConfidentialTransfer.h>
23#include <xrpl/protocol/SField.h>
24#include <xrpl/protocol/TER.h>
25#include <xrpl/protocol/TxFlags.h>
26#include <xrpl/protocol/UintTypes.h>
27#include <xrpl/protocol/XRPAmount.h>
28#include <xrpl/protocol/jss.h>
29
30#include <cstddef>
31#include <cstdint>
32#include <cstring>
33#include <functional>
34#include <optional>
35#include <source_location>
36#include <stdexcept>
37#include <string>
38#include <unordered_map>
39#include <utility>
40#include <variant>
41#include <vector>
42
43namespace xrpl::test::jtx {
44
45class MPTTester;
46
47auto const kMptDexFlags = tfMPTCanTrade | tfMPTCanTransfer;
48
61[[nodiscard]] inline Buffer
63{
64 Buffer b(size);
65 if (size > 0)
66 std::memset(b.data(), 0, size);
67 return b;
68}
69
74{
75private:
79 // Test call site (forwarded from the MPTTester method).
81 // The site where this check object was constructed (usually in mpt.cpp).
83
84public:
86 MPTTester& tester,
87 std::uint32_t flags,
88 std::optional<Account> const& holder = std::nullopt,
91 : tester_(tester), flags_(flags), holder_(holder), testLoc_(testLoc), checkLoc_(checkLoc)
92 {
93 }
94
95 void
96 operator()(Env& env) const;
97};
98
103{
104private:
108 // Test call site (forwarded from the MPTTester method).
110 // The site where this check object was constructed (usually in mpt.cpp).
112
113public:
115 MPTTester& tester,
116 Account const& account,
117 std::int64_t amount,
120 : tester_(tester)
121 , account_(account)
122 , amount_(amount)
123 , testLoc_(testLoc)
124 , checkLoc_(checkLoc)
125 {
126 }
127
128 void
129 operator()(Env& env) const;
130};
131
136{
137private:
139 // Test call site (forwarded from the MPTTester method).
141 // The site where this check object was constructed (usually in mpt.cpp).
143
144public:
146 std::function<bool()> const& cb,
149 : cb_(cb), testLoc_(testLoc), checkLoc_(checkLoc)
150 {
151 }
152
153 void
154 operator()(Env& env) const;
155};
156
158
163{
172 // authorize if seated.
173 // if empty vector then authorize all holders
175 // pay if seated. if authorize is not seated then authorize.
176 // if empty vector then pay to either authorize or all holders.
180 bool authHolder = false;
182 std::optional<TER> err = std::nullopt;
183};
184
189{
190 // Default-initialized so designated-initializer call sites that omit
191 // `holders` don't trip GCC's -Werror=missing-field-initializers.
192 Holders holders = {}; // NOLINT(readability-redundant-member-init)
194 PrettyAmount const xrp = XRP(10'000);
195 PrettyAmount const xrpHolders = XRP(10'000);
196 bool fund = true;
197 bool close = true;
198 // create MPTIssuanceID if seated and follow rules for MPTCreate args
200};
201static MPTInit const kMptInitNoFund{.fund = false};
202
207{
210 Holders holders = {}; // NOLINT(readability-redundant-member-init)
216 bool authHolder = false;
217 bool fund = false;
218 bool close = true;
220 std::optional<TER> err = std::nullopt;
221};
222
235
249
271
276{
278 std::optional<MPTID> id = std::nullopt;
282 // indicates whether to autofill schnorr proof.
283 // default : auto generate proof if holderPubKey is present.
284 // true: force proof generation.
285 // false: force proof omission.
291
299 std::optional<TER> err = std::nullopt;
300};
301
317
348
373
392
410
428
434{
439
443 uint64_t const amt;
444
449
454};
455
484
501 std::uint64_t currentSpending,
502 Slice const& currentEncSpending,
503 std::uint32_t currentVersion,
504 std::uint64_t sendAmt,
505 Slice const& senderEncAmt);
506
512{
518 bool close_;
519 // Keys generated for each account. Buffer vector's index is the key epoch: index 0 is
520 // the initial pair and each rotation appends.
523
524public:
531
536
537 MPTTester(
538 Env& env,
540 MPTInit const& constr = {},
542 MPTTester(
543 MPTInitDef const& constr,
545 MPTTester(
546 Env& env,
548 MPTID const& id,
549 std::vector<Account> const& holders = {},
550 bool close = true);
551 operator MPT() const;
552
553 void
554 create(
555 MPTCreate const& arg = MPTCreate{},
557
558 static json::Value
559 createJV(MPTCreate const& arg = MPTCreate{});
560
561 void
562 destroy(
563 MPTDestroy const& arg = MPTDestroy{},
564 std::source_location const& loc = std::source_location::current());
565
566 static json::Value
567 destroyJV(MPTDestroy const& arg = MPTDestroy{});
568
569 void
570 authorize(
571 MPTAuthorize const& arg = MPTAuthorize{},
572 std::source_location const& loc = std::source_location::current());
573
574 static json::Value
575 authorizeJV(MPTAuthorize const& arg = MPTAuthorize{});
576
577 void
579 Holders const& holders,
580 std::source_location const& loc = std::source_location::current());
581
582 void
583 set(MPTSet const& set = {}, std::source_location const& loc = std::source_location::current());
584
585 static json::Value
586 setJV(MPTSet const& set = {});
587
588 void
589 convert(
590 MPTConvert const& arg = MPTConvert{},
591 std::source_location const& loc = std::source_location::current());
592
601 json::Value
602 convertJV(MPTConvert const& arg, std::uint32_t seq);
603
604 void
606 MPTMergeInbox const& arg = MPTMergeInbox{},
607 std::source_location const& loc = std::source_location::current());
608
609 [[nodiscard]] json::Value
610 mergeInboxJV(MPTMergeInbox const& arg = MPTMergeInbox{}) const;
611
612 void
613 send(
614 MPTConfidentialSend const& arg = MPTConfidentialSend{},
615 std::source_location const& loc = std::source_location::current());
616
630 json::Value
631 sendJV(
632 MPTConfidentialSend const& arg,
633 std::uint32_t seq,
634 std::optional<ConfidentialSendChainState> chain = std::nullopt);
635
649 [[nodiscard]] ConfidentialSendChainState
650 chainAfterSend(Account const& sender, std::uint64_t sendAmt, json::Value const& jv) const;
651
652 void
654 MPTConvertBack const& arg = MPTConvertBack{},
655 std::source_location const& loc = std::source_location::current());
656
667 json::Value
668 convertBackJV(MPTConvertBack const& arg, std::uint32_t seq);
669
670 void
672 MPTConfidentialClawback const& arg = MPTConfidentialClawback{},
673 std::source_location const& loc = std::source_location::current());
674
675 void
677 MPTMirrorUpdate const& arg = MPTMirrorUpdate{},
678 std::source_location const& loc = std::source_location::current());
679
680 void
682 MPTHolderKeyUpdate const& arg = MPTHolderKeyUpdate{},
683 std::source_location const& loc = std::source_location::current());
684
685 [[nodiscard]] bool
686 checkDomainID(std::optional<UInt256> expected) const;
687
688 [[nodiscard]] bool
689 checkMPTokenAmount(Account const& holder, std::int64_t expectedAmount) const;
690
691 [[nodiscard]] bool
692 checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const;
693
694 [[nodiscard]] bool
695 checkIssuanceConfidentialBalance(std::int64_t expectedAmount) const;
696
697 [[nodiscard]] bool
698 checkFlags(uint32_t const expectedFlags, std::optional<Account> const& holder = std::nullopt)
699 const;
700
701 [[nodiscard]] bool
702 checkMetadata(std::string const& metadata) const;
703
704 [[nodiscard]] bool
705 isMetadataPresent() const;
706
707 [[nodiscard]] bool
708 checkTransferFee(std::uint16_t transferFee) const;
709
710 [[nodiscard]] bool
711 isTransferFeePresent() const;
712
713 [[nodiscard]] bool
714 checkImmutableFlags(std::uint32_t expectedFlags) const;
715
716 // Checks both key epochs on the issuance. Pass std::nullopt for an epoch
717 // that is expected to be absent, which means the key is never rotated.
718 [[nodiscard]] bool
720 std::optional<std::uint32_t> issuerKeyEpoch,
721 std::optional<std::uint32_t> auditorKeyEpoch) const;
722
723 // Checks both mirror epochs on a holder's MPToken. Pass std::nullopt for an
724 // epoch that is expected to be absent, which means the mirror was written
725 // under the issuance's epoch 0 key.
726 [[nodiscard]] bool
728 Account const& holder,
729 std::optional<std::uint32_t> issuerKeyMirrorEpoch,
730 std::optional<std::uint32_t> auditorKeyMirrorEpoch) const;
731
732 // Checks that the issuance carries the encryption keys of the given
733 // accounts. Pass std::nullopt for a key that is expected to be absent,
734 // which means the key is never registered.
735 [[nodiscard]] bool
737 std::optional<Account> const& issuerKeyOwner,
738 std::optional<Account> const& auditorKeyOwner) const;
739
740 [[nodiscard]] Account const&
741 issuer() const
742 {
743 return issuer_;
744 }
745 [[nodiscard]] Account const&
746 holder(std::string const& h) const;
747
748 void
749 pay(Account const& src,
750 Account const& dest,
751 std::int64_t amount,
752 std::optional<TER> err = std::nullopt,
755
756 void
757 claw(
758 Account const& issuer,
759 Account const& holder,
760 std::int64_t amount,
761 std::optional<TER> err = std::nullopt,
763
764 [[nodiscard]] PrettyAmount
765 mpt(std::int64_t amount) const;
766
767 [[nodiscard]] MPTID const&
769 {
770 if (!env_.test.BEAST_EXPECT(id_))
771 Throw<std::logic_error>("Uninitialized issuanceID");
772 return *id_; // NOLINT(bugprone-unchecked-optional-access)
773 }
774
775 [[nodiscard]] std::int64_t
776 getBalance(Account const& account) const;
777
778 [[nodiscard]] std::int64_t
780
781 [[nodiscard]] std::optional<Buffer>
783 const;
784
785 MPT
786 operator[](std::string const& name) const;
787
789 operator()(std::int64_t amount) const;
790
791 operator Asset() const;
792
793 // Generates the account's next key pair and returns the key epoch it landed
794 // at, leaving the earlier ones retrievable.
796 generateKeyPair(Account const& account);
797
798 // Returns the account's public key at the given key epoch, or its latest key when
799 // no epoch is given.
800 [[nodiscard]] std::optional<Buffer>
801 getPubKey(Account const& account, std::optional<std::uint32_t> epoch = std::nullopt) const;
802
803 // Returns the account's private key at the given key epoch, or its latest key when
804 // no epoch is given.
805 [[nodiscard]] std::optional<Buffer>
806 getPrivKey(Account const& account, std::optional<std::uint32_t> epoch = std::nullopt) const;
807
808 [[nodiscard]] Buffer
809 encryptAmount(Account const& account, uint64_t const amt, Buffer const& blindingFactor) const;
810
811 // Decrypts with the account's key at the given key epoch, or its latest key
812 // when no epoch is given.
813 [[nodiscard]] std::optional<uint64_t>
815 Account const& account,
816 Buffer const& amt,
817 std::optional<std::uint32_t> epoch = std::nullopt) const;
818
819 [[nodiscard]] std::optional<uint64_t>
820 getDecryptedBalance(Account const& account, EncryptedBalanceType balanceType) const;
821
822 [[nodiscard]] std::optional<std::int64_t>
824
825 [[nodiscard]] std::optional<Buffer>
827 Account const& holder,
828 std::uint64_t amount,
829 Buffer const& privateKey,
830 UInt256 const& txHash) const;
831
832 [[nodiscard]] std::optional<Buffer>
833 getSchnorrProof(Account const& account, UInt256 const& ctxHash) const;
834
835 [[nodiscard]] std::optional<Buffer>
837 Account const& sender,
838 std::uint64_t const amount,
839 std::vector<ConfidentialRecipient> const& recipients,
840 Slice const& blindingFactor,
841 UInt256 const& contextHash,
842 PedersenProofParams const& amountParams,
843 PedersenProofParams const& balanceParams) const;
844
845 [[nodiscard]] std::optional<Buffer>
847 Account const& holder,
848 std::uint64_t const amount,
849 UInt256 const& contextHash,
850 PedersenProofParams const& pcParams) const;
851
852 [[nodiscard]] std::uint32_t
853 getMPTokenVersion(Account const account) const;
854
855 static Buffer
856 getPedersenCommitment(std::uint64_t const amount, Buffer const& pedersenBlindingFactor);
857
858 friend BookSpec
860 {
861 return ~static_cast<MPT>(mpt);
862 }
863
864private:
866 bool
867 forObject(
868 std::function<bool(SLEP const& sle)> const& cb,
869 std::optional<Account> const& holder = std::nullopt) const;
870
871 // Reads one of the holder's mirror key epochs off their MPToken.
872 [[nodiscard]] std::optional<std::uint32_t>
873 getMirrorEpoch(Account const& holder, SF_UINT32 const& field) const;
874
875 template <typename A>
876 TER
878 {
879 auto const expectedFlags = Txflags(arg.flags.value_or(0));
880 auto const expectedTer = Ter(arg.err.value_or(tesSUCCESS));
881
882 if constexpr (requires { arg.fee; })
883 {
884 if (arg.fee)
885 jv.value[jss::Fee] = to_string(*arg.fee);
886 }
887
889 if constexpr (requires { arg.ticketSeq; })
890 ticketSeq = arg.ticketSeq;
891
892 std::optional<Account> delegateAcct;
893 if constexpr (requires { arg.delegate; })
894 delegateAcct = arg.delegate;
895
897 if constexpr (requires { arg.destinationTag; })
898 dstTag = arg.destinationTag;
899
900 if (ticketSeq && delegateAcct)
901 {
902 env_(
903 jv,
904 expectedFlags,
905 expectedTer,
906 ticket::Use(*ticketSeq),
907 delegate::As(*delegateAcct));
908 }
909 else if (ticketSeq)
910 {
911 env_(jv, expectedFlags, expectedTer, ticket::Use(*ticketSeq));
912 }
913 else if (delegateAcct)
914 {
915 env_(jv, expectedFlags, expectedTer, delegate::As(*delegateAcct));
916 }
917 else if (dstTag)
918 {
919 env_(jv, expectedFlags, expectedTer, Dtag(*dstTag));
920 }
921 else
922 {
923 env_(jv, expectedFlags, expectedTer);
924 }
925 auto const err = env_.ter();
926 if (close_)
927 env_.close();
928 if (arg.ownerCount)
929 env_.require(Owners(issuer_, *arg.ownerCount));
930 if (arg.holderCount)
931 {
932 for (auto const& it : holders_)
933 env_.require(Owners(it.second, *arg.holderCount));
934 }
935 return err;
936 }
937
939 makeHolders(std::vector<Account> const& holders);
940
941 [[nodiscard]] std::uint32_t
943
951 void
953
954 [[nodiscard]] std::uint32_t
956 std::optional<std::uint32_t> const& ticketSeq,
957 std::optional<Account> const& account) const;
958
959 template <typename T>
960 void
962 T const& arg,
963 json::Value& jv,
964 Account const& account,
965 std::uint64_t const amount) const;
966};
967
968} // namespace xrpl::test::jtx
Represents a JSON value.
Definition json_value.h:117
Like std::vector<char> but better.
Definition Buffer.h:19
std::uint8_t const * data() const noexcept
Return a pointer to beginning of the storage.
Definition Buffer.h:148
std::shared_ptr< STLedgerEntry const > const_pointer
An immutable linear range of bytes.
Definition Slice.h:28
Immutable cryptographic account descriptor.
Definition jtx/Account.h:21
A transaction testing environment.
Definition Env.h:161
Test helper for creating, mutating, and asserting MPT and confidential MPT ledger state.
Definition mpt.h:512
std::unordered_map< AccountID, std::vector< Buffer > > pubKeys_
Definition mpt.h:521
static constexpr auto holderEncryptedInbox
Definition mpt.h:533
void mirrorUpdate(MPTMirrorUpdate const &arg=MPTMirrorUpdate{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:2266
std::optional< std::uint32_t > getMirrorEpoch(Account const &holder, SF_UINT32 const &field) const
Definition mpt.cpp:792
std::unordered_map< std::string, Account > const holders_
Definition mpt.h:515
Buffer encryptAmount(Account const &account, uint64_t const amt, Buffer const &blindingFactor) const
Definition mpt.cpp:1914
bool forObject(std::function< bool(SLEP const &sle)> const &cb, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:674
void mergeInbox(MPTMergeInbox const &arg=MPTMergeInbox{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:2004
bool checkMPTokenAmount(Account const &holder, std::int64_t expectedAmount) const
Definition mpt.cpp:697
std::optional< MPTID > id_
Definition mpt.h:517
json::Value convertJV(MPTConvert const &arg, std::uint32_t seq)
Build a confidential convert JV without submitting it.
Definition mpt.cpp:1403
static Buffer getPedersenCommitment(std::uint64_t const amount, Buffer const &pedersenBlindingFactor)
Definition mpt.cpp:1075
static json::Value destroyJV(MPTDestroy const &arg=MPTDestroy{})
Definition mpt.cpp:408
void setIssuanceIdField(json::Value &jv, std::optional< MPTID > const &id) const
Sets sfMPTokenIssuanceID on jv, falling back to id_ if arg's id is not set.
Definition mpt.cpp:1184
std::optional< Buffer > getEncryptedBalance(Account const &account, EncryptedBalanceType option=holderEncryptedInbox) const
Definition mpt.cpp:1136
void convertBack(MPTConvertBack const &arg=MPTConvertBack{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:2113
std::optional< uint64_t > getDecryptedBalance(Account const &account, EncryptedBalanceType balanceType) const
Definition mpt.cpp:1962
bool checkMirrorEpochs(Account const &holder, std::optional< std::uint32_t > issuerKeyMirrorEpoch, std::optional< std::uint32_t > auditorKeyMirrorEpoch) const
Definition mpt.cpp:778
Account const & holder(std::string const &h) const
Definition mpt.cpp:431
static json::Value authorizeJV(MPTAuthorize const &arg=MPTAuthorize{})
Definition mpt.cpp:440
bool isTransferFeePresent() const
Definition mpt.cpp:752
std::optional< Buffer > getClawbackProof(Account const &holder, std::uint64_t amount, Buffer const &privateKey, UInt256 const &txHash) const
Definition mpt.cpp:951
friend BookSpec operator~(MPTTester const &mpt)
Definition mpt.h:859
bool checkMetadata(std::string const &metadata) const
Definition mpt.cpp:725
std::uint32_t generateKeyPair(Account const &account)
Definition mpt.cpp:1877
bool checkFlags(uint32_t const expectedFlags, std::optional< Account > const &holder=std::nullopt) const
Definition mpt.cpp:719
bool isMetadataPresent() const
Definition mpt.cpp:735
MPT operator[](std::string const &name) const
Definition mpt.cpp:1211
void holderKeyUpdate(MPTHolderKeyUpdate const &arg=MPTHolderKeyUpdate{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:2295
std::optional< Buffer > getSchnorrProof(Account const &account, UInt256 const &ctxHash) const
Definition mpt.cpp:991
static constexpr auto issuerEncryptedBalance
Definition mpt.h:532
bool checkDomainID(std::optional< UInt256 > expected) const
Definition mpt.cpp:687
std::uint32_t getMPTokenVersion(Account const account) const
Definition mpt.cpp:2097
Account const & issuer() const
Definition mpt.h:741
std::optional< std::int64_t > getIssuanceOutstandingBalance() const
Definition mpt.cpp:2083
static json::Value createJV(MPTCreate const &arg=MPTCreate{})
Definition mpt.cpp:319
MPTTester(Env &env, Account issuer, MPTInit const &constr={}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:229
json::Value sendJV(MPTConfidentialSend const &arg, std::uint32_t seq, std::optional< ConfidentialSendChainState > chain=std::nullopt)
Build a confidential send JV.
Definition mpt.cpp:1574
ConfidentialSendChainState chainAfterSend(Account const &sender, std::uint64_t sendAmt, json::Value const &jv) const
Compute the projected sender state after a confidential send in a batch.
Definition mpt.cpp:1760
static json::Value setJV(MPTSet const &set={})
Definition mpt.cpp:534
MPTID const & issuanceID() const
Definition mpt.h:768
static constexpr auto holderEncryptedSpending
Definition mpt.h:534
std::optional< uint64_t > decryptAmount(Account const &account, Buffer const &amt, std::optional< std::uint32_t > epoch=std::nullopt) const
Definition mpt.cpp:1929
void send(MPTConfidentialSend const &arg=MPTConfidentialSend{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:1432
bool checkEncryptionKeys(std::optional< Account > const &issuerKeyOwner, std::optional< Account > const &auditorKeyOwner) const
Definition mpt.cpp:805
bool checkImmutableFlags(std::uint32_t expectedFlags) const
Definition mpt.cpp:758
std::int64_t getBalance(Account const &account) const
Definition mpt.cpp:921
TER submit(A const &arg, WithSourceLocation< json::Value > jv)
Definition mpt.h:877
void fillConversionCiphertexts(T const &arg, json::Value &jv, Account const &account, std::uint64_t const amount) const
Definition mpt.cpp:1224
std::optional< Buffer > getConfidentialSendProof(Account const &sender, std::uint64_t const amount, std::vector< ConfidentialRecipient > const &recipients, Slice const &blindingFactor, UInt256 const &contextHash, PedersenProofParams const &amountParams, PedersenProofParams const &balanceParams) const
Definition mpt.cpp:1014
std::optional< Buffer > getPubKey(Account const &account, std::optional< std::uint32_t > epoch=std::nullopt) const
Definition mpt.cpp:1902
std::optional< Account > const auditor_
Definition mpt.h:516
Account const issuer_
Definition mpt.h:514
json::Value mergeInboxJV(MPTMergeInbox const &arg=MPTMergeInbox{}) const
Definition mpt.cpp:1994
void authorizeHolders(Holders const &holders, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:525
SLE::const_pointer SLEP
Definition mpt.h:865
static constexpr auto auditorEncryptedBalance
Definition mpt.h:535
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, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:826
std::unordered_map< AccountID, std::vector< Buffer > > privKeys_
Definition mpt.h:522
void claw(Account const &issuer, Account const &holder, std::int64_t amount, std::optional< TER > err=std::nullopt, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:881
void confidentialClaw(MPTConfidentialClawback const &arg=MPTConfidentialClawback{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:1800
PrettyAmount mpt(std::int64_t amount) const
Definition mpt.cpp:905
void create(MPTCreate const &arg=MPTCreate{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:343
void set(MPTSet const &set={}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:577
std::int64_t getIssuanceConfidentialBalance() const
Definition mpt.cpp:939
std::uint32_t ticketOrSeq(std::optional< std::uint32_t > const &ticketSeq, std::optional< Account > const &account) const
Definition mpt.cpp:1201
bool checkTransferFee(std::uint16_t transferFee) const
Definition mpt.cpp:742
bool checkIssuanceConfidentialBalance(std::int64_t expectedAmount) const
Definition mpt.cpp:711
void authorize(MPTAuthorize const &arg=MPTAuthorize{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:455
PrettyAmount operator()(std::int64_t amount) const
Definition mpt.cpp:1217
std::uint32_t getFlags(std::optional< Account > const &holder) const
Definition mpt.cpp:1170
bool checkKeyEpochs(std::optional< std::uint32_t > issuerKeyEpoch, std::optional< std::uint32_t > auditorKeyEpoch) const
Definition mpt.cpp:767
static std::unordered_map< std::string, Account > makeHolders(std::vector< Account > const &holders)
Definition mpt.cpp:217
bool checkMPTokenOutstandingAmount(std::int64_t expectedAmount) const
Definition mpt.cpp:704
void convert(MPTConvert const &arg=MPTConvert{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:1266
std::optional< Buffer > getPrivKey(Account const &account, std::optional< std::uint32_t > epoch=std::nullopt) const
Definition mpt.cpp:1908
void destroy(MPTDestroy const &arg=MPTDestroy{}, std::source_location const &loc=std::source_location::current())
Definition mpt.cpp:421
std::optional< Buffer > getConvertBackProof(Account const &holder, std::uint64_t const amount, UInt256 const &contextHash, PedersenProofParams const &pcParams) const
Definition mpt.cpp:1101
json::Value convertBackJV(MPTConvertBack const &arg, std::uint32_t seq)
Build a confidential convertBack JV without submitting it.
Definition mpt.cpp:2203
Converts to MPT Issue or STAmount.
std::source_location testLoc_
Definition mpt.h:109
MptBalance(MPTTester &tester, Account const &account, std::int64_t amount, std::source_location const &testLoc=std::source_location::current(), std::source_location const &checkLoc=std::source_location::current())
Definition mpt.h:114
MPTTester const & tester_
Definition mpt.h:105
std::int64_t const amount_
Definition mpt.h:107
Account const & account_
Definition mpt.h:106
void operator()(Env &env) const
Definition mpt.cpp:201
std::source_location checkLoc_
Definition mpt.h:111
std::uint32_t flags_
Definition mpt.h:77
std::source_location checkLoc_
Definition mpt.h:82
MptFlags(MPTTester &tester, std::uint32_t flags, std::optional< Account > const &holder=std::nullopt, std::source_location const &testLoc=std::source_location::current(), std::source_location const &checkLoc=std::source_location::current())
Definition mpt.h:85
void operator()(Env &env) const
Definition mpt.cpp:191
std::optional< Account > holder_
Definition mpt.h:78
MPTTester & tester_
Definition mpt.h:76
std::source_location testLoc_
Definition mpt.h:80
Match the number of items in the account's owner directory.
Definition owners.h:55
std::function< bool()> cb_
Definition mpt.h:138
std::source_location testLoc_
Definition mpt.h:140
RequireAny(std::function< bool()> const &cb, std::source_location const &testLoc=std::source_location::current(), std::source_location const &checkLoc=std::source_location::current())
Definition mpt.h:145
void operator()(Env &env) const
Definition mpt.cpp:211
std::source_location checkLoc_
Definition mpt.h:142
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition ter.h:18
Set the flags on a JTx.
Definition txflags.h:14
Set a ticket sequence on a JTx.
Definition ticket.h:36
T current(T... args)
T memset(T... args)
auto const kMptDexFlags
Definition mpt.h:47
Buffer gMakeZeroBuffer(std::size_t size)
Create a zero-initialized buffer for malformed cryptography test inputs.
Definition mpt.h:62
XrpT const XRP
Converts to XRP Issue or STAmount.
Definition amount.cpp:92
std::vector< Account > Holders
Definition mpt.h:157
std::optional< ConfidentialSendChainState > computeNextSendChainState(std::uint64_t currentSpending, Slice const &currentEncSpending, std::uint32_t currentVersion, std::uint64_t sendAmt, Slice const &senderEncAmt)
Use this when building a second (or later) confidential send from the same account in the same batch.
Definition mpt.cpp:1778
static MPTInit const kMptInitNoFund
Definition mpt.h:201
TypedField< STInteger< std::uint32_t > > SF_UINT32
Definition SField.h:344
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:657
BaseUInt< 256 > UInt256
Definition base_uint.h:580
BaseUInt< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
Definition UintTypes.h:54
TERSubset< CanCvtToTER > TER
Definition TER.h:654
@ tesSUCCESS
Definition TER.h:250
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:52
When building multiple confidential sends from the same account inside a single batch transaction,...
Definition mpt.h:468
std::uint32_t version
sfConfidentialBalanceVersion after the previous send.
Definition mpt.h:482
std::uint64_t spending
Decrypted spending balance after the previous send.
Definition mpt.h:472
Buffer encSpending
Encrypted spending balance after the previous send.
Definition mpt.h:477
Set the destination tag on a JTx.
Definition tag.h:14
Arguments for building an MPTokenAuthorize test transaction.
Definition mpt.h:240
std::optional< std::uint32_t > ownerCount
Definition mpt.h:244
std::optional< std::uint32_t > holderCount
Definition mpt.h:245
std::optional< Account > holder
Definition mpt.h:242
std::optional< Account > account
Definition mpt.h:241
std::optional< TER > err
Definition mpt.h:247
std::optional< std::uint32_t > flags
Definition mpt.h:246
Arguments for building a ConfidentialMPTClawback test transaction.
Definition mpt.h:378
std::optional< std::uint32_t > holderCount
Definition mpt.h:387
std::optional< std::uint32_t > ownerCount
Definition mpt.h:386
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:385
std::optional< std::string > proof
Definition mpt.h:383
std::optional< std::uint64_t > amt
Definition mpt.h:382
std::optional< XRPAmount > fee
Definition mpt.h:389
std::optional< Account > delegate
Definition mpt.h:384
std::optional< std::uint32_t > flags
Definition mpt.h:388
std::optional< Account > account
Definition mpt.h:379
std::optional< Account > holder
Definition mpt.h:380
Arguments for building a ConfidentialMPTSend test transaction.
Definition mpt.h:322
std::optional< XRPAmount > fee
Definition mpt.h:345
std::optional< std::vector< std::string > > credentials
Definition mpt.h:334
std::optional< TER > err
Definition mpt.h:346
std::optional< Buffer > balanceCommitment
Definition mpt.h:338
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:341
std::optional< std::uint32_t > holderCount
Definition mpt.h:343
std::optional< std::uint64_t > amt
Definition mpt.h:327
std::optional< bool > fillAuditorEncryptedAmt
Definition mpt.h:333
std::optional< std::uint32_t > destinationTag
Definition mpt.h:340
std::optional< Account > account
Definition mpt.h:323
std::optional< Buffer > auditorEncryptedAmt
Definition mpt.h:332
std::optional< Account > dest
Definition mpt.h:324
std::optional< std::uint32_t > flags
Definition mpt.h:344
std::optional< Buffer > blindingFactor
Definition mpt.h:336
std::optional< Buffer > amountCommitment
Definition mpt.h:337
std::optional< Account > delegate
Definition mpt.h:339
std::optional< std::string > proof
Definition mpt.h:328
std::optional< Buffer > senderEncryptedAmt
Definition mpt.h:329
std::optional< Buffer > destEncryptedAmt
Definition mpt.h:330
std::optional< Buffer > issuerEncryptedAmt
Definition mpt.h:331
std::optional< std::uint32_t > ownerCount
Definition mpt.h:342
Arguments for building a ConfidentialMPTConvertBack test transaction.
Definition mpt.h:353
std::optional< Buffer > auditorEncryptedAmt
Definition mpt.h:360
std::optional< Account > delegate
Definition mpt.h:365
std::optional< std::uint32_t > holderCount
Definition mpt.h:368
std::optional< Buffer > issuerEncryptedAmt
Definition mpt.h:359
std::optional< std::uint32_t > ownerCount
Definition mpt.h:367
std::optional< std::uint64_t > amt
Definition mpt.h:356
std::optional< Account > account
Definition mpt.h:354
std::optional< XRPAmount > fee
Definition mpt.h:370
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:366
std::optional< std::uint32_t > flags
Definition mpt.h:369
std::optional< Buffer > holderEncryptedAmt
Definition mpt.h:358
std::optional< Buffer > proof
Definition mpt.h:357
std::optional< TER > err
Definition mpt.h:371
std::optional< Buffer > blindingFactor
Definition mpt.h:363
std::optional< Buffer > pedersenCommitment
Definition mpt.h:364
std::optional< bool > fillAuditorEncryptedAmt
Definition mpt.h:361
Arguments for building a ConfidentialMPTConvert test transaction.
Definition mpt.h:276
std::optional< bool > fillAuditorEncryptedAmt
Definition mpt.h:281
std::optional< std::uint32_t > ownerCount
Definition mpt.h:295
std::optional< std::uint64_t > amt
Definition mpt.h:279
std::optional< Buffer > holderEncryptedAmt
Definition mpt.h:288
std::optional< Buffer > auditorEncryptedAmt
Definition mpt.h:290
std::optional< bool > fillSchnorrProof
Definition mpt.h:286
std::optional< std::uint32_t > holderCount
Definition mpt.h:296
std::optional< Buffer > holderPubKey
Definition mpt.h:287
std::optional< TER > err
Definition mpt.h:299
std::optional< std::uint32_t > flags
Definition mpt.h:297
std::optional< Account > account
Definition mpt.h:277
std::optional< Buffer > blindingFactor
Definition mpt.h:292
std::optional< XRPAmount > fee
Definition mpt.h:298
std::optional< std::string > proof
Definition mpt.h:280
std::optional< Account > delegate
Definition mpt.h:293
std::optional< Buffer > issuerEncryptedAmt
Definition mpt.h:289
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:294
Arguments for building an MPTokenIssuanceCreate test transaction.
Definition mpt.h:163
std::optional< std::uint8_t > assetScale
Definition mpt.h:167
static std::vector< Account > allHolders
Definition mpt.h:164
std::optional< std::uint32_t > immutableFlags
Definition mpt.h:179
std::optional< std::uint32_t > holderCount
Definition mpt.h:171
std::optional< std::string > metadata
Definition mpt.h:169
std::optional< std::uint32_t > flags
Definition mpt.h:178
std::optional< TER > err
Definition mpt.h:182
std::optional< std::uint64_t > maxAmt
Definition mpt.h:166
std::optional< UInt256 > domainID
Definition mpt.h:181
std::optional< std::uint32_t > ownerCount
Definition mpt.h:170
std::optional< Account > issuer
Definition mpt.h:165
std::optional< std::pair< std::vector< Account >, std::uint64_t > > pay
Definition mpt.h:177
std::optional< std::uint16_t > transferFee
Definition mpt.h:168
std::optional< std::vector< Account > > authorize
Definition mpt.h:174
Arguments for building an MPTokenIssuanceDestroy test transaction.
Definition mpt.h:227
std::optional< Account > issuer
Definition mpt.h:228
std::optional< std::uint32_t > flags
Definition mpt.h:232
std::optional< std::uint32_t > holderCount
Definition mpt.h:231
std::optional< std::uint32_t > ownerCount
Definition mpt.h:230
std::optional< TER > err
Definition mpt.h:233
Arguments for building a ConfidentialMPTHolderKeyUpdate test transaction.
Definition mpt.h:415
std::optional< Account > account
Definition mpt.h:416
std::optional< Buffer > inboxCiphertext
Definition mpt.h:420
std::optional< std::uint32_t > holderCount
Definition mpt.h:423
std::optional< Buffer > proof
Definition mpt.h:421
std::optional< TER > err
Definition mpt.h:426
std::optional< XRPAmount > fee
Definition mpt.h:425
std::optional< std::uint32_t > ownerCount
Definition mpt.h:422
std::optional< Buffer > spendingCiphertext
Definition mpt.h:419
std::optional< Buffer > holderPubKey
Definition mpt.h:418
std::optional< std::uint32_t > flags
Definition mpt.h:424
Full constructor arguments for MPTTester initialization.
Definition mpt.h:207
std::uint16_t transferFee
Definition mpt.h:212
std::optional< TER > err
Definition mpt.h:220
std::uint32_t flags
Definition mpt.h:214
std::optional< std::uint64_t > maxAmt
Definition mpt.h:219
std::optional< Account > auditor
Definition mpt.h:211
std::optional< std::uint32_t > immutableFlags
Definition mpt.h:215
std::optional< std::uint64_t > pay
Definition mpt.h:213
Arguments for initializing funded MPT test accounts and issuance.
Definition mpt.h:189
std::optional< MPTCreate > create
Definition mpt.h:199
std::optional< Account > auditor
Definition mpt.h:193
PrettyAmount const xrp
Definition mpt.h:194
PrettyAmount const xrpHolders
Definition mpt.h:195
Arguments for building a ConfidentialMPTMergeInbox test transaction.
Definition mpt.h:306
std::optional< TER > err
Definition mpt.h:315
std::optional< std::uint32_t > ownerCount
Definition mpt.h:311
std::optional< std::uint32_t > holderCount
Definition mpt.h:312
std::optional< std::uint32_t > flags
Definition mpt.h:313
std::optional< XRPAmount > fee
Definition mpt.h:314
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:310
std::optional< Account > account
Definition mpt.h:307
std::optional< Account > delegate
Definition mpt.h:309
Arguments for building a ConfidentialMPTMirrorUpdate test transaction.
Definition mpt.h:397
std::optional< XRPAmount > fee
Definition mpt.h:404
std::optional< std::uint32_t > flags
Definition mpt.h:405
std::optional< Buffer > auditorEncryptedAmount
Definition mpt.h:402
std::optional< Account > holder
Definition mpt.h:399
std::optional< Account > account
Definition mpt.h:398
std::optional< Buffer > zkProof
Definition mpt.h:403
std::optional< TER > err
Definition mpt.h:408
std::optional< std::uint32_t > holderCount
Definition mpt.h:407
std::optional< Buffer > issuerEncryptedAmount
Definition mpt.h:401
std::optional< std::uint32_t > ownerCount
Definition mpt.h:406
Arguments for building an MPTokenIssuanceSet test transaction.
Definition mpt.h:254
std::optional< Account > account
Definition mpt.h:255
std::optional< std::uint32_t > holderCount
Definition mpt.h:259
std::optional< Buffer > auditorPubKey
Definition mpt.h:267
std::optional< std::uint32_t > ticketSeq
Definition mpt.h:268
std::optional< TER > err
Definition mpt.h:269
std::optional< std::uint32_t > immutableFlags
Definition mpt.h:261
std::optional< std::uint16_t > transferFee
Definition mpt.h:262
std::optional< std::uint32_t > flags
Definition mpt.h:260
std::optional< std::variant< Account, AccountID > > holder
Definition mpt.h:256
std::optional< std::string > metadata
Definition mpt.h:263
std::optional< std::uint32_t > ownerCount
Definition mpt.h:258
std::optional< Buffer > issuerPubKey
Definition mpt.h:266
std::optional< UInt256 > domainID
Definition mpt.h:265
std::optional< Account > delegate
Definition mpt.h:264
Stores the parameters that are exclusively used to generate a Pedersen linkage proof.
Definition mpt.h:434
Buffer const pedersenCommitment
The Pedersen commitment used by the proof.
Definition mpt.h:438
Buffer const blindingFactor
The blinding factor used to create the Pedersen commitment.
Definition mpt.h:453
Buffer const encryptedAmt
The encrypted amount linked to the Pedersen commitment.
Definition mpt.h:448
uint64_t const amt
Either the spending balance or the value being transferred.
Definition mpt.h:443
Represents an XRP, IOU, or MPT quantity This customizes the string conversion and supports XRP conver...
Wrapper that captures std::source_location when implicitly constructed.
Definition Env.h:69