From 02503dfcce215579afb83e04661d0217cc804315 Mon Sep 17 00:00:00 2001 From: Federica <fedemoletta@hotmail.com> Date: Wed, 26 Apr 2023 14:12:54 -0300 Subject: [PATCH 1/6] Add alternative hint string for nondet_bigint_3 --- .../builtin_hint_processor_definition.rs | 2 +- src/hint_processor/builtin_hint_processor/hint_code.rs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs b/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs index 000a125433..597b9f9742 100644 --- a/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs +++ b/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs @@ -297,7 +297,7 @@ impl HintProcessor for BuiltinHintProcessor { &hint_data.ids_data, &hint_data.ap_tracking, ), - hint_code::NONDET_BIGINT3 => { + hint_code::NONDET_BIGINT3_V1 | hint_code::NONDET_BIGINT3_V2 => { nondet_bigint3(vm, exec_scopes, &hint_data.ids_data, &hint_data.ap_tracking) } hint_code::REDUCE => { diff --git a/src/hint_processor/builtin_hint_processor/hint_code.rs b/src/hint_processor/builtin_hint_processor/hint_code.rs index 666282aee7..4e926caa3d 100644 --- a/src/hint_processor/builtin_hint_processor/hint_code.rs +++ b/src/hint_processor/builtin_hint_processor/hint_code.rs @@ -471,10 +471,13 @@ new_state = blake2s_compress( segments.write_arg(ids.output, new_state)"#; -pub const NONDET_BIGINT3: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split +pub const NONDET_BIGINT3_V1: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split segments.write_arg(ids.res.address_, split(value))"#; +pub const NONDET_BIGINT3_V2: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import split +segments.write_arg(ids.res.address_, split(value))"#; + pub const VERIFY_ZERO_V1: &str = r#"from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack q, r = divmod(pack(ids.val, PRIME), SECP_P) From df97bb666169ae4e40fce9817db93b80ac872a1d Mon Sep 17 00:00:00 2001 From: Federica <fedemoletta@hotmail.com> Date: Wed, 26 Apr 2023 14:21:16 -0300 Subject: [PATCH 2/6] Add integration test --- cairo_programs/nondet_bigint_3_v2.cairo | 46 +++++++++++++++++++++++++ src/tests/cairo_run_test.rs | 7 ++++ 2 files changed, 53 insertions(+) create mode 100644 cairo_programs/nondet_bigint_3_v2.cairo diff --git a/cairo_programs/nondet_bigint_3_v2.cairo b/cairo_programs/nondet_bigint_3_v2.cairo new file mode 100644 index 0000000000..7407b525f4 --- /dev/null +++ b/cairo_programs/nondet_bigint_3_v2.cairo @@ -0,0 +1,46 @@ +%builtins range_check + +from starkware.cairo.common.cairo_secp.bigint import BigInt3, BASE + +// Hint arguments: value. +func nondet_bigint3{range_check_ptr}() -> (res: BigInt3) { + // The result should be at the end of the stack after the function returns. + let res: BigInt3 = [cast(ap + 5, BigInt3*)]; + %{ + from starkware.cairo.common.cairo_secp.secp_utils import split + + segments.write_arg(ids.res.address_, split(value)) + %} + // The maximal possible sum of the limbs, assuming each of them is in the range [0, BASE). + const MAX_SUM = 3 * (BASE - 1); + assert [range_check_ptr] = MAX_SUM - (res.d0 + res.d1 + res.d2); + + // Prepare the result at the end of the stack. + tempvar range_check_ptr = range_check_ptr + 4; + [range_check_ptr - 3] = res.d0, ap++; + [range_check_ptr - 2] = res.d1, ap++; + [range_check_ptr - 1] = res.d2, ap++; + static_assert &res + BigInt3.SIZE == ap; + return (res=res); +} + +func main{range_check_ptr}() { + alloc_locals; + // Take these hints from div_mod_n just to have a value in scope + local a: BigInt3 = BigInt3(1,2,3); + local b: BigInt3 = BigInt3(4,5,6); + %{ + from starkware.cairo.common.cairo_secp.secp_utils import N, pack + from starkware.python.math_utils import div_mod, safe_div + + a = pack(ids.a, PRIME) + b = pack(ids.b, PRIME) + value = res = div_mod(a, b, N) + %} + let (r) = nondet_bigint3(); + assert r.d0 = 46511138620617205537268188; + assert r.d1 = 26286155657000021849694253; + assert r.d2 = 3102515549921694024741409; + return(); +} + diff --git a/src/tests/cairo_run_test.rs b/src/tests/cairo_run_test.rs index 3b4b1a2701..254f948c31 100644 --- a/src/tests/cairo_run_test.rs +++ b/src/tests/cairo_run_test.rs @@ -890,3 +890,10 @@ fn ec_double_assign_new_x_v3() { let program_data = include_bytes!("../../cairo_programs/ec_double_assign_new_x_v3.json"); run_program_simple(program_data.as_slice()); } + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn nondet_bigint3_v2() { + let program_data = include_bytes!("../../cairo_programs/nondet_bigint3_v2.json"); + run_program_simple(program_data.as_slice()); +} From 3e6a032c78f7f94e4d2eccac5072c1a96b6501f9 Mon Sep 17 00:00:00 2001 From: Federica <fedemoletta@hotmail.com> Date: Wed, 26 Apr 2023 14:24:43 -0300 Subject: [PATCH 3/6] Rename test file --- .../{nondet_bigint_3_v2.cairo => nondet_bigint3_v2.cairo} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cairo_programs/{nondet_bigint_3_v2.cairo => nondet_bigint3_v2.cairo} (100%) diff --git a/cairo_programs/nondet_bigint_3_v2.cairo b/cairo_programs/nondet_bigint3_v2.cairo similarity index 100% rename from cairo_programs/nondet_bigint_3_v2.cairo rename to cairo_programs/nondet_bigint3_v2.cairo From e04b7c761ba131c3111f094383d1337ccced98f2 Mon Sep 17 00:00:00 2001 From: Federica <fedemoletta@hotmail.com> Date: Wed, 26 Apr 2023 14:31:55 -0300 Subject: [PATCH 4/6] Add changelog entry --- CHANGELOG.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab458d240a..1330430335 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,19 @@ #### Upcoming Changes -Add missing hint on vrf.json lib [#1053](https://github.com/lambdaclass/cairo-rs/pull/1053): +* Add alternative hint code for nondet_bigint3 hint [#1071](https://github.com/lambdaclass/cairo-rs/pull/1071) + + `BuiltinHintProcessor` now supports the following hint: + + ```python + %{ + from starkware.cairo.common.cairo_secp.secp_utils import split + + segments.write_arg(ids.res.address_, split(value)) + %} + ``` + +* Add missing hint on vrf.json lib [#1053](https://github.com/lambdaclass/cairo-rs/pull/1053): `BuiltinHintProcessor` now supports the following hint: From 1cd9d89f53c52fdabf6de3e63b8c9f65111d8d41 Mon Sep 17 00:00:00 2001 From: Federica <fedemoletta@hotmail.com> Date: Wed, 26 Apr 2023 14:33:24 -0300 Subject: [PATCH 5/6] Fix hint --- CHANGELOG.md | 1 - cairo_programs/nondet_bigint3_v2.cairo | 1 - 2 files changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1330430335..c08cbf4046 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,6 @@ ```python %{ from starkware.cairo.common.cairo_secp.secp_utils import split - segments.write_arg(ids.res.address_, split(value)) %} ``` diff --git a/cairo_programs/nondet_bigint3_v2.cairo b/cairo_programs/nondet_bigint3_v2.cairo index 7407b525f4..45bbb2a9c0 100644 --- a/cairo_programs/nondet_bigint3_v2.cairo +++ b/cairo_programs/nondet_bigint3_v2.cairo @@ -8,7 +8,6 @@ func nondet_bigint3{range_check_ptr}() -> (res: BigInt3) { let res: BigInt3 = [cast(ap + 5, BigInt3*)]; %{ from starkware.cairo.common.cairo_secp.secp_utils import split - segments.write_arg(ids.res.address_, split(value)) %} // The maximal possible sum of the limbs, assuming each of them is in the range [0, BASE). From 23accf843254119ace673512c5c6c7ec3cac53b2 Mon Sep 17 00:00:00 2001 From: Mario Rugiero <mario.rugiero@lambdaclass.com> Date: Wed, 26 Apr 2023 20:17:09 -0300 Subject: [PATCH 6/6] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tomás <47506558+MegaRedHand@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35ca382193..1cbb839310 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ `BuiltinHintProcessor` now supports the following hint: - ```python + ```python %{ from starkware.cairo.common.cairo_secp.secp_utils import split segments.write_arg(ids.res.address_, split(value))