Skip to content

Updated Ledger Entries

The Confidential Transfers amendment updates two existing ledger entry types to support confidential balances and transfers:

  • MPTokenIssuance - Adds fields for issuer and auditor public keys, and tracks total confidential supply.
  • MPToken - Adds fields for holder public keys and encrypted confidential balances.

(Requires the ConfidentialTransfers amendment )

MPTokenIssuance

MPTokenIssuance Fields

In addition to the existing MPTokenIssuance fields, confidential MPTokenIssuance entries support:

NameJSON TypeInternal TypeRequired?Description
IssuerEncryptionKeyStringBlobNoA 33-byte compressed ElGamal public key for the issuer.
AuditorEncryptionKeyStringBlobNoA 33-byte compressed ElGamal public key for an optional on-chain auditor.
ConfidentialOutstandingAmountNumberUInt64NoThe total amount of this token that is currently held in confidential balances.

MPTokenIssuance Flags

In addition to the existing MPTokenIssuance flags, confidential MPTokenIssuance entries support:

Flag NameHex ValueDecimal ValueDescription
lsfMPTCanConfidentialAmount0x00000080128If enabled, indicates that confidential transfers and conversions are enabled for this token issuance.
lsfMPTCannotMutateCanConfidentialAmount0x00040000262144If enabled, the Can Confidential Amount flag cannot be changed after the token is issued, permanently locking the confidentiality setting.

MPToken

MPToken Fields

In addition to the existing MPToken fields, confidential MPToken entries support:

NameJSON TypeInternal TypeRequired?Description
HolderEncryptionKeyStringBlobNoThe holder's ElGamal public key for confidential balances. Present when the holder has a confidential balance.
ConfidentialBalanceInboxStringBlobNoEncrypted inbox balance that receives incoming confidential transfers. Before it can be spent, the holder must merge it into their spending balance using the ConfidentialMPTMergeInbox transaction. Present when the holder has a confidential balance.
ConfidentialBalanceSpendingStringBlobNoEncrypted spending balance used to generate proofs for outgoing transactions. Present when the holder has a confidential balance.
ConfidentialBalanceVersionNumberUInt32NoVersion number that increments each time the spending balance changes. This version is cryptographically bound to ZKPs in outgoing transactions to prevent replay attacks and ensure proof validity. If the version changes between proof generation and submission, the transaction will fail.
IssuerEncryptedBalanceStringBlobNoCopy of the holder's total confidential balance encrypted for the issuer to audit supply. Present when the holder has a confidential balance.
AuditorEncryptedBalanceStringBlobNoThe holder's total confidential balance encrypted under the auditor's key for independent auditing. Only present if an auditor is configured.