mod account;
mod helpers;
mod io;
mod notes;
mod offline;
mod proposals;
use std::path::PathBuf;
use miden_client::Client;
use miden_client::rpc::Endpoint;
use miden_objects::Word;
use miden_objects::account::AccountId;
use crate::account::MultisigAccount;
use crate::builder::MultisigClientBuilder;
use crate::export::ExportedProposal;
use crate::keystore::KeyManager;
use crate::proposal::Proposal;
pub use notes::{ConsumableNote, NoteFilter};
#[derive(Debug)]
pub enum ProposalResult {
Online(Box<Proposal>),
Offline(Box<ExportedProposal>),
}
pub struct MultisigClient {
pub(crate) miden_client: Client<()>,
pub(crate) key_manager: Box<dyn KeyManager>,
pub(crate) psm_endpoint: String,
pub(crate) account: Option<MultisigAccount>,
pub(crate) account_dir: PathBuf,
pub(crate) miden_endpoint: Endpoint,
}
impl MultisigClient {
pub fn builder() -> MultisigClientBuilder {
MultisigClientBuilder::new()
}
pub(crate) fn new(
miden_client: Client<()>,
key_manager: Box<dyn KeyManager>,
psm_endpoint: String,
account_dir: PathBuf,
miden_endpoint: Endpoint,
) -> Self {
Self {
miden_client,
key_manager,
psm_endpoint,
account: None,
account_dir,
miden_endpoint,
}
}
pub fn psm_endpoint(&self) -> &str {
&self.psm_endpoint
}
pub fn account(&self) -> Option<&MultisigAccount> {
self.account.as_ref()
}
pub fn account_id(&self) -> Option<AccountId> {
self.account.as_ref().map(|a| a.id())
}
pub fn has_account(&self) -> bool {
self.account.is_some()
}
pub fn user_commitment(&self) -> Word {
self.key_manager.commitment()
}
pub fn user_commitment_hex(&self) -> String {
self.key_manager.commitment_hex()
}
pub fn key_manager(&self) -> &dyn KeyManager {
self.key_manager.as_ref()
}
}