From 4362012fcbeb265c3da486e75dadfcadc987d29f Mon Sep 17 00:00:00 2001 From: Sosthene Date: Sat, 30 Nov 2024 23:29:48 +0100 Subject: [PATCH] Add evaluate_state api --- src/api.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/api.rs b/src/api.rs index ae16a12..513f360 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1413,6 +1413,26 @@ pub fn refuse_state(init_commitment: String, merkle_root_hex: String) -> ApiResu add_validation_token(init_commitment, merkle_root_hex, false) } +#[wasm_bindgen] +pub fn evaluate_state(init_commitment: String, previous_state: Option, state: String) -> ApiResult { + let prev_state: Option = if let Some(s) = previous_state { Some(serde_json::from_str(&s)?) } else { None }; + let process_state: ProcessState = serde_json::from_str(&state)?; + + process_state.is_valid(prev_state.as_ref())?; + + let clear_pcd = process_state.decrypt_pcd()?; + let roles = clear_pcd.extract_roles()?; + + // We create a commit msg with the valid state + let outpoint: OutPoint = OutPoint::from_str(&init_commitment)?; + let commit_msg = CommitMessage::new_update_commitment(outpoint, process_state.pcd_commitment, roles); + + Ok(ApiReturn { + commit_to_send: Some(commit_msg), + ..Default::default() + }) +} + fn add_validation_token(init_commitment: String, merkle_root_hex: String, approval: bool) -> ApiResult { let mut merkle_root = [0u8; 32]; let pcd_commitment_vec = Vec::from_hex(&merkle_root_hex)?; @@ -1440,11 +1460,17 @@ fn add_validation_token(init_commitment: String, merkle_root_hex: String, approv let sp_wallet = local_device.get_wallet(); let proof = Proof::new(message_hash, sp_wallet.get_client().get_spend_key().try_into()?); + // we copy the state before modifying it + let previous_state = update_state.clone(); + update_state.validation_tokens.push(proof); + let new_state = update_state.clone(); + let updated_process = UpdatedProcess { commitment_tx: OutPoint::from_str(&init_commitment)?, current_process: process.clone(), + modified_state: Some((previous_state, new_state)), ..Default::default() };