Skip to main content

blokli_client/api/v1/graphql/
info.rs

1use super::{QueryFailedError, ReadinessState, TokenValueString, Uint64, schema};
2
3#[derive(cynic::QueryFragment, Debug)]
4#[cynic(graphql_type = "QueryRoot")]
5pub struct QueryChainInfo {
6    pub chain_info: ChainInfoResult,
7}
8
9/// Chain, contract, fee, and ticket parameters reported by Blokli.
10#[derive(cynic::QueryFragment, Debug, Clone, PartialEq)]
11#[cfg_attr(feature = "serde", derive(serde::Serialize))]
12pub struct ChainInfo {
13    /// Channel closure grace period in chain units reported by Blokli.
14    pub channel_closure_grace_period: Uint64,
15    /// Deployed channel contract address, when available.
16    pub channel_dst: Option<String>,
17    /// Latest block number indexed or observed by Blokli.
18    pub block_number: i32,
19    /// Numeric chain id.
20    pub chain_id: i32,
21    /// Legacy gas price value, when supplied by the chain.
22    pub gas_price: Option<String>,
23    /// Deployed ledger contract address, when available.
24    pub ledger_dst: Option<String>,
25    /// Current EIP-1559 max fee per gas, when supplied by the chain.
26    pub max_fee_per_gas: Option<String>,
27    /// Current EIP-1559 max priority fee per gas, when supplied by the chain.
28    pub max_priority_fee_per_gas: Option<String>,
29    /// Minimum winning probability accepted for tickets.
30    pub min_ticket_winning_probability: f64,
31    /// Fee required for key binding.
32    pub key_binding_fee: TokenValueString,
33    /// Deployed safe registry contract address, when available.
34    pub safe_registry_dst: Option<String>,
35    /// Current ticket price.
36    pub ticket_price: TokenValueString,
37    /// Human-readable network name.
38    pub network: String,
39    /// Map of known contract addresses encoded by the GraphQL API.
40    pub contract_addresses: ContractAddressMap,
41    /// Expected block time in chain units reported by Blokli.
42    pub expected_block_time: Uint64,
43    /// Finality depth in blocks reported by Blokli.
44    pub finality: Uint64,
45}
46
47/// Serialized map of contract names to addresses.
48#[derive(cynic::Scalar, Debug, Clone, PartialEq, Eq)]
49pub struct ContractAddressMap(pub String);
50
51#[derive(cynic::InlineFragments, Debug)]
52pub enum ChainInfoResult {
53    ChainInfo(Box<ChainInfo>),
54    QueryFailedError(QueryFailedError),
55    #[cynic(fallback)]
56    Unknown,
57}
58
59impl From<ChainInfoResult> for Result<ChainInfo, crate::errors::BlokliClientError> {
60    fn from(value: ChainInfoResult) -> Self {
61        match value {
62            ChainInfoResult::ChainInfo(info) => Ok(*info),
63            ChainInfoResult::QueryFailedError(e) => Err(e.into()),
64            ChainInfoResult::Unknown => Err(crate::errors::ErrorKind::NoData.into()),
65        }
66    }
67}
68
69#[derive(cynic::QueryFragment, Debug)]
70#[cynic(graphql_type = "SubscriptionRoot")]
71pub struct SubscribeTicketParams {
72    pub ticket_parameters_updated: TicketParameters,
73}
74
75#[derive(cynic::QueryFragment, Debug)]
76#[cynic(graphql_type = "SubscriptionRoot")]
77pub struct SubscribeHealth {
78    pub health: ReadinessState,
79}
80
81/// Ticket parameter values emitted by Blokli.
82#[derive(cynic::QueryFragment, Debug, Clone, PartialEq)]
83#[cfg_attr(feature = "serde", derive(serde::Serialize))]
84pub struct TicketParameters {
85    /// Minimum winning probability accepted for tickets.
86    pub min_ticket_winning_probability: f64,
87    /// Current ticket price.
88    pub ticket_price: TokenValueString,
89}
90
91#[derive(cynic::QueryFragment, Debug)]
92#[cynic(graphql_type = "QueryRoot")]
93pub struct QueryVersion {
94    pub version: String,
95}
96
97#[derive(cynic::QueryFragment, Debug)]
98#[cynic(graphql_type = "QueryRoot")]
99pub struct QueryHealth {
100    pub health: String,
101}
102
103#[derive(cynic::QueryFragment, Debug)]
104#[cynic(graphql_type = "QueryRoot")]
105pub struct QueryCompatibility {
106    pub compatibility: Compatibility,
107}
108
109/// Compatibility information reported by Blokli.
110#[derive(cynic::QueryFragment, Debug, Clone, PartialEq)]
111#[cfg_attr(feature = "serde", derive(serde::Serialize))]
112pub struct Compatibility {
113    /// API version reported by the server.
114    pub api_version: String,
115    /// Client version range accepted by the server.
116    pub supported_client_versions: String,
117    /// Feature flags or capability names reported by the server.
118    pub features: Vec<String>,
119}