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