Update device

This commit is contained in:
Sosthene 2024-11-12 20:51:56 +01:00
parent ae807c3857
commit 4885066bd2

View File

@ -3,8 +3,7 @@ use tsify::Tsify;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
use sp_client::{ use sp_client::{
bitcoin::{hashes::Hash, OutPoint, Txid}, bitcoin::{consensus::serialize, OutPoint}, silentpayments::utils::SilentPaymentAddress, spclient::SpWallet
spclient::SpWallet,
}; };
use crate::pcd::Member; use crate::pcd::Member;
@ -13,16 +12,18 @@ use crate::pcd::Member;
#[tsify(into_wasm_abi, from_wasm_abi)] #[tsify(into_wasm_abi, from_wasm_abi)]
pub struct Device { pub struct Device {
sp_wallet: SpWallet, sp_wallet: SpWallet,
pairing_process_commitment: Option<Txid>, pairing_process_commitment: Option<OutPoint>,
paired_member: Option<Member>, paired_member: Member,
} }
impl Device { impl Device {
pub fn new(sp_wallet: SpWallet) -> Self { 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 { Self {
sp_wallet, sp_wallet,
pairing_process_commitment: None, pairing_process_commitment: None,
paired_member: None, paired_member: member,
} }
} }
@ -36,40 +37,41 @@ impl Device {
pub fn is_linking(&self) -> bool { pub fn is_linking(&self) -> bool {
match self.pairing_process_commitment { 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, None => false,
} }
} }
pub fn is_linked(&self) -> bool { pub fn is_linked(&self) -> bool {
match self.pairing_process_commitment { 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, None => false,
} }
} }
pub fn get_process_commitment(&self) -> Option<Txid> { pub fn get_pairing_commitment(&self) -> Option<OutPoint> {
self.pairing_process_commitment.clone() self.pairing_process_commitment.clone()
} }
pub fn pair(&mut self, commitment_tx: Txid, member: Member) { pub fn pair(&mut self, commitment_outpoint: OutPoint, member: Member) {
self.pairing_process_commitment = Some(commitment_tx); self.pairing_process_commitment = Some(commitment_outpoint);
self.paired_member = Some(member); self.paired_member = member;
} }
pub fn unpair(&mut self) { 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; self.pairing_process_commitment = None;
} }
pub fn to_member(&self) -> Option<Member> { pub fn to_member(&self) -> Member {
self.paired_member.clone() self.paired_member.clone()
} }
pub fn get_other_addresses(&self) -> Vec<String> { pub fn get_other_addresses(&self) -> Vec<String> {
let our_address = self.get_wallet().get_client().get_receiving_address(); let our_address = self.get_wallet().get_client().get_receiving_address();
self.to_member() self.to_member()
.unwrap()
.get_addresses() .get_addresses()
.into_iter() .into_iter()
.filter(|a| *a != our_address) .filter(|a| *a != our_address)