From 03b5a24599978b749564a6aeb1457edec08604ce Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Tue, 6 Jan 2026 21:14:22 +0000 Subject: [PATCH 1/2] chore: store e3 requester --- crates/evm-helpers/src/contracts.rs | 1 + crates/evm-helpers/src/events.rs | 1 + crates/indexer/src/indexer.rs | 1 + crates/indexer/src/models.rs | 1 + .../contracts/Mocks/MockEnclave.sol | 3 ++- examples/CRISP/server/src/server/indexer.rs | 6 +++++- examples/CRISP/server/src/server/models.rs | 11 +++++++++++ examples/CRISP/server/src/server/repo.rs | 4 +++- .../interfaces/IEnclave.sol/IEnclave.json | 17 ++++++++++++++++- .../enclave-contracts/contracts/Enclave.sol | 1 + .../contracts/interfaces/IE3.sol | 2 ++ 11 files changed, 44 insertions(+), 4 deletions(-) diff --git a/crates/evm-helpers/src/contracts.rs b/crates/evm-helpers/src/contracts.rs index 4921e21991..b3eb8db57e 100644 --- a/crates/evm-helpers/src/contracts.rs +++ b/crates/evm-helpers/src/contracts.rs @@ -54,6 +54,7 @@ sol! { bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; + address requester; } #[derive(Debug)] diff --git a/crates/evm-helpers/src/events.rs b/crates/evm-helpers/src/events.rs index 3706890623..b2197fbb14 100644 --- a/crates/evm-helpers/src/events.rs +++ b/crates/evm-helpers/src/events.rs @@ -41,6 +41,7 @@ sol! { bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; + address requester; } #[derive(Debug)] diff --git a/crates/indexer/src/indexer.rs b/crates/indexer/src/indexer.rs index a2a968b3f2..e185af91e0 100644 --- a/crates/indexer/src/indexer.rs +++ b/crates/indexer/src/indexer.rs @@ -419,6 +419,7 @@ impl EnclaveIndexer { seed, start_window, threshold: e3.threshold, + requester: e3.requester.to_string(), }; let mut repo = E3Repository::new(db, e3_id); diff --git a/crates/indexer/src/models.rs b/crates/indexer/src/models.rs index 96a7b17d86..ce19072bd6 100644 --- a/crates/indexer/src/models.rs +++ b/crates/indexer/src/models.rs @@ -26,4 +26,5 @@ pub struct E3 { pub seed: [u8; 32], pub start_window: [u64; 2], pub threshold: [u32; 2], + pub requester: String, } diff --git a/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol b/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol index b555ff3ce2..abf647f2b5 100644 --- a/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol +++ b/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol @@ -37,7 +37,8 @@ contract MockEnclave { decryptionVerifier: IDecryptionVerifier(address(0)), committeePublicKey: committeePublicKey, ciphertextOutput: bytes32(0), - plaintextOutput: plaintextOutput + plaintextOutput: plaintextOutput, + requester: address(0) }); } } diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index 95b7c45f30..d5d92880f9 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -46,9 +46,13 @@ pub async fn register_e3_requested( let e3_id = event.e3Id.to::(); let mut repo = CrispE3Repository::new(store.clone(), e3_id); + let contract = ctx.contract(); + info!("[e3_id={}] E3Requested: {:?}", e3_id, event); async move { + let e3 = contract.get_e3(event.e3Id).await?; + // Convert custom params bytes back to token address and balance threshold. // Use sol_data types instead of primitives @@ -71,7 +75,7 @@ pub async fn register_e3_requested( .with_context(|| "Invalid token address")?; // save the e3 details - repo.initialize_round(custom_params.token_address, custom_params.balance_threshold) + repo.initialize_round(custom_params.token_address, custom_params.balance_threshold, e3.requester.to_string()) .await?; // Get token holders from Etherscan API or mocked data. diff --git a/examples/CRISP/server/src/server/models.rs b/examples/CRISP/server/src/server/models.rs index 45ef577b4d..ab0f2b36ec 100644 --- a/examples/CRISP/server/src/server/models.rs +++ b/examples/CRISP/server/src/server/models.rs @@ -105,6 +105,11 @@ pub struct GetRoundRequest { pub round_id: u64, } +#[derive(Debug, Deserialize, Serialize)] +pub struct GetRoundsByRequester { + pub requester: String, +} + #[derive(Debug, Deserialize, Serialize)] pub struct PreviousCiphertextRequest { pub round_id: u64, @@ -177,6 +182,8 @@ pub struct E3StateLite { pub token_address: String, pub balance_threshold: String, + + pub requester: String, } #[derive(Debug, Deserialize, Serialize)] @@ -212,6 +219,9 @@ pub struct E3 { // Custom Parameters pub custom_params: CustomParams, + + // The address that requested the E3 + pub requester: String, } #[derive(Debug, Deserialize, Serialize)] @@ -227,6 +237,7 @@ pub struct E3Crisp { pub token_address: String, pub balance_threshold: String, pub ciphertext_inputs: Vec<(Vec, u64)>, + pub requester: String, } impl From for WebResultRequest { diff --git a/examples/CRISP/server/src/server/repo.rs b/examples/CRISP/server/src/server/repo.rs index 7c86dd6a03..8919a24008 100644 --- a/examples/CRISP/server/src/server/repo.rs +++ b/examples/CRISP/server/src/server/repo.rs @@ -134,6 +134,7 @@ impl CrispE3Repository { &mut self, token_address: String, balance_threshold: String, + requester: String, ) -> Result<()> { self.set_crisp(E3Crisp { has_voted: vec![], @@ -147,6 +148,7 @@ impl CrispE3Repository { token_address, balance_threshold, ciphertext_inputs: vec![], + requester }) .await } @@ -237,6 +239,7 @@ impl CrispE3Repository { committee_public_key: e3.committee_public_key, token_address: e3_crisp.token_address, balance_threshold: e3_crisp.balance_threshold, + requester: e3_crisp.requester, }) } @@ -315,7 +318,6 @@ impl CrispE3Repository { pub async fn set_eligible_addresses(&mut self, holders: Vec) -> Result<()> { let key = self.crisp_key(); - // Placeholder for future implementation self.store .modify(&key, |e3_obj: Option| { diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json index c68510e8de..9445c19e4e 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json @@ -192,6 +192,11 @@ "internalType": "bytes", "name": "plaintextOutput", "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" } ], "indexed": false, @@ -525,6 +530,11 @@ "internalType": "bytes", "name": "plaintextOutput", "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" } ], "internalType": "struct E3", @@ -796,6 +806,11 @@ "internalType": "bytes", "name": "plaintextOutput", "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" } ], "internalType": "struct E3", @@ -932,5 +947,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/IEnclave.sol", - "buildInfoId": "solc-0_8_28-88174d36ce3bdcc25dc9fa934311dccaec8cde55" + "buildInfoId": "solc-0_8_28-723f70610433e7159eeb1220688bb4d784c9ed3e" } \ No newline at end of file diff --git a/packages/enclave-contracts/contracts/Enclave.sol b/packages/enclave-contracts/contracts/Enclave.sol index 0f0406a07a..8f78389042 100644 --- a/packages/enclave-contracts/contracts/Enclave.sol +++ b/packages/enclave-contracts/contracts/Enclave.sol @@ -257,6 +257,7 @@ contract Enclave is IEnclave, OwnableUpgradeable { e3.committeePublicKey = hex""; e3.ciphertextOutput = hex""; e3.plaintextOutput = hex""; + e3.requester = msg.sender; bytes32 encryptionSchemeId = requestParams.e3Program.validate( e3Id, diff --git a/packages/enclave-contracts/contracts/interfaces/IE3.sol b/packages/enclave-contracts/contracts/interfaces/IE3.sol index 7f8270cbf4..545ec7c1c7 100644 --- a/packages/enclave-contracts/contracts/interfaces/IE3.sol +++ b/packages/enclave-contracts/contracts/interfaces/IE3.sol @@ -27,6 +27,7 @@ import { IDecryptionVerifier } from "./IDecryptionVerifier.sol"; * @param committeePublicKey Hash of the public key of the selected committee for this computation * @param ciphertextOutput Hash of the encrypted output data produced by the computation * @param plaintextOutput Decrypted output data after committee decryption + * @param requester Address of the entity that requested the E3 computation */ struct E3 { uint256 seed; @@ -43,4 +44,5 @@ struct E3 { bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; + address requester; } From d60556679c8f901baa93669db9373663b629f96c Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Tue, 6 Jan 2026 21:16:36 +0000 Subject: [PATCH 2/2] chore: remove redundant code --- examples/CRISP/server/src/server/models.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/CRISP/server/src/server/models.rs b/examples/CRISP/server/src/server/models.rs index ab0f2b36ec..ae5001c807 100644 --- a/examples/CRISP/server/src/server/models.rs +++ b/examples/CRISP/server/src/server/models.rs @@ -105,11 +105,6 @@ pub struct GetRoundRequest { pub round_id: u64, } -#[derive(Debug, Deserialize, Serialize)] -pub struct GetRoundsByRequester { - pub requester: String, -} - #[derive(Debug, Deserialize, Serialize)] pub struct PreviousCiphertextRequest { pub round_id: u64,