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

Commit

Permalink
Make contract caches shared. (#940)
Browse files Browse the repository at this point in the history
* 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 423052f.

* 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 4631e5e.

* 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 11b0c39.

* 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 8a11259.

* 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 423052f.

* 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 4631e5e.

* 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 11b0c39.

* 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: Federica <[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: fmoletta <[email protected]>
Co-authored-by: Iñaki Garay <[email protected]>

* Merge

* Fix code

* clippy

* Remove old file

* Remove old file

* Avoid cloning private cache

* Fix locks

* Uncomment metrics

---------

Co-authored-by: Mario Rugiero <[email protected]>
Co-authored-by: fmoletta <[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: Antonio Calvín García <[email protected]>
Co-authored-by: Iñaki Garay <[email protected]>
Co-authored-by: Federica <[email protected]>
  • Loading branch information
17 people committed Nov 20, 2023
1 parent 5d72181 commit 8ce4c9e
Show file tree
Hide file tree
Showing 58 changed files with 1,915 additions and 1,110 deletions.
12 changes: 11 additions & 1 deletion Cargo.lock

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

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ tracing = "0.1.37"
[dev-dependencies]
assert_matches = "1.5.0"
coverage-helper = "0.2.0"
lru = "0.11.0"
pretty_assertions_sorted = "1.2.3"
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }

Expand Down
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,54 @@ You can find an example on how to use the CLI [here](/docs/CLI_USAGE_EXAMPLE.md)

### Customization

#### Contract class cache behavior

`starknet_in_rust` supports caching contracts in memory. Caching the contracts is useful for
avoiding excessive RPC API usage and keeping the contract class deserialization overhead to the
minimum. The project provides two builtin cache policies: null and permanent. The null cache behaves
as if there was no cache at all. The permanent cache caches everything in memory forever.

In addition to those two, an example is provided that implements and uses an LRU cache policy.
Long-running applications should ideally implement a cache algorithm suited to their needs or
alternatively use our example's implementation to avoid spamming the API when using the null cache
or blowing the memory usage when running with the permanent cache.

Customized cache policies may be used by implementing the `ContractClassCache` trait. Check out our
[LRU cache example](examples/lru_cache/main.rs) for more details. Updating the cache requires
manually merging the local state cache into the shared cache manually. This can be done by calling
the `drain_private_contract_class_cache` on the `CachedState` instance.

```rs
// To use the null cache (aka. no cache at all), create the state as follows:
let cache = Arc::new(NullContractClassCache::default());
let state1 = CachedState::new(state_reader.clone(), cache.clone());
let state2 = CachedState::new(state_reader.clone(), cache.clone()); // Cache is reused.

// Insert state usage here.

// The null cache doesn't have any method to extend it since it has no data.
```

```rs
// If the permanent cache is preferred, then use `PermanentContractClassCache` instead:
let cache = Arc::new(PermanentContractClassCache::default());
let state1 = CachedState::new(state_reader.clone(), cache.clone());
let state2 = CachedState::new(state_reader.clone(), cache.clone()); // Cache is reused.

// Insert state usage here.

// Extend the shared cache with the states' contracts after using them.
cache.extend(state1.state.drain_private_contract_class_cache());
cache.extend(state2.state.drain_private_contract_class_cache());
```

#### Logging configuration

This project uses the [`tracing`](https://crates.io/crates/tracing) crate as a library. Check out
its documentation for more information.

### Testing

#### Logging configuration

This project uses the [`tracing`](https://crates.io/crates/tracing) crate as a library. Check out
Expand Down
35 changes: 25 additions & 10 deletions bench/internals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ use starknet_in_rust::{
services::api::contract_classes::{
compiled_class::CompiledClass, deprecated_contract_class::ContractClass,
},
state::in_memory_state_reader::InMemoryStateReader,
state::{cached_state::CachedState, state_api::State},
state::{
contract_class_cache::PermanentContractClassCache,
in_memory_state_reader::InMemoryStateReader,
},
transaction::{declare::Declare, Deploy, DeployAccount, InvokeFunction},
utils::{Address, ClassHash},
};
use std::{collections::HashMap, hint::black_box, sync::Arc};
use std::{hint::black_box, sync::Arc};

#[cfg(feature = "cairo-native")]
use std::{cell::RefCell, rc::Rc};
Expand Down Expand Up @@ -74,7 +77,10 @@ fn deploy_account(
const RUNS: usize = 500;

let state_reader = Arc::new(InMemoryStateReader::default());
let mut state = CachedState::new(state_reader, HashMap::new());
let mut state = CachedState::new(
state_reader,
Arc::new(PermanentContractClassCache::default()),
);

state
.set_contract_class(
Expand All @@ -86,7 +92,7 @@ fn deploy_account(
let block_context = &Default::default();

for _ in 0..RUNS {
let mut state_copy = state.clone();
let mut state_copy = state.clone_for_testing();
let class_hash = *CLASS_HASH;
let signature = SIGNATURE.clone();
scope(|| {
Expand Down Expand Up @@ -118,12 +124,15 @@ fn declare(#[cfg(feature = "cairo-native")] program_cache: Rc<RefCell<ProgramCac
const RUNS: usize = 5;

let state_reader = Arc::new(InMemoryStateReader::default());
let state = CachedState::new(state_reader, HashMap::new());
let state = CachedState::new(
state_reader,
Arc::new(PermanentContractClassCache::default()),
);

let block_context = &Default::default();

for _ in 0..RUNS {
let mut cloned_state = state.clone();
let mut cloned_state = state.clone_for_testing();
let class = CONTRACT_CLASS.clone();
let address = CONTRACT_ADDRESS.clone();
scope(|| {
Expand Down Expand Up @@ -155,7 +164,10 @@ fn deploy(#[cfg(feature = "cairo-native")] program_cache: Rc<RefCell<ProgramCach
const RUNS: usize = 8;

let state_reader = Arc::new(InMemoryStateReader::default());
let mut state = CachedState::new(state_reader, HashMap::new());
let mut state = CachedState::new(
state_reader,
Arc::new(PermanentContractClassCache::default()),
);

state
.set_contract_class(
Expand All @@ -167,7 +179,7 @@ fn deploy(#[cfg(feature = "cairo-native")] program_cache: Rc<RefCell<ProgramCach
let block_context = &Default::default();

for _ in 0..RUNS {
let mut state_copy = state.clone();
let mut state_copy = state.clone_for_testing();
let salt = felt_str!(
"2669425616857739096022668060305620640217901643963991674344872184515580705509"
);
Expand Down Expand Up @@ -198,7 +210,10 @@ fn invoke(#[cfg(feature = "cairo-native")] program_cache: Rc<RefCell<ProgramCach
const RUNS: usize = 100;

let state_reader = Arc::new(InMemoryStateReader::default());
let mut state = CachedState::new(state_reader, HashMap::new());
let mut state = CachedState::new(
state_reader,
Arc::new(PermanentContractClassCache::default()),
);

state
.set_contract_class(
Expand Down Expand Up @@ -231,7 +246,7 @@ fn invoke(#[cfg(feature = "cairo-native")] program_cache: Rc<RefCell<ProgramCach
.unwrap();

for _ in 0..RUNS {
let mut state_copy = state.clone();
let mut state_copy = state.clone_for_testing();
let address = CONTRACT_ADDRESS.clone();
let selector = VALIDATE_ENTRY_POINT_SELECTOR.clone();
let signature = SIGNATURE.clone();
Expand Down
44 changes: 25 additions & 19 deletions bench/native_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ use num_traits::Zero;
use starknet_in_rust::definitions::block_context::BlockContext;
use starknet_in_rust::definitions::block_context::StarknetChainId;
use starknet_in_rust::services::api::contract_classes::compiled_class::CompiledClass;
use starknet_in_rust::state::contract_class_cache::ContractClassCache;
use starknet_in_rust::state::contract_class_cache::PermanentContractClassCache;
use starknet_in_rust::state::state_api::State;
use starknet_in_rust::transaction::DeployAccount;
use starknet_in_rust::utils::calculate_sn_keccak;
Expand All @@ -32,7 +34,6 @@ use starknet_in_rust::{
utils::{Address, ClassHash},
};
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
use std::sync::Arc;

Expand Down Expand Up @@ -62,7 +63,7 @@ pub fn main() {

fn bench_fibo(executions: usize, native: bool) {
// Create state reader with class hash data
let mut contract_class_cache = HashMap::new();
let contract_class_cache = PermanentContractClassCache::default();
static CASM_CLASS_HASH: ClassHash = ClassHash([2; 32]);

let (contract_class, constructor_selector) = match native {
Expand Down Expand Up @@ -96,7 +97,7 @@ fn bench_fibo(executions: usize, native: bool) {

let caller_address = Address(123456789.into());

contract_class_cache.insert(CASM_CLASS_HASH, contract_class);
contract_class_cache.set_contract_class(CASM_CLASS_HASH, contract_class);
let mut state_reader = InMemoryStateReader::default();
let nonce = Felt252::zero();

Expand All @@ -109,7 +110,7 @@ fn bench_fibo(executions: usize, native: bool) {

// Create state from the state_reader and contract cache.
let state_reader = Arc::new(state_reader);
let state = CachedState::new(state_reader, contract_class_cache);
let state = CachedState::new(state_reader, Arc::new(contract_class_cache));

/* f0, f1, N */
let mut calldata = [1.into(), 1.into(), 2000000.into()];
Expand All @@ -120,7 +121,7 @@ fn bench_fibo(executions: usize, native: bool) {
for _ in 0..executions {
calldata[2] = &calldata[2] + 1usize;
let result = execute(
&mut state.clone(),
&mut state.clone_for_testing(),
&caller_address,
&caller_address,
&Felt252::new(constructor_selector.clone()),
Expand All @@ -136,7 +137,7 @@ fn bench_fibo(executions: usize, native: bool) {

fn bench_fact(executions: usize, native: bool) {
// Create state reader with class hash data
let mut contract_class_cache = HashMap::new();
let contract_class_cache = PermanentContractClassCache::default();
static CASM_CLASS_HASH: ClassHash = ClassHash([2; 32]);

let (contract_class, constructor_selector) = match native {
Expand Down Expand Up @@ -172,7 +173,7 @@ fn bench_fact(executions: usize, native: bool) {
// FACT 1M
// FIBO 2M

contract_class_cache.insert(CASM_CLASS_HASH, contract_class);
contract_class_cache.set_contract_class(CASM_CLASS_HASH, contract_class);
let mut state_reader = InMemoryStateReader::default();
let nonce = Felt252::zero();

Expand All @@ -185,7 +186,7 @@ fn bench_fact(executions: usize, native: bool) {

// Create state from the state_reader and contract cache.
let state_reader = Arc::new(state_reader);
let state = CachedState::new(state_reader, contract_class_cache);
let state = CachedState::new(state_reader, Arc::new(contract_class_cache));

/* N */
let mut calldata = [2000000.into()];
Expand All @@ -196,7 +197,7 @@ fn bench_fact(executions: usize, native: bool) {
for _ in 0..executions {
calldata[0] = &calldata[0] + 1usize;
let result = execute(
&mut state.clone(),
&mut state.clone_for_testing(),
&caller_address,
&caller_address,
&Felt252::new(constructor_selector.clone()),
Expand All @@ -213,7 +214,7 @@ fn bench_fact(executions: usize, native: bool) {
fn bench_erc20(executions: usize, native: bool) {
// 1. setup ERC20 contract and state.
// Create state reader and preload the contract classes.
let mut contract_class_cache = HashMap::new();
let contract_class_cache = PermanentContractClassCache::default();

lazy_static! {
static ref ERC20_CLASS_HASH: ClassHash = ClassHash::from(felt_str!("2"));
Expand All @@ -239,7 +240,10 @@ fn bench_erc20(executions: usize, native: bool) {
}

let program_cache = Rc::new(RefCell::new(ProgramCache::new(get_native_context())));
let (erc20_address, mut state): (Address, CachedState<InMemoryStateReader>) = match native {
let (erc20_address, mut state): (
Address,
CachedState<InMemoryStateReader, PermanentContractClassCache>,
) = match native {
true => {
let erc20_sierra_class = include_bytes!("../starknet_programs/cairo2/erc20.sierra");
let sierra_contract_class: cairo_lang_starknet::contract_class::ContractClass =
Expand All @@ -259,11 +263,11 @@ fn bench_erc20(executions: usize, native: bool) {
let deploy_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector;

// insert deployer and erc20 classes into the cache.
contract_class_cache.insert(
contract_class_cache.set_contract_class(
*DEPLOYER_CLASS_HASH,
CompiledClass::Casm(Arc::new(erc20_deployer_class)),
);
contract_class_cache.insert(*ERC20_CLASS_HASH, erc20_contract_class);
contract_class_cache.set_contract_class(*ERC20_CLASS_HASH, erc20_contract_class);

let mut state_reader = InMemoryStateReader::default();
// setup deployer nonce and address into the state reader
Expand All @@ -275,7 +279,8 @@ fn bench_erc20(executions: usize, native: bool) {
.insert(DEPLOYER_ADDRESS.clone(), Felt252::zero());

// Create state from the state_reader and contract cache.
let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache);
let mut state =
CachedState::new(Arc::new(state_reader), Arc::new(contract_class_cache));

// deploy the erc20 contract by calling the deployer contract.

Expand Down Expand Up @@ -338,11 +343,11 @@ fn bench_erc20(executions: usize, native: bool) {
let deploy_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector;

// insert deployer and erc20 classes into the cache.
contract_class_cache.insert(
contract_class_cache.set_contract_class(
*DEPLOYER_CLASS_HASH,
CompiledClass::Casm(Arc::new(erc20_deployer_class)),
);
contract_class_cache.insert(*ERC20_CLASS_HASH, erc20_contract_class);
contract_class_cache.set_contract_class(*ERC20_CLASS_HASH, erc20_contract_class);

let mut state_reader = InMemoryStateReader::default();
// setup deployer nonce and address into the state reader
Expand All @@ -354,7 +359,8 @@ fn bench_erc20(executions: usize, native: bool) {
.insert(DEPLOYER_ADDRESS.clone(), Felt252::zero());

// Create state from the state_reader and contract cache.
let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache);
let mut state =
CachedState::new(Arc::new(state_reader), Arc::new(contract_class_cache));

// deploy the erc20 contract by calling the deployer contract.

Expand Down Expand Up @@ -493,7 +499,7 @@ fn bench_erc20(executions: usize, native: bool) {

for _ in 0..executions {
let result = execute(
&mut state.clone(),
&mut state.clone_for_testing(),
&account1_address,
&erc20_address,
&transfer_entrypoint_selector.clone(),
Expand All @@ -510,7 +516,7 @@ fn bench_erc20(executions: usize, native: bool) {
#[inline(never)]
#[allow(clippy::too_many_arguments)]
fn execute(
state: &mut CachedState<InMemoryStateReader>,
state: &mut CachedState<InMemoryStateReader, PermanentContractClassCache>,
caller_address: &Address,
callee_address: &Address,
selector: &Felt252,
Expand Down
Loading

0 comments on commit 8ce4c9e

Please sign in to comment.