fluentbase_runtime/syscall_handler/host/
charge_fuel.rs1use crate::RuntimeContext;
3use rwasm::{StoreTr, TrapCode, Value};
4
5pub fn syscall_charge_fuel_handler(
7 caller: &mut impl StoreTr<RuntimeContext>,
8 params: &[Value],
9 _result: &mut [Value],
10) -> Result<(), TrapCode> {
11 let fuel_consumed = params[0].i64().unwrap() as u64;
12 caller.try_consume_fuel(fuel_consumed)?;
14 syscall_charge_fuel_impl(caller.data_mut(), fuel_consumed)?;
16 Ok(())
17}
18
19pub fn syscall_charge_fuel_impl(
21 ctx: &mut RuntimeContext,
22 fuel_consumed: u64,
23) -> Result<(), TrapCode> {
24 let new_fuel_consumed = ctx
25 .execution_result
26 .fuel_consumed
27 .saturating_add(fuel_consumed);
28 if new_fuel_consumed > ctx.fuel_limit {
29 return Err(TrapCode::OutOfFuel);
30 }
31 ctx.execution_result.fuel_consumed = new_fuel_consumed;
32 Ok(())
33}