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

Commit e9ecfc0

Browse files
fguthmannfannyguthmannmatias-gonzjuanbonoSantiagoPittella
authored
Add documentations to syscalls/business_logic_syscall_handler module (#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 <maigonzalez@fi.uba.ar> * 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 <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/multi_syscall_test.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/contract_a.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update tests/multi_syscall_test.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * 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 <juanbono94@gmail.com> * 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 <estefano.bargas@fing.edu.uy> * 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 <maigonzalez@fi.uba.ar> * Update src/syscalls/deprecated_syscall_handler.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * wip * Modify the tests * fixed clippy errors --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> * Parse internal calls (#915) * Added comments to core/contract_address module (#900) Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> * 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 <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> * 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 <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: Edgar Luque <git@edgarluque.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: Edgar Luque <git@edgarluque.com> Co-authored-by: toni-calvin <antonio.calvin@lambdaclass.com> * 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 <git@edgarluque.com> * `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 <esteban.dimitroff@lambdaclass.com> Co-authored-by: Javier Chatruc <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: toni-calvin <antonio.calvin@lambdaclass.com> Co-authored-by: Edgar Luque <git@edgarluque.com> * Add logging to syscalls (#1111) * replace println by tracing::debug * replace MLIR with Cairo Native * fmt --------- Co-authored-by: juanbono <juan.bono@lambdaclass.com> * 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 <git@edgarluque.com> Co-authored-by: toni-calvin <antonio.calvin@lambdaclass.com> * 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 <juan.bono@lambdaclass.com> * 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 <juan.bono@lambdaclass.com> * 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 <juan.bono@lambdaclass.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <esteve.soler@lambdaclass.com> * 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 <fanny.guthmann@post.idc.ac.il> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> * 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 <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/multi_syscall_test.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/contract_a.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update tests/multi_syscall_test.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * 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 <juanbono94@gmail.com> * 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 <estefano.bargas@fing.edu.uy> * 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 <maigonzalez@fi.uba.ar> * Update src/syscalls/deprecated_syscall_handler.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * wip * Modify the tests * fixed clippy errors --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> * Parse internal calls (#915) * Added comments to core/contract_address module (#900) Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> * 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 <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> * 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 <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: Edgar Luque <git@edgarluque.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * Fix cairo-native feature-gated code * clippy --------- Co-authored-by: MrAzteca <azteca1998@users.noreply.github.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@lambdaclass.com> Co-authored-by: juanbono <juanbono94@gmail.com> Co-authored-by: Fanny Guthmann <57538139+fguthmann@users.noreply.github.com> Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> Co-authored-by: Edgar <git@edgarluque.com> Co-authored-by: ElFantasma <esteban.dimitroff@lambdaclass.com> Co-authored-by: Javier Chatruc <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: Antonio Calvín García <antonio.calvin@lambdaclass.com> Co-authored-by: Iñaki Garay <igarai@gmail.com> * 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 <esteve.soler@lambdaclass.com> * 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 <fanny.guthmann@post.idc.ac.il> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> * 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 <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/multi_syscall_test.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update starknet_programs/cairo1/contract_a.cairo Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * Update tests/multi_syscall_test.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * 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 <juanbono94@gmail.com> * 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 <estefano.bargas@fing.edu.uy> * 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 <maigonzalez@fi.uba.ar> * Update src/syscalls/deprecated_syscall_handler.rs Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> * wip * Modify the tests * fixed clippy errors --------- Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> * Parse internal calls (#915) * Added comments to core/contract_address module (#900) Co-authored-by: fannyguthmann <fanny.guthmann@post.idc.ac.il> * 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 <fanny.guthmann@post.idc.ac.il> Co-authored-by: Matías Ignacio González <maigonzalez@fi.uba.ar> Co-authored-by: SantiagoPittella <pittellasantiago@gmail.com> Co-authored-by: Juan Bono <juanbono94@gmail.com> Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy> Co-authored-by: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> * 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 <jrchatruc@gmail.com> Co-authored-by: Mariano Nicolini <mariano.nicolini.91@gmail.com> Co-authored-by: Esteve Soler Arderiu <esteve.soler@fratilia.com> Co-authored-by: Edgar Luque <git@edgarluque.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * 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 <juanbono94@gmail.com> * Fix/Refactor …
1 parent 82092d2 commit e9ecfc0

File tree

1 file changed

+55
-3
lines changed

1 file changed

+55
-3
lines changed

src/syscalls/business_logic_syscall_handler.rs

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,28 +127,44 @@ lazy_static! {
127127
};
128128
}
129129

130+
/// Structure representing the [BusinessLogicSyscallHandler].
130131
#[derive(Debug)]
131132
pub struct BusinessLogicSyscallHandler<'a, S: StateReader, C: ContractClassCache> {
133+
/// Events emitted by the current contract call.
132134
pub(crate) events: Vec<OrderedEvent>,
135+
/// Get the expected pointer to the syscall
133136
pub(crate) expected_syscall_ptr: Relocatable,
137+
/// Manages execution resources
134138
pub(crate) resources_manager: ExecutionResourcesManager,
139+
/// Context of the transaction being executed
135140
pub(crate) tx_execution_context: TransactionExecutionContext,
141+
/// Messages from L2 to L1
136142
pub(crate) l2_to_l1_messages: Vec<OrderedL2ToL1Message>,
143+
/// Address of the contract
137144
pub(crate) contract_address: Address,
145+
/// Address of the caller
138146
pub(crate) caller_address: Address,
147+
/// A list of dynamically allocated segments that are expected to be read-only.
139148
pub(crate) read_only_segments: Vec<(Relocatable, MaybeRelocatable)>,
149+
/// List of internal calls during the syscall execution
140150
pub(crate) internal_calls: Vec<CallInfo>,
151+
/// Context information related to the current block
141152
pub(crate) block_context: BlockContext,
153+
/// State of the storage related to Starknet contract
142154
pub(crate) starknet_storage_state: ContractStorageState<'a, S, C>,
155+
/// Indicates whether the current execution supports the "reverted" status.
143156
pub(crate) support_reverted: bool,
157+
/// Get the selector for the entry point of the contract.
144158
pub(crate) entry_point_selector: Felt252,
159+
/// Map selectors to their corresponding syscall names.
145160
pub(crate) selector_to_syscall: &'a HashMap<Felt252, &'static str>,
146161
pub(crate) execution_info_ptr: Option<Relocatable>,
147162
}
148163

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

