1use crate::error::{Error, Result};
9
10#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct Bech32Prefixes {
13 pub account: String,
15 pub validator: String,
17 pub consensus: String,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
23pub struct CoinInfo {
24 pub display: String,
26 pub base: String,
28 pub exponent: u32,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct Endpoints {
35 pub rest: String,
37 pub grpc: String,
39 pub rpc: String,
41 pub evm_rpc: String,
43 pub evm_ws: String,
45 pub svm_rpc: String,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq)]
51pub struct NetworkConfig {
52 pub name: String,
54 pub live: bool,
56 pub chain_id: Option<String>,
58 pub bech32: Bech32Prefixes,
60 pub coin: CoinInfo,
62 pub endpoints: Option<Endpoints>,
64}
65
66fn bech32_prefixes() -> Bech32Prefixes {
67 Bech32Prefixes {
68 account: "qor".into(),
69 validator: "qorvaloper".into(),
70 consensus: "qorvalcons".into(),
71 }
72}
73
74fn coin_info() -> CoinInfo {
75 CoinInfo {
76 display: "QOR".into(),
77 base: "uqor".into(),
78 exponent: 6,
79 }
80}
81
82pub fn networks() -> Vec<NetworkConfig> {
84 vec![
85 NetworkConfig {
86 name: "testnet".into(),
87 live: true,
88 chain_id: Some("qorechain-diana".into()),
89 bech32: bech32_prefixes(),
90 coin: coin_info(),
91 endpoints: Some(Endpoints {
92 rest: "http://localhost:1317".into(),
93 grpc: "http://localhost:9090".into(),
94 rpc: "http://localhost:26657".into(),
95 evm_rpc: "http://localhost:8545".into(),
96 evm_ws: "ws://localhost:8546".into(),
97 svm_rpc: "http://localhost:8899".into(),
98 }),
99 },
100 NetworkConfig {
101 name: "mainnet".into(),
102 live: true,
103 chain_id: Some("qorechain-vladi".into()),
104 bech32: bech32_prefixes(),
105 coin: coin_info(),
106 endpoints: Some(Endpoints {
107 rest: "http://localhost:1317".into(),
108 grpc: "http://localhost:9090".into(),
109 rpc: "http://localhost:26657".into(),
110 evm_rpc: "http://localhost:8545".into(),
111 evm_ws: "ws://localhost:8546".into(),
112 svm_rpc: "http://localhost:8899".into(),
113 }),
114 },
115 ]
116}
117
118pub fn get_network(name: &str) -> Result<NetworkConfig> {
122 networks()
123 .into_iter()
124 .find(|n| n.name == name)
125 .ok_or_else(|| Error::UnknownNetwork(name.to_string()))
126}
127
128pub fn list_networks() -> Vec<String> {
130 vec!["testnet".into(), "mainnet".into()]
131}