feat: Make DynamicMPT opt-in-immutable

This commit is contained in:
yinyiqian1
2026-07-17 14:02:35 -04:00
committed by Ayaz Salikhov
parent bf65e5fa7b
commit 033dca2f0e
23 changed files with 619 additions and 628 deletions

View File

@@ -32,7 +32,7 @@ TEST(MPTokenIssuanceTests, BuilderSettersRoundTrip)
auto const previousTxnIDValue = canonical_UINT256();
auto const previousTxnLgrSeqValue = canonical_UINT32();
auto const domainIDValue = canonical_UINT256();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
auto const referenceHoldingValue = canonical_UINT256();
auto const issuerEncryptionKeyValue = canonical_VL();
auto const auditorEncryptionKeyValue = canonical_VL();
@@ -53,7 +53,7 @@ TEST(MPTokenIssuanceTests, BuilderSettersRoundTrip)
builder.setLockedAmount(lockedAmountValue);
builder.setMPTokenMetadata(mPTokenMetadataValue);
builder.setDomainID(domainIDValue);
builder.setMutableFlags(mutableFlagsValue);
builder.setImmutableFlags(immutableFlagsValue);
builder.setReferenceHolding(referenceHoldingValue);
builder.setIssuerEncryptionKey(issuerEncryptionKeyValue);
builder.setAuditorEncryptionKey(auditorEncryptionKeyValue);
@@ -153,11 +153,11 @@ TEST(MPTokenIssuanceTests, BuilderSettersRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const actualOpt = entry.getMutableFlags();
auto const& expected = immutableFlagsValue;
auto const actualOpt = entry.getImmutableFlags();
ASSERT_TRUE(actualOpt.has_value());
expectEqualField(expected, *actualOpt, "sfMutableFlags");
EXPECT_TRUE(entry.hasMutableFlags());
expectEqualField(expected, *actualOpt, "sfImmutableFlags");
EXPECT_TRUE(entry.hasImmutableFlags());
}
{
@@ -217,7 +217,7 @@ TEST(MPTokenIssuanceTests, BuilderFromSleRoundTrip)
auto const previousTxnIDValue = canonical_UINT256();
auto const previousTxnLgrSeqValue = canonical_UINT32();
auto const domainIDValue = canonical_UINT256();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
auto const referenceHoldingValue = canonical_UINT256();
auto const issuerEncryptionKeyValue = canonical_VL();
auto const auditorEncryptionKeyValue = canonical_VL();
@@ -237,7 +237,7 @@ TEST(MPTokenIssuanceTests, BuilderFromSleRoundTrip)
sle->at(sfPreviousTxnID) = previousTxnIDValue;
sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
sle->at(sfDomainID) = domainIDValue;
sle->at(sfMutableFlags) = mutableFlagsValue;
sle->at(sfImmutableFlags) = immutableFlagsValue;
sle->at(sfReferenceHolding) = referenceHoldingValue;
sle->at(sfIssuerEncryptionKey) = issuerEncryptionKeyValue;
sle->at(sfAuditorEncryptionKey) = auditorEncryptionKeyValue;
@@ -391,16 +391,16 @@ TEST(MPTokenIssuanceTests, BuilderFromSleRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const& expected = immutableFlagsValue;
auto const fromSleOpt = entryFromSle.getMutableFlags();
auto const fromBuilderOpt = entryFromBuilder.getMutableFlags();
auto const fromSleOpt = entryFromSle.getImmutableFlags();
auto const fromBuilderOpt = entryFromBuilder.getImmutableFlags();
ASSERT_TRUE(fromSleOpt.has_value());
ASSERT_TRUE(fromBuilderOpt.has_value());
expectEqualField(expected, *fromSleOpt, "sfMutableFlags");
expectEqualField(expected, *fromBuilderOpt, "sfMutableFlags");
expectEqualField(expected, *fromSleOpt, "sfImmutableFlags");
expectEqualField(expected, *fromBuilderOpt, "sfImmutableFlags");
}
{
@@ -531,8 +531,8 @@ TEST(MPTokenIssuanceTests, OptionalFieldsReturnNullopt)
EXPECT_FALSE(entry.getMPTokenMetadata().has_value());
EXPECT_FALSE(entry.hasDomainID());
EXPECT_FALSE(entry.getDomainID().has_value());
EXPECT_FALSE(entry.hasMutableFlags());
EXPECT_FALSE(entry.getMutableFlags().has_value());
EXPECT_FALSE(entry.hasImmutableFlags());
EXPECT_FALSE(entry.getImmutableFlags().has_value());
EXPECT_FALSE(entry.hasReferenceHolding());
EXPECT_FALSE(entry.getReferenceHolding().has_value());
EXPECT_FALSE(entry.hasIssuerEncryptionKey());

View File

@@ -34,7 +34,7 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderSettersRoundTrip)
auto const maximumAmountValue = canonical_UINT64();
auto const mPTokenMetadataValue = canonical_VL();
auto const domainIDValue = canonical_UINT256();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
MPTokenIssuanceCreateBuilder builder{
accountValue,
@@ -48,7 +48,7 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderSettersRoundTrip)
builder.setMaximumAmount(maximumAmountValue);
builder.setMPTokenMetadata(mPTokenMetadataValue);
builder.setDomainID(domainIDValue);
builder.setMutableFlags(mutableFlagsValue);
builder.setImmutableFlags(immutableFlagsValue);
auto tx = builder.build(publicKey, secretKey);
@@ -107,11 +107,11 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderSettersRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const actualOpt = tx.getMutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfMutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfMutableFlags");
EXPECT_TRUE(tx.hasMutableFlags());
auto const& expected = immutableFlagsValue;
auto const actualOpt = tx.getImmutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfImmutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfImmutableFlags");
EXPECT_TRUE(tx.hasImmutableFlags());
}
}
@@ -135,7 +135,7 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderFromStTxRoundTrip)
auto const maximumAmountValue = canonical_UINT64();
auto const mPTokenMetadataValue = canonical_VL();
auto const domainIDValue = canonical_UINT256();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
// Build an initial transaction
MPTokenIssuanceCreateBuilder initialBuilder{
@@ -149,7 +149,7 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderFromStTxRoundTrip)
initialBuilder.setMaximumAmount(maximumAmountValue);
initialBuilder.setMPTokenMetadata(mPTokenMetadataValue);
initialBuilder.setDomainID(domainIDValue);
initialBuilder.setMutableFlags(mutableFlagsValue);
initialBuilder.setImmutableFlags(immutableFlagsValue);
auto initialTx = initialBuilder.build(publicKey, secretKey);
@@ -204,10 +204,10 @@ TEST(TransactionsMPTokenIssuanceCreateTests, BuilderFromStTxRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const actualOpt = rebuiltTx.getMutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfMutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfMutableFlags");
auto const& expected = immutableFlagsValue;
auto const actualOpt = rebuiltTx.getImmutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfImmutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfImmutableFlags");
}
}
@@ -275,8 +275,8 @@ TEST(TransactionsMPTokenIssuanceCreateTests, OptionalFieldsReturnNullopt)
EXPECT_FALSE(tx.getMPTokenMetadata().has_value());
EXPECT_FALSE(tx.hasDomainID());
EXPECT_FALSE(tx.getDomainID().has_value());
EXPECT_FALSE(tx.hasMutableFlags());
EXPECT_FALSE(tx.getMutableFlags().has_value());
EXPECT_FALSE(tx.hasImmutableFlags());
EXPECT_FALSE(tx.getImmutableFlags().has_value());
}
}

