templar_common/vault/
gas.rs

1use super::*;
2
3// Add a 20% buffer to a gas estimate
4#[must_use]
5pub const fn buffer(size: u64) -> Gas {
6    Gas::from_tgas((size * 6).div_ceil(5))
7}
8
9pub fn require_at_least(needed: Gas) {
10    let gas = env::prepaid_gas();
11    require!(
12        gas >= needed,
13        format!("Insufficient gas: {}, needed: {needed}", gas)
14    );
15}
16
17#[cfg(test)]
18mod tests {
19    use super::{buffer, require_at_least};
20    use near_sdk::{test_utils::VMContextBuilder, testing_env, Gas};
21
22    #[test]
23    fn buffer_adds_twenty_percent_ceiling() {
24        assert_eq!(buffer(5), Gas::from_tgas(6));
25        assert_eq!(buffer(6), Gas::from_tgas(8));
26    }
27
28    #[test]
29    fn require_at_least_accepts_sufficient_gas() {
30        let mut builder = VMContextBuilder::new();
31        builder.prepaid_gas(Gas::from_tgas(10));
32        testing_env!(builder.build());
33
34        require_at_least(Gas::from_tgas(8));
35    }
36}