Skip to content

Commit c2f8b91

Browse files
Add invariants and tests (XRPLF#6403)
1 parent 1ea9312 commit c2f8b91

File tree

6 files changed

+527
-35
lines changed

6 files changed

+527
-35
lines changed

src/test/app/ConfidentialTransfer_test.cpp

Lines changed: 73 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
312312
{.account = alice,
313313
.amt = 10,
314314
.holderPubKey = mptAlice.getPubKey(bob),
315-
.blindingFactor = Buffer(10),
315+
.blindingFactor = makeZeroBuffer(10),
316316
.err = temMALFORMED});
317317

318318
// Holder encrypted amount is empty (length 0)
@@ -336,7 +336,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
336336
{.account = bob,
337337
.amt = 10,
338338
.holderPubKey = mptAlice.getPubKey(bob),
339-
.auditorEncryptedAmt = Buffer(10),
339+
.auditorEncryptedAmt = makeZeroBuffer(10),
340340
.err = temBAD_CIPHERTEXT});
341341

342342
// Auditor encrypted amount has correct length but invalid data
@@ -375,7 +375,8 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
375375
mptAlice.convert({.account = bob, .amt = 10, .holderPubKey = Buffer{}, .err = temMALFORMED});
376376

377377
// Holder public key has correct length but invalid EC point data
378-
mptAlice.convert({.account = bob, .amt = 10, .holderPubKey = Buffer(ecPubKeyLength), .err = temMALFORMED});
378+
mptAlice.convert(
379+
{.account = bob, .amt = 10, .holderPubKey = makeZeroBuffer(ecPubKeyLength), .err = temMALFORMED});
379380
}
380381

381382
// when registering holder pub key, the transaction must include a
@@ -492,20 +493,20 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
492493
mptAlice.set({.account = alice, .issuerPubKey = Buffer{}, .err = temMALFORMED});
493494

494495
// Issuer pub key has correct length but invalid EC point data
495-
mptAlice.set({.account = alice, .issuerPubKey = Buffer(ecPubKeyLength), .err = temMALFORMED});
496+
mptAlice.set({.account = alice, .issuerPubKey = makeZeroBuffer(ecPubKeyLength), .err = temMALFORMED});
496497

497498
// Auditor key is invalid length
498499
mptAlice.set(
499500
{.account = alice,
500501
.issuerPubKey = mptAlice.getPubKey(alice),
501-
.auditorPubKey = Buffer(10),
502+
.auditorPubKey = makeZeroBuffer(10),
502503
.err = temMALFORMED});
503504

504505
// Auditor key has correct length but invalid EC point data
505506
mptAlice.set(
506507
{.account = alice,
507508
.issuerPubKey = mptAlice.getPubKey(alice),
508-
.auditorPubKey = Buffer(ecPubKeyLength),
509+
.auditorPubKey = makeZeroBuffer(ecPubKeyLength),
509510
.err = temMALFORMED});
510511

511512
// Cannot set auditor key without issuer key
@@ -1185,9 +1186,9 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
11851186
{.account = bob,
11861187
.dest = carol,
11871188
.amt = 10,
1188-
.senderEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1189-
.destEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1190-
.issuerEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1189+
.senderEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
1190+
.destEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
1191+
.issuerEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
11911192
.err = temDISABLED});
11921193
}
11931194

@@ -1230,21 +1231,33 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
12301231

