Skip to content

Commit

Permalink
run os test on a simple block (keep-starknet-strange#84)
Browse files Browse the repository at this point in the history
* wip

* wip, some progress

* WIP: Declare unimplemented hints

* Fix unused warnings

* Hint: SET_SYSCALL_PTR (#4)

* Add is_n_ge_two hint (#3)

* 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 (#6)

* add hint in hint map and use ids map

* remove unused macro. makes hint constant public

* Add is_on_curve hint and basic test (#1)

* 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

* Add set_ap_to_actual_fee hint (#2)

Co-authored-by: Olivier Desenfans <[email protected]>
Co-authored-by: Herman Obst Demaestri <[email protected]>

* Add txn/call hints (#5)

Co-authored-by: Olivier Desenfans <[email protected]>

* Add preimage hints (#8)

Co-authored-by: Olivier Desenfans <[email protected]>

* Feature: read/write Cairo structs safely (#9)

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.

* fix tests

* one more hint

* fix contracts in StarknetOsInput

* few more hints

* ignore block test

* Add a couple missing hints

* calculate tx_hash

* fix TRANSACTIONS_LEN

* Maybe-fix gen_signature_arg hint

* Don't put signature in ap

* remove unnecesary unwraps

* fix post merge problems

* remove outdated tests

* is_reverted hint

* wip

* Pull in relevant hashing code from starknet_on_rust

* Convert equivalent contract structs

* wip

* test with cairo1

* cairo1 test setup, breaks at hint trying to load v1 class

* wip

* wip

* cairo1 class loading + execution without cairo1 hint processor

* fix tests

* fix clippy

* first round of comments

* fix typo

* remove unnecessary code

---------

Co-authored-by: Olivier Desenfans <[email protected]>
Co-authored-by: Herman Obst Demaestri <[email protected]>
Co-authored-by: Stephen Shelton <[email protected]>
  • Loading branch information
4 people authored Mar 20, 2024
1 parent 0ff502c commit a6b4256
Show file tree
Hide file tree
Showing 34 changed files with 1,816 additions and 1,157 deletions.
1 change: 0 additions & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ jobs:
python-version: '3.9'
- run: |
pip install cairo-lang==0.13.1a0
cairo-format -c tests/programs/*
bash ./scripts/reset-tests.sh
cargo test
Expand Down
43 changes: 43 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ base64 = "0.21.3"
bitvec = { version = "1.0.1", features = ["serde"] }
blockifier = { git = "https://github.com/keep-starknet-strange/blockifier", branch = "snos/callinfo-clone", features = ["clone", "testing"] }
cairo-type-derive = { version = "0.1.0", path = "cairo-type-derive" }
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = ["extensive_hints"] }
cairo-lang-starknet = { version = "2.5.4" }
cairo-lang-casm = { version = "2.5.4" }
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = ["extensive_hints", "cairo-1-hints"] }
getset = "0.1.2"
hex = "0.4.3"
indexmap = "1.9.2"
indoc = "2"
Expand Down
6 changes: 0 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,3 @@ cargo test
```bash
./scripts/reset-tests.sh
```

**Debug Single Cairo Program**

```bash
./scripts/debug-hint.sh load_deprecated_class
```
19 changes: 0 additions & 19 deletions scripts/debug-hint.sh

This file was deleted.

2 changes: 0 additions & 2 deletions scripts/setup-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ cp tests/dependencies/initializable.cairo cairo-lang/src/starkware/starknet/std_
echo -e "compiling cairo programs...\n"
mkdir -p build/programs
cairo-format -i tests/programs/*
cairo-compile tests/programs/bad_output.cairo --output build/programs/bad_output.json
cairo-compile tests/programs/fact.cairo --output build/programs/fact.json
cairo-compile tests/programs/block_context.cairo --output build/programs/block_context.json --cairo_path cairo-lang/src

# compile os with debug info
cairo-compile --debug_info_with_source cairo-lang/src/starkware/starknet/core/os/os.cairo --output build/os_debug.json --cairo_path cairo-lang/src
Expand Down
1 change: 1 addition & 0 deletions src/cairo_types/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub(crate) mod builtins;
pub(crate) mod structs;
pub(crate) mod traits;
pub(crate) mod trie;
34 changes: 34 additions & 0 deletions src/cairo_types/structs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
use cairo_type_derive::FieldOffsetGetters;
use cairo_vm::Felt252;

#[allow(unused)]
#[derive(FieldOffsetGetters)]
pub struct ExecutionContext {
pub entry_point_type: Felt252,
pub class_hash: Felt252,
pub calldata_size: Felt252,
pub calldata: Felt252,
pub execution_info: Felt252,
pub deprecated_tx_info: Felt252,
}

#[allow(unused)]
#[derive(FieldOffsetGetters)]
pub struct CompiledClassFact {
pub hash: Felt252,
pub compiled_class: Felt252,
}

#[allow(unused)]
#[derive(FieldOffsetGetters)]
pub struct CompiledClass {
compiled_class_version: Felt252,
n_external_functions: Felt252,
external_functions: Felt252,
n_l1_handlers: Felt252,
l1_handlers: Felt252,
n_constructors: Felt252,
constructors: Felt252,
bytecode_length: Felt252,
bytecode_ptr: Felt252,
}
Loading

0 comments on commit a6b4256

Please sign in to comment.