Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement run resources funcs #1175

Merged
merged 24 commits into from
Jun 6, 2023
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9f81313
Add RunResources structure
mmsc2 May 17, 2023
07ecb2d
Modify changelog
mmsc2 May 17, 2023
0699590
Merge branch 'main' into RunResources
mmsc2 May 19, 2023
a1f9eba
change data type of n_steps from u64 to usize
mmsc2 May 19, 2023
a6231da
merge main
mmsc2 May 22, 2023
d3440f2
Implement run resources functions
mmsc2 May 22, 2023
f4e770e
Fix tests
mmsc2 May 22, 2023
19e17e7
set comment about calculation in cairo_run
mmsc2 May 22, 2023
7fe4382
Change CHangelog and remove option from RunResources
mmsc2 May 23, 2023
300911a
Fix clippy
mmsc2 May 23, 2023
98046ab
Add clone trait to run resources
mmsc2 May 23, 2023
b177834
Add debug and default traits to RunResources
mmsc2 May 23, 2023
fd23227
Fix error in while loop inside run_until_pc
mmsc2 May 24, 2023
5a4ea36
Merge branch 'main' into ImplementRunResourcesFuncs
mmsc2 May 29, 2023
ba797f9
Add helper function for clarity in run_until_pc loop
mmsc2 May 29, 2023
fdd9e99
Merge branch 'main' into ImplementRunResourcesFuncs
pefontana May 30, 2023
75a25fe
Merge branch 'main' into ImplementRunResourcesFuncs
pefontana May 30, 2023
4f3c4e6
Add test for cairo 0 contracts
pefontana May 31, 2023
4abed1c
Add tests with Cairo 1 contracts
pefontana May 31, 2023
66809fd
Move RunResources struct to vm::runners::cairo_runner::RunResources
pefontana May 31, 2023
1078e42
Merge branch 'main' into ImplementRunResourcesFuncs
pefontana May 31, 2023
4ca1b89
Update CHANGELOG.md
pefontana May 31, 2023
5a9418f
Fix wasm and no-std compilation
pefontana May 31, 2023
2a8a8a8
Merge branch 'main' into ImplementRunResourcesFuncs
pefontana Jun 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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

