hopr_chain_connector/
lib.rs1mod backend;
2mod connector;
3pub mod errors;
4#[cfg(feature = "testing")]
5pub mod testing;
6
7#[cfg(feature = "testing")]
8pub use backend::InMemoryBackend;
9pub use backend::{Backend, TempDbBackend};
10pub use connector::{BlockchainConnectorConfig, HoprBlockchainConnector};
11pub use hopr_chain_types::payload::SafePayloadGenerator;
12
13pub mod blokli_client {
15 pub use blokli_client::{
16 BlokliClient, BlokliClientConfig,
17 api::{BlokliQueryClient, BlokliSubscriptionClient, BlokliTransactionClient},
18 };
19}
20
21pub use hopr_chain_types::prelude::{ContractAddresses, PayloadGenerator};
22pub use hopr_crypto_types::prelude::ChainKeypair;
23pub use hopr_primitive_types::prelude::Address;
24
25pub type HoprBlockchainSafeConnector<C> = HoprBlockchainConnector<
27 C,
28 TempDbBackend,
29 SafePayloadGenerator,
30 <SafePayloadGenerator as PayloadGenerator>::TxRequest,
31>;
32
33pub fn create_trustless_hopr_blokli_connector<C>(
37 chain_key: &ChainKeypair,
38 cfg: BlockchainConnectorConfig,
39 client: C,
40 module_address: Address,
41 contracts: ContractAddresses,
42) -> Result<HoprBlockchainSafeConnector<C>, errors::ConnectorError>
43where
44 C: blokli_client::BlokliSubscriptionClient
45 + blokli_client::BlokliQueryClient
46 + blokli_client::BlokliTransactionClient
47 + Send
48 + Sync
49 + 'static,
50{
51 let payload_gen = SafePayloadGenerator::new(chain_key, contracts, module_address);
52
53 Ok(HoprBlockchainConnector::new(
54 chain_key.clone(),
55 cfg,
56 client,
57 TempDbBackend::new()?,
58 payload_gen,
59 ))
60}
61
62pub async fn create_trustful_hopr_blokli_connector<C>(
70 chain_key: &ChainKeypair,
71 cfg: BlockchainConnectorConfig,
72 client: C,
73 module_address: Address,
74) -> Result<HoprBlockchainSafeConnector<C>, errors::ConnectorError>
75where
76 C: blokli_client::BlokliSubscriptionClient
77 + blokli_client::BlokliQueryClient
78 + blokli_client::BlokliTransactionClient
79 + Send
80 + Sync
81 + 'static,
82{
83 let info = client.query_chain_info().await?;
84 let contract_addrs = serde_json::from_str(&info.contract_addresses.0)
85 .map_err(|e| errors::ConnectorError::TypeConversion(format!("contract addresses not a valid JSON: {e}")))?;
86
87 let payload_gen = SafePayloadGenerator::new(chain_key, contract_addrs, module_address);
88
89 Ok(HoprBlockchainConnector::new(
90 chain_key.clone(),
91 cfg,
92 client,
93 TempDbBackend::new()?,
94 payload_gen,
95 ))
96}