Update ProcessState implementation with new serialization

This commit is contained in:
Sosthene 2025-06-24 17:13:24 +02:00
parent e77d27e0e4
commit ab8d556ad7

View File

@ -1,10 +1,13 @@
use std::{
collections::{BTreeMap, HashMap, HashSet}, str::FromStr, sync::{Mutex, MutexGuard, OnceLock}
};
use anyhow::Result;
use std::collections::{BTreeMap, HashMap, HashSet};
use std::sync::{Mutex, MutexGuard, OnceLock};
use std::str::FromStr;
use ciborium::from_reader;
use serde::{Deserialize, Serialize};
use sp_client::{bitcoin::{OutPoint, Transaction}, silentpayments::SilentPaymentAddress};
use sp_client::{
bitcoin::{OutPoint, Transaction},
silentpayments::SilentPaymentAddress,
};
use tsify::Tsify;
use crate::{
@ -127,12 +130,11 @@ impl ProcessState {
return Err(anyhow::anyhow!("Invalid pairing role: there must one and only one rule for \"pairedAddresses\""));
}
// We must have a pairedAddresses field in public_data
let updated_addresses = self.public_data.get(PAIREDADDRESSES).ok_or(anyhow::Error::msg("No paired addresses"))?; // This shouldn't happen
// TODO check that it matches what we have in the commitment here or somewhere else?
let updated_member = Member::new(from_reader(updated_addresses.as_slice())?);
let updated_addresses_json = self.public_data.get_as_json(PAIREDADDRESSES)?;
let updated_addresses_vec: Vec<SilentPaymentAddress> = serde_json::from_value(updated_addresses_json)?;
let updated_member = Member::new(updated_addresses_vec);
let previous_member = Member::new(previous_addresses);
let members = if previous_member.get_addresses().is_empty() {
@ -163,8 +165,8 @@ impl ProcessState {
} else if let Some(pairing_role) = self.roles.get(PAIRING) {
if self.pcd_commitment.contains_key(PAIREDADDRESSES) {
if let Some(prev_state) = previous_state {
let prev_paired_addresses = prev_state.public_data.get(PAIREDADDRESSES).ok_or(anyhow::Error::msg("Missing pairedAddresses"))?;
let paired_addresses = from_reader(prev_paired_addresses.as_slice())?;
let prev_paired_addresses_json = prev_state.public_data.get_as_json(PAIREDADDRESSES)?;
let paired_addresses: Vec<SilentPaymentAddress> = serde_json::from_value(prev_paired_addresses_json)?;
return self.handle_pairing(pairing_role.clone(), paired_addresses);
} else {
// We are in a creation