diff --git a/src/api.rs b/src/api.rs index 2c8cf32..12cfef0 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1499,13 +1499,6 @@ pub fn evaluate_state(init_commitment: String, previous_state: Option, s } 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)?; - if pcd_commitment_vec.len() != 32 { - return Err(ApiError::new("pcd_commitment must be 32B long".to_owned())); - } - merkle_root.copy_from_slice(&pcd_commitment_vec); - let mut processes = lock_processes()?; let outpoint = OutPoint::from_str(&init_commitment)?; @@ -1513,29 +1506,30 @@ fn add_validation_token(init_commitment: String, merkle_root_hex: String, approv let process = processes.get_mut(&outpoint) .ok_or(ApiError::new("Unknown process".to_owned()))?; - let update_state: &mut ProcessState = process.get_state_for_commitments_root(merkle_root)?; + { + let update_state: &mut ProcessState = process.get_state_for_commitments_root_mut(&merkle_root_hex)?; - let message_hash = if approval { - AnkHash::ValidationYes(AnkValidationYesHash::from_byte_array(merkle_root)) - } else { - AnkHash::ValidationNo(AnkValidationNoHash::from_byte_array(merkle_root)) - }; + let mut merkle_root = [0u8; 32]; - let local_device = lock_local_device()?; - let sp_wallet = local_device.get_wallet(); - let proof = Proof::new(message_hash, sp_wallet.get_client().get_spend_key().try_into()?); + merkle_root.copy_from_slice(&Vec::from_hex(&merkle_root_hex)?); - // we copy the state before modifying it - let previous_state = update_state.clone(); + let message_hash = if approval { + AnkHash::ValidationYes(AnkValidationYesHash::from_merkle_root(merkle_root)) + } else { + AnkHash::ValidationNo(AnkValidationNoHash::from_merkle_root(merkle_root)) + }; - update_state.validation_tokens.push(proof); + let local_device = lock_local_device()?; + let sp_wallet = local_device.get_wallet(); + let proof = Proof::new(message_hash, sp_wallet.get_client().get_spend_key().try_into()?); - let new_state = update_state.clone(); + update_state.validation_tokens.push(proof); + } let updated_process = UpdatedProcess { commitment_tx: OutPoint::from_str(&init_commitment)?, current_process: process.clone(), - modified_state: Some((previous_state, new_state)), + modified_state: Some(merkle_root_hex), ..Default::default() };