protocol.rs (4414B)
1 pub type Amount = u64; 2 3 pub const MICRO_IUNA: Amount = 1_000_000; 4 pub const BLOCK_REWARD: Amount = MICRO_IUNA; 5 pub const MINE_REWARD: Amount = MICRO_IUNA; 6 pub const MINE_FINALIZER_FEE: Amount = MICRO_IUNA; 7 /// Consensus height at which every newly-created reward output must use an 8 /// address-v1 hybrid Ed25519 + ML-DSA payout address. 9 pub const HYBRID_REWARD_ACTIVATION_HEIGHT: u64 = 3_750; 10 pub const DEFAULT_MINE_FEE: Amount = MINE_FINALIZER_FEE; 11 pub const DEFAULT_TRANSACTION_FEE: Amount = MICRO_IUNA; 12 pub const DEFAULT_FEE_PER_BYTE: Amount = 1; 13 pub const MAX_BLOCK_BYTES: usize = 1_000_000; 14 #[cfg(not(feature = "e2e"))] 15 pub const VDF_TARGET_BLOCK_MS: u64 = 10 * 60 * 1_000; 16 #[cfg(feature = "e2e")] 17 pub const VDF_TARGET_BLOCK_MS: u64 = 5_000; 18 pub const RECOVERY_BLOCK_DELAY_MS: u64 = VDF_TARGET_BLOCK_MS * 6; 19 pub const MAX_VDF_ROUNDS: u64 = i64::MAX as u64; 20 pub const MINE_DIFFICULTY_BITS: u32 = 12; 21 pub const MINE_ACTIONS_PER_ANCHOR_LIMIT: usize = 2; 22 pub const BURN_COMMITTEE_SIZE: usize = 5; 23 pub const MAX_BURN_BUNDLE_BYTES: usize = 10_000; 24 pub const BURN_LINEAGE_MATURITY_HEIGHTS: u64 = 20; 25 pub const GRINDING_RESISTANCE_ACTIVATION_HEIGHT: u64 = 1_000; 26 pub const TRANSACTION_SIGNING_V1_ACTIVATION_HEIGHT: u64 = 1_000; 27 pub const TRANSACTION_REPLAY_PROTECTION_ACTIVATION_HEIGHT: u64 = 1_000; 28 pub const OBJECTIVE_FINALITY_ACTIVATION_HEIGHT: u64 = 1_000; 29 pub const TIP_BOUND_BURN_ACTIVATION_HEIGHT: u64 = 1_000; 30 31 pub const MAX_PENDING_TRANSACTIONS: usize = 10_000; 32 pub(super) const MAX_PENDING_POOL_BYTES: usize = 8 * 1024 * 1024; 33 pub(super) const MAX_ORPHAN_TRANSACTIONS: usize = 1_024; 34 pub(super) const MAX_BLOCK_TRANSACTIONS: usize = 1_000; 35 pub(super) const DEFAULT_TICKET_MATURITY_DELAY: u64 = 3; 36 pub(super) const DEFAULT_TICKET_EXPIRY_WINDOW: u64 = 3; 37 pub(super) const MAX_BLOCK_TIMESTAMP_FUTURE_DRIFT_MS: u64 = 2 * 60 * 1_000; 38 pub(super) const BLOCK_MEDIAN_TIME_PAST_WINDOW: usize = 11; 39 pub(super) const FORK_FINALITY_DEPTH: u64 = 6; 40 pub(super) const PUBLIC_KEY_BYTES: usize = super::SignatureScheme::Ed25519.public_key_bytes(); 41 pub(super) const HASH_BYTES: usize = 32; 42 pub(super) const SIGNATURE_BYTES: usize = super::SignatureScheme::Ed25519.signature_bytes(); 43 44 #[derive(Clone, Copy, Debug, Eq, PartialEq)] 45 pub enum TransactionSubmitOutcome { 46 Added, 47 AlreadyKnown, 48 ConflictsWithPending, 49 } 50 51 impl TransactionSubmitOutcome { 52 pub fn added(self) -> bool { 53 matches!(self, Self::Added) 54 } 55 } 56 57 #[cfg(test)] 58 mod tests { 59 use super::*; 60 61 #[test] 62 fn mainnet_candidate_protocol_parameters_are_frozen() { 63 assert_eq!(MICRO_IUNA, 1_000_000); 64 assert_eq!(BLOCK_REWARD, MICRO_IUNA); 65 assert_eq!(MINE_REWARD, MICRO_IUNA); 66 assert_eq!(MINE_FINALIZER_FEE, MICRO_IUNA); 67 assert_eq!(HYBRID_REWARD_ACTIVATION_HEIGHT, 3_750); 68 assert_eq!(MAX_BLOCK_BYTES, 1_000_000); 69 #[cfg(not(feature = "e2e"))] 70 assert_eq!(VDF_TARGET_BLOCK_MS, 10 * 60 * 1_000); 71 #[cfg(feature = "e2e")] 72 assert_eq!(VDF_TARGET_BLOCK_MS, 5_000); 73 assert_eq!(RECOVERY_BLOCK_DELAY_MS, 6 * VDF_TARGET_BLOCK_MS); 74 assert_eq!(MINE_DIFFICULTY_BITS, 12); 75 assert_eq!(MINE_ACTIONS_PER_ANCHOR_LIMIT, 2); 76 assert_eq!(BURN_COMMITTEE_SIZE, 5); 77 assert_eq!(MAX_BURN_BUNDLE_BYTES, 10_000); 78 assert_eq!(BURN_LINEAGE_MATURITY_HEIGHTS, 20); 79 assert_eq!(GRINDING_RESISTANCE_ACTIVATION_HEIGHT, 1_000); 80 assert_eq!(TRANSACTION_SIGNING_V1_ACTIVATION_HEIGHT, 1_000); 81 assert_eq!(TRANSACTION_REPLAY_PROTECTION_ACTIVATION_HEIGHT, 1_000); 82 assert_eq!(OBJECTIVE_FINALITY_ACTIVATION_HEIGHT, 1_000); 83 assert_eq!(TIP_BOUND_BURN_ACTIVATION_HEIGHT, 1_000); 84 assert_eq!(MAX_PENDING_TRANSACTIONS, 10_000); 85 assert_eq!(MAX_PENDING_POOL_BYTES, 8 * 1024 * 1024); 86 assert_eq!(MAX_ORPHAN_TRANSACTIONS, 1_024); 87 assert_eq!(MAX_BLOCK_TRANSACTIONS, 1_000); 88 assert_eq!(DEFAULT_TICKET_MATURITY_DELAY, 3); 89 assert_eq!(DEFAULT_TICKET_EXPIRY_WINDOW, 3); 90 assert_eq!(MAX_BLOCK_TIMESTAMP_FUTURE_DRIFT_MS, 2 * 60 * 1_000); 91 assert_eq!(BLOCK_MEDIAN_TIME_PAST_WINDOW, 11); 92 assert_eq!(FORK_FINALITY_DEPTH, 6); 93 assert_eq!(PUBLIC_KEY_BYTES, 32); 94 assert_eq!(HASH_BYTES, 32); 95 assert_eq!(SIGNATURE_BYTES, 64); 96 assert_eq!( 97 crate::domain::ticket::MISSED_FALLBACK_TICKET_INVALIDATION_HEIGHT, 98 300 99 ); 100 } 101 }