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}