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