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

feat(hints): Implement NewHint#40 #1038

Merged
merged 52 commits into from
Apr 25, 2023
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
17716c4
Add test
fmoletta Apr 20, 2023
e867c2b
Ignore builtin segments in get_memory_holes
fmoletta Apr 20, 2023
c560497
Improve test
fmoletta Apr 20, 2023
ed5329f
Add memory holes check for cairo_run_test tests
fmoletta Apr 20, 2023
c15445b
Fix broken condition
fmoletta Apr 20, 2023
f252960
Make memory_holes check optional & customizable
fmoletta Apr 20, 2023
063f9c4
Fix bounds
fmoletta Apr 20, 2023
6e3ed8b
Add a test with deliberately created memory holes
fmoletta Apr 20, 2023
9fa2dc8
Fix test value
fmoletta Apr 20, 2023
d36bf3f
Remove duplicated tests + add memory hole value to some tests
fmoletta Apr 20, 2023
ece99eb
Add memory holes value + remove duplicated tests + fix typo
fmoletta Apr 20, 2023
1f867fb
Fix test values
fmoletta Apr 20, 2023
ac9c795
Add changelog entry
fmoletta Apr 20, 2023
356a187
Link PR in Changelog
fmoletta Apr 20, 2023
0f89514
Merge branch 'main' of github.com:lambdaclass/cairo-rs into fix-get-m…
fmoletta Apr 20, 2023
67e2622
Mark breaking change in changelog
fmoletta Apr 21, 2023
4a17d58
Merge branch 'main' of github.com:lambdaclass/cairo-rs into fix-get-m…
fmoletta Apr 21, 2023
e114745
fmt
fmoletta Apr 21, 2023
3ecf882
Fix test value
fmoletta Apr 21, 2023
342efdb
Fix codecov-patch diff
fmoletta Apr 21, 2023
67e3b70
Add hint code
fmoletta Apr 21, 2023
4779307
Add integration test
fmoletta Apr 21, 2023
cbe3b5d
Add untracked file
fmoletta Apr 21, 2023
81a99e5
Merge branch 'main' into div-mod-n-packed-hint
fmoletta Apr 21, 2023
a71552d
Add changelog entry
fmoletta Apr 21, 2023
75bb911
Rename hint
fmoletta Apr 21, 2023
53ade42
Merge branch 'main' into div-mod-n-packed-hint
fmoletta Apr 21, 2023
23c7d8f
Fix test
fmoletta Apr 21, 2023
992c7fe
Fix test
fmoletta Apr 21, 2023
b434052
Add hint code + hint impl + unit test
fmoletta Apr 21, 2023
ad46d43
fmt
fmoletta Apr 21, 2023
c078fc2
Add integration test
fmoletta Apr 21, 2023
ad87b73
Add changelog entry
fmoletta Apr 21, 2023
86f7094
Merge branch 'main' into new-hint-38
fmoletta Apr 21, 2023
1ad1716
Implement hint + add tests
fmoletta Apr 21, 2023
2f60b81
Add changelog entry
fmoletta Apr 21, 2023
d183b6b
Remove indent from hint string
fmoletta Apr 21, 2023
535f9c8
Merge branch 'div-mod-n-packed-hint' into new-hint-38
fmoletta Apr 21, 2023
5ee243b
Merge branch 'new-hint-38' into new-hint-39
fmoletta Apr 21, 2023
6cd45c2
Add wasm import
fmoletta Apr 21, 2023
7316d57
Merge branch 'div-mod-n-packed-hint' into new-hint-38
fmoletta Apr 21, 2023
a44b045
Merge branch 'new-hint-38' into new-hint-39
fmoletta Apr 21, 2023
d4da292
Fix prev hint + implement new hint
fmoletta Apr 21, 2023
c9bb1ec
Add tests
fmoletta Apr 21, 2023
b446c39
Add changelog entry
fmoletta Apr 21, 2023
1545cc7
Update CHANGELOG.md
fmoletta Apr 21, 2023
050b6bf
Update CHANGELOG.md
fmoletta Apr 21, 2023
717ab60
Fix Pr numbers
fmoletta Apr 21, 2023
6327388
Merge branch 'new-hint-39' into new-hint-40
fmoletta Apr 21, 2023
51e065b
Update src/hint_processor/builtin_hint_processor/ec_recover.rs
fmoletta Apr 21, 2023
6c7b84a
Merge branch 'main' of github.com:lambdaclass/cairo-rs into new-hint-40
fmoletta Apr 25, 2023
93e5145
Fix changelog
fmoletta Apr 25, 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
59 changes: 59 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,65 @@

#### Upcoming Changes

