diff --git a/src/device.rs b/src/device.rs index d7c0648..eb35653 100644 --- a/src/device.rs +++ b/src/device.rs @@ -3,8 +3,7 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; use sp_client::{ - bitcoin::{hashes::Hash, OutPoint, Txid}, - spclient::SpWallet, + bitcoin::{consensus::serialize, OutPoint}, silentpayments::utils::SilentPaymentAddress, spclient::SpWallet }; use crate::pcd::Member; @@ -13,16 +12,18 @@ use crate::pcd::Member; #[tsify(into_wasm_abi, from_wasm_abi)] pub struct Device { sp_wallet: SpWallet, - pairing_process_commitment: Option, - paired_member: Option, + pairing_process_commitment: Option, + paired_member: Member, } impl Device { pub fn new(sp_wallet: SpWallet) -> Self { + let local_address = sp_wallet.get_client().get_receiving_address(); + let member = Member::new(vec![SilentPaymentAddress::try_from(local_address).unwrap()]).unwrap(); Self { sp_wallet, pairing_process_commitment: None, - paired_member: None, + paired_member: member, } } @@ -36,40 +37,41 @@ impl Device { pub fn is_linking(&self) -> bool { match self.pairing_process_commitment { - Some(ref value) => value.as_raw_hash().as_byte_array().iter().all(|&b| b == 0), + Some(ref value) => serialize(value).iter().all(|&b| b == 0), None => false, } } pub fn is_linked(&self) -> bool { match self.pairing_process_commitment { - Some(ref value) => !value.as_raw_hash().as_byte_array().iter().all(|&b| b == 0), + Some(ref value) => !serialize(value).iter().all(|&b| b == 0), None => false, } } - pub fn get_process_commitment(&self) -> Option { + pub fn get_pairing_commitment(&self) -> Option { self.pairing_process_commitment.clone() } - pub fn pair(&mut self, commitment_tx: Txid, member: Member) { - self.pairing_process_commitment = Some(commitment_tx); - self.paired_member = Some(member); + pub fn pair(&mut self, commitment_outpoint: OutPoint, member: Member) { + self.pairing_process_commitment = Some(commitment_outpoint); + self.paired_member = member; } pub fn unpair(&mut self) { - self.paired_member = None; + let local_address = self.get_wallet().get_client().get_receiving_address(); + let member = Member::new(vec![SilentPaymentAddress::try_from(local_address).unwrap()]).unwrap(); + self.paired_member = member; self.pairing_process_commitment = None; } - pub fn to_member(&self) -> Option { + pub fn to_member(&self) -> Member { self.paired_member.clone() } pub fn get_other_addresses(&self) -> Vec { let our_address = self.get_wallet().get_client().get_receiving_address(); self.to_member() - .unwrap() .get_addresses() .into_iter() .filter(|a| *a != our_address)