// Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 #[cfg(feature = "network")] use crate::{ApiUrlConst, DenomDetails, ValidatorDetails}; pub const NETWORK_NAME: &str = "mainnet"; pub const BECH32_PREFIX: &str = "n"; #[cfg(feature = "network")] pub const MIX_DENOM: DenomDetails = DenomDetails::new("unym", "nym", 6); #[cfg(feature = "network")] pub const STAKE_DENOM: DenomDetails = DenomDetails::new("unyx", "nyx", 6); pub const MIXNET_CONTRACT_ADDRESS: &str = "n17srjznxl9dvzdkpwpw24gg668wc73val88a6m5ajg6ankwvz9wtst0cznr"; pub const VESTING_CONTRACT_ADDRESS: &str = "n1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrq73f2nw"; // \/ TODO: this has to be updated once the contract is deployed pub const PERFORMANCE_CONTRACT_ADDRESS: &str = ""; // /\ TODO: this has to be updated once the contract is deployed pub const ECASH_CONTRACT_ADDRESS: &str = "n1r7s6aksyc6pqardx88k3rkgfagwvj4z4zum9mmz2sfk3zm2mha0sd4dnun"; pub const GROUP_CONTRACT_ADDRESS: &str = "n1e2zq4886zzewpvpucmlw8v9p7zv692f6yck4zjzxh699dkcmlrfqk2knsr"; pub const MULTISIG_CONTRACT_ADDRESS: &str = "n1txayqfz5g9qww3rlflpg025xd26m9payz96u54x4fe3s2ktz39xqk67gzx"; pub const COCONUT_DKG_CONTRACT_ADDRESS: &str = "n19604yflqggs9mk2z26mqygq43q2kr3n932egxx630svywd5mpxjsztfpvx"; pub const REWARDING_VALIDATOR_ADDRESS: &str = "n10yyd98e2tuwu0f7ypz9dy3hhjw7v772q6287gy"; pub const NYXD_URL: &str = "https://rpc.nymtech.net"; pub const NYXD_WS: &str = "wss://rpc.nymtech.net/websocket"; pub const NYM_API: &str = "https://validator.nymtech.net/api/"; #[cfg(feature = "network")] pub const NYM_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_API, front_hosts: None, }, ApiUrlConst { url: "https://nym-fronntdoor.vercel.app/api/", front_hosts: Some(&["vercel.app", "vercel.com"]), }, ApiUrlConst { url: "https://nym-frontdoor.global.ssl.fastly.net/api/", front_hosts: Some(&["yelp.global.ssl.fastly.net"]), }, ]; pub const NYM_VPN_API: &str = "https://nymvpn.com/api/"; #[cfg(feature = "network")] pub const NYM_VPN_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_VPN_API, front_hosts: Some(&["vercel.app", "vercel.com"]), }, ApiUrlConst { url: "https://nymvpn-frontdoor.global.ssl.fastly.net/api/", front_hosts: Some(&["yelp.global.ssl.fastly.net"]), }, ]; // I'm making clippy mad on purpose, because that url HAS TO be updated and deployed before merging pub const EXIT_POLICY_URL: &str = "https://nymtech.net/.wellknown/network-requester/exit-policy.txt"; #[cfg(feature = "network")] pub(crate) fn validators() -> Vec { vec![ValidatorDetails::new( NYXD_URL, Some(NYM_API), Some(NYXD_WS), )] } #[cfg(feature = "env")] const DEFAULT_SUFFIX: &str = "_MAINNET_DEFAULT"; #[cfg(all(feature = "env", feature = "network"))] fn set_var_to_default(var: &str, value: &str) { std::env::set_var(var, value); std::env::set_var(format!("{var}{DEFAULT_SUFFIX}"), "1") } #[cfg(all(feature = "env", feature = "network"))] fn set_var_conditionally_to_default(var: &str, value: &str) { if std::env::var(var).is_err() { set_var_to_default(var, value) } } #[cfg(feature = "env")] pub fn uses_default(var: &str) -> bool { std::env::var(format!("{var}{DEFAULT_SUFFIX}")).is_ok() } #[cfg(feature = "env")] pub fn read_var_if_not_default(var: &str) -> Option { if uses_default(var) { None } else { std::env::var(var).ok() } } #[cfg(feature = "env")] pub fn read_parsed_var_if_not_default( var: &str, ) -> Option> { read_var_if_not_default(var) .as_deref() .map(std::str::FromStr::from_str) } #[cfg(all(feature = "env", feature = "network"))] pub fn export_to_env() { use crate::var_names; set_var_to_default(var_names::CONFIGURED, "true"); set_var_to_default(var_names::NETWORK_NAME, NETWORK_NAME); set_var_to_default(var_names::BECH32_PREFIX, BECH32_PREFIX); set_var_to_default(var_names::MIX_DENOM, MIX_DENOM.base); set_var_to_default(var_names::MIX_DENOM_DISPLAY, MIX_DENOM.display); set_var_to_default(var_names::STAKE_DENOM, STAKE_DENOM.base); set_var_to_default(var_names::STAKE_DENOM_DISPLAY, STAKE_DENOM.display); set_var_to_default( var_names::DENOMS_EXPONENT, &STAKE_DENOM.display_exponent.to_string(), ); set_var_to_default(var_names::MIXNET_CONTRACT_ADDRESS, MIXNET_CONTRACT_ADDRESS); set_var_to_default( var_names::VESTING_CONTRACT_ADDRESS, VESTING_CONTRACT_ADDRESS, ); set_var_to_default(var_names::ECASH_CONTRACT_ADDRESS, ECASH_CONTRACT_ADDRESS); set_var_to_default(var_names::GROUP_CONTRACT_ADDRESS, GROUP_CONTRACT_ADDRESS); set_var_to_default( var_names::MULTISIG_CONTRACT_ADDRESS, MULTISIG_CONTRACT_ADDRESS, ); set_var_to_default( var_names::COCONUT_DKG_CONTRACT_ADDRESS, COCONUT_DKG_CONTRACT_ADDRESS, ); set_var_to_default( var_names::REWARDING_VALIDATOR_ADDRESS, REWARDING_VALIDATOR_ADDRESS, ); set_var_to_default(var_names::NYXD, NYXD_URL); set_var_to_default(var_names::NYM_API, NYM_API); set_var_to_default(var_names::NYXD_WEBSOCKET, NYXD_WS); set_var_to_default(var_names::EXIT_POLICY_URL, EXIT_POLICY_URL); set_var_to_default(var_names::NYM_VPN_API, NYM_VPN_API); } #[cfg(all(feature = "env", feature = "network"))] pub fn export_to_env_if_not_set() { use crate::var_names; set_var_conditionally_to_default(var_names::CONFIGURED, "true"); set_var_conditionally_to_default(var_names::NETWORK_NAME, NETWORK_NAME); set_var_conditionally_to_default(var_names::BECH32_PREFIX, BECH32_PREFIX); set_var_conditionally_to_default(var_names::MIX_DENOM, MIX_DENOM.base); set_var_conditionally_to_default(var_names::MIX_DENOM_DISPLAY, MIX_DENOM.display); set_var_conditionally_to_default(var_names::STAKE_DENOM, STAKE_DENOM.base); set_var_conditionally_to_default(var_names::STAKE_DENOM_DISPLAY, STAKE_DENOM.display); set_var_conditionally_to_default( var_names::DENOMS_EXPONENT, &STAKE_DENOM.display_exponent.to_string(), ); set_var_conditionally_to_default(var_names::MIXNET_CONTRACT_ADDRESS, MIXNET_CONTRACT_ADDRESS); set_var_conditionally_to_default( var_names::VESTING_CONTRACT_ADDRESS, VESTING_CONTRACT_ADDRESS, ); set_var_conditionally_to_default(var_names::ECASH_CONTRACT_ADDRESS, ECASH_CONTRACT_ADDRESS); set_var_conditionally_to_default(var_names::GROUP_CONTRACT_ADDRESS, GROUP_CONTRACT_ADDRESS); set_var_conditionally_to_default( var_names::MULTISIG_CONTRACT_ADDRESS, MULTISIG_CONTRACT_ADDRESS, ); set_var_conditionally_to_default( var_names::COCONUT_DKG_CONTRACT_ADDRESS, COCONUT_DKG_CONTRACT_ADDRESS, ); set_var_conditionally_to_default( var_names::REWARDING_VALIDATOR_ADDRESS, REWARDING_VALIDATOR_ADDRESS, ); set_var_conditionally_to_default(var_names::NYXD, NYXD_URL); set_var_conditionally_to_default(var_names::NYM_API, NYM_API); set_var_conditionally_to_default(var_names::NYXD_WEBSOCKET, NYXD_WS); set_var_conditionally_to_default(var_names::EXIT_POLICY_URL, EXIT_POLICY_URL); }