solana_sysvar/
rent.rs

1//! Configuration for network [rent].
2//!
3//! [rent]: https://docs.solanalabs.com/implemented-proposals/rent
4//!
5//! The _rent sysvar_ provides access to the [`Rent`] type, which defines
6//! storage rent fees.
7//!
8//! [`Rent`] implements [`Sysvar::get`] and can be loaded efficiently without
9//! passing the sysvar account ID to the program.
10//!
11//! See also the Solana [documentation on the rent sysvar][sdoc].
12//!
13//! [sdoc]: https://docs.solanalabs.com/runtime/sysvars#rent
14//!
15//! # Examples
16//!
17//! Accessing via on-chain program directly:
18//!
19//! ```no_run
20//! # use solana_account_info::AccountInfo;
21//! # use solana_msg::msg;
22//! # use solana_sysvar::Sysvar;
23//! # use solana_program_error::{ProgramError, ProgramResult};
24//! # use solana_pubkey::Pubkey;
25//! # use solana_rent::Rent;
26//! # use solana_sdk_ids::sysvar::rent;
27//! fn process_instruction(
28//!     program_id: &Pubkey,
29//!     accounts: &[AccountInfo],
30//!     instruction_data: &[u8],
31//! ) -> ProgramResult {
32//!
33//!     let rent = Rent::get()?;
34//!     msg!("rent: {:#?}", rent);
35//!
36//!     Ok(())
37//! }
38//! #
39//! # use solana_sysvar_id::SysvarId;
40//! # let p = Rent::id();
41//! # let l = &mut 1009200;
42//! # let d = &mut vec![152, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 100];
43//! # let a = AccountInfo::new(&p, false, false, l, d, &p, false, 0);
44//! # let accounts = &[a.clone(), a];
45//! # process_instruction(
46//! #     &Pubkey::new_unique(),
47//! #     accounts,
48//! #     &[],
49//! # )?;
50//! # Ok::<(), ProgramError>(())
51//! ```
52//!
53//! Accessing via on-chain program's parameters:
54//!
55//! ```
56//! # use solana_account_info::{AccountInfo, next_account_info};
57//! # use solana_msg::msg;
58//! # use solana_sysvar::Sysvar;
59//! # use solana_program_error::{ProgramError, ProgramResult};
60//! # use solana_pubkey::Pubkey;
61//! # use solana_rent::Rent;
62//! # use solana_sdk_ids::sysvar::rent;
63//! #
64//! fn process_instruction(
65//!     program_id: &Pubkey,
66//!     accounts: &[AccountInfo],
67//!     instruction_data: &[u8],
68//! ) -> ProgramResult {
69//!     let account_info_iter = &mut accounts.iter();
70//!     let rent_account_info = next_account_info(account_info_iter)?;
71//!
72//!     assert!(rent::check_id(rent_account_info.key));
73//!
74//!     let rent = Rent::from_account_info(rent_account_info)?;
75//!     msg!("rent: {:#?}", rent);
76//!
77//!     Ok(())
78//! }
79//! #
80//! # use solana_sysvar_id::SysvarId;
81//! # let p = Rent::id();
82//! # let l = &mut 1009200;
83//! # let d = &mut vec![152, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 100];
84//! # let a = AccountInfo::new(&p, false, false, l, d, &p, false, 0);
85//! # let accounts = &[a.clone(), a];
86//! # process_instruction(
87//! #     &Pubkey::new_unique(),
88//! #     accounts,
89//! #     &[],
90//! # )?;
91//! # Ok::<(), ProgramError>(())
92//! ```
93//!
94//! Accessing via the RPC client:
95//!
96//! ```
97//! # use solana_program::example_mocks::solana_sdk;
98//! # use solana_program::example_mocks::solana_rpc_client;
99//! # use solana_sdk::account::Account;
100//! # use solana_rent::Rent;
101//! # use solana_rpc_client::rpc_client::RpcClient;
102//! # use solana_sdk_ids::sysvar::rent;
103//! # use anyhow::Result;
104//! #
105//! fn print_sysvar_rent(client: &RpcClient) -> Result<()> {
106//! #   client.set_get_account_response(rent::ID, Account {
107//! #       lamports: 1009200,
108//! #       data: vec![152, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 100],
109//! #       owner: solana_sdk_ids::system_program::ID,
110//! #       executable: false,
111//! #       rent_epoch: 307,
112//! # });
113//! #
114//!     let rent = client.get_account(&rent::ID)?;
115//!     let data: Rent = bincode::deserialize(&rent.data)?;
116//!
117//!     Ok(())
118//! }
119//! #
120//! # let client = RpcClient::new(String::new());
121//! # print_sysvar_rent(&client)?;
122//! #
123//! # Ok::<(), anyhow::Error>(())
124//! ```
125#[cfg(feature = "bincode")]
126use crate::{impl_sysvar_get, Sysvar};
127pub use {
128    solana_rent::Rent,
129    solana_sdk_ids::sysvar::rent::{check_id, id, ID},
130};
131
132#[cfg(feature = "bincode")]
133impl Sysvar for Rent {
134    impl_sysvar_get!(sol_get_rent_sysvar);
135}