Skip to main content

aztec_core/
fee.rs

1use serde::{Deserialize, Serialize};
2
3/// Gas consumption broken down by DA and L2 components.
4#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
5pub struct Gas {
6    /// Data availability gas consumed.
7    pub da_gas: u64,
8    /// L2 execution gas consumed.
9    pub l2_gas: u64,
10}
11
12/// Per-unit gas fee prices.
13#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
14pub struct GasFees {
15    /// Fee per unit of DA gas.
16    pub fee_per_da_gas: u128,
17    /// Fee per unit of L2 gas.
18    pub fee_per_l2_gas: u128,
19}
20
21/// Gas limits and fee caps for a transaction.
22#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
23pub struct GasSettings {
24    /// Maximum gas allowed for the main execution phase.
25    pub gas_limits: Option<Gas>,
26    /// Maximum gas allowed for the teardown phase.
27    pub teardown_gas_limits: Option<Gas>,
28    /// Maximum fee per gas unit the sender is willing to pay.
29    pub max_fee_per_gas: Option<GasFees>,
30    /// Maximum priority fee per gas unit (tip).
31    pub max_priority_fee_per_gas: Option<GasFees>,
32}
33
34#[cfg(test)]
35#[allow(clippy::panic)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn gas_settings_default_is_empty() {
41        let settings = GasSettings::default();
42        assert_eq!(settings.gas_limits, None);
43        assert_eq!(settings.teardown_gas_limits, None);
44        assert_eq!(settings.max_fee_per_gas, None);
45        assert_eq!(settings.max_priority_fee_per_gas, None);
46    }
47
48    #[test]
49    fn gas_settings_roundtrip() {
50        let settings = GasSettings {
51            gas_limits: Some(Gas {
52                da_gas: 1,
53                l2_gas: 2,
54            }),
55            teardown_gas_limits: Some(Gas {
56                da_gas: 3,
57                l2_gas: 4,
58            }),
59            max_fee_per_gas: Some(GasFees {
60                fee_per_da_gas: 5,
61                fee_per_l2_gas: 6,
62            }),
63            max_priority_fee_per_gas: None,
64        };
65
66        let json = match serde_json::to_string(&settings) {
67            Ok(json) => json,
68            Err(err) => panic!("serializing GasSettings should succeed: {err}"),
69        };
70        let decoded: GasSettings = match serde_json::from_str(&json) {
71            Ok(decoded) => decoded,
72            Err(err) => panic!("deserializing GasSettings should succeed: {err}"),
73        };
74        assert_eq!(decoded, settings);
75    }
76}