Skip to content
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#### Upcoming Changes

* fix: Fix `WriteReturnFp` error due to a bad loading of initial gas [#2015](https://github.com/lambdaclass/cairo-vm/pull/2015)

* refactor: Replaces security anyhow errors with enum variants [#1946](https://github.com/lambdaclass/cairo-vm/pull/1946)

* fix: `mod_builtin_fill_memory` could be stuck in an infinite loop [#1975](https://github.com/lambdaclass/cairo-vm/issues/1975)
Expand Down
15 changes: 4 additions & 11 deletions cairo1-run/src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,6 @@ pub fn cairo_run_program(

let main_func = find_function(sierra_program, "::main")?;

let initial_gas = 9999999999999_usize;

// Fetch return type data
let return_type_id = match main_func.signature.ret_types.last() {
// We need to check if the last return type is indeed the function's return value and not an implicit return value
Expand Down Expand Up @@ -261,7 +259,7 @@ pub fn cairo_run_program(
false,
)?;
let end = runner.initialize(cairo_run_config.proof_mode)?;
load_arguments(&mut runner, &cairo_run_config, main_func, initial_gas)?;
load_arguments(&mut runner, &cairo_run_config, main_func)?;

// Run it until the end / infinite loop in proof_mode
runner.run_until_pc(end, &mut hint_processor)?;
Expand Down Expand Up @@ -465,7 +463,6 @@ fn load_arguments(
runner: &mut CairoRunner,
cairo_run_config: &Cairo1RunConfig,
main_func: &Function,
initial_gas: usize,
) -> Result<(), Error> {
let got_gas_builtin = main_func
.signature
Expand Down Expand Up @@ -497,12 +494,7 @@ fn load_arguments(
if got_segment_arena {
ap_offset += 4;
}
// Load initial gas if GasBuiltin is present
if got_gas_builtin {
runner.vm.insert_value(
(runner.vm.get_ap() + ap_offset).map_err(VirtualMachineError::Math)?,
Felt252::from(initial_gas),
)?;
ap_offset += 1;
}
for arg in cairo_run_config.args {
Expand Down Expand Up @@ -617,9 +609,10 @@ fn create_entry_code(
ap += 1;
};
} else if generic_ty == &GasBuiltinType::ID {
// We already loaded the inital gas so we just advance AP
// Load initial gas
casm_build_extend! {ctx,
ap += 1;
const initial_gas = 9999999999999_usize;
tempvar gas = initial_gas;
};
} else {
let ty_size = type_sizes[ty];
Expand Down
7 changes: 7 additions & 0 deletions cairo1-run/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,13 @@ mod tests {
None,
None
))]
#[case(
"gas_builtin_loading.cairo",
"939340725154356279478212603733403581890242362232206720294887278547043341575",
"[939340725154356279478212603733403581890242362232206720294887278547043341575]",
None,
None
)]
fn test_run_program(
#[case] program: &str,
#[case] expected_output: &str,
Expand Down
10 changes: 10 additions & 0 deletions cairo_programs/cairo-1-programs/gas_builtin_loading.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
use core::poseidon::PoseidonTrait;
use core::hash::{HashStateTrait, HashStateExTrait};
use core::testing::get_available_gas;

fn main() -> felt252 {
let a: u128 = get_available_gas();
let b = PoseidonTrait::new().update_with(a).finalize();

b
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use core::poseidon::PoseidonTrait;
use core::hash::{HashStateTrait, HashStateExTrait};
use core::testing::get_available_gas;

fn main() -> Array<felt252> {
let a: u128 = get_available_gas();
let b = PoseidonTrait::new().update_with(a).finalize();
let mut ser_output: Array<felt252> = ArrayTrait::new();

b.serialize(ref ser_output);

ser_output
}
Loading