hopr_db_api/info.rs
1use hopr_crypto_types::prelude::Hash;
2use hopr_internal_types::prelude::WinningProbability;
3use hopr_primitive_types::prelude::*;
4
5/// Contains various on-chain information collected by Indexer,
6/// such as domain separators, ticket price, Network Registry status...etc.
7/// All these members change very rarely and therefore can be cached.
8#[derive(Clone, Copy, Debug)]
9pub struct IndexerData {
10 /// Ledger smart contract domain separator
11 pub ledger_dst: Option<Hash>,
12 /// Node safe registry smart contract domain separator
13 pub safe_registry_dst: Option<Hash>,
14 /// Channels smart contract domain separator
15 pub channels_dst: Option<Hash>,
16 /// Current ticket price
17 pub ticket_price: Option<HoprBalance>,
18 /// Minimum winning probability
19 pub minimum_incoming_ticket_winning_prob: WinningProbability,
20 /// Network registry state
21 pub nr_enabled: bool,
22}
23
24impl IndexerData {
25 /// Convenience method to retrieve domain separator according to the [DomainSeparator] enum.
26 pub fn domain_separator(&self, dst_type: DomainSeparator) -> Option<Hash> {
27 match dst_type {
28 DomainSeparator::Ledger => self.ledger_dst,
29 DomainSeparator::SafeRegistry => self.safe_registry_dst,
30 DomainSeparator::Channel => self.channels_dst,
31 }
32 }
33}
34
35/// Contains information about node's safe.
36#[derive(Copy, Clone, Debug, PartialEq, Eq)]
37pub struct SafeInfo {
38 /// Safe address
39 pub safe_address: Address,
40 /// Safe module address.
41 pub module_address: Address,
42}
43
44/// Enumerates different domain separators
45#[derive(Copy, Clone, Debug, PartialEq, Eq)]
46pub enum DomainSeparator {
47 /// Ledger smart contract domain separator
48 Ledger,
49 /// Node safe registry smart contract domain separator
50 SafeRegistry,
51 /// Channels smart contract domain separator
52 Channel,
53}