Skip to content

Commit e2d00f8

Browse files
rcatalan98fmolettapefontana
authored andcommitted
Test RandomEcPoint hint & Fix for LinearSplit (lambdaclass#1142)
* Implement TryFrom<CasmContractClass> for Program * Add cairo1hintprocessor dependency * Map hints to pc * Add Cairo1HintProcessor * Move cairo-1-hint-processor to cairo-rs crate * fixes * Fix test helper * Remove allow * fix test func * Add builtins to test * Extract builtins from contract_class * Add _builtin to builtin names in etrypoint data * Copy logic from cairo1 contract execution in starknet * Remove unused code * Use lower initial_gas value * Add program segment size argument * Check return values in run_cairo_1_entrypoint fn * Remove debug prints * Add basic fibonacci test * Add another fibonacci case * Always verify secure * Clippy * Compile casm contracts when running test target * Remove unwrap from cell_ref_to_relocatable * Remove paniking macro from extract_buffer * Misc improvements * Misc improvements * Misc improvements * Misc improvements * Remove unwraps & asserts from DictSquashExecScope::pop_current_key * Remove unwraps & asserts from DictManagerExecScope::new_default_dict * Remove expect from get_dict_tracker * Add constants for cairo 1 compiler binaries in makefile * Add cairo 1 compiler to deps target in makefile * Add cairo folder to clean target * Remove todo from execute method * Separate helper functions from Cairo1HintProcessor implementation * Add untracked file * Fix * Add changelog entry * Add a job to compile cairo 1 contracts in ci * Add job dependency * Fix yml syntax * Fix yml syntax * Temporarily extempt cairo-1-hint-processor from codecov * Fix yml syntax * Fix workflow * Remove cache code from new job * Fix yml syntax * Fix wrong path * Fix makefile * Build only compiler binaries * Add cairo-1-contracts-cache * Fetch contracts cache in jobs that need them * Use no-std version of HashMap * Import stdlib::prelude::* * Wrap print in not-wasm block * Remove std path * use slices instead of vec * Make DictSquashExecScope fields private * Import hint processor dependencies without default features * -Clippy * Add type * Compile cairo 1 contracts in build-programs job * Rename cache * Use target dependency instead of explicit $(MAKE) * Fix yml syntax * Check for cairo folder before cloning cairo repo * Ommit folder name * Swap paths * Add cairo-1-hints feature flag * Add compile-hint feature to tests run in workflow * Add cairo-1-hints to test_utils * Add cairo-1-hints to test_utils * Use both paths when fetching compiled test data * Remove cairo-1-hints feature from test_utils feature * Move dependencies to cairo-1-hints feature * Update CHANGELOG.md * Fix cfg directive * Add cairo-1-hints to test workflow * Add Cairo 1 considerations for Gitignore and Makefile (lambdaclass#1144) * Add ignore for casm and sierra files * Add libfunc experimental for cairo 1 compilation * Add new enty to CHANGELOG * Add test for RandomEcPoint hint * Add rust test for Cairo 1 program * Fix Cairo 1 program * Change contract & Add activate feature for Cairo 1 * Add new entry to Changelog * Restore CHANGELOG.md * Restore Cargo.toml * Add eof new line * Add more coverage to the test * Refactor contract test * Fix LinearSplit hint * Add fix entry to the CHANGELOG * Remove outdated comment * Remove CHANGELOG entry --------- Co-authored-by: Federica <[email protected]> Co-authored-by: fmoletta <[email protected]> Co-authored-by: Pedro Fontana <[email protected]>
1 parent b23fdd5 commit e2d00f8

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#[contract]
2+
mod RandomEcPoint{
3+
use option::OptionTrait;
4+
use ec::ec_state_init;
5+
use ec::ec_state_add;
6+
use ec::ec_state_try_finalize_nz;
7+
use ec::ec_point_from_x;
8+
use ec::ec_point_non_zero;
9+
use ec::ec_point_unwrap;
10+
11+
// Test taken from https://github.com/starkware-libs/cairo/blob/a0ead7c0b8e297d281c7213151cd43ac11de5042/corelib/src/test/ec_test.cairo#L17
12+
#[external]
13+
fn random_ec_point() -> felt252{
14+
let p = ec_point_from_x(1).unwrap();
15+
let p_nz = ec_point_non_zero(p);
16+
17+
let mut state = ec_state_init();
18+
ec_state_add(ref state, p_nz);
19+
20+
let q = ec_state_try_finalize_nz(state).expect('zero point');
21+
let (qx, qy) = ec_point_unwrap(q);
22+
23+
assert(qx == 1, 'bad finalize x');
24+
qx
25+
}
26+
27+
}

src/hint_processor/cairo_1_hint_processor/hint_processor.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -465,15 +465,15 @@ impl Cairo1HintProcessor {
465465
x: &CellRef,
466466
y: &CellRef,
467467
) -> Result<(), HintError> {
468-
let value = res_operand_get_val(vm, value)?;
469-
let scalar = res_operand_get_val(vm, scalar)?;
470-
let max_x = res_operand_get_val(vm, max_x)?;
468+
let value = res_operand_get_val(vm, value)?.to_biguint();
469+
let scalar = res_operand_get_val(vm, scalar)?.to_biguint();
470+
let max_x = res_operand_get_val(vm, max_x)?.to_biguint();
471471
let x_value = (&value / &scalar).min(max_x);
472472
let y_value = value - &x_value * &scalar;
473473

474-
vm.insert_value(cell_ref_to_relocatable(x, vm)?, x_value)
474+
vm.insert_value(cell_ref_to_relocatable(x, vm)?, Felt252::from(x_value))
475475
.map_err(HintError::from)?;
476-
vm.insert_value(cell_ref_to_relocatable(y, vm)?, y_value)
476+
vm.insert_value(cell_ref_to_relocatable(y, vm)?, Felt252::from(y_value))
477477
.map_err(HintError::from)?;
478478

479479
Ok(())

src/tests/cairo_1_run_from_entrypoint_tests.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,14 @@ fn linear_split() {
459459
);
460460
}
461461

462+
#[test]
463+
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
464+
fn random_ec_point() {
465+
let program_data =
466+
include_bytes!("../../cairo_programs/cairo-1-contracts/random_ec_point.casm");
467+
run_cairo_1_entrypoint(program_data.as_slice(), 0, &[], &[1.into()]);
468+
}
469+
462470
#[test]
463471
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
464472
fn assert_le_find_small_arcs() {

0 commit comments

Comments
 (0)