Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Commit

Permalink
Add documentations to syscalls/business_logic_syscall_handler module (#…
Browse files Browse the repository at this point in the history
…887)

* added comments to syscalls/business_logic_syscall_handler.rs

* added syscall information

* Update src/syscalls/business_logic_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Add comments to origin/Document-transactionl1_handler module (#888)

* added comments to origin/Document-transactionl1_handler-module

* modified comments

* Test multi syscall (#687)

* create multy syscall

* remove the replace syscall, it failed because the contract adress didn't match

* added library call_syscall

* wip

* wip

* wip

* wip

* work in progress

* remove .sjon files from starknet_programs

* finished implemented all the syscalls

* reorder code, create one call to syscall

* fix pull bug

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/multi_syscall_test.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/contract_a.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* added test syscall for deploy

* make format changes

* corrected make clippy error

* get_caller_address and get_contract_address return a adress

* failed of get_contract_address

* failed of get_contract_address

* wip

* modify the selector entrypoint_selector to be function specific

* wip

* wip

* wip

* add input to cairo functions

* coorect format problem

* wip

* wip

* wip

* remove format problem

* Fix sierra class hash calculation (#886)

* reproduce bug

* use pythonic formatter

* rename test

* fix test

* cargo fmt

* Fail with an Err transactions whose calculated fee exceed `max_fee` (#892)

* Make tx fail when actual_fee exceeds max_fee

* Changed test

* Formatting

* Fix logic

* Leave fail only without charging

* Change test

* Fix test broken by better fee calc

* Fixed test fee

* Update fee on test_deploy_account

* Remove comment

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix test_get_nonce_at (#910)

* Fix test_get_nonce_at

* Rely on another contract

* fix get_sorted_events bug (#912)

* fix get_sorted_events bug

* fmt

* fix clippy

---------

Co-authored-by: Estéfano Bargas <[email protected]>

* Added documentations to syscalls/deprecated_syscall_handler module (#883)

* added comments to file syscalls/deprecated_syscall_handler-module'

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>

* wip

* Modify the tests

* fixed clippy errors

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>

* Parse internal calls (#915)

* Added comments to core/contract_address module (#900)

Co-authored-by: fannyguthmann <[email protected]>

* Add more transaction tests and fee investigation (#914)

* add function for getting tx and refactor tests

* improve imports

* separe tests into 2 groups

* fix test

* add comments

* format

* cargo clippy

* add details to every test

* add fee discrepancy to test doc

* cargo fmt

* improve imports

* added safety element

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>

* remove transactionalstatereader as it is not needed as-is (#1054)

* Add cairo native (#943)

* Added cairo native flag

* Added cairo_native as dependency

* Partial progress

* Progress

* Partial progress

* Point to newly created branch on cairo native

* Use updated version of cairo native and make test pass

* Run test with storage_write and storage_read with cairo native

* Tidy up code

* Start unhardcoding stuff

* Handle return values

* Tidy up code a little

* Added sierra programs cache

* Add impl for emit_event and send_l1_message

* Fix tests

* Install LLVM on CI

* Test

* Test CI

* Fix lint step

* Save work in progress

* Unhardcode calldata and entry point

* Unhardcode more stuff

* Fix test

* Add basic implementation for call_contract

* Add call to get_name to integration test

* Make call_contract impl compile

* Fix test

* Pass the correct amount of builtins for every function

* Improve test legibility

* Write call_contract test skeleton

* Finish writing test, still bugs to fix

* implement get_execution_info, make increase_allowance work

* More debugging

* Basic test for call_contract working

* More progress on testing ERC20

* More progress on test

* Add caller and callee contracts

* Fix call_contract test after merge

* Fix callee address in tests

* Polish some details

* Remove use_cairo_native from TransactionExecutionContext

* Write test skeleton

* Add test contracts

* Fix tests

* Readd deleted contracts

* Echo contract test passing

* Update cairo compiler to version 2.2.0

* Calling another contract with events test is passing

* Fix failing tests

* Remove internal_calls field TODO in CallInfo returned by native_execute

* Add event_emitter contract

* Add cairo vm execution to the erc20 test for comparison

* Add simple implementation for panics in native execution

* Add some documentation in code

* Assert equality between events, accessed_storage_keys and l1_l2 messages between native and vm runs

* Add event_emitter contract

* Remove print

* Remove comments

* Move native syscall handler to its own file

* Add felt decode to string when program panics

* Make cairo native an optional dependency behind a feature

* Move execution result to cairo native

* Add a README section explaining how to setup cairo native

* Fix some clippy issues

* Fix test compilation

* CI test

* Revert "CI test"

This reverts commit 4631e5e56a46cd0d751ea3a7d10db3541f2fde3d.

* CI test

* Test

* Test

* Address comment about multiple cfgs

* Remove unnecessary clone

* Test

* Test

* Switch to special workflow for native integration tests

* Fix workflow

* Fix stuff after merge.

* Fix clippy warnings.

* Fix after merge.

* Fix comments.

* Fix `Makefile`.

* Remove unused import.

* Use transactional state.

* update cairo native to llvm 17 and remove nightly requirement

* update ci

* upd ci

* try to fix ci

* use ubuntu on native

* try to fix ci

* not needed?

* fix ci

* update cairo native

* fix nightly usage

* try to fix ci

* dont need a transactional state reader, simply clone the state reader

* try to fix ci

* format

* fix again

* fix if

* values

* force rebuild

* make cache track cairo 2 version to trigger rebuilds

* try no restore key

* update readme

* fix tests on ci

* update cairo native commit

* fix more tests on ci

* fix cairo native interface

* try ci without cache

* setup rustup home

* make param passing to cairo native not obscure

* try

* try again

* remove large packages

* remove large dirs

* remove android too

* polly is needed

* needs sudo

* fix cov

* fix test for now

* format

* cleanup ci file

* use pyenv if available

* nightly not needed in readme

* add .sierra as generated to gitattributes

* fix gitattributes

* add casm too

---------

Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: Edgar Luque <[email protected]>

* add test to check cairo 2 account contract deploy panic failing properly (#1045)

* add test for account contract execution with panic

* clippy

* update cairo native to latest revision, u128 gas, mut self (#1082)

Co-authored-by: Juan Bono <[email protected]>

* Fix `get_execution_info` syscall (#1081)

* Mark read-only segments

* Move call

* Remove debug prints

* Remove fn

* Add test case

* Add comment

* Restore newlines

* Add function comment

* Fix test values

* Undo changes to makefile

* Undo changes to makefile

* clippy

* cairo-native: implement testing syscalls (#1084)

* cleanup erc20 test (#1087)

* Fix `get_onchain_data_segment_length` (#1085)

* Fix get_onchain_data_segment_length

* Update test values

* Update test values

* fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* Check that running a declare v1 yields a higher fee than simulating it without validation (#1076)

* Reorder DeployAccount::apply

* Revert "Reorder DeployAccount::apply"

This reverts commit 11b0c39cd9cdd92f5211930e9f36f3840a978ae9.

* Add test

* Add test

* clippy + fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* implement display and debug trait for Address (#1080)

* implement display and debug trait for Address

* hexa fmt

* Add recursive calls tests using `library_call` & `call_contract` syscalls (#1072)

* Add recursive library call test

* Add test programs

* Change base changes

* Add recursive test for call_contract

* fmt + clippy

* Add test for 100 contract calls

* clippy + fmt

* Update test values

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix/Refactor State::count actual storage changes + Support `DeployAccount` in the RpcStateReader (#1096)

* Fix get_onchain_data_segment_length

* Update test values

* Update test values

* fmt

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

---------

Co-authored-by: Juan Bono <[email protected]>

* Add test cases for `DeployAccount` with popular account contracts using RpcState (#1104)

* Execute `Declare` transactions using the `RpcState` + Various fixes related to `Declare` txs (#1094)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Fix get_onchain_data_segment_length

* Add StorageChangesCount struct

* Update test values

* Update test values

* fmt

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Add test case with declare

* Deserialize Declare transactions

* Create blockifier Declare transaction

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

* fetch class hash from the next block in declare tx

* Return an error if a class_hash is not declared + add tests for declare tx

* Fix error msg

* Add support for DeclareV0-1 in sir_tests

* Make Sierra class optional in declare v2 + other changes

* Add support for DeclareV2

* Uncomment test

* fix

* Use new_with_sierra_class_hash_and_tx_hash

* use CompiledClassHash instead of CompiledClass where applicatble

* Handle nonce in declare v2 + run fmt

* Set casm class before counting state changes in declare v2

* Changes

* Make sierra class hash non-optional

* fix + clippy

* Use state_reader instead of creating a state to fetch the next block s contract classes

* Add removed test

* Update test values

---------

Co-authored-by: Juan Bono <[email protected]>

* Execute `L1Handler` transactions using the `RpcState`  (#1103)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Fix get_onchain_data_segment_length

* Add StorageChangesCount struct

* Update test values

* Update test values

* fmt

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Add test case with declare

* Deserialize Declare transactions

* Create blockifier Declare transaction

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

* fetch class hash from the next block in declare tx

* Return an error if a class_hash is not declared + add tests for declare tx

* Fix error msg

* Add support for DeclareV0-1 in sir_tests

* Make Sierra class optional in declare v2 + other changes

* Add support for DeclareV2

* Uncomment test

* fix

* Use new_with_sierra_class_hash_and_tx_hash

* use CompiledClassHash instead of CompiledClass where applicatble

* Handle nonce in declare v2 + run fmt

* Set casm class before counting state changes in declare v2

* Changes

* Make sierra class hash non-optional

* fix + clippy

* Use state_reader instead of creating a state to fetch the next block s contract classes

* Add removed test

* Update test values

* Make validate_invocation and fee_transfer_info fields optional + add L1_HANDLER transaction RpcState

* Add L1Handler to blockifier_tests::execute_tx

* Add blockifier test case

* Add L1Handler to sir_tests::execute_tx

* Add one more test case

* fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* Added a usage target to makefile (#1069)

* Added a usage target to makefile

* Fixed typo

* Implement `NativeSyscallHandler::deploy` (#1106)

* wip

* Minor improvements + add test

* Improve make clippy

* Clippy + fmt

* Update error messages

* Add failure flag test

* Fix typo

* Apply suggestions + run formatter

* Add llvm setup so we can run clippy with `cairo-native` feature

* Fix

* Remove todo

* Use a proper class_hash

* Fix test assertion

---------

Co-authored-by: Juan Bono <[email protected]>

* update cairo native to use gas consumed (#1102)

* update cairo native to use gas consumed

* gas consumed

* update native rev

* fix gas consumed

* remove comments

* fixes

---------

Co-authored-by: Juan Bono <[email protected]>

* Save `SierraProgram` + `ContractEntryPoints` instead of `SierraContractClass` in `CompiledProgram` (#1112)

* Save Program + EntryPoints instead of ContractClass

* clippy

* `get_execution_info`test (#1067)

* Added cairo native flag

* Added cairo_native as dependency

* Partial progress

* Progress

* Partial progress

* Point to newly created branch on cairo native

* Use updated version of cairo native and make test pass

* Run test with storage_write and storage_read with cairo native

* Tidy up code

* Start unhardcoding stuff

* Handle return values

* Tidy up code a little

* Added sierra programs cache

* Add impl for emit_event and send_l1_message

* Fix tests

* Install LLVM on CI

* Test

* Test CI

* Fix lint step

* Save work in progress

* Unhardcode calldata and entry point

* Unhardcode more stuff

* Fix test

* Add basic implementation for call_contract

* Add call to get_name to integration test

* Make call_contract impl compile

* Fix test

* Pass the correct amount of builtins for every function

* Improve test legibility

* Write call_contract test skeleton

* Finish writing test, still bugs to fix

* implement get_execution_info, make increase_allowance work

* More debugging

* Basic test for call_contract working

* More progress on testing ERC20

* More progress on test

* Add caller and callee contracts

* Fix call_contract test after merge

* Fix callee address in tests

* Polish some details

* Remove use_cairo_native from TransactionExecutionContext

* Write test skeleton

* Add test contracts

* Fix tests

* Readd deleted contracts

* Echo contract test passing

* Update cairo compiler to version 2.2.0

* Calling another contract with events test is passing

* Fix failing tests

* Remove internal_calls field TODO in CallInfo returned by native_execute

* Add event_emitter contract

* Add cairo vm execution to the erc20 test for comparison

* Add simple implementation for panics in native execution

* Add some documentation in code

* Assert equality between events, accessed_storage_keys and l1_l2 messages between native and vm runs

* Add event_emitter contract

* Remove print

* Remove comments

* Move native syscall handler to its own file

* Add felt decode to string when program panics

* Make cairo native an optional dependency behind a feature

* Move execution result to cairo native

* Add a README section explaining how to setup cairo native

* Fix some clippy issues

* Fix test compilation

* CI test

* Revert "CI test"

This reverts commit 4631e5e56a46cd0d751ea3a7d10db3541f2fde3d.

* CI test

* Test

* Test

* Address comment about multiple cfgs

* Remove unnecessary clone

* Test

* Test

* Switch to special workflow for native integration tests

* Fix workflow

* Fix stuff after merge.

* Fix clippy warnings.

* Fix after merge.

* Fix comments.

* Fix `Makefile`.

* Remove unused import.

* Use transactional state.

* update cairo native to llvm 17 and remove nightly requirement

* update ci

* upd ci

* try to fix ci

* use ubuntu on native

* try to fix ci

* not needed?

* fix ci

* update cairo native

* fix nightly usage

* try to fix ci

* dont need a transactional state reader, simply clone the state reader

* try to fix ci

* format

* fix again

* fix if

* values

* force rebuild

* make cache track cairo 2 version to trigger rebuilds

* try no restore key

* Added get_execution_info test

* mend

* fix test + update native latest

* add deleted test

* mend

* delete unused struct

---------

Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: Edgar Luque <[email protected]>
Co-authored-by: toni-calvin <[email protected]>

* Cairo native: Implement library_call syscall (#1074)

* cairo-native initial implementation of library call

* rebase

* clippy

* fix

* library call test

* suggestion

* Replace class native (#1105)

* update cairo native to use gas consumed

* implement native replace class syscall

* gas consumed

* add test

* update native rev

* add failing test

* fix gas consumed

* remove comments

* minor changes

* update cairo-native dependency

* improve test

* update latest native version

* use add sierra contract to cache method

* update latest native version

* Replace class contract call native (#1115)

* add last native version

* add failing test

* fix test

* easier merge

* fix test

---------

Co-authored-by: Edgar Luque <[email protected]>

* `get_block_hash` syscall native (#1048)

* Added cairo native flag

* Added cairo_native as dependency

* Partial progress

* Progress

* Partial progress

* Point to newly created branch on cairo native

* Use updated version of cairo native and make test pass

* Run test with storage_write and storage_read with cairo native

* Tidy up code

* Start unhardcoding stuff

* Handle return values

* Tidy up code a little

* Added sierra programs cache

* Add impl for emit_event and send_l1_message

* Fix tests

* Install LLVM on CI

* Test

* Test CI

* Fix lint step

* Save work in progress

* Unhardcode calldata and entry point

* Unhardcode more stuff

* Fix test

* Add basic implementation for call_contract

* Add call to get_name to integration test

* Make call_contract impl compile

* Fix test

* Pass the correct amount of builtins for every function

* Improve test legibility

* Write call_contract test skeleton

* Finish writing test, still bugs to fix

* implement get_execution_info, make increase_allowance work

* More debugging

* Basic test for call_contract working

* More progress on testing ERC20

* More progress on test

* Add caller and callee contracts

* Fix call_contract test after merge

* Fix callee address in tests

* Polish some details

* Remove use_cairo_native from TransactionExecutionContext

* Write test skeleton

* Add test contracts

* Fix tests

* Readd deleted contracts

* Echo contract test passing

* Update cairo compiler to version 2.2.0

* Calling another contract with events test is passing

* Fix failing tests

* Remove internal_calls field TODO in CallInfo returned by native_execute

* Add event_emitter contract

* Add cairo vm execution to the erc20 test for comparison

* Add simple implementation for panics in native execution

* Add some documentation in code

* Assert equality between events, accessed_storage_keys and l1_l2 messages between native and vm runs

* Add event_emitter contract

* Remove print

* Remove comments

* Move native syscall handler to its own file

* Add felt decode to string when program panics

* Make cairo native an optional dependency behind a feature

* Move execution result to cairo native

* Add a README section explaining how to setup cairo native

* Fix some clippy issues

* Fix test compilation

* CI test

* Revert "CI test"

This reverts commit 4631e5e56a46cd0d751ea3a7d10db3541f2fde3d.

* CI test

* Test

* Test

* Address comment about multiple cfgs

* Remove unnecessary clone

* Test

* Test

* Switch to special workflow for native integration tests

* Fix workflow

* Fix stuff after merge.

* Fix clippy warnings.

* Fix after merge.

* Fix comments.

* Fix `Makefile`.

* Remove unused import.

* WIP: Implementing get_block_hash syscall

* Fix stuff.

* Use transactional state.

* update cairo native to llvm 17 and remove nightly requirement

* update ci

* upd ci

* try to fix ci

* use ubuntu on native

* try to fix ci

* not needed?

* fix ci

* update cairo native

* fix nightly usage

* try to fix ci

* dont need a transactional state reader, simply clone the state reader

* try to fix ci

* format

* fix again

* fix if

* values

* force rebuild

* make cache track cairo 2 version to trigger rebuilds

* try no restore key

* make get_hash_test syscall work with native and vm

* update readme

* implement get_block_hash on vm

* fmt

* fix tests on ci

* update cairo native commit

* fix more tests on ci

* fix cairo native interface

* try ci without cache

* checout earlier

* fix ci clippy

* test rpc reader execution

* try ci without cache

* setup rustup home

* make param passing to cairo native not obscure

* try

* try again

* remove large packages

* remove large dirs

* remove android too

* polly is needed

* needs sudo

* fix cov

* fix test for now

* format

* cleanup ci file

* use pyenv if available

* nightly not needed in readme

* add .sierra as generated to gitattributes

* fix gitattributes

* add casm too

* implement get_block_hash_native

* remove debug

* add vm execution

* merge

* add less code

* fix syscall

* fmt

* update native to last version

* correctly insert sierra class into cache test

* update latest native version

* remove comments

---------

Co-authored-by: Esteban Dimitroff Hódi <[email protected]>
Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: toni-calvin <[email protected]>
Co-authored-by: Edgar Luque <[email protected]>

* Add logging to syscalls (#1111)

* replace println by tracing::debug

* replace MLIR with Cairo Native

* fmt

---------

Co-authored-by: juanbono <[email protected]>

* Add error handling to `RpcState` (#1107)

* Remove explicit and implicit unwraps in RpcCallInfo deserialization

* Handle errors in RpcState::new_infura

* push RpcStateError

* Progress

* Remove all unwraps from rpc code

* Adapt tests

* Clippy

* Unify RpcError & RpcStateError

* Guard potential panicks + fmt

* clippy

* Keccak for Native Syscall Handler (#1055)

* implement keccac (cleanup)

* fix

* fix path

* fix keccak

* oops

* native revision

* update cardo.lock last native version

---------

Co-authored-by: Edgar Luque <[email protected]>
Co-authored-by: toni-calvin <[email protected]>

* Hacky cairo-native compiled program cache (#1091)

* update cairo native

* wip

* wip2

* add cache to call_contract syscall too

* update ref

* add cairo-native as default feature

* cache engine instead

* fix test

* fmt & clippy

* remove cairo_native from default features

* add cairo_native to test targets

* fix features

---------

Co-authored-by: juanbono <[email protected]>

* Update examples to use Cairo 2 + add them to the workspace (#1122)

* Delete old version of contract execution example

* Update example contract to cairo 2

* Make examples/contract_execution a proper crate

* Update contract execution example to use cairo 2 contracts

* Use same chain-id + restore expects

* Adjust values to pass validations

* Remove create_for_simulation

* Remove skip_validate

* Add comments

* fmt + clippy

* Embed aux contracts

* Update contract paths

* fmt

* Fix crate setup

* Add docs for rpc state reader (#1130)

* add more docs to the rpc state reader

* add link

---------

Co-authored-by: juanbono <[email protected]>

* Add benchs (#1129)

* add benchs

* fix bench

* fmt & clippy

* fixed clippy issues

* fix features

* fmt

* add factorial_tr

* remove flag

* add newline in factorial_tr

* add newline to Cargo.toml

* remove dbg

* add usage

* fmt

---------

Co-authored-by: juanbono <[email protected]>

* Add version + validation retdata checks for `InvokeFunction`, `Declare`, `DeclareV2` & `DeployAccount` txs (#1128)

* Check InvokeFuncion tx version

* Remove invalid code

* Add retdata validation

* Check tx version for Declare

* Simplify verify_version

* Check DeclareV2 version

* Unify unsupported version errors

* Reorder checks

* Add retdata validation

* Add retdata validation

* Add version check for DeployAccount

* fmt

* Remove no longer used verify_version function

* Fix tx versions in tests

* Remove test for removed check

* Remove test for removed check

* Remove unreachable case

* Fix test values

* Fix test values

* Fix test values

* Remove unused constants

* Remove old `QUERY_BASE` constant

* Fix test values

* Clippy

* Add back QUERY_VERSION_BASE` constant

* Code cleanup

* Restore

* Add a function to parse query versions

* Add comments

* Restore test

* Fix deploy account version in becnh

* Add tests for version checks

* Remove unwraps (#1137)

* Refactor `InvokeFunction::handle_nonce` to increment the nonce even if `skip_nonce_check` is set (#1134)

* Add test case

* Refactor how skip_nonce_checks affects nonce handling

* Add a separate test for txs that nedd to skip the nonce check

* Clippy

* Improvement

* Replace todo with error handling in `DeprecatedBLSyscallHandler::constructor_entry_points_empty` (#1136)

* Replace todo with error handling

* Clippy

* Add `skip_nonce_check` field to `DeclareV2`, `Declare` & `DeployAccount` txs (#1135)

* Add test case

* Refactor how skip_nonce_checks affects nonce handling

* Add a separate test for txs that nedd to skip the nonce check

* Clippy

* Add `skip_nonce_check` field to all txs

* Add skip_nonce_check for create_for_simulation all txs

* Refactor handle_nonce

* Improvement

* Add skip_nonce_check to execute_tx_configurable for each tx

* fix test + fmt

* Add `check_fee_balance` to `InvokeFunction`, `Declare`, `DeclareV2` & `DeployAccount` txs (#1132)

* Check InvokeFuncion tx version

* Remove invalid code

* Add retdata validation

* Check tx version for Declare

* Simplify verify_version

* Check DeclareV2 version

* Unify unsupported version errors

* Reorder checks

* Add retdata validation

* Add retdata validation

* Add version check for DeployAccount

* fmt

* Remove no longer used verify_version function

* Fix tx versions in tests

* Remove test for removed check

* Remove test for removed check

* Remove unreachable case

* Fix test values

* Fix test values

* Fix test values

* Remove unused constants

* Remove old `QUERY_BASE` constant

* Fix test values

* Clippy

* Add back QUERY_VERSION_BASE` constant

* Code cleanup

* Restore

* Add a function to parse query versions

* Add comments

* Restore test

* Fix deploy account version in becnh

* Use constants for estimated tx steps used in OsResources

* Add estimate_minimal_fee check for InvokeFunction

* Implement get_fee_token_balance for StateReader

* Finish check for InvokeFunction

* Don`t check fee balance for estimate_fee

* Update tests

* Adjust max_fee values

* Add fee balance checks to the other txs

* Update test values

* Refactor account deploy revert test

* fmt

---------

Co-authored-by: juanbono <[email protected]>

* Replace testnet 2 tx in RpcState test with mainnet tx (#1142)

* Remove RpcChain::TestNet2 enum variant

* Use a mainnet tx for RpcState get_transaction_trace test

* Revert "Remove RpcChain::TestNet2 enum variant"

This reverts commit 34c5367081dc61fe53d8b50b42a010286f67c457.

* Add global support for program caches. (#1140)

* Add global support for program caches.

* Update cairo-native dependency and fix stuff.

* Fix compilation errors.

* Refactor class hash  (#1095)

* state with warnings

* fix test

* fix test

* remove unnecessary clone

* clippy

* update latest native version

* mend

* fix import

* Get block hash from rpc (#1124)

* add test rpc vs vm get_block_hash syscall

* set failing branch state

* Revert "set failing branch state"

This reverts commit db722e45f84a7402271646dd879ac19abf03f15c.

* remove unnecessary test

---------

Co-authored-by: Juan Bono <[email protected]>

* Make contract caches shared. (#940)

* Unify deprecated and casm contract caches.

* Fix formatting and clippy.

* Remove unused code.

* Unify contract classes in the state traits too.

* Fix typos. Make cache shared.

* Minor fixes.

* Fix testing state generation to make it work with shared caches.

* Fix formatting.

* Add cache diff.

* Add suggestion.

* Fix stuff.

* Implement cache trait. Add a null and a permanent cache. Fix everything that breaks using the permanent cache (should mimic the previous behaviour).

* Add documentation.

* Convert the cache trait into immutable (aka. move the lock into them).

* Remove external cache lock (no longer needed).

* Fix stuff.

* Add LRU cache example.

* Run `cargo fmt`.

* Fix LRU example.

* Fix the other example.

* Fix after merge.

* Add private cache drain method.

* Temporarily disable `max_fee` checks.

* Add comment on `RefCell::get_mut()`.

* Remove `extend` from trait. Remove unused code.

* Fix duplicated `CachedState` issue.

* Add missing comments.

* Update `README.md`.

* Fix after merge.

* Remove obsolete comment.

* Fix test after merge.

* Fix borrows.

* Fix after merge.

* Fix erc20 test.

* Remove unused feature.

* Update `coverage-helper` to support `#[coverage(off)]`.

* Add `coverage` attribute feature on testing.

* Update `README.md` and example.

* Fix `README.md`.

* Improve `README.md`.

* Remove references to `StarknetState` in `README.md`.

* Remove debug print.

* Remove commented block of code.

* Fix after merging.

* Fix formatting.

* Update Pr: Make contract caches shared (#1071)

* Remove `serde_json_pythonic`. (#1047)

* Remove `serde_json_pythonic`.

* Fix JSON formatter on `deprecated_contract_class.rs`.

* Fix hash JSON formatter (non-ascii support).

* Add unwrap reasoning comment.

* Add debug logging. (#1018)

* Add `tracing` and update dependencies.

* Configure the example to use tracing logging (and make it work again).

* Add tracing logging.

* Add error logging.

* Fix error logging.

* Reduce the amount of spam logged.

* Update `README.md`.

* Fix `Makefile` dependencies.

* Remove `Debug` trait dependency.

* Update `Cargo.lock` after merge.

* Fix warnings.

* Fix formatting.

---------

Co-authored-by: Esteve Soler Arderiu <[email protected]>

* fmt and improvements

* Fix skip validate (#1053)

* update version

* fix skip validation for invoke txs

* run fmt

* fix clippy suggestion

* simplify a bit the execute_tx function variants

* Add documentation to transaction/fee module (#889)

* added comments to src/transaction/fee.rs

* added return and error comments

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>

* Add comments to origin/Document-transactionl1_handler module (#888)

* added comments to origin/Document-transactionl1_handler-module

* modified comments

* Test multi syscall (#687)

* create multy syscall

* remove the replace syscall, it failed because the contract adress didn't match

* added library call_syscall

* wip

* wip

* wip

* wip

* work in progress

* remove .sjon files from starknet_programs

* finished implemented all the syscalls

* reorder code, create one call to syscall

* fix pull bug

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/multi_syscall_test.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/contract_a.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* added test syscall for deploy

* make format changes

* corrected make clippy error

* get_caller_address and get_contract_address return a adress

* failed of get_contract_address

* failed of get_contract_address

* wip

* modify the selector entrypoint_selector to be function specific

* wip

* wip

* wip

* add input to cairo functions

* coorect format problem

* wip

* wip

* wip

* remove format problem

* Fix sierra class hash calculation (#886)

* reproduce bug

* use pythonic formatter

* rename test

* fix test

* cargo fmt

* Fail with an Err transactions whose calculated fee exceed `max_fee` (#892)

* Make tx fail when actual_fee exceeds max_fee

* Changed test

* Formatting

* Fix logic

* Leave fail only without charging

* Change test

* Fix test broken by better fee calc

* Fixed test fee

* Update fee on test_deploy_account

* Remove comment

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix test_get_nonce_at (#910)

* Fix test_get_nonce_at

* Rely on another contract

* fix get_sorted_events bug (#912)

* fix get_sorted_events bug

* fmt

* fix clippy

---------

Co-authored-by: Estéfano Bargas <[email protected]>

* Added documentations to syscalls/deprecated_syscall_handler module (#883)

* added comments to file syscalls/deprecated_syscall_handler-module'

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>

* wip

* Modify the tests

* fixed clippy errors

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>

* Parse internal calls (#915)

* Added comments to core/contract_address module (#900)

Co-authored-by: fannyguthmann <[email protected]>

* Add more transaction tests and fee investigation (#914)

* add function for getting tx and refactor tests

* improve imports

* separe tests into 2 groups

* fix test

* add comments

* format

* cargo clippy

* add details to every test

* add fee discrepancy to test doc

* cargo fmt

* improve imports

* added safety element

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>

* remove transactionalstatereader as it is not needed as-is (#1054)

* Fix test (or try to)

* Revert "Fix test (or try to)"

This reverts commit 423052f341165bb23b473c9231aa68560fb46568.

* Implement Clone for CachedState

* Fix conflict in Makefile + run clippy-fix

* Remove empty line

* fmt

* Remove unwraps

* Add clone_for_testing

* Remove clones

* Add cairo native (#943)

* Added cairo native flag

* Added cairo_native as dependency

* Partial progress

* Progress

* Partial progress

* Point to newly created branch on cairo native

* Use updated version of cairo native and make test pass

* Run test with storage_write and storage_read with cairo native

* Tidy up code

* Start unhardcoding stuff

* Handle return values

* Tidy up code a little

* Added sierra programs cache

* Add impl for emit_event and send_l1_message

* Fix tests

* Install LLVM on CI

* Test

* Test CI

* Fix lint step

* Save work in progress

* Unhardcode calldata and entry point

* Unhardcode more stuff

* Fix test

* Add basic implementation for call_contract

* Add call to get_name to integration test

* Make call_contract impl compile

* Fix test

* Pass the correct amount of builtins for every function

* Improve test legibility

* Write call_contract test skeleton

* Finish writing test, still bugs to fix

* implement get_execution_info, make increase_allowance work

* More debugging

* Basic test for call_contract working

* More progress on testing ERC20

* More progress on test

* Add caller and callee contracts

* Fix call_contract test after merge

* Fix callee address in tests

* Polish some details

* Remove use_cairo_native from TransactionExecutionContext

* Write test skeleton

* Add test contracts

* Fix tests

* Readd deleted contracts

* Echo contract test passing

* Update cairo compiler to version 2.2.0

* Calling another contract with events test is passing

* Fix failing tests

* Remove internal_calls field TODO in CallInfo returned by native_execute

* Add event_emitter contract

* Add cairo vm execution to the erc20 test for comparison

* Add simple implementation for panics in native execution

* Add some documentation in code

* Assert equality between events, accessed_storage_keys and l1_l2 messages between native and vm runs

* Add event_emitter contract

* Remove print

* Remove comments

* Move native syscall handler to its own file

* Add felt decode to string when program panics

* Make cairo native an optional dependency behind a feature

* Move execution result to cairo native

* Add a README section explaining how to setup cairo native

* Fix some clippy issues

* Fix test compilation

* CI test

* Revert "CI test"

This reverts commit 4631e5e56a46cd0d751ea3a7d10db3541f2fde3d.

* CI test

* Test

* Test

* Address comment about multiple cfgs

* Remove unnecessary clone

* Test

* Test

* Switch to special workflow for native integration tests

* Fix workflow

* Fix stuff after merge.

* Fix clippy warnings.

* Fix after merge.

* Fix comments.

* Fix `Makefile`.

* Remove unused import.

* Use transactional state.

* update cairo native to llvm 17 and remove nightly requirement

* update ci

* upd ci

* try to fix ci

* use ubuntu on native

* try to fix ci

* not needed?

* fix ci

* update cairo native

* fix nightly usage

* try to fix ci

* dont need a transactional state reader, simply clone the state reader

* try to fix ci

* format

* fix again

* fix if

* values

* force rebuild

* make cache track cairo 2 version to trigger rebuilds

* try no restore key

* update readme

* fix tests on ci

* update cairo native commit

* fix more tests on ci

* fix cairo native interface

* try ci without cache

* setup rustup home

* make param passing to cairo native not obscure

* try

* try again

* remove large packages

* remove large dirs

* remove android too

* polly is needed

* needs sudo

* fix cov

* fix test for now

* format

* cleanup ci file

* use pyenv if available

* nightly not needed in readme

* add .sierra as generated to gitattributes

* fix gitattributes

* add casm too

---------

Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: Edgar Luque <[email protected]>

* add test to check cairo 2 account contract deploy panic failing properly (#1045)

* add test for account contract execution with panic

* clippy

* update cairo native to latest revision, u128 gas, mut self (#1082)

Co-authored-by: Juan Bono <[email protected]>

* Fix `get_execution_info` syscall (#1081)

* Mark read-only segments

* Move call

* Remove debug prints

* Remove fn

* Add test case

* Add comment

* Restore newlines

* Add function comment

* Fix test values

* Undo changes to makefile

* Undo changes to makefile

* clippy

* cairo-native: implement testing syscalls (#1084)

* cleanup erc20 test (#1087)

* Fix `get_onchain_data_segment_length` (#1085)

* Fix get_onchain_data_segment_length

* Update test values

* Update test values

* fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* Check that running a declare v1 yields a higher fee than simulating it without validation (#1076)

* Reorder DeployAccount::apply

* Revert "Reorder DeployAccount::apply"

This reverts commit 11b0c39cd9cdd92f5211930e9f36f3840a978ae9.

* Add test

* Add test

* clippy + fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* implement display and debug trait for Address (#1080)

* implement display and debug trait for Address

* hexa fmt

* Add recursive calls tests using `library_call` & `call_contract` syscalls (#1072)

* Add recursive library call test

* Add test programs

* Change base changes

* Add recursive test for call_contract

* fmt + clippy

* Add test for 100 contract calls

* clippy + fmt

* Update test values

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix/Refactor State::count actual storage changes + Support `DeployAccount` in the RpcStateReader (#1096)

* Fix get_onchain_data_segment_length

* Update test values

* Update test values

* fmt

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

---------

Co-authored-by: Juan Bono <[email protected]>

* fmt

* Add test cases for `DeployAccount` with popular account contracts using RpcState (#1104)

* Execute `Declare` transactions using the `RpcState` + Various fixes related to `Declare` txs (#1094)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Fix get_onchain_data_segment_length

* Add StorageChangesCount struct

* Update test values

* Update test values

* fmt

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Add test case with declare

* Deserialize Declare transactions

* Create blockifier Declare transaction

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

* fetch class hash from the next block in declare tx

* Return an error if a class_hash is not declared + add tests for declare tx

* Fix error msg

* Add support for DeclareV0-1 in sir_tests

* Make Sierra class optional in declare v2 + other changes

* Add support for DeclareV2

* Uncomment test

* fix

* Use new_with_sierra_class_hash_and_tx_hash

* use CompiledClassHash instead of CompiledClass where applicatble

* Handle nonce in declare v2 + run fmt

* Set casm class before counting state changes in declare v2

* Changes

* Make sierra class hash non-optional

* fix + clippy

* Use state_reader instead of creating a state to fetch the next block s contract classes

* Add removed test

* Update test values

---------

Co-authored-by: Juan Bono <[email protected]>

* Execute `L1Handler` transactions using the `RpcState`  (#1103)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Fix get_onchain_data_segment_length

* Add StorageChangesCount struct

* Update test values

* Update test values

* fmt

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Add test case with declare

* Deserialize Declare transactions

* Create blockifier Declare transaction

* Fix/Refactor `State::count actual storage changes` (#1086)

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add the ability to execute `DeployAccount` transactions using the `RpcState` (#1089)

* Add test case

* Fix get_onchain_data_segment_length

* Debug setup

* Add StorageChangesCount struct

* Use StorageChangesCount struct in state method

* Fix implicated code

* Update doc

* Update test values

* Rename method for consistency

* Add note comment

* Remove hardcoded contract address

* Remove txt files

* Remove dbg prints

* Remove dbg prints

* Format

* Restore blockifier version

* Restore tests

* Restore newlines

* Restore newlines

* Remove txt file

* fmt

* Fix bug in `From<StarknetRsContractClass> for CompiledClass` implementation (#1090)

* Fix bug in CompiledClass

* Add tests

* fetch class hash from the next block in declare tx

* Return an error if a class_hash is not declared + add tests for declare tx

* Fix error msg

* Add support for DeclareV0-1 in sir_tests

* Make Sierra class optional in declare v2 + other changes

* Add support for DeclareV2

* Uncomment test

* fix

* Use new_with_sierra_class_hash_and_tx_hash

* use CompiledClassHash instead of CompiledClass where applicatble

* Handle nonce in declare v2 + run fmt

* Set casm class before counting state changes in declare v2

* Changes

* Make sierra class hash non-optional

* fix + clippy

* Use state_reader instead of creating a state to fetch the next block s contract classes

* Add removed test

* Update test values

* Make validate_invocation and fee_transfer_info fields optional + add L1_HANDLER transaction RpcState

* Add L1Handler to blockifier_tests::execute_tx

* Add blockifier test case

* Add L1Handler to sir_tests::execute_tx

* Add one more test case

* fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* Added a usage target to makefile (#1069)

* Added a usage target to makefile

* Fixed typo

* Implement `NativeSyscallHandler::deploy` (#1106)

* wip

* Minor improvements + add test

* Improve make clippy

* Clippy + fmt

* Update error messages

* Add failure flag test

* Fix typo

* Apply suggestions + run formatter

* Add llvm setup so we can run clippy with `cairo-native` feature

* Fix

* Remove todo

* Use a proper class_hash

* Fix test assertion

---------

Co-authored-by: Juan Bono <[email protected]>

* update cairo native to use gas consumed (#1102)

* update cairo native to use gas consumed

* gas consumed

* update native rev

* fix gas consumed

* remove comments

* fixes

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix cairo-native feature-gated code

* clippy

---------

Co-authored-by: MrAzteca <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: juanbono <[email protected]>
Co-authored-by: Fanny Guthmann <[email protected]>
Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>
Co-authored-by: Edgar <[email protected]>
Co-authored-by: ElFantasma <[email protected]>
Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: Antonio Calvín García <[email protected]>
Co-authored-by: Iñaki Garay <[email protected]>

* Revert "Update Pr: Make contract caches shared (#1071)" (#1116)

This reverts commit 8a112590e107cc69767bd31c6034c7070ca47c0a.

* Update contract caches (#1117)

* Remove `serde_json_pythonic`. (#1047)

* Remove `serde_json_pythonic`.

* Fix JSON formatter on `deprecated_contract_class.rs`.

* Fix hash JSON formatter (non-ascii support).

* Add unwrap reasoning comment.

* Add debug logging. (#1018)

* Add `tracing` and update dependencies.

* Configure the example to use tracing logging (and make it work again).

* Add tracing logging.

* Add error logging.

* Fix error logging.

* Reduce the amount of spam logged.

* Update `README.md`.

* Fix `Makefile` dependencies.

* Remove `Debug` trait dependency.

* Update `Cargo.lock` after merge.

* Fix warnings.

* Fix formatting.

---------

Co-authored-by: Esteve Soler Arderiu <[email protected]>

* fmt and improvements

* Fix skip validate (#1053)

* update version

* fix skip validation for invoke txs

* run fmt

* fix clippy suggestion

* simplify a bit the execute_tx function variants

* Add documentation to transaction/fee module (#889)

* added comments to src/transaction/fee.rs

* added return and error comments

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>

* Add comments to origin/Document-transactionl1_handler module (#888)

* added comments to origin/Document-transactionl1_handler-module

* modified comments

* Test multi syscall (#687)

* create multy syscall

* remove the replace syscall, it failed because the contract adress didn't match

* added library call_syscall

* wip

* wip

* wip

* wip

* work in progress

* remove .sjon files from starknet_programs

* finished implemented all the syscalls

* reorder code, create one call to syscall

* fix pull bug

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/multi_syscall_test.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update starknet_programs/cairo1/contract_a.cairo

Co-authored-by: Matías Ignacio González <[email protected]>

* Update tests/multi_syscall_test.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* added test syscall for deploy

* make format changes

* corrected make clippy error

* get_caller_address and get_contract_address return a adress

* failed of get_contract_address

* failed of get_contract_address

* wip

* modify the selector entrypoint_selector to be function specific

* wip

* wip

* wip

* add input to cairo functions

* coorect format problem

* wip

* wip

* wip

* remove format problem

* Fix sierra class hash calculation (#886)

* reproduce bug

* use pythonic formatter

* rename test

* fix test

* cargo fmt

* Fail with an Err transactions whose calculated fee exceed `max_fee` (#892)

* Make tx fail when actual_fee exceeds max_fee

* Changed test

* Formatting

* Fix logic

* Leave fail only without charging

* Change test

* Fix test broken by better fee calc

* Fixed test fee

* Update fee on test_deploy_account

* Remove comment

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix test_get_nonce_at (#910)

* Fix test_get_nonce_at

* Rely on another contract

* fix get_sorted_events bug (#912)

* fix get_sorted_events bug

* fmt

* fix clippy

---------

Co-authored-by: Estéfano Bargas <[email protected]>

* Added documentations to syscalls/deprecated_syscall_handler module (#883)

* added comments to file syscalls/deprecated_syscall_handler-module'

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

* Update src/syscalls/deprecated_syscall_handler.rs

Co-authored-by: Matías Ignacio González <[email protected]>

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>

* wip

* Modify the tests

* fixed clippy errors

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>

* Parse internal calls (#915)

* Added comments to core/contract_address module (#900)

Co-authored-by: fannyguthmann <[email protected]>

* Add more transaction tests and fee investigation (#914)

* add function for getting tx and refactor tests

* improve imports

* separe tests into 2 groups

* fix test

* add comments

* format

* cargo clippy

* add details to every test

* add fee discrepancy to test doc

* cargo fmt

* improve imports

* added safety element

---------

Co-authored-by: fannyguthmann <[email protected]>
Co-authored-by: Matías Ignacio González <[email protected]>
Co-authored-by: SantiagoPittella <[email protected]>
Co-authored-by: Juan Bono <[email protected]>
Co-authored-by: Estéfano Bargas <[email protected]>
Co-authored-by: Santiago Pittella <[email protected]>

* remove transactionalstatereader as it is not needed as-is (#1054)

* Fix test (or try to)

* Revert "Fix test (or try to)"

This reverts commit 423052f341165bb23b473c9231aa68560fb46568.

* Implement Clone for CachedState

* Fix conflict in Makefile + run clippy-fix

* Remove empty line

* fmt

* Remove unwraps

* Add clone_for_testing

* Remove clones

* Add cairo native (#943)

* Added cairo native flag

* Added cairo_native as dependency

* Partial progress

* Progress

* Partial progress

* Point to newly created branch on cairo native

* Use updated version of cairo native and make test pass

* Run test with storage_write and storage_read with cairo native

* Tidy up code

* Start unhardcoding stuff

* Handle return values

* Tidy up code a little

* Added sierra programs cache

* Add impl for emit_event and send_l1_message

* Fix tests

* Install LLVM on CI

* Test

* Test CI

* Fix lint step

* Save work in progress

* Unhardcode calldata and entry point

* Unhardcode more stuff

* Fix test

* Add basic implementation for call_contract

* Add call to get_name to integration test

* Make call_contract impl compile

* Fix test

* Pass the correct amount of builtins for every function

* Improve test legibility

* Write call_contract test skeleton

* Finish writing test, still bugs to fix

* implement get_execution_info, make increase_allowance work

* More debugging

* Basic test for call_contract working

* More progress on testing ERC20

* More progress on test

* Add caller and callee contracts

* Fix call_contract test after merge

* Fix callee address in tests

* Polish some details

* Remove use_cairo_native from TransactionExecutionContext

* Write test skeleton

* Add test contracts

* Fix tests

* Readd deleted contracts

* Echo contract test passing

* Update cairo compiler to version 2.2.0

* Calling another contract with events test is passing

* Fix failing tests

* Remove internal_calls field TODO in CallInfo returned by native_execute

* Add event_emitter contract

* Add cairo vm execution to the erc20 test for comparison

* Add simple implementation for panics in native execution

* Add some documentation in code

* Assert equality between events, accessed_storage_keys and l1_l2 messages between native and vm runs

* Add event_emitter contract

* Remove print

* Remove comments

* Move native syscall handler to its own file

* Add felt decode to string when program panics

* Make cairo native an optional dependency behind a feature

* Move execution result to cairo native

* Add a README section explaining how to setup cairo native

* Fix some clippy issues

* Fix test compilation

* CI test

* Revert "CI test"

This reverts commit 4631e5e56a46cd0d751ea3a7d10db3541f2fde3d.

* CI test

* Test

* Test

* Address comment about multiple cfgs

* Remove unnecessary clone

* Test

* Test

* Switch to special workflow for native integration tests

* Fix workflow

* Fix stuff after merge.

* Fix clippy warnings.

* Fix after merge.

* Fix comments.

* Fix `Makefile`.

* Remove unused import.

* Use transactional state.

* update cairo native to llvm 17 and remove nightly requirement

* update ci

* upd ci

* try to fix ci

* use ubuntu on native

* try to fix ci

* not needed?

* fix ci

* update cairo native

* fix nightly usage

* try to fix ci

* dont need a transactional state reader, simply clone the state reader

* try to fix ci

* format

* fix again

* fix if

* values

* force rebuild

* make cache track cairo 2 version to trigger rebuilds

* try no restore key

* update readme

* fix tests on ci

* update cairo native commit

* fix more tests on ci

* fix cairo native interface

* try ci without cache

* setup rustup home

* make param passing to cairo native not obscure

* try

* try again

* remove large packages

* remove large dirs

* remove android too

* polly is needed

* needs sudo

* fix cov

* fix test for now

* format

* cleanup ci file

* use pyenv if available

* nightly not needed in readme

* add .sierra as generated to gitattributes

* fix gitattributes

* add casm too

---------

Co-authored-by: Javier Chatruc <[email protected]>
Co-authored-by: Mariano Nicolini <[email protected]>
Co-authored-by: Esteve Soler Arderiu <[email protected]>
Co-authored-by: Edgar Luque <[email protected]>

* add test to check cairo 2 account contract deploy panic failing properly (#1045)

* add test for account contract execution with panic

* clippy

* update cairo native to latest revision, u128 gas, mut self (#1082)

Co-authored-by: Juan Bono <[email protected]>

* Fix `get_execution_info` syscall (#1081)

* Mark read-only segments

* Move call

* Remove debug prints

* Remove fn

* Add test case

* Add comment

* Restore newlines

* Add function comment

* Fix test values

* Undo changes to makefile

* Undo changes to makefile

* clippy

* cairo-native: implement testing syscalls (#1084)

* cleanup erc20 test (#1087)

* Fix `get_onchain_data_segment_length` (#1085)

* Fix get_onchain_data_segment_length

* Update test values

* Update test values

* fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* Check that running a declare v1 yields a higher fee than simulating it without validation (#1076)

* Reorder DeployAccount::apply

* Revert "Reorder DeployAccount::apply"

This reverts commit 11b0c39cd9cdd92f5211930e9f36f3840a978ae9.

* Add test

* Add test

* clippy + fmt

---------

Co-authored-by: Juan Bono <[email protected]>

* implement display and debug trait for Address (#1080)

* implement display and debug trait for Address

* hexa fmt

* Add recursive calls tests using `library_call` & `call_contract` syscalls (#1072)

* Add recursive library call test

* Add test programs

* Change base changes

* Add recursive test for call_contract

* fmt + clippy

* Add test for 100 contract calls

* clippy + fmt

* Update test values

---------

Co-authored-by: Juan Bono <[email protected]>

* Fix/Refactor State::count actual storage changes + Support `DeployAccount` in the Rpc…
  • Loading branch information
21 people authored Dec 22, 2023
1 parent 82092d2 commit e9ecfc0
Showing 1 changed file with 55 additions and 3 deletions.
58 changes: 55 additions & 3 deletions src/syscalls/business_logic_syscall_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,28 +127,44 @@ lazy_static! {
};
}

/// Structure representing the [BusinessLogicSyscallHandler].
#[derive(Debug)]
pub struct BusinessLogicSyscallHandler<'a, S: StateReader, C: ContractClassCache> {
/// Events emitted by the current contract call.
pub(crate) events: Vec<OrderedEvent>,
/// Get the expected pointer to the syscall
pub(crate) expected_syscall_ptr: Relocatable,
/// Manages execution resources
pub(crate) resources_manager: ExecutionResourcesManager,
/// Context of the transaction being executed
pub(crate) tx_execution_context: TransactionExecutionContext,
/// Messages from L2 to L1
pub(crate) l2_to_l1_messages: Vec<OrderedL2ToL1Message>,
/// Address of the contract
pub(crate) contract_address: Address,
/// Address of the caller
pub(crate) caller_address: Address,
/// A list of dynamically allocated segments that are expected to be read-only.
pub(crate) read_only_segments: Vec<(Relocatable, MaybeRelocatable)>,
/// List of internal calls during the syscall execution
pub(crate) internal_calls: Vec<CallInfo>,
/// Context information related to the current block
pub(crate) block_context: BlockContext,
/// State of the storage related to Starknet contract
pub(crate) starknet_storage_state: ContractStorageState<'a, S, C>,
/// Indicates whether the current execution supports the "reverted" status.
pub(crate) support_reverted: bool,
/// Get the selector for the entry point of the contract.
pub(crate) entry_point_selector: Felt252,
/// Map selectors to their corresponding syscall names.
pub(crate) selector_to_syscall: &'a HashMap<Felt252, &'static str>,
pub(crate) execution_info_ptr: Option<Relocatable>,
}

// TODO: execution entry point may no be a parameter field, but there is no way to generate a default for now

impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a, S, C> {
/// Constructor creates a new [BusinessLogicSyscallHandler] instance
#[allow(clippy::too_many_arguments)]
pub fn new(
tx_execution_context: TransactionExecutionContext,
Expand Down Expand Up @@ -186,6 +202,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}
}

/// Constructor with default values, used for testing
pub fn default_with_state(state: &'a mut CachedState<S, C>) -> Self {
BusinessLogicSyscallHandler::new_for_testing(
BlockInfo::default(),
Expand All @@ -194,20 +211,32 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
)
}

/// System calls allow a contract to requires services from the Starknet OS
/// See further documentation on https://docs.starknet.io/documentation/architecture_and_concepts/Contracts/system-calls/
/// Constructor for testing purposes
pub fn new_for_testing(
block_info: BlockInfo,
_contract_address: Address,
state: &'a mut CachedState<S, C>,
) -> Self {
let syscalls = Vec::from([
// Emits an event with a given set of keys and data.
"emit_event".to_string(),
// Deploys a new instance of a previously declared class.
"deploy".to_string(),
// Gets information about the original transaction.
"get_tx_info".to_string(),
// Sends a message to L1.
"send_message_to_l1".to_string(),
// Calls the requested function in any previously declared class.
"library_call".to_string(),
// Returns the address of the calling contract, or 0 if the call was not initiated by another contract.
"get_caller_address".to_string(),
// Gets the address of the contract who raised the system call.
"get_contract_address".to_string(),
// Returns the address of the sequencer that generated the current block.
"get_sequencer_address".to_string(),
// Gets the timestamp of the block in which the transaction is executed.
"get_block_timestamp".to_string(),
]);
let events = Vec::new();
Expand Down Expand Up @@ -250,6 +279,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
.increment_syscall_counter(syscall_name, 1);
}

/// Helper function to execute a call to a contract
fn call_contract_helper(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -318,6 +348,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(SyscallResponse { gas, body })
}

/// Checks if constructor entry points are empty
fn constructor_entry_points_empty(
&self,
contract_class: CompiledClass,
Expand All @@ -335,6 +366,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}
}

/// Execute a constructor entry point
fn execute_constructor_entry_point(
&mut self,
contract_address: &Address,
Expand Down Expand Up @@ -411,10 +443,12 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(call_info.result())
}

/// Writes a value to the storage state using the specified address.
fn syscall_storage_write(&mut self, key: Felt252, value: Felt252) {
self.starknet_storage_state.write(Address(key), value)
}

/// Reads the syscall request, checks and reduces gas, executes the syscall, and writes the syscall response.
pub fn syscall(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -481,6 +515,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(())
}

/// Executes the specific syscall based on the request.
fn execute_syscall(
&mut self,
request: SyscallRequest,
Expand Down Expand Up @@ -527,6 +562,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}
}

/// Returns the hash of a specific block, with an error if the block number is out of range.
fn get_block_hash(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -570,6 +606,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Validates stop pointers and read-only segments after the syscall execution.
pub(crate) fn post_run(
&self,
runner: &mut VirtualMachine,
Expand All @@ -585,8 +622,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
self.validate_read_only_segments(runner)
}

/// Validates that there were no out of bounds writes to read-only segments and marks
/// them as accessed.
/// Validates that there were no out of bounds writes to read-only segments and marks them as accessed.
pub(crate) fn validate_read_only_segments(
&self,
vm: &mut VirtualMachine,
Expand All @@ -611,6 +647,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}

impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a, S, C> {
/// Emit an event.
fn emit_event(
&mut self,
vm: &VirtualMachine,
Expand All @@ -630,6 +667,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Returns the block number.
fn get_block_number(
&mut self,
_vm: &mut VirtualMachine,
Expand All @@ -643,6 +681,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Reads the value associated with the given key from the storage state.
fn _storage_read(&mut self, key: [u8; 32]) -> Result<Felt252, StateError> {
match self
.starknet_storage_state
Expand All @@ -654,6 +693,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}
}

/// Performs a storage write operation.
fn storage_write(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -753,6 +793,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Executes a contract call
fn call_contract(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -783,6 +824,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
)
}

/// Performs a storage read operation.
fn storage_read(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -813,6 +855,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Deploys a contract.
fn syscall_deploy(
&mut self,
vm: &VirtualMachine,
Expand Down Expand Up @@ -876,6 +919,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok((contract_address, result))
}

/// Deploys a contract to the virtual machine.
fn deploy(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -923,6 +967,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(response)
}

/// Reads and validates syscall requests. Matches syscall names to their corresponding requests.
fn read_syscall_request(
&self,
vm: &VirtualMachine,
Expand All @@ -947,7 +992,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
)),
}
}

/// Allocate a segment in memory.
pub(crate) fn allocate_segment(
&mut self,
vm: &mut VirtualMachine,
Expand All @@ -962,6 +1007,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(segment_start)
}

/// Sends a message from L2 to L1, including the destination address and payload.
fn send_message_to_l1(
&mut self,
vm: &VirtualMachine,
Expand All @@ -984,6 +1030,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Reads and validates a syscall request, and updates the expected syscall pointer offset.
fn read_and_validate_syscall_request(
&mut self,
vm: &VirtualMachine,
Expand All @@ -997,6 +1044,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
Ok(syscall_request)
}

/// Executes a library call
fn library_call(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -1028,6 +1076,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
)
}

/// Get the time stamp of the block.
fn get_block_timestamp(
&mut self,
_vm: &VirtualMachine,
Expand All @@ -1042,6 +1091,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Replaces class at the specified address with a new one based on the request.
fn replace_class(
&mut self,
_vm: &VirtualMachine,
Expand All @@ -1058,6 +1108,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
})
}

/// Calculates the Keccak hash of a given input.
fn keccak(
&mut self,
vm: &mut VirtualMachine,
Expand Down Expand Up @@ -1107,6 +1158,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
}

// TODO: refactor code to use this function
/// Constructs a failure response from an error message.
fn failure_from_error_msg(
&mut self,
vm: &mut VirtualMachine,
Expand Down

0 comments on commit e9ecfc0

Please sign in to comment.