xrpld
Loading...
Searching...
No Matches
ConfidentialMPTClawbackTests.cpp
1// Auto-generated unit tests for transaction ConfidentialMPTClawback
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/SecretKey.h>
9#include <xrpl/protocol/Seed.h>
10#include <xrpl/protocol/STTx.h>
11#include <xrpl/protocol_autogen/transactions/ConfidentialMPTClawback.h>
12#include <xrpl/protocol_autogen/transactions/AccountSet.h>
13
14#include <string>
15
16namespace xrpl::transactions {
17
18// 1 & 4) Set fields via builder setters, build, then read them back via
19// wrapper getters. After build(), validate() should succeed.
20TEST(TransactionsConfidentialMPTClawbackTests, BuilderSettersRoundTrip)
21{
22 // Generate a deterministic keypair for signing
23 auto const [publicKey, secretKey] =
24 generateKeyPair(KeyType::Secp256k1, generateSeed("testConfidentialMPTClawback"));
25
26 // Common transaction fields
27 auto const accountValue = calcAccountID(publicKey);
28 std::uint32_t const sequenceValue = 1;
29 auto const feeValue = canonical_AMOUNT();
30
31 // Transaction-specific field values
32 auto const mPTokenIssuanceIDValue = canonical_UINT192();
33 auto const holderValue = canonical_ACCOUNT();
34 auto const mPTAmountValue = canonical_UINT64();
35 auto const zKProofValue = canonical_VL();
36
38 accountValue,
39 mPTokenIssuanceIDValue,
40 holderValue,
41 mPTAmountValue,
42 zKProofValue,
43 sequenceValue,
44 feeValue
45 };
46
47 // Set optional fields
48
49 auto tx = builder.build(publicKey, secretKey);
50
51 std::string reason;
52 EXPECT_TRUE(tx.validate(reason)) << reason;
53
54 // Verify signing was applied
55 EXPECT_FALSE(tx.getSigningPubKey().empty());
56 EXPECT_TRUE(tx.hasTxnSignature());
57
58 // Verify common fields
59 EXPECT_EQ(tx.getAccount(), accountValue);
60 EXPECT_EQ(tx.getSequence(), sequenceValue);
61 EXPECT_EQ(tx.getFee(), feeValue);
62
63 // Verify required fields
64 {
65 auto const& expected = mPTokenIssuanceIDValue;
66 auto const actual = tx.getMPTokenIssuanceID();
67 expectEqualField(expected, actual, "sfMPTokenIssuanceID");
68 }
69
70 {
71 auto const& expected = holderValue;
72 auto const actual = tx.getHolder();
73 expectEqualField(expected, actual, "sfHolder");
74 }
75
76 {
77 auto const& expected = mPTAmountValue;
78 auto const actual = tx.getMPTAmount();
79 expectEqualField(expected, actual, "sfMPTAmount");
80 }
81
82 {
83 auto const& expected = zKProofValue;
84 auto const actual = tx.getZKProof();
85 expectEqualField(expected, actual, "sfZKProof");
86 }
87
88 // Verify optional fields
89}
90
91// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
92// and verify all fields match.
93TEST(TransactionsConfidentialMPTClawbackTests, BuilderFromStTxRoundTrip)
94{
95 // Generate a deterministic keypair for signing
96 auto const [publicKey, secretKey] =
97 generateKeyPair(KeyType::Secp256k1, generateSeed("testConfidentialMPTClawbackFromTx"));
98
99 // Common transaction fields
100 auto const accountValue = calcAccountID(publicKey);
101 std::uint32_t const sequenceValue = 2;
102 auto const feeValue = canonical_AMOUNT();
103
104 // Transaction-specific field values
105 auto const mPTokenIssuanceIDValue = canonical_UINT192();
106 auto const holderValue = canonical_ACCOUNT();
107 auto const mPTAmountValue = canonical_UINT64();
108 auto const zKProofValue = canonical_VL();
109
110 // Build an initial transaction
111 ConfidentialMPTClawbackBuilder initialBuilder{
112 accountValue,
113 mPTokenIssuanceIDValue,
114 holderValue,
115 mPTAmountValue,
116 zKProofValue,
117 sequenceValue,
118 feeValue
119 };
120
121
122 auto initialTx = initialBuilder.build(publicKey, secretKey);
123
124 // Create builder from existing STTx
125 ConfidentialMPTClawbackBuilder builderFromTx{initialTx.getSTTx()};
126
127 auto rebuiltTx = builderFromTx.build(publicKey, secretKey);
128
129 std::string reason;
130 EXPECT_TRUE(rebuiltTx.validate(reason)) << reason;
131
132 // Verify common fields
133 EXPECT_EQ(rebuiltTx.getAccount(), accountValue);
134 EXPECT_EQ(rebuiltTx.getSequence(), sequenceValue);
135 EXPECT_EQ(rebuiltTx.getFee(), feeValue);
136
137 // Verify required fields
138 {
139 auto const& expected = mPTokenIssuanceIDValue;
140 auto const actual = rebuiltTx.getMPTokenIssuanceID();
141 expectEqualField(expected, actual, "sfMPTokenIssuanceID");
142 }
143
144 {
145 auto const& expected = holderValue;
146 auto const actual = rebuiltTx.getHolder();
147 expectEqualField(expected, actual, "sfHolder");
148 }
149
150 {
151 auto const& expected = mPTAmountValue;
152 auto const actual = rebuiltTx.getMPTAmount();
153 expectEqualField(expected, actual, "sfMPTAmount");
154 }
155
156 {
157 auto const& expected = zKProofValue;
158 auto const actual = rebuiltTx.getZKProof();
159 expectEqualField(expected, actual, "sfZKProof");
160 }
161
162 // Verify optional fields
163}
164
165// 3) Verify wrapper throws when constructed from wrong transaction type.
166TEST(TransactionsConfidentialMPTClawbackTests, WrapperThrowsOnWrongTxType)
167{
168 // Build a valid transaction of a different type
169 auto const [pk, sk] =
171 auto const account = calcAccountID(pk);
172
173 AccountSetBuilder wrongBuilder{account, 1, canonical_AMOUNT()};
174 auto wrongTx = wrongBuilder.build(pk, sk);
175
176 EXPECT_THROW(ConfidentialMPTClawback{wrongTx.getSTTx()}, std::runtime_error);
177}
178
179// 4) Verify builder throws when constructed from wrong transaction type.
180TEST(TransactionsConfidentialMPTClawbackTests, BuilderThrowsOnWrongTxType)
181{
182 // Build a valid transaction of a different type
183 auto const [pk, sk] =
184 generateKeyPair(KeyType::Secp256k1, generateSeed("testWrongTypeBuilder"));
185 auto const account = calcAccountID(pk);
186
187 AccountSetBuilder wrongBuilder{account, 1, canonical_AMOUNT()};
188 auto wrongTx = wrongBuilder.build(pk, sk);
189
190 EXPECT_THROW(ConfidentialMPTClawbackBuilder{wrongTx.getSTTx()}, std::runtime_error);
191}
192
193
194}
AccountSet build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the AccountSet wrapper.
ConfidentialMPTClawback build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the ConfidentialMPTClawback wrapper.
TEST(TransactionsAccountDeleteTests, BuilderSettersRoundTrip)
Seed generateSeed(std::string const &passPhrase)
Generate a seed deterministically.
Definition Seed.cpp:58
std::pair< PublicKey, SecretKey > generateKeyPair(KeyType type, Seed const &seed)
Generate a key pair deterministically.
AccountID calcAccountID(PublicKey const &pk)
void expectEqualField(T const &expected, T const &actual, char const *fieldName)