hopr_db_api/
info.rs

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