151166
impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a, S, C> {
167+
/// Constructor creates a new [BusinessLogicSyscallHandler] instance
152168
#[allow(clippy::too_many_arguments)]
153169
pub fn new(
154170
tx_execution_context: TransactionExecutionContext,
@@ -186,6 +202,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
186202
}
187203
}
188204

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

214+
/// System calls allow a contract to requires services from the Starknet OS
215+
/// See further documentation on https://docs.starknet.io/documentation/architecture_and_concepts/Contracts/system-calls/
216+
/// Constructor for testing purposes
197217
pub fn new_for_testing(
198218
block_info: BlockInfo,
199219
_contract_address: Address,
200220
state: &'a mut CachedState<S, C>,
201221
) -> Self {
202222
let syscalls = Vec::from([
223+
// Emits an event with a given set of keys and data.
203224
"emit_event".to_string(),
225+
// Deploys a new instance of a previously declared class.
204226
"deploy".to_string(),
227+
// Gets information about the original transaction.
205228
"get_tx_info".to_string(),
229+
// Sends a message to L1.
206230
"send_message_to_l1".to_string(),
231+
// Calls the requested function in any previously declared class.
207232
"library_call".to_string(),
233+
// Returns the address of the calling contract, or 0 if the call was not initiated by another contract.
208234
"get_caller_address".to_string(),
235+
// Gets the address of the contract who raised the system call.
209236
"get_contract_address".to_string(),
237+
// Returns the address of the sequencer that generated the current block.
210238
"get_sequencer_address".to_string(),
239+
// Gets the timestamp of the block in which the transaction is executed.
211240
"get_block_timestamp".to_string(),
212241
]);
213242
let events = Vec::new();
@@ -250,6 +279,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
250279
.increment_syscall_counter(syscall_name, 1);
251280
}
252281

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

351+
/// Checks if constructor entry points are empty
321352
fn constructor_entry_points_empty(
322353
&self,
323354
contract_class: CompiledClass,
@@ -335,6 +366,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
335366
}
336367
}
337368

369+
/// Execute a constructor entry point
338370
fn execute_constructor_entry_point(
339371
&mut self,
340372
contract_address: &Address,
@@ -411,10 +443,12 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
411443
Ok(call_info.result())
412444
}
413445

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

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

518+
/// Executes the specific syscall based on the request.
484519
fn execute_syscall(
485520
&mut self,
486521
request: SyscallRequest,
@@ -527,6 +562,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
527562
}
528563
}
529564

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

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

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

613649
impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a, S, C> {
650+
/// Emit an event.
614651
fn emit_event(
615652
&mut self,
616653
vm: &VirtualMachine,
@@ -630,6 +667,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
630667
})
631668
}
632669

670+
/// Returns the block number.
633671
fn get_block_number(
634672
&mut self,
635673
_vm: &mut VirtualMachine,
@@ -643,6 +681,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
643681
})
644682
}
645683

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

696+
/// Performs a storage write operation.
657697
fn storage_write(
658698
&mut self,
659699
vm: &mut VirtualMachine,
@@ -753,6 +793,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
753793
})
754794
}
755795

796+
/// Executes a contract call
756797
fn call_contract(
757798
&mut self,
758799
vm: &mut VirtualMachine,
@@ -783,6 +824,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
783824
)
784825
}
785826

827+
/// Performs a storage read operation.
786828
fn storage_read(
787829
&mut self,
788830
vm: &mut VirtualMachine,
@@ -813,6 +855,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
813855
})
814856
}
815857

858+
/// Deploys a contract.
816859
fn syscall_deploy(
817860
&mut self,
818861
vm: &VirtualMachine,
@@ -876,6 +919,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
876919
Ok((contract_address, result))
877920
}
878921

922+
/// Deploys a contract to the virtual machine.
879923
fn deploy(
880924
&mut self,
881925
vm: &mut VirtualMachine,
@@ -923,6 +967,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
923967
Ok(response)
924968
}
925969

970+
/// Reads and validates syscall requests. Matches syscall names to their corresponding requests.
926971
fn read_syscall_request(
927972
&self,
928973
vm: &VirtualMachine,
@@ -947,7 +992,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
947992
)),
948993
}
949994
}
950-
995+
/// Allocate a segment in memory.
951996
pub(crate) fn allocate_segment(
952997
&mut self,
953998
vm: &mut VirtualMachine,
@@ -962,6 +1007,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
9621007
Ok(segment_start)
9631008
}
9641009

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

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

1047+
/// Executes a library call
10001048
fn library_call(
10011049
&mut self,
10021050
vm: &mut VirtualMachine,
@@ -1028,6 +1076,7 @@ impl<'a, S: StateReader, C: ContractClassCache> BusinessLogicSyscallHandler<'a,
10281076
)
10291077
}
10301078

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

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

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

11091160
// TODO: refactor code to use this function
1161+
/// Constructs a failure response from an error message.
11101162
fn failure_from_error_msg(
11111163
&mut self,
11121164
vm: &mut VirtualMachine,

0 commit comments

Comments
 (0)