diff --git a/token/confidential-transfer/proof-generation/src/mint.rs b/token/confidential-transfer/proof-generation/src/mint.rs index a670a26ee27..8e03e6d6c1a 100644 --- a/token/confidential-transfer/proof-generation/src/mint.rs +++ b/token/confidential-transfer/proof-generation/src/mint.rs @@ -5,7 +5,6 @@ use { }, solana_zk_sdk::{ encryption::{ - auth_encryption::{AeCiphertext, AeKey}, elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, pedersen::Pedersen, }, @@ -28,7 +27,6 @@ pub struct MintProofData { pub ciphertext_validity_proof_data_with_ciphertext: CiphertextValidityProofWithAuditorCiphertext, pub range_proof_data: BatchedRangeProofU128Data, - pub new_decryptable_supply: AeCiphertext, } pub fn mint_split_proof_data( @@ -36,7 +34,6 @@ pub fn mint_split_proof_data( mint_amount: u64, current_supply: u64, supply_elgamal_keypair: &ElGamalKeypair, - supply_aes_key: &AeKey, destination_elgamal_pubkey: &ElGamalPubkey, auditor_elgamal_pubkey: Option<&ElGamalPubkey>, ) -> Result { @@ -161,6 +158,5 @@ pub fn mint_split_proof_data( equality_proof_data, ciphertext_validity_proof_data_with_ciphertext, range_proof_data, - new_decryptable_supply: supply_aes_key.encrypt(new_supply), }) } diff --git a/token/confidential-transfer/proof-tests/tests/proof_test.rs b/token/confidential-transfer/proof-tests/tests/proof_test.rs index 9bcbfa25951..b9444cd40e4 100644 --- a/token/confidential-transfer/proof-tests/tests/proof_test.rs +++ b/token/confidential-transfer/proof-tests/tests/proof_test.rs @@ -222,7 +222,6 @@ fn test_mint_validity(mint_amount: u64, supply: u64) { let auditor_pubkey = auditor_keypair.pubkey(); let supply_keypair = ElGamalKeypair::new_rand(); - let supply_aes_key = AeKey::new_rand(); let supply_ciphertext = supply_keypair.pubkey().encrypt(supply); @@ -230,13 +229,11 @@ fn test_mint_validity(mint_amount: u64, supply: u64) { equality_proof_data, ciphertext_validity_proof_data_with_ciphertext, range_proof_data, - new_decryptable_supply: _, } = mint_split_proof_data( &supply_ciphertext, mint_amount, supply, &supply_keypair, - &supply_aes_key, destination_pubkey, Some(auditor_pubkey), ) diff --git a/token/program-2022/src/extension/confidential_mint_burn/account_info.rs b/token/program-2022/src/extension/confidential_mint_burn/account_info.rs index 83477c72bb2..62d1946d608 100644 --- a/token/program-2022/src/extension/confidential_mint_burn/account_info.rs +++ b/token/program-2022/src/extension/confidential_mint_burn/account_info.rs @@ -52,7 +52,7 @@ impl SupplyAccountInfo { /// Computes the current supply from the decryptable supply and the /// difference between the decryptable supply and the ElGamal encrypted /// supply ciphertext - pub fn decrypt_current_supply( + pub fn decrypted_current_supply( &self, aes_key: &AeKey, elgamal_keypair: &ElGamalKeypair, @@ -91,7 +91,7 @@ impl SupplyAccountInfo { new_supply_elgamal_keypair: &ElGamalKeypair, ) -> Result { let current_supply = - self.decrypt_current_supply(aes_key, current_supply_elgamal_keypair)?; + self.decrypted_current_supply(aes_key, current_supply_elgamal_keypair)?; let new_supply_opening = PedersenOpening::new_rand(); let new_supply_ciphertext = new_supply_elgamal_keypair @@ -119,7 +119,6 @@ impl SupplyAccountInfo { mint_amount: u64, current_supply: u64, supply_elgamal_keypair: &ElGamalKeypair, - aes_key: &AeKey, destination_elgamal_pubkey: &ElGamalPubkey, auditor_elgamal_pubkey: Option<&ElGamalPubkey>, ) -> Result { @@ -133,12 +132,26 @@ impl SupplyAccountInfo { mint_amount, current_supply, supply_elgamal_keypair, - aes_key, destination_elgamal_pubkey, auditor_elgamal_pubkey, ) .map_err(|e| -> TokenError { e.into() }) } + + /// Compute the new decryptable supply. + pub fn new_decryptable_supply( + &self, + mint_amount: u64, + aes_key: &AeKey, + elgamal_keypair: &ElGamalKeypair, // TODO: check consistency of the order of params + ) -> Result { + let current_decrypted_supply = self.decrypted_current_supply(aes_key, elgamal_keypair)?; + let new_decrypted_available_balance = current_decrypted_supply + .checked_add(mint_amount) + .ok_or(TokenError::Overflow)?; + + Ok(aes_key.encrypt(new_decrypted_available_balance)) + } } /// Confidential Mint Burn extension information needed to construct a