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

add Cairo1 builtin hint processor #91

Merged
merged 48 commits into from
Mar 20, 2024
Merged

Conversation

maciejka
Copy link
Collaborator

Moves us to the point where Cairo1 contracts are executed to the first syscall:

...
executing INVOKE_FUNCTION on: 3221225984
about to call contract_address: 3221225984, class_hash: 2147484160, is_deprecated: 0
TODO: execute syscall hint: SystemCall { system: Deref(CellRef { register: FP, offset: -3 }) }
...

maciejka and others added 30 commits February 22, 2024 18:12
* first iteration of is_n_ge_two hint

* refactor is_n_ge_two hint. remove unused dependencies. start test

* set vm memory in test

* remove unused macros

* fix test and remove debugging prints

* add EOF line

* add test cases

* use rstest cases. refactor hint code to avoid using match. rename hint tests module.

* apply formatter

* add case for n > two

* remove End of file line

* run fmt+nightly command

* run fmt+nightly command
* add hint in hint map and use ids map

* remove unused macro. makes hint constant public
* Add is_on_curve hint and basic test

* Improve test

* Add TODO

* Update Cargo.lock

* Attempt at better ids_data

* Set fp and add another segment

* Clean up

* fmt

* Fix clippy lints

* fmt

* fmt

* Add IS_ON_CURVE to hints map

* Use constants for ONE and ZERO

* fmt

* Clean up secp_p comments

* Use vars for var names

* Remove duplicate mod tests
Co-authored-by: Olivier Desenfans <[email protected]>
Co-authored-by: Herman Obst Demaestri <[email protected]>
Co-authored-by: Olivier Desenfans <[email protected]>
Co-authored-by: Olivier Desenfans <[email protected]>
Problem: Cairo structs are accessed in some hints. The Python VM has
abstractions to access fields by name that the Rust VM cannot implement.
This leads to accessing these structs by hardcoding the offset of each
field.

Solution: The new `CairoType` trait allows to read/write an entire
struct in one go. The derive implementation reads/writes fields one by
one according to their place in the struct definition. For cases where
reading/writing the whole struct is not appropriate, the new
`FieldOffsetGetters` macro implements a `get_<field>_offset()` method
for each field of the struct to avoid hardcoding values.
@maciejka maciejka requested review from notlesh and odesenfans March 20, 2024 10:22
@maciejka maciejka marked this pull request as ready for review March 20, 2024 10:39
Copy link
Contributor

@odesenfans odesenfans left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One minor comment, seems good otherwise!

src/hints/mod.rs Show resolved Hide resolved
@maciejka maciejka merged commit 29487c6 into main Mar 20, 2024
5 checks passed
@maciejka maciejka deleted the mk/cairo1-builtin-hint-processor branch March 20, 2024 15:39
@notlesh notlesh mentioned this pull request Mar 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants