solana_sysvar/
fees.rs

1//! Current cluster fees.
2//!
3//! The _fees sysvar_ provides access to the [`Fees`] type, which contains the
4//! current [`FeeCalculator`].
5//!
6//! [`Fees`] implements [`Sysvar::get`] and can be loaded efficiently without
7//! passing the sysvar account ID to the program.
8//!
9//! This sysvar is deprecated and will not be available in the future.
10//! Transaction fees should be determined with the [`getFeeForMessage`] RPC
11//! method. For additional context see the [Comprehensive Compute Fees
12//! proposal][ccf].
13//!
14//! [`getFeeForMessage`]: https://solana.com/docs/rpc/http/getfeeformessage
15//! [ccf]: https://docs.solanalabs.com/proposals/comprehensive-compute-fees
16//!
17//! See also the Solana [documentation on the fees sysvar][sdoc].
18//!
19//! [sdoc]: https://docs.solanalabs.com/runtime/sysvars#fees
20
21#![allow(deprecated)]
22
23#[cfg(feature = "bincode")]
24use crate::{impl_sysvar_get, Sysvar};
25#[cfg(feature = "serde")]
26use serde_derive::{Deserialize, Serialize};
27pub use solana_sdk_ids::sysvar::fees::{check_id, id, ID};
28use {
29    solana_fee_calculator::FeeCalculator, solana_sdk_macro::CloneZeroed,
30    solana_sysvar_id::impl_deprecated_sysvar_id,
31};
32
33impl_deprecated_sysvar_id!(Fees);
34
35/// Transaction fees.
36#[deprecated(
37    since = "1.9.0",
38    note = "Please do not use, will no longer be available in the future"
39)]
40#[repr(C)]
41#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
42#[derive(Debug, CloneZeroed, Default, PartialEq, Eq)]
43pub struct Fees {
44    pub fee_calculator: FeeCalculator,
45}
46
47impl Fees {
48    pub fn new(fee_calculator: &FeeCalculator) -> Self {
49        #[allow(deprecated)]
50        Self {
51            fee_calculator: *fee_calculator,
52        }
53    }
54}
55
56#[cfg(feature = "bincode")]
57impl Sysvar for Fees {
58    impl_sysvar_get!(sol_get_fees_sysvar);
59}
60
61#[cfg(test)]
62mod tests {
63    use super::*;
64
65    #[test]
66    fn test_clone() {
67        let fees = Fees {
68            fee_calculator: FeeCalculator {
69                lamports_per_signature: 1,
70            },
71        };
72        let cloned_fees = fees.clone();
73        assert_eq!(cloned_fees, fees);
74    }
75}