openzeppelin_relayer/constants/
transactions.rs

1//! Transaction-related constants
2//!
3//! This module contains generic transaction constants that apply across all chain types.
4//! Chain-specific constants are defined in their respective modules:
5//! - EVM constants: `crate::constants::evm_transaction`
6//! - Stellar constants: `crate::constants::stellar_transaction`
7
8use crate::models::TransactionStatus;
9
10/// Transaction statuses that are considered final states.
11/// These states indicate that a transaction has reached its terminal state
12/// and will not be processed further.
13pub const FINAL_TRANSACTION_STATUSES: &[TransactionStatus] = &[
14    TransactionStatus::Canceled,
15    TransactionStatus::Confirmed,
16    TransactionStatus::Failed,
17    TransactionStatus::Expired,
18];
19
20pub const PENDING_TRANSACTION_STATUSES: &[TransactionStatus] = &[
21    TransactionStatus::Pending,
22    TransactionStatus::Sent,
23    TransactionStatus::Submitted,
24];
25
26/// All transaction statuses, used when building status-index metadata that must
27/// cover every possible status key.
28pub const ALL_TRANSACTION_STATUSES: &[TransactionStatus] = &[
29    TransactionStatus::Canceled,
30    TransactionStatus::Pending,
31    TransactionStatus::Sent,
32    TransactionStatus::Submitted,
33    TransactionStatus::Mined,
34    TransactionStatus::Confirmed,
35    TransactionStatus::Failed,
36    TransactionStatus::Expired,
37];
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn test_final_transaction_statuses_contains_expected_values() {
45        assert_eq!(FINAL_TRANSACTION_STATUSES.len(), 4);
46        assert!(FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Canceled));
47        assert!(FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Confirmed));
48        assert!(FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Failed));
49        assert!(FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Expired));
50    }
51
52    #[test]
53    fn test_final_transaction_statuses_excludes_non_final_states() {
54        assert!(!FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Pending));
55        assert!(!FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Sent));
56        assert!(!FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Submitted));
57        assert!(!FINAL_TRANSACTION_STATUSES.contains(&TransactionStatus::Mined));
58    }
59
60    #[test]
61    fn test_pending_transaction_statuses_contains_expected_values() {
62        assert_eq!(PENDING_TRANSACTION_STATUSES.len(), 3);
63        assert!(PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Pending));
64        assert!(PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Sent));
65        assert!(PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Submitted));
66    }
67
68    #[test]
69    fn test_pending_transaction_statuses_excludes_final_states() {
70        assert!(!PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Canceled));
71        assert!(!PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Confirmed));
72        assert!(!PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Failed));
73        assert!(!PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Expired));
74        assert!(!PENDING_TRANSACTION_STATUSES.contains(&TransactionStatus::Mined));
75    }
76}