add another check

This commit is contained in:
Peter Chen
2026-04-29 13:36:20 -04:00
parent 7fad75d2b2
commit d09352af59
2 changed files with 9 additions and 4 deletions

View File

@@ -448,10 +448,13 @@ ValidConfidentialMPToken::visitEntry(
bool const hasAnyHolder = hasHolderInbox || hasHolderSpending;
if (hasAnyHolder != hasIssuerBalance)
{
// sfIssuerEncryptedBalance, sfConfidentialBalanceInbox, and sfConfidentialBalanceSpending
// must all exist or not exist same time.
if (hasHolderInbox != hasHolderSpending)
changes_[id].badConsistency = true;
if (hasHolderInbox != hasIssuerBalance)
changes_[id].badConsistency = true;
}
// Privacy flag consistency
bool const hasEncrypted = hasAnyHolder || hasIssuerBalance;

View File

@@ -4306,8 +4306,10 @@ class Invariants_test : public beast::unit_test::suite
auto sleToken = ac.view().peek(keylet::mptoken(mptID, A2.id()));
if (!sleToken)
return false;
// Inject fields correctly, but the Issuance was built without the privacy flag.
// Inject all three encrypted fields consistently (inbox+spending+issuer must be
// in sync or badConsistency fires first and masks requiresPrivacyFlag).
sleToken->setFieldVL(sfConfidentialBalanceInbox, Blob{0x00});
sleToken->setFieldVL(sfConfidentialBalanceSpending, Blob{0x00});
sleToken->setFieldVL(sfIssuerEncryptedBalance, Blob{0x00});
ac.view().update(sleToken);
return true;