12311232
// sender encrypted amount wrong length
12321233
mptAlice.send(
1233-
{.account = bob, .dest = carol, .amt = 10, .senderEncryptedAmt = Buffer(10), .err = temBAD_CIPHERTEXT});
1234+
{.account = bob,
1235+
.dest = carol,
1236+
.amt = 10,
1237+
.senderEncryptedAmt = makeZeroBuffer(10),
1238+
.err = temBAD_CIPHERTEXT});
12341239
// dest encrypted amount wrong length
12351240
mptAlice.send(
1236-
{.account = bob, .dest = carol, .amt = 10, .destEncryptedAmt = Buffer(10), .err = temBAD_CIPHERTEXT});
1241+
{.account = bob,
1242+
.dest = carol,
1243+
.amt = 10,
1244+
.destEncryptedAmt = makeZeroBuffer(10),
1245+
.err = temBAD_CIPHERTEXT});
12371246
// issuer encrypted amount wrong length
12381247
mptAlice.send(
1239-
{.account = bob, .dest = carol, .amt = 10, .issuerEncryptedAmt = Buffer(10), .err = temBAD_CIPHERTEXT});
1248+
{.account = bob,
1249+
.dest = carol,
1250+
.amt = 10,
1251+
.issuerEncryptedAmt = makeZeroBuffer(10),
1252+
.err = temBAD_CIPHERTEXT});
12401253

12411254
// sender encrypted amount malformed
12421255
mptAlice.send(
12431256
{.account = bob,
12441257
.dest = carol,
12451258
.amt = 10,
12461259
.proof = getTrivialSendProofHex(3),
1247-
.senderEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1260+
.senderEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
12481261
.amountCommitment = getTrivialCommitment(),
12491262
.balanceCommitment = getTrivialCommitment(),
12501263
.err = temBAD_CIPHERTEXT});
@@ -1254,7 +1267,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
12541267
.dest = carol,
12551268
.amt = 10,
12561269
.proof = getTrivialSendProofHex(3),
1257-
.destEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1270+
.destEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
12581271
.amountCommitment = getTrivialCommitment(),
12591272
.balanceCommitment = getTrivialCommitment(),
12601273
.err = temBAD_CIPHERTEXT});
@@ -1264,7 +1277,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
12641277
.dest = carol,
12651278
.amt = 10,
12661279
.proof = getTrivialSendProofHex(3),
1267-
.issuerEncryptedAmt = Buffer(ecGamalEncryptedTotalLength),
1280+
.issuerEncryptedAmt = makeZeroBuffer(ecGamalEncryptedTotalLength),
12681281
.amountCommitment = getTrivialCommitment(),
12691282
.balanceCommitment = getTrivialCommitment(),
12701283
.err = temBAD_CIPHERTEXT});
@@ -1285,7 +1298,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
12851298
.dest = carol,
12861299
.amt = 10,
12871300
.proof = getTrivialSendProofHex(3),
1288-
.amountCommitment = Buffer(100),
1301+
.amountCommitment = makeZeroBuffer(100),
12891302
.balanceCommitment = getTrivialCommitment(),
12901303
.err = temMALFORMED});
12911304

@@ -1296,7 +1309,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
12961309
.amt = 10,
12971310
.proof = getTrivialSendProofHex(3),
12981311
.amountCommitment = getTrivialCommitment(),
1299-
.balanceCommitment = Buffer(100),
1312+
.balanceCommitment = makeZeroBuffer(100),
13001313
.err = temMALFORMED});
13011314

13021315
// amount Pedersen commitment has correct length but invalid EC point data
@@ -1305,7 +1318,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
13051318
.dest = carol,
13061319
.amt = 10,
13071320
.proof = getTrivialSendProofHex(3),
1308-
.amountCommitment = Buffer(ecPedersenCommitmentLength),
1321+
.amountCommitment = makeZeroBuffer(ecPedersenCommitmentLength),
13091322
.balanceCommitment = getTrivialCommitment(),
13101323
.err = temMALFORMED});
13111324

@@ -1316,7 +1329,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
13161329
.amt = 10,
13171330
.proof = getTrivialSendProofHex(3),
13181331
.amountCommitment = getTrivialCommitment(),
1319-
.balanceCommitment = Buffer(ecPedersenCommitmentLength),
1332+
.balanceCommitment = makeZeroBuffer(ecPedersenCommitmentLength),
13201333
.err = temMALFORMED});
13211334
}
13221335

