hopr_chain_connector/
lib.rs1mod backend;
2mod connector;
3pub mod errors;
4mod reader;
5#[cfg(feature = "testing")]
6pub mod testing;
7
8pub(crate) mod utils;
9
10#[cfg(feature = "testing")]
11pub use backend::InMemoryBackend;
12pub use backend::{Backend, TempDbBackend};
13pub use connector::{BlockchainConnectorConfig, HoprBlockchainConnector};
14pub use hopr_chain_types::payload::{BasicPayloadGenerator, SafePayloadGenerator};
15pub use reader::HoprBlockchainReader;
16
17pub mod blokli_client {
19 pub use blokli_client::{
20 BlokliClient, BlokliClientConfig,
21 api::{BlokliQueryClient, BlokliSubscriptionClient, BlokliTransactionClient},
22 };
23}
24
25#[doc(hidden)]
26pub mod reexports {
27 pub use hopr_chain_types;
28 pub use hopr_chain_types::exports::alloy;
30}
31
32pub use hopr_chain_types::prelude::{ContractAddresses, PayloadGenerator};
33pub use hopr_crypto_types::prelude::ChainKeypair;
34use hopr_crypto_types::prelude::Keypair;
35pub use hopr_primitive_types::prelude::Address;
36
37pub type HoprBlockchainSafeConnector<C> = HoprBlockchainConnector<
39 C,
40 TempDbBackend,
41 SafePayloadGenerator,
42 <SafePayloadGenerator as PayloadGenerator>::TxRequest,
43>;
44
45pub type HoprBlockchainBasicConnector<C> = HoprBlockchainConnector<
47 C,
48 TempDbBackend,
49 BasicPayloadGenerator,
50 <BasicPayloadGenerator as PayloadGenerator>::TxRequest,
51>;
52
53pub fn create_trustless_hopr_blokli_connector<C>(
57 chain_key: &ChainKeypair,
58 cfg: BlockchainConnectorConfig,
59 client: C,
60 module_address: Address,
61 contracts: ContractAddresses,
62) -> Result<HoprBlockchainSafeConnector<C>, errors::ConnectorError>
63where
64 C: blokli_client::BlokliSubscriptionClient
65 + blokli_client::BlokliQueryClient
66 + blokli_client::BlokliTransactionClient
67 + Send
68 + Sync
69 + 'static,
70{
71 let payload_gen = SafePayloadGenerator::new(chain_key, contracts, module_address);
72
73 Ok(HoprBlockchainConnector::new(
74 chain_key.clone(),
75 cfg,
76 client,
77 TempDbBackend::new()?,
78 payload_gen,
79 ))
80}
81
82pub fn create_trustless_safeless_hopr_blokli_connector<C>(
88 chain_key: &ChainKeypair,
89 cfg: BlockchainConnectorConfig,
90 client: C,
91 contracts: ContractAddresses,
92) -> Result<HoprBlockchainBasicConnector<C>, errors::ConnectorError>
93where
94 C: blokli_client::BlokliSubscriptionClient
95 + blokli_client::BlokliQueryClient
96 + blokli_client::BlokliTransactionClient
97 + Send
98 + Sync
99 + 'static,
100{
101 let payload_gen = BasicPayloadGenerator::new(chain_key.public().to_address(), contracts);
102
103 Ok(HoprBlockchainConnector::new(
104 chain_key.clone(),
105 cfg,
106 client,
107 TempDbBackend::new()?,
108 payload_gen,
109 ))
110}
111
112pub async fn create_trustful_hopr_blokli_connector<C>(
121 chain_key: &ChainKeypair,
122 cfg: BlockchainConnectorConfig,
123 client: C,
124 module_address: Address,
125) -> Result<HoprBlockchainSafeConnector<C>, errors::ConnectorError>
126where
127 C: blokli_client::BlokliSubscriptionClient
128 + blokli_client::BlokliQueryClient
129 + blokli_client::BlokliTransactionClient
130 + Send
131 + Sync
132 + 'static,
133{
134 let info = client.query_chain_info().await?;
135 let contract_addrs = serde_json::from_str(&info.contract_addresses.0)
136 .map_err(|e| errors::ConnectorError::TypeConversion(format!("contract addresses not a valid JSON: {e}")))?;
137
138 let payload_gen = SafePayloadGenerator::new(chain_key, contract_addrs, module_address);
139
140 Ok(HoprBlockchainConnector::new(
141 chain_key.clone(),
142 cfg,
143 client,
144 TempDbBackend::new()?,
145 payload_gen,
146 ))
147}
148
149pub async fn create_trustful_safeless_hopr_blokli_connector<C>(
161 chain_key: &ChainKeypair,
162 cfg: BlockchainConnectorConfig,
163 client: C,
164) -> Result<HoprBlockchainBasicConnector<C>, errors::ConnectorError>
165where
166 C: blokli_client::BlokliSubscriptionClient
167 + blokli_client::BlokliQueryClient
168 + blokli_client::BlokliTransactionClient
169 + Send
170 + Sync
171 + 'static,
172{
173 let info = client.query_chain_info().await?;
174 let contract_addrs = serde_json::from_str(&info.contract_addresses.0)
175 .map_err(|e| errors::ConnectorError::TypeConversion(format!("contract addresses not a valid JSON: {e}")))?;
176
177 let payload_gen = BasicPayloadGenerator::new(chain_key.public().to_address(), contract_addrs);
178
179 Ok(HoprBlockchainConnector::new(
180 chain_key.clone(),
181 cfg,
182 client,
183 TempDbBackend::new()?,
184 payload_gen,
185 ))
186}