* BREAKING: Add structure RunResources [#1173](https://github.com/lambdaclass/cairo-rs/pull/1173)

* fix: felt_from_number not properly returning parse errors [#1012](https://github.com/lambdaclass/cairo-rs/pull/1012)

* fix: Fix felt sqrt and Signed impl [#1150](https://github.com/lambdaclass/cairo-rs/pull/1150)
Expand Down
11 changes: 7 additions & 4 deletions src/cairo_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,14 @@ pub fn cairo_run(
cairo_run_config.layout,
cairo_run_config.proof_mode,
)?;

let mut vm = VirtualMachine::new(cairo_run_config.trace_enabled);
let end = cairo_runner.initialize(&mut vm)?;
// check step calculation
let mut run_resources = None;

cairo_runner
.run_until_pc(end, &mut vm, hint_executor)
.run_until_pc(end, &mut run_resources, &mut vm, hint_executor)
.map_err(|err| VmException::from_vm_error(&cairo_runner, &vm, err))?;
cairo_runner.end_run(false, false, &mut vm, hint_executor)?;

Expand Down Expand Up @@ -153,7 +156,7 @@ mod tests {
.map_err(CairoRunError::Runner)?;

assert!(cairo_runner
.run_until_pc(end, &mut vm, hint_processor)
.run_until_pc(end, &mut None, &mut vm, hint_processor)
.is_ok());

Ok((cairo_runner, vm))
Expand All @@ -173,7 +176,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_ok());
assert!(cairo_runner.relocate(&mut vm, true).is_ok());
// `main` returns without doing nothing, but `not_main` sets `[ap]` to `1`
Expand Down Expand Up @@ -293,7 +296,7 @@ mod tests {
let mut vm = vm!();
let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_ok());
assert!(cairo_runner.relocate(&mut vm, false).is_ok());
assert!(vm.get_relocated_trace().is_err());
Expand Down
1 change: 1 addition & 0 deletions src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ pub(self) fn run_cairo_1_entrypoint(
.run_from_entrypoint(
entrypoint_offset,
&entrypoint_args,
&mut None,
true,
Some(runner.program.shared_program_data.data.len() + program_extra_data.len()),
&mut vm,
Expand Down
24 changes: 24 additions & 0 deletions src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,30 @@ pub fn from_relocatable_to_indexes(relocatable: Relocatable) -> (usize, usize) {
}
}

// ================
// RunResources
// ================

/// Maintains the resources of a cairo run. Can be used across multiple runners.
#[derive(Clone, Default, Debug)]
pub struct RunResources {
n_steps: usize,
}

impl RunResources {
pub fn new(n_steps: usize) -> Self {
RunResources { n_steps }
}

pub fn consumed(&self) -> bool {
self.n_steps == 0
}

pub fn consume_steps(&mut self) {
self.n_steps -= 1;
}
}

#[cfg(test)]
#[macro_use]
pub mod test_utils {
Expand Down
10 changes: 5 additions & 5 deletions src/vm/errors/vm_exception.rs
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ mod test {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());

#[cfg(all(feature = "std"))]
Expand All @@ -657,7 +657,7 @@ mod test {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());
assert_eq!(get_traceback(&vm, &cairo_runner), Some(expected_traceback));
}
Expand Down Expand Up @@ -695,7 +695,7 @@ cairo_programs/bad_programs/bad_usort.cairo:64:5: (pc=0:60)

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());
assert_eq!(
get_traceback(&vm, &cairo_runner),
Expand Down Expand Up @@ -854,7 +854,7 @@ cairo_programs/bad_programs/bad_range_check.cairo:11:5: (pc=0:6)

let end = cairo_runner.initialize(&mut vm).unwrap();
let error = cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.unwrap_err();
let vm_excepction = VmException::from_vm_error(&cairo_runner, &vm, error);
assert_eq!(vm_excepction.to_string(), expected_error_string);
Expand Down Expand Up @@ -899,7 +899,7 @@ cairo_programs/bad_programs/bad_usort.cairo:64:5: (pc=0:60)

let end = cairo_runner.initialize(&mut vm).unwrap();
let error = cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.unwrap_err();
let vm_excepction = VmException::from_vm_error(&cairo_runner, &vm, error);
assert_eq!(vm_excepction.to_string(), expected_error_string);
Expand Down
10 changes: 5 additions & 5 deletions src/vm/hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_ok());
}

Expand Down Expand Up @@ -194,7 +194,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());

// Pre step fail
Expand All @@ -205,7 +205,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());

// Post step fail
Expand All @@ -216,7 +216,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_err());
}

Expand Down Expand Up @@ -267,7 +267,7 @@ mod tests {

let end = cairo_runner.initialize(&mut vm).unwrap();
assert!(cairo_runner
.run_until_pc(end, &mut vm, &mut hint_processor)
.run_until_pc(end, &mut None, &mut vm, &mut hint_processor)
.is_ok());
}
}
4 changes: 2 additions & 2 deletions src/vm/runners/builtin_runner/bitwise.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 5)));
Expand Down Expand Up @@ -404,7 +404,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(5));
Expand Down
4 changes: 2 additions & 2 deletions src/vm/runners/builtin_runner/ec_op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 7)));
Expand Down Expand Up @@ -491,7 +491,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(7));
Expand Down
4 changes: 2 additions & 2 deletions src/vm/runners/builtin_runner/hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 3)));
Expand Down Expand Up @@ -394,7 +394,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(3));
Expand Down
2 changes: 1 addition & 1 deletion src/vm/runners/builtin_runner/keccak.rs
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(
Expand Down
8 changes: 4 additions & 4 deletions src/vm/runners/builtin_runner/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -802,7 +802,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(5));
Expand Down Expand Up @@ -849,7 +849,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(7));
Expand Down Expand Up @@ -893,7 +893,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(3));
Expand Down Expand Up @@ -937,7 +937,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(1));
Expand Down
4 changes: 2 additions & 2 deletions src/vm/runners/builtin_runner/poseidon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 6)));
Expand Down Expand Up @@ -384,7 +384,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(6));
Expand Down
4 changes: 2 additions & 2 deletions src/vm/runners/builtin_runner/range_check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_used_cells_and_allocated_size(&vm), Ok((0, 1)));
Expand Down Expand Up @@ -405,7 +405,7 @@ mod tests {
let address = cairo_runner.initialize(&mut vm).unwrap();

cairo_runner
.run_until_pc(address, &mut vm, &mut hint_processor)
.run_until_pc(address, &mut None, &mut vm, &mut hint_processor)
.unwrap();

assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(1));
Expand Down
Loading