@@ -1363,7 +1376,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
13631376
.dest = carol,
13641377
.amt = 10,
13651378
.proof = getTrivialSendProofHex(4),
1366-
.auditorEncryptedAmt = Buffer(10),
1379+
.auditorEncryptedAmt = makeZeroBuffer(10),
13671380
.amountCommitment = getTrivialCommitment(),
13681381
.balanceCommitment = getTrivialCommitment(),
13691382
.err = temBAD_CIPHERTEXT});
@@ -1914,7 +1927,43 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
19141927
.flags = tfMPTUnauthorize,
19151928
});
19161929
}
1917-
// todo: test with convert back and delete
1930+
// test with convert back and delete
1931+
// can delete mptoken if converted back (COA returns to zero)
1932+
{
1933+
Env env{*this, features};
1934+
Account const alice("alice");
1935+
Account const bob("bob");
1936+
MPTTester mptAlice(env, alice, {.holders = {bob}});
1937+
1938+
mptAlice.create({.ownerCount = 1, .flags = tfMPTCanTransfer | tfMPTCanLock | tfMPTCanPrivacy});
1939+
1940+
mptAlice.authorize({.account = bob});
1941+
mptAlice.pay(alice, bob, 100);
1942+
1943+
mptAlice.generateKeyPair(alice);
1944+
mptAlice.set({.account = alice, .issuerPubKey = mptAlice.getPubKey(alice)});
1945+
mptAlice.generateKeyPair(bob);
1946+
1947+
mptAlice.convert({
1948+
.account = bob,
1949+
.amt = 100,
1950+
.holderPubKey = mptAlice.getPubKey(bob),
1951+
});
1952+
1953+
mptAlice.mergeInbox({
1954+
.account = bob,
1955+
});
1956+
1957+
mptAlice.convertBack({.account = bob, .amt = 100});
1958+
1959+
mptAlice.pay(bob, alice, 100);
1960+
1961+
// Should be able to delete as Confidential Outstanding amount is 0
1962+
mptAlice.authorize({
1963+
.account = bob,
1964+
.flags = tfMPTUnauthorize,
1965+
});
1966+
}
19181967
}
19191968

19201969
void
@@ -2211,7 +2260,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
22112260
mptAlice.convertBack(
22122261
{.account = bob,
22132262
.amt = 30,
2214-
.pedersenCommitment = Buffer(ecPedersenCommitmentLength),
2263+
.pedersenCommitment = makeZeroBuffer(ecPedersenCommitmentLength),
22152264
.err = temMALFORMED});
22162265

22172266
mptAlice.convertBack({.account = bob, .amt = 30, .holderEncryptedAmt = Buffer{}, .err = temBAD_CIPHERTEXT});
@@ -2225,15 +2274,15 @@ class ConfidentialTransfer_test : public beast::unit_test::suite
22252274
{.account = bob, .amt = 30, .issuerEncryptedAmt = getBadCiphertext(), .err = temBAD_CIPHERTEXT});
22262275

22272276
mptAlice.convertBack(
2228-
{.account = bob, .amt = 30, .auditorEncryptedAmt = Buffer(10), .err = temBAD_CIPHERTEXT});
2277+
{.account = bob, .amt = 30, .auditorEncryptedAmt = makeZeroBuffer(10), .err = temBAD_CIPHERTEXT});
22292278

22302279
mptAlice.convertBack(
22312280
{.account = bob, .amt = 30, .auditorEncryptedAmt = getBadCiphertext(), .err = temBAD_CIPHERTEXT});
22322281

22332282
// invalid proof length
22342283
mptAlice.convertBack({.account = bob, .amt = 30, .proof = Buffer{}, .err = temMALFORMED});
22352284

2236-
mptAlice.convertBack({.account = bob, .amt = 30, .proof = Buffer(100), .err = temMALFORMED});
2285+
mptAlice.convertBack({.account = bob, .amt = 30, .proof = makeZeroBuffer(100), .err = temMALFORMED});
22372286
}
22382287
}
22392288

0 commit comments

Comments
 (0)