View File

@@ -34,7 +34,7 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderSettersRoundTrip)
auto const domainIDValue = canonical_UINT256();
auto const mPTokenMetadataValue = canonical_VL();
auto const transferFeeValue = canonical_UINT16();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
auto const issuerEncryptionKeyValue = canonical_VL();
auto const auditorEncryptionKeyValue = canonical_VL();
@@ -50,7 +50,7 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderSettersRoundTrip)
builder.setDomainID(domainIDValue);
builder.setMPTokenMetadata(mPTokenMetadataValue);
builder.setTransferFee(transferFeeValue);
builder.setMutableFlags(mutableFlagsValue);
builder.setImmutableFlags(immutableFlagsValue);
builder.setIssuerEncryptionKey(issuerEncryptionKeyValue);
builder.setAuditorEncryptionKey(auditorEncryptionKeyValue);
@@ -109,11 +109,11 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderSettersRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const actualOpt = tx.getMutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfMutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfMutableFlags");
EXPECT_TRUE(tx.hasMutableFlags());
auto const& expected = immutableFlagsValue;
auto const actualOpt = tx.getImmutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfImmutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfImmutableFlags");
EXPECT_TRUE(tx.hasImmutableFlags());
}
{
@@ -153,7 +153,7 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderFromStTxRoundTrip)
auto const domainIDValue = canonical_UINT256();
auto const mPTokenMetadataValue = canonical_VL();
auto const transferFeeValue = canonical_UINT16();
auto const mutableFlagsValue = canonical_UINT32();
auto const immutableFlagsValue = canonical_UINT32();
auto const issuerEncryptionKeyValue = canonical_VL();
auto const auditorEncryptionKeyValue = canonical_VL();
@@ -169,7 +169,7 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderFromStTxRoundTrip)
initialBuilder.setDomainID(domainIDValue);
initialBuilder.setMPTokenMetadata(mPTokenMetadataValue);
initialBuilder.setTransferFee(transferFeeValue);
initialBuilder.setMutableFlags(mutableFlagsValue);
initialBuilder.setImmutableFlags(immutableFlagsValue);
initialBuilder.setIssuerEncryptionKey(issuerEncryptionKeyValue);
initialBuilder.setAuditorEncryptionKey(auditorEncryptionKeyValue);
@@ -225,10 +225,10 @@ TEST(TransactionsMPTokenIssuanceSetTests, BuilderFromStTxRoundTrip)
}
{
auto const& expected = mutableFlagsValue;
auto const actualOpt = rebuiltTx.getMutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfMutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfMutableFlags");
auto const& expected = immutableFlagsValue;
auto const actualOpt = rebuiltTx.getImmutableFlags();
ASSERT_TRUE(actualOpt.has_value()) << "Optional field sfImmutableFlags should be present";
expectEqualField(expected, *actualOpt, "sfImmutableFlags");
}
{
@@ -310,8 +310,8 @@ TEST(TransactionsMPTokenIssuanceSetTests, OptionalFieldsReturnNullopt)
EXPECT_FALSE(tx.getMPTokenMetadata().has_value());
EXPECT_FALSE(tx.hasTransferFee());
EXPECT_FALSE(tx.getTransferFee().has_value());
EXPECT_FALSE(tx.hasMutableFlags());
EXPECT_FALSE(tx.getMutableFlags().has_value());
EXPECT_FALSE(tx.hasImmutableFlags());
EXPECT_FALSE(tx.getImmutableFlags().has_value());
EXPECT_FALSE(tx.hasIssuerEncryptionKey());
EXPECT_FALSE(tx.getIssuerEncryptionKey().has_value());
EXPECT_FALSE(tx.hasAuditorEncryptionKey());