* Implement hint on ec_recover.json whitelist [#1038](https://github.com/lambdaclass/cairo-rs/pull/1038):

`BuiltinHintProcessor` now supports the following hint:

```python
%{
value = k = product // m
%}
```

* Implement hint on ec_recover.json whitelist [#1037](https://github.com/lambdaclass/cairo-rs/pull/1037):

`BuiltinHintProcessor` now supports the following hint:

```python
%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

a = pack(ids.a, PRIME)
b = pack(ids.b, PRIME)
product = a * b
m = pack(ids.m, PRIME)

value = res = product % m
%}
```

* Implement hint on ec_recover.json whitelist [#1036](https://github.com/lambdaclass/cairo-rs/pull/1036):

`BuiltinHintProcessor` now supports the following hint:

```python
%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

a = pack(ids.a, PRIME)
b = pack(ids.b, PRIME)
value = res = a - b
%}
```

* Implement hint on ec_recover.json whitelist [#1032](https://github.com/lambdaclass/cairo-rs/pull/1032):

`BuiltinHintProcessor` now supports the following hint:

```python
%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

N = pack(ids.n, PRIME)
x = pack(ids.x, PRIME) % N
s = pack(ids.s, PRIME) % N,
value = res = div_mod(x, s, N)
%}
```

* BREAKING CHANGE: Fix `CairoRunner::get_memory_holes` [#1027](https://github.com/lambdaclass/cairo-rs/pull/1027):

* Skip builtin segements when counting memory holes
Expand Down
82 changes: 82 additions & 0 deletions cairo_programs/ec_recover.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
%builtins range_check
from starkware.cairo.common.cairo_secp.bigint import BigInt3, nondet_bigint3

func test_div_mod_n_packed_hint{range_check_ptr: felt}() {

tempvar n = BigInt3(177, 0, 0);
tempvar x = BigInt3(25, 0, 0);
tempvar s = BigInt3(5, 0, 0);

%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

N = pack(ids.n, PRIME)
x = pack(ids.x, PRIME) % N
s = pack(ids.s, PRIME) % N
value = res = div_mod(x, s, N)
%}

let (res) = nondet_bigint3();
assert res = BigInt3(5,0,0);

return();
}

func test_sub_a_b_hint{range_check_ptr: felt}() {

tempvar a = BigInt3(100, 0, 0);
tempvar b = BigInt3(25, 0, 0);

%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

a = pack(ids.a, PRIME)
b = pack(ids.b, PRIME)
value = res = a - b
%}

let (res) = nondet_bigint3();
assert res = BigInt3(75,0,0);

return();
}

func test_product_hints{range_check_ptr: felt}() {

tempvar a = BigInt3(60, 0, 0);
tempvar b = BigInt3(2, 0, 0);
tempvar m = BigInt3(100, 0, 0);

%{
from starkware.cairo.common.cairo_secp.secp_utils import pack
from starkware.python.math_utils import div_mod, safe_div

a = pack(ids.a, PRIME)
b = pack(ids.b, PRIME)
product = a * b
m = pack(ids.m, PRIME)

value = res = product % m
%}

let (res) = nondet_bigint3();
assert res = BigInt3(20,0,0);

%{
value = k = product // m
%}

let (k) = nondet_bigint3();
assert k = BigInt3(1,0,0);

return();
}

func main{range_check_ptr: felt}() {
test_div_mod_n_packed_hint();
test_sub_a_b_hint();
test_product_hints();
return();
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ use felt::Felt252;
#[cfg(feature = "skip_next_instruction_hint")]
use crate::hint_processor::builtin_hint_processor::skip_next_instruction::skip_next_instruction;

use super::ec_recover::{
ec_recover_divmod_n_packed, ec_recover_product_div_m, ec_recover_product_mod,
ec_recover_sub_a_b,
};

pub struct HintProcessorData {
pub code: String,
pub ap_tracking: ApTracking,
Expand Down Expand Up @@ -568,6 +573,19 @@ impl HintProcessor for BuiltinHintProcessor {
}
hint_code::QUAD_BIT => quad_bit(vm, &hint_data.ids_data, &hint_data.ap_tracking),
hint_code::DI_BIT => di_bit(vm, &hint_data.ids_data, &hint_data.ap_tracking),
hint_code::EC_RECOVER_DIV_MOD_N_PACKED => ec_recover_divmod_n_packed(
vm,
exec_scopes,
&hint_data.ids_data,
&hint_data.ap_tracking,
),
hint_code::EC_RECOVER_SUB_A_B => {
ec_recover_sub_a_b(vm, exec_scopes, &hint_data.ids_data, &hint_data.ap_tracking)
}
hint_code::EC_RECOVER_PRODUCT_MOD => {
ec_recover_product_mod(vm, exec_scopes, &hint_data.ids_data, &hint_data.ap_tracking)
}
hint_code::EC_RECOVER_PRODUCT_DIV_M => ec_recover_product_div_m(exec_scopes),
#[cfg(feature = "skip_next_instruction_hint")]
hint_code::SKIP_NEXT_INSTRUCTION => skip_next_instruction(vm),
code => Err(HintError::UnknownHint(code.to_string())),
Expand Down
Loading