lit_rust_sdk/client/
mod.rs1use crate::config::LitNodeClientConfig;
2use alloy::providers::{DynProvider, Provider as ProviderTrait, ProviderBuilder};
3use dashmap::DashMap;
4use eyre::Result;
5use reqwest::Client;
6use std::sync::Arc;
7
8mod connect;
9mod encrypt;
10mod execute;
11mod pkp;
12mod session_sigs;
13mod state;
14
15use crate::blockchain::staking::LibStakingStorage::Epoch;
16use crate::blockchain::Staking;
17
18pub struct LitNodeClient<P = DynProvider>
19where
20 P: ProviderTrait,
21{
22 pub(crate) config: LitNodeClientConfig,
23 pub(crate) http_client: Client,
24 pub(crate) connection_state: Arc<DashMap<String, crate::types::NodeConnectionInfo>>,
25 pub(crate) ready: bool,
26 pub(crate) subnet_pub_key: Option<String>,
27 pub(crate) network_pub_key: Option<String>,
28 pub(crate) network_pub_key_set: Option<String>,
29 pub(crate) hd_root_pubkeys: Option<Vec<String>>,
30 pub(crate) latest_blockhash: Option<String>,
31 pub(crate) staking: Staking::StakingInstance<P>,
32 pub(crate) min_node_count: Option<usize>,
33 pub(crate) epoch: Option<Epoch>,
34}
35
36impl LitNodeClient<DynProvider> {
37 pub async fn new(config: LitNodeClientConfig) -> Result<Self> {
38 let http_client = Client::builder().timeout(config.connect_timeout).build()?;
39
40 let rpc_url = config.lit_network.rpc_url();
41 let provider = ProviderBuilder::new().connect(rpc_url).await?;
42 let staking_address = config.lit_network.staking_contract_address()?;
43
44 let staking = Staking::new(staking_address, provider.erased());
45
46 Ok(Self {
47 config,
48 http_client,
49 connection_state: Arc::new(DashMap::new()),
50 ready: false,
51 subnet_pub_key: None,
52 network_pub_key: None,
53 network_pub_key_set: None,
54 hd_root_pubkeys: None,
55 latest_blockhash: None,
56 staking,
57 min_node_count: None,
58 epoch: None,
59 })
60 }
61}