Roles in process state
This commit is contained in:
parent
7a6ad926f0
commit
616dc21aa9
@ -68,22 +68,11 @@ pub(crate) fn handle_commit_request(commit_msg: CommitMessage) -> Result<OutPoin
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn handle_new_process(commit_msg: &CommitMessage) -> Result<Process> {
|
fn handle_new_process(commit_msg: &CommitMessage) -> Result<Process> {
|
||||||
// Process roles and commitments
|
|
||||||
let roles_only_map = json!({ "roles": serde_json::to_value(commit_msg.roles.clone())? });
|
|
||||||
|
|
||||||
let parsed_roles = roles_only_map.extract_roles()?;
|
|
||||||
// let roles_commitment = roles_only_map.hash_fields(root_commitment)?;
|
|
||||||
|
|
||||||
// TODO make that kind of check reliable, needs more work on json serialization
|
|
||||||
// if roles_commitment.get("roles") != commit_msg.pcd_commitment.get("roles") {
|
|
||||||
// return Err(Error::msg("Role commitment mismatch"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
let pcd_commitment = &commit_msg.pcd_commitment;
|
let pcd_commitment = &commit_msg.pcd_commitment;
|
||||||
|
|
||||||
let merkle_root_bin = pcd_commitment.create_merkle_tree()?.root().unwrap();
|
let merkle_root_bin = pcd_commitment.create_merkle_tree()?.root().unwrap();
|
||||||
|
|
||||||
if let Ok(pairing_process_id) = handle_member_list(&parsed_roles, commit_msg.process_id) {
|
if let Ok(pairing_process_id) = handle_member_list(&commit_msg.roles, commit_msg.process_id) {
|
||||||
dump_cached_members()?;
|
dump_cached_members()?;
|
||||||
// Send a handshake message to every connected client
|
// Send a handshake message to every connected client
|
||||||
if let Some(new_member) = lock_members().unwrap().get(&pairing_process_id) {
|
if let Some(new_member) = lock_members().unwrap().get(&pairing_process_id) {
|
||||||
@ -117,7 +106,7 @@ fn handle_new_process(commit_msg: &CommitMessage) -> Result<Process> {
|
|||||||
let mut new_process = Process::new(commit_msg.process_id);
|
let mut new_process = Process::new(commit_msg.process_id);
|
||||||
let init_state = ProcessState {
|
let init_state = ProcessState {
|
||||||
commited_in: commit_msg.process_id,
|
commited_in: commit_msg.process_id,
|
||||||
encrypted_pcd: roles_only_map,
|
roles: commit_msg.roles.clone().into_iter().collect(),
|
||||||
pcd_commitment: commit_msg.pcd_commitment.clone(),
|
pcd_commitment: commit_msg.pcd_commitment.clone(),
|
||||||
state_id: merkle_root_bin.to_lower_hex_string(),
|
state_id: merkle_root_bin.to_lower_hex_string(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -142,13 +131,6 @@ fn handle_member_list(roles: &HashMap<String, RoleDefinition>, process_id: OutPo
|
|||||||
return Err(Error::msg("Process is not a pairing process"));
|
return Err(Error::msg("Process is not a pairing process"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Check if process have a pairing role
|
|
||||||
if let Some((role_name,_)) = roles.iter().next(){
|
|
||||||
if role_name != "pairing" {
|
|
||||||
return Err(Error::msg("Process is not a pairing process"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(pairing_role) = roles.get("pairing") {
|
if let Some(pairing_role) = roles.get("pairing") {
|
||||||
if pairing_role.members.len() == 1 {
|
if pairing_role.members.len() == 1 {
|
||||||
let member = pairing_role.members.get(0).unwrap();
|
let member = pairing_role.members.get(0).unwrap();
|
||||||
@ -243,12 +225,11 @@ fn register_new_state(process: &mut Process, commit_msg: &CommitMessage) -> Resu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add the new state
|
// Add the new state
|
||||||
let roles_only_map = json!({ "roles": serde_json::to_value(&commit_msg.roles)? });
|
|
||||||
let new_state = ProcessState {
|
let new_state = ProcessState {
|
||||||
commited_in: current_outpoint,
|
commited_in: current_outpoint,
|
||||||
pcd_commitment: commit_msg.pcd_commitment.clone(),
|
pcd_commitment: commit_msg.pcd_commitment.clone(),
|
||||||
encrypted_pcd: roles_only_map,
|
|
||||||
state_id: new_state_id.clone(),
|
state_id: new_state_id.clone(),
|
||||||
|
roles: commit_msg.roles.clone().into_iter().collect(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
process.insert_concurrent_state(new_state)?;
|
process.insert_concurrent_state(new_state)?;
|
||||||
@ -260,17 +241,22 @@ fn register_new_state(process: &mut Process, commit_msg: &CommitMessage) -> Resu
|
|||||||
fn process_validation(updated_process: &mut Process, commit_msg: &CommitMessage) -> Result<OutPoint> {
|
fn process_validation(updated_process: &mut Process, commit_msg: &CommitMessage) -> Result<OutPoint> {
|
||||||
let new_state_id = commit_msg.pcd_commitment.create_merkle_tree()?.root().ok_or(Error::msg("Invalid merkle tree"))?;
|
let new_state_id = commit_msg.pcd_commitment.create_merkle_tree()?.root().ok_or(Error::msg("Invalid merkle tree"))?;
|
||||||
let new_state_id_hex = new_state_id.to_lower_hex_string();
|
let new_state_id_hex = new_state_id.to_lower_hex_string();
|
||||||
let mut state_to_validate = updated_process
|
{
|
||||||
.get_latest_concurrent_states()?
|
let state_to_update = updated_process
|
||||||
.into_iter()
|
.get_state_for_id_mut(&new_state_id_hex)?;
|
||||||
.find(|state| state.state_id == new_state_id_hex)
|
|
||||||
.ok_or(Error::msg("Unknown state"))?
|
|
||||||
.clone();
|
|
||||||
|
|
||||||
state_to_validate.validation_tokens = commit_msg.validation_tokens.clone();
|
// Complete with the received tokens
|
||||||
|
state_to_update.validation_tokens.extend(commit_msg.validation_tokens.iter());
|
||||||
|
|
||||||
|
state_to_update.validation_tokens.sort_unstable();
|
||||||
|
state_to_update.validation_tokens.dedup();
|
||||||
|
}
|
||||||
|
|
||||||
|
let state_to_validate = updated_process
|
||||||
|
.get_state_for_id(&new_state_id_hex)?;
|
||||||
state_to_validate.is_valid(updated_process.get_latest_commited_state())?;
|
state_to_validate.is_valid(updated_process.get_latest_commited_state())?;
|
||||||
|
|
||||||
let commited_in = commit_new_transaction(updated_process, state_to_validate)?;
|
let commited_in = commit_new_transaction(updated_process, state_to_validate.clone())?;
|
||||||
|
|
||||||
Ok(commited_in)
|
Ok(commited_in)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user