fuel_gql_client/client/schema/
chain.rs

1use crate::client::schema::{
2    block::Block,
3    schema,
4    U64,
5};
6use fuel_vm::fuel_tx::ConsensusParameters as TxConsensusParameters;
7
8#[derive(cynic::QueryFragment, Debug)]
9#[cynic(schema_path = "./assets/schema.sdl")]
10pub struct ConsensusParameters {
11    pub contract_max_size: U64,
12    pub max_inputs: U64,
13    pub max_outputs: U64,
14    pub max_witnesses: U64,
15    pub max_gas_per_tx: U64,
16    pub max_script_length: U64,
17    pub max_script_data_length: U64,
18    pub max_storage_slots: U64,
19    pub max_predicate_length: U64,
20    pub max_predicate_data_length: U64,
21    pub gas_price_factor: U64,
22    pub gas_per_byte: U64,
23    pub max_message_data_length: U64,
24}
25
26impl From<ConsensusParameters> for TxConsensusParameters {
27    fn from(params: ConsensusParameters) -> Self {
28        Self {
29            contract_max_size: params.contract_max_size.into(),
30            max_inputs: params.max_inputs.into(),
31            max_outputs: params.max_outputs.into(),
32            max_witnesses: params.max_witnesses.into(),
33            max_gas_per_tx: params.max_gas_per_tx.into(),
34            max_script_length: params.max_script_length.into(),
35            max_script_data_length: params.max_script_data_length.into(),
36            max_storage_slots: params.max_storage_slots.into(),
37            max_predicate_length: params.max_predicate_length.into(),
38            max_predicate_data_length: params.max_predicate_data_length.into(),
39            gas_price_factor: params.gas_price_factor.into(),
40            gas_per_byte: params.gas_per_byte.into(),
41            max_message_data_length: params.max_message_data_length.into(),
42        }
43    }
44}
45
46#[derive(cynic::QueryFragment, Debug)]
47#[cynic(schema_path = "./assets/schema.sdl", graphql_type = "Query")]
48pub struct ChainQuery {
49    pub chain: ChainInfo,
50}
51
52#[derive(cynic::QueryFragment, Debug)]
53#[cynic(schema_path = "./assets/schema.sdl")]
54pub struct ChainInfo {
55    pub base_chain_height: U64,
56    pub name: String,
57    pub peer_count: i32,
58    pub latest_block: Block,
59    pub consensus_parameters: ConsensusParameters,
60}
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn chain_gql_query_output() {
68        use cynic::QueryBuilder;
69        let operation = ChainQuery::build(());
70        insta::assert_snapshot!(operation.query)
71    }
72}