# ConfidentialMPTClawback [[Source]](https://github.com/XRPLF/rippled/blob/eeb0d15ea97ed506c65406635edf301eff62a6fd/src/libxrpl/tx/transactors/token/ConfidentialMPTClawback.cpp) Claw back a holder's *entire* confidential balance (inbox and spending), removing it from circulation. Unlike a regular [Clawback](https://xrpl.org/docs/references/protocol/transactions/types/clawback), confidential balances are encrypted, so the issuer must provide the plaintext total amount to claw back and a Zero-Knowledge Proof (ZKP) validating the amount. *(Requires the [ConfidentialTransfers amendment](https://xls.xrpl.org/xls/XLS-0096-confidential-mpt.html) )* ## Example JSON ```json { "TransactionType": "ConfidentialMPTClawback", "Account": "rIssuerAccount...", "Holder": "rMaliciousHolder...", "MPTokenIssuanceID": "610F33B8EBF7EC795F822A454FB852156AEFE50BE0CB8326338A81CD74801864", "MPTAmount": "1000", "ZKProof": "a1b2...", "Fee": "12", "Sequence": 2470665, "Flags": 2147483648 } ``` ## Fields In addition to the [common fields](https://xrpl.org/docs/references/protocol/transactions/common-fields#transaction-common-fields), transactions use the following fields: | Field | JSON Type | [Internal Type](https://xrpl.org/docs/references/protocol/binary-format/) | Required? | Description | | --- | --- | --- | --- | --- | | `Holder` | String | AccountID | Yes | The account from which funds are being clawed back. | | `MPTokenIssuanceID` | String | UInt192 | Yes | The unique identifier for the MPT issuance. | | `MPTAmount` | String | UInt64 | Yes | The plaintext total amount being removed. | | `ZKProof` | String | Blob | Yes | An Equality Proof validating the amount. | ## Error Cases Besides errors that can occur for all transactions, transactions can result in the following [transaction result codes](https://xrpl.org/docs/references/protocol/transactions/transaction-results): | Error Code | Description | | --- | --- | | `temDISABLED` | The ConfidentialTransfer amendment is not enabled. | | `temMALFORMED` | The transaction is malformed. This can occur if:The `Account` is not the issuer of the `MPTokenIssuanceID`.The `Account` is attempting to claw back from itself.The `ZKProof` length is incorrect. | | `temBAD_AMOUNT` | `MPTAmount` is zero or exceeds the maximum limits. | | `tecNO_TARGET` | The `Holder` account does not exist. | | `tecOBJECT_NOT_FOUND` | The `MPTokenIssuance` or the holder's `MPToken` object does not exist. | | `tecNO_PERMISSION` | The transaction lacks the required permissions. This can occur if:The issuance does not have the **Can Clawback** flag set.The issuance is missing the `sfIssuerEncryptionKey`.The holder's `MPToken` is missing the `sfIssuerEncryptedBalance`. | | `tecINSUFFICIENT_FUNDS` | The `MPTAmount` exceeds the global `sfConfidentialOutstandingAmount`. | | `tecBAD_PROOF` | The ZKP fails to prove that the `sfIssuerEncryptedBalance` (the mirror balance) encrypts the plaintext `MPTAmount`. |