From 7236d8f204c84cc54a818721bc9ef9c9994c9954 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:51:13 +0530 Subject: [PATCH 01/11] testing snos --- .DS_Store | Bin 0 -> 6148 bytes .idea/.gitignore | 8 ++++++++ .idea/GitLink.xml | 6 ++++++ .idea/aws.xml | 17 +++++++++++++++++ .idea/misc.xml | 4 ++++ .idea/modules.xml | 8 ++++++++ .idea/snos.iml | 14 ++++++++++++++ .idea/vcs.xml | 7 +++++++ scripts/setup-tests.sh | 26 +++++++++++--------------- src/hints/mod.rs | 7 +++++++ tests/common/utils.rs | 2 +- tests/hints.rs | 1 - 12 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 .DS_Store create mode 100644 .idea/.gitignore create mode 100644 .idea/GitLink.xml create mode 100644 .idea/aws.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/snos.iml create mode 100644 .idea/vcs.xml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + \ No newline at end of file diff --git a/.idea/aws.xml b/.idea/aws.xml new file mode 100644 index 00000000..a265f38d --- /dev/null +++ b/.idea/aws.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..b3a9127f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..7eb4d797 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/snos.iml b/.idea/snos.iml new file mode 100644 index 00000000..886714c6 --- /dev/null +++ b/.idea/snos.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..1173ddc5 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/scripts/setup-tests.sh b/scripts/setup-tests.sh index e78c4ee0..84ef8aec 100755 --- a/scripts/setup-tests.sh +++ b/scripts/setup-tests.sh @@ -2,14 +2,12 @@ CAIRO_VER="0.12.2" -if ! command -v cairo-compile > /dev/null -then +if ! command -v cairo-compile >/dev/null; then echo "please start cairo($CAIRO_VER) dev environment" exit 1 fi -if ! command -v starknet-compile-deprecated > /dev/null -then +if ! command -v starknet-compile-deprecated >/dev/null; then echo "please start cairo($CAIRO_VER) dev environment" exit 1 fi @@ -19,7 +17,7 @@ git submodule update --init FETCHED_CAIRO_VER="$(cat cairo-lang/src/starkware/cairo/lang/VERSION)" -if [ "$CAIRO_VER" != "$FETCHED_CAIRO_VER" ]; then +if [ "$CAIRO_VER" != "$FETCHED_CAIRO_VER" ]; then echo "incorrect cairo ver($FETCHED_CAIRO_VAR) expecting $CAIROVER" exit 1 fi @@ -29,7 +27,6 @@ echo -e "setting up cairo dependencies...\n" cp tests/dependencies/test_contract_interface.cairo cairo-lang/src/starkware/starknet/core/test_contract/ cp tests/dependencies/deprecated_syscalls.cairo cairo-lang/src/starkware/starknet/core/test_contract/ - # setup token_for_testing path mkdir -p cairo-lang/src/starkware/starknet/std_contracts/ERC20 cp tests/dependencies/ERC20.cairo cairo-lang/src/starkware/starknet/std_contracts/ERC20/ @@ -38,20 +35,19 @@ cp tests/dependencies/permitted.cairo cairo-lang/src/starkware/starknet/std_cont mkdir -p cairo-lang/src/starkware/starknet/std_contracts/upgradability_proxy cp tests/dependencies/initializable.cairo cairo-lang/src/starkware/starknet/std_contracts/upgradability_proxy - # compile cairo programs echo -e "compmiling cairo programs...\n" mkdir -p build/programs -cairo-format -i tests/programs/* -cairo-compile tests/programs/bad_output.cairo --output build/programs/bad_output.json -cairo-compile tests/programs/fact.cairo --output build/programs/fact.json -cairo-compile tests/programs/load_deprecated_class.cairo --output build/programs/load_deprecated_class.json --cairo_path cairo-lang/src -cairo-compile tests/programs/initialize_state_changes.cairo --output build/programs/initialize_state_changes.json --cairo_path cairo-lang/src -cairo-compile tests/programs/get_block_mapping.cairo --output build/programs/get_block_mapping.json --cairo_path cairo-lang/src -cairo-compile tests/programs/load_next_tx.cairo --output build/programs/load_next_tx.json --cairo_path cairo-lang/src +/Users/apoorvsadana/.pyenv/shims/cairo-format -i tests/programs/* +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/bad_output.cairo --output build/programs/bad_output.json +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/fact.cairo --output build/programs/fact.json +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/load_deprecated_class.cairo --output build/programs/load_deprecated_class.json --cairo_path cairo-lang/src +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/initialize_state_changes.cairo --output build/programs/initialize_state_changes.json --cairo_path cairo-lang/src +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/get_block_mapping.cairo --output build/programs/get_block_mapping.json --cairo_path cairo-lang/src +/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/load_next_tx.cairo --output build/programs/load_next_tx.json --cairo_path cairo-lang/src # compile os with debug info -cairo-compile cairo-lang/src/starkware/starknet/core/os/os.cairo --output build/os_debug.json --cairo_path cairo-lang/src +/Users/apoorvsadana/.pyenv/shims/cairo-compile cairo-lang/src/starkware/starknet/core/os/os.cairo --output build/os_debug.json --cairo_path cairo-lang/src # compile starknet contract echo -e "compiling starknet contrarcts...\n" diff --git a/src/hints/mod.rs b/src/hints/mod.rs index 155eda94..fde054b7 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -20,6 +20,7 @@ use cairo_vm::vm::errors::hint_errors::HintError; use cairo_vm::vm::vm_core::VirtualMachine; use crate::config::DEFAULT_INPUT_PATH; +use crate::hints::hints_raw::LOAD_NEXT_TX; use crate::io::{InternalTransaction, StarknetOsInput}; pub fn sn_hint_processor() -> BuiltinHintProcessor { @@ -71,6 +72,12 @@ pub fn sn_hint_processor() -> BuiltinHintProcessor { let transactions_len_hint = HintFunc(Box::new(transactions_len)); hint_processor.add_hint(String::from(hints_raw::TRANSACTIONS_LEN), Rc::new(transactions_len_hint)); + let enter_syscall_scopes_hint = HintFunc(Box::new(enter_syscall_scopes)); + hint_processor.add_hint(String::from(hints_raw::ENTER_SYSCALL_SCOPES), Rc::new(enter_syscall_scopes_hint)); + + let load_transaction_hint = HintFunc(Box::new(load_next_tx)); + hint_processor.add_hint(String::from(LOAD_NEXT_TX), Rc::new(load_transaction_hint)); + hint_processor } diff --git a/tests/common/utils.rs b/tests/common/utils.rs index 8fe2847c..e86f40e0 100644 --- a/tests/common/utils.rs +++ b/tests/common/utils.rs @@ -51,7 +51,7 @@ pub fn check_output_vs_python( pub fn deprecated_cairo_python_run(program: &str, with_input: bool) -> String { env::set_var("PYTHONPATH", "cairo-lang/src"); - let mut run_cmd = std::process::Command::new("cairo-run"); + let mut run_cmd = std::process::Command::new("/Users/apoorvsadana/.pyenv/shims/cairo-run"); run_cmd.arg(format!("--program={program}")).arg("--layout=small").arg("--print_output"); if with_input { diff --git a/tests/hints.rs b/tests/hints.rs index 0f0ceeb4..b930b525 100644 --- a/tests/hints.rs +++ b/tests/hints.rs @@ -117,7 +117,6 @@ fn get_block_mapping_test(mut os_input_hint_processor: BuiltinHintProcessor) { } #[rstest] -#[ignore] fn load_next_tx_test(mut os_input_hint_processor: BuiltinHintProcessor) { let program = "build/programs/load_next_tx.json"; From e25e5f2790a7f5d6744621e7bf933aa0c942a0a0 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:27:30 +0530 Subject: [PATCH 02/11] implement one hint --- src/hints/hints_raw.rs | 4 ++++ src/hints/mod.rs | 49 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/hints/hints_raw.rs b/src/hints/hints_raw.rs index 60bb4cde..ae63a84c 100644 --- a/src/hints/hints_raw.rs +++ b/src/hints/hints_raw.rs @@ -67,3 +67,7 @@ pub const LOAD_NEXT_TX: &str = "tx = next(transactions)\ntx_type_bytes = \ pub const LOAD_CONTRACT_ADDRESS: &str = "from starkware.starknet.business_logic.transaction.objects import \ InternalL1Handler\nids.contract_address = (\ntx.contract_address if \ isinstance(tx, InternalL1Handler) else tx.sender_address\n)"; + +pub const PREPARE_CONSTRUCTOR_EXECUTION: &str = "ids.contract_address_salt = tx.contract_address_salt\nids.class_hash = \ + tx.class_hash\nids.constructor_calldata_size = len(tx.constructor_calldata)\nids.constructor_calldata \ + = segments.gen_arg(arg=tx.constructor_calldata)"; diff --git a/src/hints/mod.rs b/src/hints/mod.rs index fde054b7..5376b764 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -6,6 +6,7 @@ use std::any::Any; use std::collections::HashMap; use std::rc::Rc; use std::slice::Iter; +use std::vec::IntoIter; use cairo_vm::felt::Felt252; use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::{ @@ -18,9 +19,10 @@ use cairo_vm::types::exec_scope::ExecutionScopes; use cairo_vm::types::relocatable::MaybeRelocatable; use cairo_vm::vm::errors::hint_errors::HintError; use cairo_vm::vm::vm_core::VirtualMachine; +use starknet_crypto::FieldElement; use crate::config::DEFAULT_INPUT_PATH; -use crate::hints::hints_raw::LOAD_NEXT_TX; +use crate::hints::hints_raw::{LOAD_NEXT_TX, PREPARE_CONSTRUCTOR_EXECUTION}; use crate::io::{InternalTransaction, StarknetOsInput}; pub fn sn_hint_processor() -> BuiltinHintProcessor { @@ -75,8 +77,11 @@ pub fn sn_hint_processor() -> BuiltinHintProcessor { let enter_syscall_scopes_hint = HintFunc(Box::new(enter_syscall_scopes)); hint_processor.add_hint(String::from(hints_raw::ENTER_SYSCALL_SCOPES), Rc::new(enter_syscall_scopes_hint)); - let load_transaction_hint = HintFunc(Box::new(load_next_tx)); - hint_processor.add_hint(String::from(LOAD_NEXT_TX), Rc::new(load_transaction_hint)); + let load_next_tx_hint = HintFunc(Box::new(load_next_tx)); + hint_processor.add_hint(String::from(LOAD_NEXT_TX), Rc::new(load_next_tx_hint)); + + let prepare_constructor_execution_hint = HintFunc(Box::new(prepare_constructor_execution)); + hint_processor.add_hint(String::from(PREPARE_CONSTRUCTOR_EXECUTION), Rc::new(prepare_constructor_execution_hint)); hint_processor } @@ -249,7 +254,7 @@ pub fn enter_syscall_scopes( _constants: &HashMap, ) -> Result<(), HintError> { let os_input = exec_scopes.get::("os_input").unwrap(); - let transactions: Box = Box::new([os_input.transactions.into_iter()].into_iter()); + let transactions: Box = Box::new(os_input.transactions.into_iter()); exec_scopes.enter_scope(HashMap::from_iter([(String::from("transactions"), transactions)])); Ok(()) } @@ -266,9 +271,43 @@ pub fn load_next_tx( ap_tracking: &ApTracking, _constants: &HashMap, ) -> Result<(), HintError> { - let mut transactions = exec_scopes.get::>("transactions")?; + let mut transactions = exec_scopes.get::>("transactions")?; // Safe to unwrap because the remaining number of txs is checked in the cairo code. let tx = transactions.next().unwrap(); exec_scopes.insert_value("transactions", transactions); + exec_scopes.insert_value("tx", tx.clone()); insert_value_from_var_name("tx_type", Felt252::from_bytes_be(tx.r#type.as_bytes()), vm, ids_data, ap_tracking) } + +/// Implements hint: +/// +/// ids.contract_address_salt = tx.contract_address_salt +/// ids.class_hash = tx.class_hash +/// ids.constructor_calldata_size = len(tx.constructor_calldata) +/// ids.constructor_calldata = segments.gen_arg(arg=tx.constructor_calldata) +pub fn prepare_constructor_execution( + vm: &mut VirtualMachine, + exec_scopes: &mut ExecutionScopes, + ids_data: &HashMap, + ap_tracking: &ApTracking, + _constants: &HashMap, +) -> Result<(), HintError> { + let tx = exec_scopes.get::("tx")?; + // Safe to unwrap because the remaining number of txs is checked in the cairo code. + insert_value_from_var_name("contract_address_salt", tx.contract_address_salt.unwrap_or(Felt252::from(0)), vm, ids_data, ap_tracking)?; + insert_value_from_var_name("class_hash", tx.class_hash.unwrap_or(Felt252::from(0)), vm, ids_data, ap_tracking)?; + + let constructor_calldata_size = match &tx.constructor_calldata { + None => 0, + Some(calldata) => calldata.len(), + }; + insert_value_from_var_name("constructor_calldata_size", constructor_calldata_size, vm, ids_data, ap_tracking)?; + + let constructor_calldata: Vec = match tx.constructor_calldata { + None => vec![], + Some(calldata) => calldata.iter().map(|felt| felt.into()).collect(), + }; + let constructor_calldata_base = vm.add_memory_segment(); + vm.load_data(constructor_calldata_base, &constructor_calldata)?; + insert_value_from_var_name("constructor_calldata", constructor_calldata_base, vm, ids_data, ap_tracking) +} From 56850f312846147f381c55d5f565b8545c08c95b Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 14:40:34 +0530 Subject: [PATCH 03/11] more hints --- src/hints/hints_raw.rs | 9 +++++-- src/hints/mod.rs | 53 ++++++++++++++++++++++++++++++++++++++---- src/state/mod.rs | 2 +- src/state/trie.rs | 6 ++++- 4 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/hints/hints_raw.rs b/src/hints/hints_raw.rs index ae63a84c..7d057500 100644 --- a/src/hints/hints_raw.rs +++ b/src/hints/hints_raw.rs @@ -1,5 +1,4 @@ -pub const STARKNET_OS_INPUT: &str = - "from starkware.starknet.core.os.os_input import StarknetOsInput\n\nos_input = \ +pub const STARKNET_OS_INPUT: &str = "from starkware.starknet.core.os.os_input import StarknetOsInput\n\nos_input = \ StarknetOsInput.load(data=program_input)\n\nids.initial_carried_outputs.messages_to_l1 = \ segments.add_temp_segment()\nids.initial_carried_outputs.messages_to_l2 = segments.add_temp_segment()"; @@ -71,3 +70,9 @@ pub const LOAD_CONTRACT_ADDRESS: &str = "from starkware.starknet.business_logic. pub const PREPARE_CONSTRUCTOR_EXECUTION: &str = "ids.contract_address_salt = tx.contract_address_salt\nids.class_hash = \ tx.class_hash\nids.constructor_calldata_size = len(tx.constructor_calldata)\nids.constructor_calldata \ = segments.gen_arg(arg=tx.constructor_calldata)"; + +pub const TRANSACTION_VERSION: &str = "memory[ap] = to_felt_or_relocatable(tx.version)"; + +pub const ASSERT_TRANSACTION_HASH: &str = "assert ids.transaction_hash == tx.hash_value, (\n \"Computed transaction_hash \ + is inconsistent with the hash in the transaction. \"\n f\"Computed hash = {ids.transaction_hash}, \ + Expected hash = {tx.hash_value}.\")"; diff --git a/src/hints/mod.rs b/src/hints/mod.rs index 5376b764..502491ae 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -5,7 +5,6 @@ pub mod hints_raw; use std::any::Any; use std::collections::HashMap; use std::rc::Rc; -use std::slice::Iter; use std::vec::IntoIter; use cairo_vm::felt::Felt252; @@ -19,10 +18,11 @@ use cairo_vm::types::exec_scope::ExecutionScopes; use cairo_vm::types::relocatable::MaybeRelocatable; use cairo_vm::vm::errors::hint_errors::HintError; use cairo_vm::vm::vm_core::VirtualMachine; -use starknet_crypto::FieldElement; use crate::config::DEFAULT_INPUT_PATH; -use crate::hints::hints_raw::{LOAD_NEXT_TX, PREPARE_CONSTRUCTOR_EXECUTION}; +use crate::hints::hints_raw::{ + ASSERT_TRANSACTION_HASH, LOAD_NEXT_TX, PREPARE_CONSTRUCTOR_EXECUTION, TRANSACTION_VERSION, +}; use crate::io::{InternalTransaction, StarknetOsInput}; pub fn sn_hint_processor() -> BuiltinHintProcessor { @@ -83,6 +83,12 @@ pub fn sn_hint_processor() -> BuiltinHintProcessor { let prepare_constructor_execution_hint = HintFunc(Box::new(prepare_constructor_execution)); hint_processor.add_hint(String::from(PREPARE_CONSTRUCTOR_EXECUTION), Rc::new(prepare_constructor_execution_hint)); + let transaction_version_hint = HintFunc(Box::new(transaction_version)); + hint_processor.add_hint(String::from(TRANSACTION_VERSION), Rc::new(transaction_version_hint)); + + let assert_transaction_hash_hint = HintFunc(Box::new(assert_transaction_hash)); + hint_processor.add_hint(String::from(ASSERT_TRANSACTION_HASH), Rc::new(assert_transaction_hash_hint)); + hint_processor } @@ -294,7 +300,13 @@ pub fn prepare_constructor_execution( ) -> Result<(), HintError> { let tx = exec_scopes.get::("tx")?; // Safe to unwrap because the remaining number of txs is checked in the cairo code. - insert_value_from_var_name("contract_address_salt", tx.contract_address_salt.unwrap_or(Felt252::from(0)), vm, ids_data, ap_tracking)?; + insert_value_from_var_name( + "contract_address_salt", + tx.contract_address_salt.unwrap_or(Felt252::from(0)), + vm, + ids_data, + ap_tracking, + )?; insert_value_from_var_name("class_hash", tx.class_hash.unwrap_or(Felt252::from(0)), vm, ids_data, ap_tracking)?; let constructor_calldata_size = match &tx.constructor_calldata { @@ -311,3 +323,36 @@ pub fn prepare_constructor_execution( vm.load_data(constructor_calldata_base, &constructor_calldata)?; insert_value_from_var_name("constructor_calldata", constructor_calldata_base, vm, ids_data, ap_tracking) } + +/// Implements hint: +/// +/// memory[ap] = to_felt_or_relocatable(tx.version) +pub fn transaction_version( + vm: &mut VirtualMachine, + exec_scopes: &mut ExecutionScopes, + _ids_data: &HashMap, + _ap_tracking: &ApTracking, + _constants: &HashMap, +) -> Result<(), HintError> { + let tx = exec_scopes.get::("tx")?; + insert_value_into_ap(vm, tx.version.expect("Transaction version should be set")) +} + +/// Implements hint: +/// +/// assert ids.transaction_hash == tx.hash_value, ( +/// "Computed transaction_hash is inconsistent with the hash in the transaction. " +/// f"Computed hash = {ids.transaction_hash}, Expected hash = {tx.hash_value}.") +pub fn assert_transaction_hash( + vm: &mut VirtualMachine, + exec_scopes: &mut ExecutionScopes, + ids_data: &HashMap, + ap_tracking: &ApTracking, + _constants: &HashMap, +) -> Result<(), HintError> { + let tx = exec_scopes.get::("tx")?; + let transaction_hash = get_integer_from_var_name("transaction_hash", vm, ids_data, ap_tracking)?.into_owned(); + + assert_eq!(tx.hash_value, transaction_hash, "Computed transaction_hash is inconsistent with the hash in the transaction. Computed hash = {}, Expected hash = {}.", transaction_hash, tx.hash_value); + Ok(()) +} diff --git a/src/state/mod.rs b/src/state/mod.rs index 6f326015..5f0278c1 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -116,7 +116,7 @@ impl SharedState { let mut contract_trie: MerkleTrie = MerkleTrie::empty(); for update in updates.clone() { - contract_trie.set(&self.contract_storage, felt_to_bits_api(*update.0.0.key()), update.1).unwrap(); + contract_trie.set(&self.contract_storage, felt_to_bits_api(*update.0 .0.key()), update.1).unwrap(); } self.contract_storage.commit_and_persist(contract_trie, *addr.0.key()); diff --git a/src/state/trie.rs b/src/state/trie.rs index 5143c513..2bd85c12 100644 --- a/src/state/trie.rs +++ b/src/state/trie.rs @@ -368,7 +368,11 @@ impl MerkleTrie { }; if *node.borrow() == InternalNode::Leaf { - if let Some(value) = self.leaves.get(&key) { Ok(Some(*value)) } else { storage.leaf(&key) } + if let Some(value) = self.leaves.get(&key) { + Ok(Some(*value)) + } else { + storage.leaf(&key) + } } else { Ok(None) } From 6449153ae41452277c65f6062b44a285ae518e01 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 14:42:14 +0530 Subject: [PATCH 04/11] update .gitignore --- .gitignore | 2 ++ .idea/.gitignore | 8 -------- .idea/GitLink.xml | 6 ------ .idea/aws.xml | 17 ----------------- .idea/misc.xml | 4 ---- .idea/modules.xml | 8 -------- .idea/snos.iml | 14 -------------- .idea/vcs.xml | 7 ------- 8 files changed, 2 insertions(+), 64 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/GitLink.xml delete mode 100644 .idea/aws.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/snos.iml delete mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index 85dc355f..44f669a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Rust artifacts Cargo.lock target/ +.idea +.vscode # Snos artifacts build/* diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/GitLink.xml b/.idea/GitLink.xml deleted file mode 100644 index 009597cc..00000000 --- a/.idea/GitLink.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/aws.xml b/.idea/aws.xml deleted file mode 100644 index a265f38d..00000000 --- a/.idea/aws.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index b3a9127f..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 7eb4d797..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/snos.iml b/.idea/snos.iml deleted file mode 100644 index 886714c6..00000000 --- a/.idea/snos.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 1173ddc5..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From 09b8bdb6c198908ccb1951c418624466533ca5b3 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 14:43:39 +0530 Subject: [PATCH 05/11] remove ds store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Wed, 25 Oct 2023 14:46:02 +0530 Subject: [PATCH 06/11] fix hardcoded path files --- scripts/setup-tests.sh | 16 ++++++++-------- tests/common/utils.rs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/setup-tests.sh b/scripts/setup-tests.sh index 84ef8aec..27864103 100755 --- a/scripts/setup-tests.sh +++ b/scripts/setup-tests.sh @@ -38,16 +38,16 @@ cp tests/dependencies/initializable.cairo cairo-lang/src/starkware/starknet/std_ # compile cairo programs echo -e "compmiling cairo programs...\n" mkdir -p build/programs -/Users/apoorvsadana/.pyenv/shims/cairo-format -i tests/programs/* -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/bad_output.cairo --output build/programs/bad_output.json -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/fact.cairo --output build/programs/fact.json -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/load_deprecated_class.cairo --output build/programs/load_deprecated_class.json --cairo_path cairo-lang/src -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/initialize_state_changes.cairo --output build/programs/initialize_state_changes.json --cairo_path cairo-lang/src -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/get_block_mapping.cairo --output build/programs/get_block_mapping.json --cairo_path cairo-lang/src -/Users/apoorvsadana/.pyenv/shims/cairo-compile tests/programs/load_next_tx.cairo --output build/programs/load_next_tx.json --cairo_path cairo-lang/src +cairo-format -i tests/programs/* +cairo-compile tests/programs/bad_output.cairo --output build/programs/bad_output.json +cairo-compile tests/programs/fact.cairo --output build/programs/fact.json +cairo-compile tests/programs/load_deprecated_class.cairo --output build/programs/load_deprecated_class.json --cairo_path cairo-lang/src +cairo-compile tests/programs/initialize_state_changes.cairo --output build/programs/initialize_state_changes.json --cairo_path cairo-lang/src +cairo-compile tests/programs/get_block_mapping.cairo --output build/programs/get_block_mapping.json --cairo_path cairo-lang/src +cairo-compile tests/programs/load_next_tx.cairo --output build/programs/load_next_tx.json --cairo_path cairo-lang/src # compile os with debug info -/Users/apoorvsadana/.pyenv/shims/cairo-compile cairo-lang/src/starkware/starknet/core/os/os.cairo --output build/os_debug.json --cairo_path cairo-lang/src +cairo-compile cairo-lang/src/starkware/starknet/core/os/os.cairo --output build/os_debug.json --cairo_path cairo-lang/src # compile starknet contract echo -e "compiling starknet contrarcts...\n" diff --git a/tests/common/utils.rs b/tests/common/utils.rs index e86f40e0..8fe2847c 100644 --- a/tests/common/utils.rs +++ b/tests/common/utils.rs @@ -51,7 +51,7 @@ pub fn check_output_vs_python( pub fn deprecated_cairo_python_run(program: &str, with_input: bool) -> String { env::set_var("PYTHONPATH", "cairo-lang/src"); - let mut run_cmd = std::process::Command::new("/Users/apoorvsadana/.pyenv/shims/cairo-run"); + let mut run_cmd = std::process::Command::new("cairo-run"); run_cmd.arg(format!("--program={program}")).arg("--layout=small").arg("--print_output"); if with_input { From 13f050cea217ff607e106b8d00b9bdc11631ea42 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:06:00 +0530 Subject: [PATCH 07/11] fmt --- src/hints/hints_raw.rs | 16 +++++++++------- src/hints/mod.rs | 7 ++++++- src/state/mod.rs | 2 +- src/state/trie.rs | 6 +----- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/hints/hints_raw.rs b/src/hints/hints_raw.rs index 7d057500..bb040fb7 100644 --- a/src/hints/hints_raw.rs +++ b/src/hints/hints_raw.rs @@ -1,4 +1,5 @@ -pub const STARKNET_OS_INPUT: &str = "from starkware.starknet.core.os.os_input import StarknetOsInput\n\nos_input = \ +pub const STARKNET_OS_INPUT: &str = + "from starkware.starknet.core.os.os_input import StarknetOsInput\n\nos_input = \ StarknetOsInput.load(data=program_input)\n\nids.initial_carried_outputs.messages_to_l1 = \ segments.add_temp_segment()\nids.initial_carried_outputs.messages_to_l2 = segments.add_temp_segment()"; @@ -67,12 +68,13 @@ pub const LOAD_CONTRACT_ADDRESS: &str = "from starkware.starknet.business_logic. InternalL1Handler\nids.contract_address = (\ntx.contract_address if \ isinstance(tx, InternalL1Handler) else tx.sender_address\n)"; -pub const PREPARE_CONSTRUCTOR_EXECUTION: &str = "ids.contract_address_salt = tx.contract_address_salt\nids.class_hash = \ - tx.class_hash\nids.constructor_calldata_size = len(tx.constructor_calldata)\nids.constructor_calldata \ - = segments.gen_arg(arg=tx.constructor_calldata)"; +pub const PREPARE_CONSTRUCTOR_EXECUTION: &str = "ids.contract_address_salt = tx.contract_address_salt\nids.class_hash \ + = tx.class_hash\nids.constructor_calldata_size = \ + len(tx.constructor_calldata)\nids.constructor_calldata = \ + segments.gen_arg(arg=tx.constructor_calldata)"; pub const TRANSACTION_VERSION: &str = "memory[ap] = to_felt_or_relocatable(tx.version)"; -pub const ASSERT_TRANSACTION_HASH: &str = "assert ids.transaction_hash == tx.hash_value, (\n \"Computed transaction_hash \ - is inconsistent with the hash in the transaction. \"\n f\"Computed hash = {ids.transaction_hash}, \ - Expected hash = {tx.hash_value}.\")"; +pub const ASSERT_TRANSACTION_HASH: &str = + "assert ids.transaction_hash == tx.hash_value, (\n \"Computed transaction_hash is inconsistent with the hash \ + in the transaction. \"\n f\"Computed hash = {ids.transaction_hash}, Expected hash = {tx.hash_value}.\")"; diff --git a/src/hints/mod.rs b/src/hints/mod.rs index 502491ae..eac3e15f 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -353,6 +353,11 @@ pub fn assert_transaction_hash( let tx = exec_scopes.get::("tx")?; let transaction_hash = get_integer_from_var_name("transaction_hash", vm, ids_data, ap_tracking)?.into_owned(); - assert_eq!(tx.hash_value, transaction_hash, "Computed transaction_hash is inconsistent with the hash in the transaction. Computed hash = {}, Expected hash = {}.", transaction_hash, tx.hash_value); + assert_eq!( + tx.hash_value, transaction_hash, + "Computed transaction_hash is inconsistent with the hash in the transaction. Computed hash = {}, Expected \ + hash = {}.", + transaction_hash, tx.hash_value + ); Ok(()) } diff --git a/src/state/mod.rs b/src/state/mod.rs index 5f0278c1..6f326015 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -116,7 +116,7 @@ impl SharedState { let mut contract_trie: MerkleTrie = MerkleTrie::empty(); for update in updates.clone() { - contract_trie.set(&self.contract_storage, felt_to_bits_api(*update.0 .0.key()), update.1).unwrap(); + contract_trie.set(&self.contract_storage, felt_to_bits_api(*update.0.0.key()), update.1).unwrap(); } self.contract_storage.commit_and_persist(contract_trie, *addr.0.key()); diff --git a/src/state/trie.rs b/src/state/trie.rs index 2bd85c12..5143c513 100644 --- a/src/state/trie.rs +++ b/src/state/trie.rs @@ -368,11 +368,7 @@ impl MerkleTrie { }; if *node.borrow() == InternalNode::Leaf { - if let Some(value) = self.leaves.get(&key) { - Ok(Some(*value)) - } else { - storage.leaf(&key) - } + if let Some(value) = self.leaves.get(&key) { Ok(Some(*value)) } else { storage.leaf(&key) } } else { Ok(None) } From ede1227895046cc0cd254d3c14cbe6d7ea581c96 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:44:21 +0530 Subject: [PATCH 08/11] refactor fixes --- src/hints/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hints/mod.rs b/src/hints/mod.rs index eac3e15f..975adde0 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -299,10 +299,9 @@ pub fn prepare_constructor_execution( _constants: &HashMap, ) -> Result<(), HintError> { let tx = exec_scopes.get::("tx")?; - // Safe to unwrap because the remaining number of txs is checked in the cairo code. insert_value_from_var_name( "contract_address_salt", - tx.contract_address_salt.unwrap_or(Felt252::from(0)), + tx.contract_address_salt.expect("`contract_address_salt` must be present"), vm, ids_data, ap_tracking, From a89e1907d42ac0aa97d5a8cd953707b05cebd0ad Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:53:14 +0530 Subject: [PATCH 09/11] efficient unwrap --- src/hints/mod.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hints/mod.rs b/src/hints/mod.rs index 975adde0..e9133d74 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -314,10 +314,7 @@ pub fn prepare_constructor_execution( }; insert_value_from_var_name("constructor_calldata_size", constructor_calldata_size, vm, ids_data, ap_tracking)?; - let constructor_calldata: Vec = match tx.constructor_calldata { - None => vec![], - Some(calldata) => calldata.iter().map(|felt| felt.into()).collect(), - }; + let constructor_calldata = tx.constructor_calldata.unwrap_or_default().iter().map(|felt| felt.into()).collect(); let constructor_calldata_base = vm.add_memory_segment(); vm.load_data(constructor_calldata_base, &constructor_calldata)?; insert_value_from_var_name("constructor_calldata", constructor_calldata_base, vm, ids_data, ap_tracking) From 60f4f05d29b2afbb5277e2965821b1a009502312 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:33:13 +0530 Subject: [PATCH 10/11] add back ignore --- tests/hints.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/hints.rs b/tests/hints.rs index b930b525..0f0ceeb4 100644 --- a/tests/hints.rs +++ b/tests/hints.rs @@ -117,6 +117,7 @@ fn get_block_mapping_test(mut os_input_hint_processor: BuiltinHintProcessor) { } #[rstest] +#[ignore] fn load_next_tx_test(mut os_input_hint_processor: BuiltinHintProcessor) { let program = "build/programs/load_next_tx.json"; From b07ca5bbdf4f9c5cc329676ccc02ca0907dfcd4c Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 25 Oct 2023 23:11:15 +0530 Subject: [PATCH 11/11] class_hash -> contract_hash --- src/hints/mod.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hints/mod.rs b/src/hints/mod.rs index e9133d74..68278f14 100644 --- a/src/hints/mod.rs +++ b/src/hints/mod.rs @@ -306,7 +306,15 @@ pub fn prepare_constructor_execution( ids_data, ap_tracking, )?; - insert_value_from_var_name("class_hash", tx.class_hash.unwrap_or(Felt252::from(0)), vm, ids_data, ap_tracking)?; + insert_value_from_var_name( + "class_hash", + // using `contract_hash` instead of `class_hash` as the that's how the + // input.json is structured + tx.contract_hash.expect("`contract_hash` must be present"), + vm, + ids_data, + ap_tracking, + )?; let constructor_calldata_size = match &tx.constructor_calldata { None => 0,