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}