Add public_data
This commit is contained in:
parent
f0c52f6597
commit
d9d2bcd9d0
49
src/api.rs
49
src/api.rs
@ -766,12 +766,12 @@ fn create_diffs(process: &Process, new_state: &ProcessState) -> AnyhowResult<Vec
|
|||||||
|
|
||||||
let new_state_root = &new_state.state_id;
|
let new_state_root = &new_state.state_id;
|
||||||
|
|
||||||
let new_state_descriptions = &new_state.descriptions;
|
let new_public_data = &new_state.public_data;
|
||||||
|
|
||||||
let process_id = process.get_process_id()?.to_string();
|
let process_id = process.get_process_id()?.to_string();
|
||||||
let mut diffs = vec![];
|
let mut diffs = vec![];
|
||||||
for (field, hash) in new_state_commitments {
|
for (field, hash) in new_state_commitments {
|
||||||
let description = new_state_descriptions.get(field).map(|d| d.to_string());
|
let description = new_public_data.get(field).map(|d| d.to_string());
|
||||||
let need_validation = fields_to_validate.contains(field);
|
let need_validation = fields_to_validate.contains(field);
|
||||||
diffs.push(UserDiff {
|
diffs.push(UserDiff {
|
||||||
process_id: process_id.clone(),
|
process_id: process_id.clone(),
|
||||||
@ -954,7 +954,8 @@ fn handle_prd(
|
|||||||
let mut commit_msg = CommitMessage::new_update_commitment(
|
let mut commit_msg = CommitMessage::new_update_commitment(
|
||||||
OutPoint::from_str(&prd.process_id)?,
|
OutPoint::from_str(&prd.process_id)?,
|
||||||
updated_state.pcd_commitment,
|
updated_state.pcd_commitment,
|
||||||
updated_state.roles.clone().into_iter().collect()
|
updated_state.roles.clone().into_iter().collect(),
|
||||||
|
updated_state.public_data.clone()
|
||||||
);
|
);
|
||||||
|
|
||||||
commit_msg.set_validation_tokens(updated_state.validation_tokens);
|
commit_msg.set_validation_tokens(updated_state.validation_tokens);
|
||||||
@ -1222,14 +1223,14 @@ pub fn create_connect_transaction(addresses: Vec<String>, fee_rate: u32) -> ApiR
|
|||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn create_new_process(
|
pub fn create_new_process(
|
||||||
init_state_str: String,
|
init_state_str: String,
|
||||||
roles: String,
|
roles: JsValue,
|
||||||
descriptions_str: Option<String>,
|
public_data: JsValue,
|
||||||
relay_address: String,
|
relay_address: String,
|
||||||
fee_rate: u32,
|
fee_rate: u32,
|
||||||
) -> ApiResult<ApiReturn> {
|
) -> ApiResult<ApiReturn> {
|
||||||
let init_state = <Value as Pcd>::new_from_string(&init_state_str)?;
|
let init_state: Value = <Value as Pcd>::new_from_string(&init_state_str)?;
|
||||||
let roles: BTreeMap<String, RoleDefinition> = serde_json::from_str(&roles)?;
|
let roles: BTreeMap<String, RoleDefinition> = serde_wasm_bindgen::from_value(roles)?;
|
||||||
let descriptions = if let Some(d) = descriptions_str { <Value as Pcd>::new_from_string(&d)? } else { Value::Object(Map::new()) };
|
let public_data: BTreeMap<String, String> = serde_wasm_bindgen::from_value(public_data)?;
|
||||||
|
|
||||||
// We create a transaction that spends to the relay address
|
// We create a transaction that spends to the relay address
|
||||||
let psbt = create_transaction_for_addresses(vec![relay_address.clone()], fee_rate)?;
|
let psbt = create_transaction_for_addresses(vec![relay_address.clone()], fee_rate)?;
|
||||||
@ -1251,7 +1252,7 @@ pub fn create_new_process(
|
|||||||
|
|
||||||
let new_tx_msg = NewTxMessage::new(serialize(&transaction).to_lower_hex_string(), None);
|
let new_tx_msg = NewTxMessage::new(serialize(&transaction).to_lower_hex_string(), None);
|
||||||
|
|
||||||
let mut new_state = ProcessState::new(process_id, init_state.to_value_object()?, descriptions.to_value_object()?, roles.clone())?;
|
let mut new_state = ProcessState::new(process_id, init_state.as_object().unwrap().clone(), &public_data, roles.clone())?;
|
||||||
|
|
||||||
let pcd_commitment = new_state.pcd_commitment.clone();
|
let pcd_commitment = new_state.pcd_commitment.clone();
|
||||||
|
|
||||||
@ -1288,7 +1289,8 @@ pub fn create_new_process(
|
|||||||
let commit_msg = CommitMessage::new_update_commitment(
|
let commit_msg = CommitMessage::new_update_commitment(
|
||||||
process_id,
|
process_id,
|
||||||
pcd_commitment,
|
pcd_commitment,
|
||||||
roles.into_iter().collect()
|
roles.into_iter().collect(),
|
||||||
|
public_data,
|
||||||
);
|
);
|
||||||
|
|
||||||
let updated_process = UpdatedProcess {
|
let updated_process = UpdatedProcess {
|
||||||
@ -1313,12 +1315,14 @@ pub fn create_new_process(
|
|||||||
pub fn update_process(
|
pub fn update_process(
|
||||||
process: JsValue,
|
process: JsValue,
|
||||||
new_attributes: JsValue,
|
new_attributes: JsValue,
|
||||||
roles: JsValue
|
roles: JsValue,
|
||||||
|
new_public_data: JsValue,
|
||||||
) -> ApiResult<ApiReturn> {
|
) -> ApiResult<ApiReturn> {
|
||||||
let mut process: Process = serde_wasm_bindgen::from_value(process)?;
|
let mut process: Process = serde_wasm_bindgen::from_value(process)?;
|
||||||
let new_attributes: Value = serde_wasm_bindgen::from_value(new_attributes)?;
|
let new_attributes: Value = serde_wasm_bindgen::from_value(new_attributes)?;
|
||||||
let roles: BTreeMap<String, RoleDefinition> = serde_wasm_bindgen::from_value(roles)?;
|
let roles: BTreeMap<String, RoleDefinition> = serde_wasm_bindgen::from_value(roles)?;
|
||||||
debug!("{:#?}", process);
|
let new_public_data: BTreeMap<String, String> = serde_wasm_bindgen::from_value(new_public_data)?;
|
||||||
|
// debug!("{:#?}", process);
|
||||||
// debug!("{:#?}", new_attributes);
|
// debug!("{:#?}", new_attributes);
|
||||||
// debug!("{:#?}", roles);
|
// debug!("{:#?}", roles);
|
||||||
|
|
||||||
@ -1327,7 +1331,7 @@ pub fn update_process(
|
|||||||
let prev_state = process.get_latest_commited_state()
|
let prev_state = process.get_latest_commited_state()
|
||||||
.ok_or(ApiError::new("Process must have at least one state already commited".to_owned()))?;
|
.ok_or(ApiError::new("Process must have at least one state already commited".to_owned()))?;
|
||||||
|
|
||||||
let last_state_descriptions = &prev_state.descriptions;
|
let public_data = if new_public_data.len() > 0 { new_public_data } else { prev_state.public_data.clone() };
|
||||||
|
|
||||||
// We expect the whole set of attributes for now, even if value does'nt change since previous state
|
// We expect the whole set of attributes for now, even if value does'nt change since previous state
|
||||||
// We rehash everything with the new txid, so we need the clear value
|
// We rehash everything with the new txid, so we need the clear value
|
||||||
@ -1335,12 +1339,10 @@ pub fn update_process(
|
|||||||
let mut new_state = ProcessState::new(
|
let mut new_state = ProcessState::new(
|
||||||
process.get_process_tip()?,
|
process.get_process_tip()?,
|
||||||
new_attributes.to_value_object()?,
|
new_attributes.to_value_object()?,
|
||||||
last_state_descriptions.clone(),
|
&public_data,
|
||||||
roles.clone()
|
roles.clone()
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
debug!("1");
|
|
||||||
|
|
||||||
// We compare the new state with the previous one
|
// We compare the new state with the previous one
|
||||||
let last_state_merkle_root = &prev_state.state_id;
|
let last_state_merkle_root = &prev_state.state_id;
|
||||||
|
|
||||||
@ -1355,14 +1357,11 @@ pub fn update_process(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let diffs = create_diffs(&process, &new_state)?;
|
let diffs = create_diffs(&process, &new_state)?;
|
||||||
debug!("1");
|
|
||||||
|
|
||||||
let all_fields: Vec<String> = new_attributes.as_object().unwrap().into_iter().map(|(field, _)| field.clone()).collect();
|
let all_fields: Vec<String> = new_attributes.as_object().unwrap().into_iter().map(|(field, _)| field.clone()).collect();
|
||||||
debug!("1");
|
|
||||||
let mut fields2keys = Map::new();
|
let mut fields2keys = Map::new();
|
||||||
let mut fields2cipher = Map::new();
|
let mut fields2cipher = Map::new();
|
||||||
new_attributes.encrypt_fields(&all_fields, &mut fields2keys, &mut fields2cipher);
|
new_attributes.encrypt_fields(&all_fields, &mut fields2keys, &mut fields2cipher);
|
||||||
debug!("1");
|
|
||||||
|
|
||||||
new_state.keys = fields2keys;
|
new_state.keys = fields2keys;
|
||||||
|
|
||||||
@ -1374,7 +1373,6 @@ pub fn update_process(
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
debug!("1");
|
|
||||||
// Add the new state to the process
|
// Add the new state to the process
|
||||||
process.insert_concurrent_state(new_state.clone())?;
|
process.insert_concurrent_state(new_state.clone())?;
|
||||||
|
|
||||||
@ -1396,7 +1394,9 @@ pub fn update_process(
|
|||||||
let commit_msg = CommitMessage::new_update_commitment(
|
let commit_msg = CommitMessage::new_update_commitment(
|
||||||
process_id,
|
process_id,
|
||||||
new_state.pcd_commitment,
|
new_state.pcd_commitment,
|
||||||
roles.into_iter().collect());
|
roles.into_iter().collect(),
|
||||||
|
new_state.public_data,
|
||||||
|
);
|
||||||
|
|
||||||
Ok(ApiReturn {
|
Ok(ApiReturn {
|
||||||
updated_process: Some(updated_process),
|
updated_process: Some(updated_process),
|
||||||
@ -1570,7 +1570,8 @@ pub fn evaluate_state(process_id: String, previous_state: Option<String>, state:
|
|||||||
let commit_msg = CommitMessage::new_update_commitment(
|
let commit_msg = CommitMessage::new_update_commitment(
|
||||||
outpoint,
|
outpoint,
|
||||||
process_state.pcd_commitment,
|
process_state.pcd_commitment,
|
||||||
process_state.roles.clone().into_iter().collect()
|
process_state.roles.clone().into_iter().collect(),
|
||||||
|
process_state.public_data,
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(ApiReturn {
|
Ok(ApiReturn {
|
||||||
@ -1621,6 +1622,7 @@ fn add_validation_token(process_id: String, state_id: String, approval: bool) ->
|
|||||||
process.get_process_id()?,
|
process.get_process_id()?,
|
||||||
pcd_commitment,
|
pcd_commitment,
|
||||||
update_state.roles.clone().into_iter().collect(),
|
update_state.roles.clone().into_iter().collect(),
|
||||||
|
update_state.public_data.clone(),
|
||||||
);
|
);
|
||||||
commit_msg.set_validation_tokens(update_state.validation_tokens.clone());
|
commit_msg.set_validation_tokens(update_state.validation_tokens.clone());
|
||||||
Some(commit_msg)
|
Some(commit_msg)
|
||||||
@ -1806,6 +1808,7 @@ pub fn roles_contains_us(role: String) -> ApiResult<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO this is wrong, and we want to move that in ts anyway
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn roles_contains_member(roles: String, member_str: Vec<String>) -> ApiResult<()> {
|
pub fn roles_contains_member(roles: String, member_str: Vec<String>) -> ApiResult<()> {
|
||||||
let roles: BTreeMap<String, RoleDefinition> = serde_json::from_str(&roles)?;
|
let roles: BTreeMap<String, RoleDefinition> = serde_json::from_str(&roles)?;
|
||||||
@ -1862,8 +1865,6 @@ pub fn decrypt_data(key: &[u8], data: &[u8]) -> ApiResult<String> {
|
|||||||
|
|
||||||
key_buf.copy_from_slice(key);
|
key_buf.copy_from_slice(key);
|
||||||
|
|
||||||
debug!("{}", key_buf.as_hex());
|
|
||||||
|
|
||||||
// decrypt the data
|
// decrypt the data
|
||||||
let clear = decrypt_with_key(&key_buf, data)?;
|
let clear = decrypt_with_key(&key_buf, data)?;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user