2019-09-12 03:23:51 -07:00
|
|
|
//! Definitions of constants.
|
|
|
|
|
2019-10-11 12:41:37 -07:00
|
|
|
use std::time::Duration;
|
|
|
|
|
2019-09-25 13:31:41 -07:00
|
|
|
// XXX should these constants be split into protocol also?
|
2019-11-26 22:42:42 -08:00
|
|
|
use crate::protocol::external::types::*;
|
2019-09-12 03:23:51 -07:00
|
|
|
|
2020-07-21 01:41:18 -07:00
|
|
|
use zebra_consensus::parameters::NetworkUpgrade::{self, *};
|
|
|
|
|
2019-10-10 17:54:15 -07:00
|
|
|
/// The timeout for requests made to a remote peer.
|
|
|
|
pub const REQUEST_TIMEOUT: Duration = Duration::from_secs(10);
|
|
|
|
|
2019-10-11 12:41:37 -07:00
|
|
|
/// We expect to receive a message from a live peer at least once in this time duration.
|
2019-10-21 12:16:28 -07:00
|
|
|
///
|
|
|
|
/// This is the sum of:
|
|
|
|
/// - the interval between connection heartbeats
|
|
|
|
/// - the timeout of a possible pending (already-sent) request
|
|
|
|
/// - the timeout for a possible queued request
|
|
|
|
/// - the timeout for the heartbeat request itself
|
|
|
|
///
|
|
|
|
/// This avoids explicit synchronization, but relies on the peer
|
|
|
|
/// connector actually setting up channels and these heartbeats in a
|
|
|
|
/// specific manner that matches up with this math.
|
2019-10-21 11:59:47 -07:00
|
|
|
pub const LIVE_PEER_DURATION: Duration = Duration::from_secs(60 + 10 + 10 + 10);
|
|
|
|
|
|
|
|
/// Regular interval for sending keepalive `Ping` messages to each
|
|
|
|
/// connected peer.
|
|
|
|
pub const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(60);
|
2019-10-11 12:41:37 -07:00
|
|
|
|
2019-11-13 14:03:12 -08:00
|
|
|
/// Truncate timestamps in outbound address messages to this time interval.
|
|
|
|
///
|
2020-07-05 03:58:50 -07:00
|
|
|
/// This is intended to prevent a peer from learning exactly when we received
|
2019-11-13 14:03:12 -08:00
|
|
|
/// messages from each of our peers.
|
|
|
|
pub const TIMESTAMP_TRUNCATION_SECONDS: i64 = 30 * 60;
|
|
|
|
|
2019-09-19 16:16:06 -07:00
|
|
|
/// The User-Agent string provided by the node.
|
2020-07-29 08:53:57 -07:00
|
|
|
///
|
|
|
|
/// This must be a valid [BIP 14] user agent.
|
|
|
|
///
|
|
|
|
/// [BIP 14]: https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki
|
2020-07-29 18:28:33 -07:00
|
|
|
pub const USER_AGENT: &str = "/🦓Zebra🦓:3.0.0-alpha.0/";
|
2019-09-19 16:16:06 -07:00
|
|
|
|
2020-07-21 01:41:18 -07:00
|
|
|
/// The Zcash network protocol version implemented by this crate.
|
|
|
|
///
|
|
|
|
/// This protocol version might be the current version on Mainnet or Testnet,
|
|
|
|
/// based on where we are in the network upgrade cycle.
|
|
|
|
pub const CURRENT_VERSION: Version = Version(170_011);
|
2019-09-13 05:28:38 -07:00
|
|
|
|
2020-07-21 01:41:18 -07:00
|
|
|
/// The most recent bilateral consensus upgrade implemented by this crate.
|
|
|
|
///
|
|
|
|
/// Used to select the minimum supported version for peer connections.
|
|
|
|
//
|
2020-07-22 05:10:02 -07:00
|
|
|
// TODO: replace with NetworkUpgrade::current(network, height).
|
2020-07-21 01:41:18 -07:00
|
|
|
// See the detailed comment in handshake.rs, where this constant is used.
|
|
|
|
pub const MIN_NETWORK_UPGRADE: NetworkUpgrade = Heartwood;
|
2019-09-19 16:16:55 -07:00
|
|
|
|
2020-03-12 16:34:34 -07:00
|
|
|
/// Magic numbers used to identify different Zcash networks.
|
|
|
|
pub mod magics {
|
|
|
|
use super::*;
|
|
|
|
/// The production mainnet.
|
|
|
|
pub const MAINNET: Magic = Magic([0x24, 0xe9, 0x27, 0x64]);
|
|
|
|
/// The testnet.
|
|
|
|
pub const TESTNET: Magic = Magic([0xfa, 0x1a, 0xf9, 0xbf]);
|
|
|
|
}
|
|
|
|
|
2019-10-21 11:59:47 -07:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
|
|
|
|
use super::*;
|
|
|
|
|
2019-10-21 12:16:28 -07:00
|
|
|
/// This assures that the `Duration` value we are computing for
|
|
|
|
/// LIVE_PEER_DURATION actually matches the other const values it
|
|
|
|
/// relies on.
|
2019-10-21 11:59:47 -07:00
|
|
|
#[test]
|
|
|
|
fn ensure_live_peer_duration_value_matches_others() {
|
|
|
|
let constructed_live_peer_duration =
|
|
|
|
HEARTBEAT_INTERVAL + REQUEST_TIMEOUT + REQUEST_TIMEOUT + REQUEST_TIMEOUT;
|
|
|
|
|
|
|
|
assert_eq!(LIVE_PEER_DURATION, constructed_live_peer_duration);
|
|
|
|
}
|
|
|
|
}
|