From ab8d556ad7859d8a172d20e61e988554f1ef4e50 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 24 Jun 2025 17:13:24 +0200 Subject: [PATCH] Update ProcessState implementation with new serialization --- src/process.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/process.rs b/src/process.rs index c3d5bdd..0e5ffa1 100644 --- a/src/process.rs +++ b/src/process.rs @@ -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 = 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 = serde_json::from_value(prev_paired_addresses_json)?; return self.handle_pairing(pairing_role.clone(), paired_addresses); } else { // We are in a creation