From c845cf736cde8e5d21c42d47edc0f9846fe7a529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 7 Jul 2023 16:42:41 -0300 Subject: [PATCH 01/20] Fix cairo 1 and cairo 2 contracts being ignored --- .gitignore | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index ab29945f4..7a19e92f1 100644 --- a/.gitignore +++ b/.gitignore @@ -37,11 +37,13 @@ target/ # END AUTOGENERATED -cairo1 -cairo2 +# the starting `/` assures this matches only on the repo's root +/cairo1 +/cairo2 + starknet-venv/ **/*.json -cairo_programs/cairo_1_contracts/*.sierra + starknet_programs/cairo1/*.casm starknet_programs/cairo1/*.sierra starknet_programs/cairo2/*.casm @@ -54,5 +56,5 @@ __pycache__/ # codecov report lcov.info .rusty-hook.toml -!starknet_programs/raw_contract_classes/*.json +!/starknet_programs/raw_contract_classes/*.json cairo-*.tar From eab97fb17c8108331c7fdb7e533c1d120e9081e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:38:00 -0300 Subject: [PATCH 02/20] Use starknet_with_keccak layout if keccak is used --- src/execution/execution_entry_point.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index e19ba0a0a..bc5226af0 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -415,8 +415,15 @@ impl ExecutionEntryPoint { let mut vm = VirtualMachine::new(false); // get a program from the casm contract class let program: Program = contract_class.as_ref().clone().try_into()?; + // use with_keccak layout if entrypoint uses keccak builtin + // TODO: add test for this + let layout = if entry_point.builtins.contains(&"keccak".to_string()) { + "starknet_with_keccak" + } else { + "starknet" + }; // create and initialize a cairo runner for running cairo 1 programs. - let mut cairo_runner = CairoRunner::new(&program, "starknet", false)?; + let mut cairo_runner = CairoRunner::new(&program, layout, false)?; cairo_runner.initialize_function_runner_cairo_1( &mut vm, From 9698c373f812019446f2bea0559acb6306b7f390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 20 Jul 2023 10:15:47 -0300 Subject: [PATCH 03/20] Add weight to default fee weights (w/ dummy value) --- src/definitions/constants.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/definitions/constants.rs b/src/definitions/constants.rs index d72e8ccd7..6f3773a58 100644 --- a/src/definitions/constants.rs +++ b/src/definitions/constants.rs @@ -56,6 +56,7 @@ lazy_static! { ("ec_op_builtin".to_string(), N_STEPS_FEE_WEIGHT * 1024.0), ("poseidon_builtin".to_string(), N_STEPS_FEE_WEIGHT * 32.0), ("segment_arena_builtin".to_string(), N_STEPS_FEE_WEIGHT * 10.0), + ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 0.0), // TODO: update ]); pub static ref DEFAULT_SEQUENCER_ADDRESS: Address = Address(felt_str!( "3711666a3506c99c9d78c4d4013409a87a962b7a0880a1c24af9fe193dafc01", From daeafbaa26342ee2ca2ef328f9697c5f59451d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 20 Jul 2023 10:23:18 -0300 Subject: [PATCH 04/20] Use value extracted from cairo-lang --- src/definitions/constants.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/definitions/constants.rs b/src/definitions/constants.rs index 6f3773a58..d78b3c63d 100644 --- a/src/definitions/constants.rs +++ b/src/definitions/constants.rs @@ -56,7 +56,7 @@ lazy_static! { ("ec_op_builtin".to_string(), N_STEPS_FEE_WEIGHT * 1024.0), ("poseidon_builtin".to_string(), N_STEPS_FEE_WEIGHT * 32.0), ("segment_arena_builtin".to_string(), N_STEPS_FEE_WEIGHT * 10.0), - ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 0.0), // TODO: update + ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 2048.0), // 2**11 ]); pub static ref DEFAULT_SEQUENCER_ADDRESS: Address = Address(felt_str!( "3711666a3506c99c9d78c4d4013409a87a962b7a0880a1c24af9fe193dafc01", From c2382a3b32a745e949ec17761c4f49c08b3c51f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 20 Jul 2023 11:08:12 -0300 Subject: [PATCH 05/20] Add debug prints to workflow --- .github/workflows/rust-tests.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml index 453155307..8d0be527b 100644 --- a/.github/workflows/rust-tests.yml +++ b/.github/workflows/rust-tests.yml @@ -72,12 +72,23 @@ jobs: - uses: actions/setup-python@v2 with: python-version: '3.9' + + - name: (Debug) print space usage + run: du -h | sort -hr | head -n 10 - name: Deps run: make deps + + - name: (Debug) print space usage + run: du -h | sort -hr | head -n 10 - name: Run tests run: make test + + - name: (Debug) print space usage + run: du -h | sort -hr | head -n 10 - name: Run doctests run: cargo test --workspace --doc + - name: (Debug) print space usage + run: du -h | sort -hr | head -n 10 # 28.06.2023: This job uses unmaintained actions-rs because dtolnay is giving linking errors with nightly coverage: From 78d1f37ded768a38d500d89884e89043fc7da9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 20 Jul 2023 11:09:40 -0300 Subject: [PATCH 06/20] Bump setup-python action version v2 -> v4 --- .github/workflows/rust-tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml index 8d0be527b..6443b5642 100644 --- a/.github/workflows/rust-tests.yml +++ b/.github/workflows/rust-tests.yml @@ -25,7 +25,7 @@ jobs: cache-on-failure: true - name: Checkout uses: actions/checkout@v3 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: '3.9' - name: Deps @@ -46,7 +46,7 @@ jobs: cache-on-failure: true - name: Checkout uses: actions/checkout@v3 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: '3.9' - name: Deps @@ -69,7 +69,7 @@ jobs: cache-on-failure: true - name: Checkout uses: actions/checkout@v3 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: '3.9' @@ -96,7 +96,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: '3.9' - name: Deps From 572abea5ef97775df889f053693c5a63b840a5da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 20 Jul 2023 11:28:19 -0300 Subject: [PATCH 07/20] Try cleaning after test running --- .github/workflows/rust-tests.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml index 6443b5642..6bb7b3a5b 100644 --- a/.github/workflows/rust-tests.yml +++ b/.github/workflows/rust-tests.yml @@ -81,7 +81,9 @@ jobs: - name: (Debug) print space usage run: du -h | sort -hr | head -n 10 - name: Run tests - run: make test + run: | + make test + cargo clean - name: (Debug) print space usage run: du -h | sort -hr | head -n 10 From e1d7812d937d626f8e2e9c63ba8915eb272ca015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 13:39:37 -0300 Subject: [PATCH 08/20] Add keccak builtin support for Cairo 0 contracts --- src/execution/execution_entry_point.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index c4e12fac8..1f7d6cc08 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -25,6 +25,7 @@ use crate::{ }, }; use cairo_lang_starknet::casm_contract_class::{CasmContractClass, CasmContractEntryPoint}; +use cairo_vm::serde::deserialize_program::BuiltinName; use cairo_vm::{ felt::Felt252, types::{ @@ -340,7 +341,18 @@ impl ExecutionEntryPoint { // create starknet runner let mut vm = VirtualMachine::new(false); - let mut cairo_runner = CairoRunner::new(&contract_class.program, "starknet", false)?; + + let layout = if contract_class + .program() + .iter_builtins() + .any(|b| b == &BuiltinName::keccak) + { + "starknet_with_keccak" + } else { + "starknet" + }; + + let mut cairo_runner = CairoRunner::new(&contract_class.program, layout, false)?; cairo_runner.initialize_function_runner(&mut vm)?; validate_contract_deployed(state, &self.contract_address)?; From 1febca2558650b7e52d5dabcd06a2b5cf944398f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 14:07:16 -0300 Subject: [PATCH 09/20] Extract layout selection logic --- src/execution/execution_entry_point.rs | 41 ++++++++++++++++---------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index 1f7d6cc08..1c993a632 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -342,15 +342,8 @@ impl ExecutionEntryPoint { // create starknet runner let mut vm = VirtualMachine::new(false); - let layout = if contract_class - .program() - .iter_builtins() - .any(|b| b == &BuiltinName::keccak) - { - "starknet_with_keccak" - } else { - "starknet" - }; + // get the correct VM layout + let layout = get_cairo0_layout(&contract_class); let mut cairo_runner = CairoRunner::new(&contract_class.program, layout, false)?; cairo_runner.initialize_function_runner(&mut vm)?; @@ -461,13 +454,10 @@ impl ExecutionEntryPoint { let mut vm = VirtualMachine::new(false); // get a program from the casm contract class let program: Program = contract_class.as_ref().clone().try_into()?; - // use with_keccak layout if entrypoint uses keccak builtin + + // get the correct VM layout // TODO: add test for this - let layout = if entry_point.builtins.contains(&"keccak".to_string()) { - "starknet_with_keccak" - } else { - "starknet" - }; + let layout = get_cairo1_layout(&entry_point); // create and initialize a cairo runner for running cairo 1 programs. let mut cairo_runner = CairoRunner::new(&program, layout, false)?; @@ -599,3 +589,24 @@ impl ExecutionEntryPoint { ) } } + +fn get_cairo0_layout(contract_class: &ContractClass) -> &str { + let uses_keccak = contract_class + .program() + .iter_builtins() + .any(|b| b == &BuiltinName::keccak); + get_layout(uses_keccak) +} + +fn get_cairo1_layout(entry_point: &CasmContractEntryPoint) -> &str { + let uses_keccak = entry_point.builtins.contains(&"keccak".to_string()); + get_layout(uses_keccak) +} + +fn get_layout(uses_keccak: bool) -> &'static str { + if uses_keccak { + "starknet_with_keccak" + } else { + "starknet" + } +} From 2445bc4a5269c4396790c2d70b88fc24da4d0903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 14:07:57 -0300 Subject: [PATCH 10/20] Use `BuiltinName::name` instead of literal --- src/execution/execution_entry_point.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index 1c993a632..1a31c0c53 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -599,7 +599,9 @@ fn get_cairo0_layout(contract_class: &ContractClass) -> &str { } fn get_cairo1_layout(entry_point: &CasmContractEntryPoint) -> &str { - let uses_keccak = entry_point.builtins.contains(&"keccak".to_string()); + let uses_keccak = entry_point + .builtins + .contains(&BuiltinName::keccak.name().to_string()); get_layout(uses_keccak) } From 5598bcd76180f6cc7c64b55849d3a8cd877a7ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:28:17 -0300 Subject: [PATCH 11/20] Add test for helper function --- src/execution/execution_entry_point.rs | 14 +++++++++++++ starknet_programs/keccak_builtin.cairo | 29 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 starknet_programs/keccak_builtin.cairo diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index 1a31c0c53..59c3dbe6b 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -612,3 +612,17 @@ fn get_layout(uses_keccak: bool) -> &'static str { "starknet" } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_get_cairo0_layout() { + let contract = ContractClass::from_path("starknet_programs/fibonacci.json").unwrap(); + assert_eq!(get_cairo0_layout(&contract), "starknet"); + + let contract = ContractClass::from_path("starknet_programs/keccak_builtin.json").unwrap(); + assert_eq!(get_cairo0_layout(&contract), "starknet"); // TODO: this should be `starknet_with_keccak`? + } +} diff --git a/starknet_programs/keccak_builtin.cairo b/starknet_programs/keccak_builtin.cairo new file mode 100644 index 000000000..2847aee49 --- /dev/null +++ b/starknet_programs/keccak_builtin.cairo @@ -0,0 +1,29 @@ +%lang starknet +%builtins keccak range_check +from starkware.cairo.common.cairo_builtins import KeccakBuiltin +from starkware.cairo.common.keccak_state import KeccakBuiltinState +from starkware.cairo.common.alloc import alloc + +func simple_keccak{keccak_ptr: KeccakBuiltin*}(value: felt) -> (res: felt) { + assert keccak_ptr[0].input = KeccakBuiltinState(value, 2, 3, 4, 5, 6, 7, 8); + let result = keccak_ptr[0].output; + let keccak_ptr = keccak_ptr + KeccakBuiltin.SIZE; + assert result.s0 = 528644516554364142278482415480021626364691973678134577961206; + assert result.s1 = 768681319646568210457759892191562701823009052229295869963057; + assert result.s2 = 1439835513376369408063324968379272676079109225238241190228026; + assert result.s3 = 1150396629165612276474514703759718478742374517669870754478270; + assert result.s4 = 1515147102575186161827863034255579930572231617017100845406254; + assert result.s5 = 1412568161597072838250338588041800080889949791225997426843744; + assert result.s6 = 982235455376248641031519404605670648838699214888770304613539; + assert result.s7 = 1339947803093378278438908448344904300127577306141693325151040; + + return (res=result.s0); +} + +@view +func get_balance{}(value: felt) -> (res: felt) { + alloc_locals; + let (local keccak_ptr: KeccakBuiltin*) = alloc(); + let (res) = simple_keccak{keccak_ptr=keccak_ptr}(value); + return (res=0); +} From 825cf78d96a26235766017f2f9fc5caf7bec8154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:31:23 -0300 Subject: [PATCH 12/20] Add test for Cairo 2 `cairo_keccak` syscall --- starknet_programs/cairo2/keccak_syscall.cairo | 25 ++++++ tests/cairo_1_syscalls.rs | 88 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 starknet_programs/cairo2/keccak_syscall.cairo diff --git a/starknet_programs/cairo2/keccak_syscall.cairo b/starknet_programs/cairo2/keccak_syscall.cairo new file mode 100644 index 000000000..8fd6ed23b --- /dev/null +++ b/starknet_programs/cairo2/keccak_syscall.cairo @@ -0,0 +1,25 @@ +#[starknet::interface] +trait IKeccak { + fn keccak(self: @TContractState) -> felt252; +} + +#[starknet::contract] +mod Keccak { + use array::{Array, ArrayTrait}; + use core::traits::Into; + + #[storage] + struct Storage { + } + + #[external(v0)] + impl Keccak of super::IKeccak { + fn keccak(self: @ContractState) -> felt252 { + let n: u64 = 124152; + let mut arr = ArrayTrait::new(); + arr.append(n); + let res: u256 = keccak::cairo_keccak(ref arr, 0, 0); + res.low.into() + } + } +} diff --git a/tests/cairo_1_syscalls.rs b/tests/cairo_1_syscalls.rs index cdf711386..510b30027 100644 --- a/tests/cairo_1_syscalls.rs +++ b/tests/cairo_1_syscalls.rs @@ -25,6 +25,25 @@ use starknet_in_rust::{ utils::{Address, ClassHash}, }; +fn create_execute_extrypoint( + address: Address, + class_hash: ClassHash, + selector: &BigUint, + calldata: Vec, + entry_point_type: EntryPointType, +) -> ExecutionEntryPoint { + ExecutionEntryPoint::new( + address.clone(), + calldata, + Felt252::new(selector.clone()), + Address(0000.into()), + entry_point_type, + Some(CallType::Delegate), + Some(class_hash), + 100000, + ) +} + #[test] fn storage_write_read() { // Create program and entry point types for contract class @@ -2963,3 +2982,72 @@ fn send_messages_to_l1_different_contract_calls_cairo0_to_cairo1() { ], ) } + +#[test] +#[cfg(not(feature = "cairo_1_tests"))] +fn keccak_syscall() { + let program_data = include_bytes!("../starknet_programs/cairo2/keccak_syscall.casm"); + let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); + let entrypoints = contract_class.clone().entry_points_by_type; + let read_storage_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + let address = Address(1111.into()); + let class_hash: ClassHash = [1; 32]; + let nonce = Felt252::zero(); + + contract_class_cache.insert(class_hash, contract_class); + let mut state_reader = InMemoryStateReader::default(); + state_reader + .address_to_class_hash_mut() + .insert(address.clone(), class_hash); + state_reader + .address_to_nonce_mut() + .insert(address.clone(), nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), None, Some(contract_class_cache)); + + let block_context = BlockContext::default(); + let mut tx_execution_context = TransactionExecutionContext::new( + Address(0.into()), + Felt252::zero(), + Vec::new(), + 0, + 10.into(), + block_context.invoke_tx_max_n_steps(), + TRANSACTION_VERSION.clone(), + ); + + let mut resources_manager = ExecutionResourcesManager::default(); + + // RUN READ_STORAGE + // Create an execution entry point + let calldata = [].to_vec(); + let read_storage_exec_entry_point = create_execute_extrypoint( + address, + class_hash, + read_storage_entrypoint_selector, + calldata, + EntryPointType::External, + ); + + // Run read_storage entrypoint + let call_info = read_storage_exec_entry_point + .execute( + &mut state, + &block_context, + &mut resources_manager, + &mut tx_execution_context, + false, + block_context.invoke_tx_max_n_steps(), + ) + .unwrap(); + + assert_eq!( + call_info.call_info.unwrap().retdata[0], + felt_str!("375233589013918064796019"), + ); +} From 7f6afbed57066cfa3058ae6765472541b31be253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:33:08 -0300 Subject: [PATCH 13/20] fix(tests): remove duplicated test runs --- tests/cairo_1_syscalls.rs | 120 ++++++----------------------------- tests/delegate_call.rs | 2 - tests/delegate_l1_handler.rs | 2 - tests/increase_balance.rs | 2 - 4 files changed, 21 insertions(+), 105 deletions(-) diff --git a/tests/cairo_1_syscalls.rs b/tests/cairo_1_syscalls.rs index 510b30027..6bb0089a6 100644 --- a/tests/cairo_1_syscalls.rs +++ b/tests/cairo_1_syscalls.rs @@ -33,7 +33,7 @@ fn create_execute_extrypoint( entry_point_type: EntryPointType, ) -> ExecutionEntryPoint { ExecutionEntryPoint::new( - address.clone(), + address, calldata, Felt252::new(selector.clone()), Address(0000.into()), @@ -90,26 +90,12 @@ fn storage_write_read() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN CONSTRUCTOR // Create an execution entry point let calldata = [25.into()].to_vec(); let constructor_exec_entry_point = create_execute_extrypoint( + address.clone(), + class_hash, constructor_entrypoint_selector, calldata, EntryPointType::Constructor, @@ -131,6 +117,8 @@ fn storage_write_read() { // Create an execution entry point let calldata = [].to_vec(); let get_balance_exec_entry_point = create_execute_extrypoint( + address.clone(), + class_hash, get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -153,6 +141,8 @@ fn storage_write_read() { // Create an execution entry point let calldata = [100.into()].to_vec(); let increase_balance_entry_point = create_execute_extrypoint( + address.clone(), + class_hash, increase_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -174,6 +164,8 @@ fn storage_write_read() { // Create an execution entry point let calldata = [].to_vec(); let get_balance_exec_entry_point = create_execute_extrypoint( + address, + class_hash, get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -1106,25 +1098,11 @@ fn test_send_message_to_l1_syscall() { // Create state from the state_reader and contract cache. let mut state = CachedState::new(Arc::new(state_reader), None, Some(contract_class_cache)); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN SEND_MSG // Create an execution entry point let send_message_exec_entry_point = create_execute_extrypoint( + address.clone(), + class_hash, external_entrypoint_selector, vec![], EntryPointType::External, @@ -1170,7 +1148,7 @@ fn test_send_message_to_l1_syscall() { let expected_call_info = CallInfo { caller_address: Address(0.into()), call_type: Some(CallType::Delegate), - contract_address: address.clone(), + contract_address: address, class_hash: Some(class_hash), entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), @@ -1226,25 +1204,11 @@ fn test_get_execution_info() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN GET_INFO // Create an execution entry point let get_info_exec_entry_point = create_execute_extrypoint( + address.clone(), + class_hash, external_entrypoint_selector, vec![], EntryPointType::External, @@ -1278,7 +1242,7 @@ fn test_get_execution_info() { let expected_call_info = CallInfo { caller_address: Address(0.into()), call_type: Some(CallType::Delegate), - contract_address: address.clone(), + contract_address: address, class_hash: Some(class_hash), entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), @@ -2299,26 +2263,12 @@ fn storage_read_no_value() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN GET_BALANCE // Create an execution entry point let calldata = [].to_vec(); let get_balance_exec_entry_point = create_execute_extrypoint( + address, + class_hash, get_balance_entrypoint_selector, calldata, EntryPointType::External, @@ -2384,26 +2334,12 @@ fn storage_read_unavailable_address_domain() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN READ_STORAGE // Create an execution entry point let calldata = [].to_vec(); let read_storage_exec_entry_point = create_execute_extrypoint( + address, + class_hash, read_storage_entrypoint_selector, calldata, EntryPointType::External, @@ -2472,26 +2408,12 @@ fn storage_write_unavailable_address_domain() { let mut resources_manager = ExecutionResourcesManager::default(); - let create_execute_extrypoint = |selector: &BigUint, - calldata: Vec, - entry_point_type: EntryPointType| - -> ExecutionEntryPoint { - ExecutionEntryPoint::new( - address.clone(), - calldata, - Felt252::new(selector.clone()), - Address(0000.into()), - entry_point_type, - Some(CallType::Delegate), - Some(class_hash), - 100000, - ) - }; - // RUN READ_STORAGE // Create an execution entry point let calldata = [].to_vec(); let read_storage_exec_entry_point = create_execute_extrypoint( + address, + class_hash, read_storage_entrypoint_selector, calldata, EntryPointType::External, diff --git a/tests/delegate_call.rs b/tests/delegate_call.rs index cd2c1da89..f3705c533 100644 --- a/tests/delegate_call.rs +++ b/tests/delegate_call.rs @@ -1,7 +1,5 @@ #![deny(warnings)] -mod cairo_1_syscalls; - use cairo_vm::felt::Felt252; use num_traits::{One, Zero}; use starknet_in_rust::EntryPointType; diff --git a/tests/delegate_l1_handler.rs b/tests/delegate_l1_handler.rs index ee5c2c3ca..a62b46181 100644 --- a/tests/delegate_l1_handler.rs +++ b/tests/delegate_l1_handler.rs @@ -1,7 +1,5 @@ #![deny(warnings)] -mod cairo_1_syscalls; - use cairo_vm::felt::{felt_str, Felt252}; use num_traits::{One, Zero}; use starknet_in_rust::EntryPointType; diff --git a/tests/increase_balance.rs b/tests/increase_balance.rs index 1f5f50742..7aec0336b 100644 --- a/tests/increase_balance.rs +++ b/tests/increase_balance.rs @@ -1,7 +1,5 @@ #![deny(warnings)] -mod cairo_1_syscalls; - use cairo_vm::felt::Felt252; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use num_traits::Zero; From f22f72559070348b13cac8c6f2b148afe7d6fb7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:03:29 -0300 Subject: [PATCH 14/20] Implement `keccak` syscall --- Cargo.lock | 312 ++++++++++-------- Cargo.toml | 11 +- cli/Cargo.toml | 2 +- .../deprecated_contract_class.rs | 1 + .../business_logic_syscall_handler.rs | 72 +++- src/syscalls/syscall_info.rs | 1 + src/syscalls/syscall_request.rs | 34 ++ src/syscalls/syscall_response.rs | 16 + starknet_programs/cairo2/keccak_syscall.cairo | 25 -- .../cairo2/test_cairo_keccak.cairo | 49 +++ starknet_programs/keccak_builtin.cairo | 29 -- tests/cairo_1_syscalls.rs | 11 +- 12 files changed, 351 insertions(+), 212 deletions(-) delete mode 100644 starknet_programs/cairo2/keccak_syscall.cairo create mode 100644 starknet_programs/cairo2/test_cairo_keccak.cairo delete mode 100644 starknet_programs/keccak_builtin.cairo diff --git a/Cargo.lock b/Cargo.lock index 727871fe4..91095574f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -262,6 +262,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "anstream" version = "0.3.2" @@ -332,10 +338,10 @@ dependencies = [ "ark-ff-asm", "ark-ff-macros", "ark-serialize", - "ark-std 0.4.0", + "ark-std", "derivative", "digest", - "itertools", + "itertools 0.10.5", "num-bigint", "num-traits 0.2.15", "paste", @@ -372,21 +378,11 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-std 0.4.0", + "ark-std", "digest", "num-bigint", ] -[[package]] -name = "ark-std" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" -dependencies = [ - "num-traits 0.2.15", - "rand", -] - [[package]] name = "ark-std" version = "0.4.0" @@ -493,8 +489,7 @@ checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bincode" version = "2.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" +source = "git+https://github.com/bincode-org/bincode.git?tag=v2.0.0-rc.3#aada4bb4cb457677a4b8e47572ae7ca8dd44927c" dependencies = [ "serde", ] @@ -603,9 +598,7 @@ dependencies = [ [[package]] name = "cairo-felt" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edaee21a254b549dd00ecb5db15399c8d03b663ddb5a659f7c62ea7e16a3ed85" +version = "0.8.2" dependencies = [ "lazy_static", "num-bigint", @@ -616,9 +609,9 @@ dependencies = [ [[package]] name = "cairo-felt" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33ab1b2fe5c7e5ddd89cdc77d7aa86122f0d79046b8e62746cdd5904c37c6b3" +checksum = "0f8de851723a7d13ed8b0b588a78ffa6b38d8e1f3eb4b6e71a96376510e5504a" dependencies = [ "lazy_static", "num-bigint", @@ -629,9 +622,9 @@ dependencies = [ [[package]] name = "cairo-lang-casm" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe86abd9f988018b39e1e41b467608ad9596ff466f141d41ffecc29a483c2f4" +checksum = "cab9793f38a7090c54b6508b0367064dad6609de4192fdd9a065758f2152a19f" dependencies = [ "cairo-lang-utils", "indoc", @@ -646,9 +639,9 @@ dependencies = [ [[package]] name = "cairo-lang-compiler" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "220a48cb861ea7dac60f50e7aea044d7c0936ea602f64479e9577d4c4bed5c9e" +checksum = "49f4a267b8f3006ec7fe20ddc2178020e8a81b3e685120a4f8735d0343ba405d" dependencies = [ "anyhow", "cairo-lang-defs", @@ -671,18 +664,18 @@ dependencies = [ [[package]] name = "cairo-lang-debug" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd06a99f5ac52f466a64fbdd0615baddb078b9e0cb97fdc7575faea916a66b5" +checksum = "8a19fed5e9b0d38eba6249e4835eee9351790b79f4fd15e092b1847b47a3fd00" dependencies = [ "cairo-lang-utils", ] [[package]] name = "cairo-lang-defs" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b8512ee5f8b3a2a18c7ffbaa23a815e56d9f8737ba0d3a0d5dcbf9b2fcbe96b" +checksum = "ebaaa8b1627fd879ed0dceea2333a2b5652541be5272d9546eb337fc80b7a696" dependencies = [ "cairo-lang-debug", "cairo-lang-diagnostics", @@ -690,41 +683,42 @@ dependencies = [ "cairo-lang-parser", "cairo-lang-syntax", "cairo-lang-utils", - "indexmap 1.9.3", - "itertools", + "indexmap 2.0.0", + "itertools 0.11.0", "salsa", "smol_str", ] [[package]] name = "cairo-lang-diagnostics" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a351f6441a55ce70b7ba62814670d0c154b2fdc4a7453387b71027a8440da2" +checksum = "2fa9e6394ac948fc3664f005ac2e7d3ff6f232d74b1874e76acba78f5bcda261" dependencies = [ + "cairo-lang-debug", "cairo-lang-filesystem", "cairo-lang-utils", - "itertools", + "itertools 0.11.0", "salsa", ] [[package]] name = "cairo-lang-eq-solver" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824ee8e225355e09ac57f537a9612049e4367b2bd3934d0591559bf87337cdbe" +checksum = "93bdea1c5b949e905c15d52e8060bd37e9f7f6384a1937c0b76d3e420098ed0a" dependencies = [ "cairo-lang-utils", "good_lp", - "indexmap 1.9.3", - "itertools", + "indexmap 2.0.0", + "itertools 0.11.0", ] [[package]] name = "cairo-lang-filesystem" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da7ceb69b84fb8b0d6e4d4648c4f2218feddcf0b9929094358b2bd3b2603ef0" +checksum = "e0d47d58533b468218e6599a6a34487481c29eef73422f2a730cf1e85943a195" dependencies = [ "cairo-lang-debug", "cairo-lang-utils", @@ -736,9 +730,9 @@ dependencies = [ [[package]] name = "cairo-lang-lowering" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a70fb2960cc39ceee250090109f9df05b26f781dab8c0ba48b6fd6f663858587" +checksum = "ff9d12f5f01509c5a5197c8e632246934686e4871ea7641afc75b64ee6af41c7" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -750,8 +744,8 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "indexmap 1.9.3", - "itertools", + "indexmap 2.0.0", + "itertools 0.11.0", "log", "num-bigint", "num-traits 0.2.15", @@ -761,9 +755,9 @@ dependencies = [ [[package]] name = "cairo-lang-parser" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c44c66f5aeb3d80189f4f2fd0bc6872b4c6f5cc25002402dc6e85561d2cc53" +checksum = "01ab8f4d4c85615662439a95c5bc92d2a66fb1901a865ffddaf3823ce8715730" dependencies = [ "cairo-lang-diagnostics", "cairo-lang-filesystem", @@ -771,7 +765,7 @@ dependencies = [ "cairo-lang-syntax-codegen", "cairo-lang-utils", "colored", - "itertools", + "itertools 0.11.0", "log", "num-bigint", "num-traits 0.2.15", @@ -782,9 +776,9 @@ dependencies = [ [[package]] name = "cairo-lang-plugins" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0acfa9aca2811c5df6d72a160c4168fd6cc53eb3c3f966c933e791b0f91ce01" +checksum = "5d608f88a82a581d1c3ed57b27fc396abcf70fdbe28d6904a046dfc139a6f504" dependencies = [ "cairo-lang-defs", "cairo-lang-diagnostics", @@ -794,27 +788,28 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "indoc", - "itertools", + "itertools 0.11.0", + "num-bigint", "salsa", "smol_str", ] [[package]] name = "cairo-lang-proc-macros" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e5ce4ad906f6491bc82eaae14eea6a96755d651a8809fc1adb53feb99bcc55a" +checksum = "ecfd29efb3d12c31d5ea0e6668ecf8a1be37e68ff729f4342530d14630156f1c" dependencies = [ "cairo-lang-debug", "quote", - "syn 1.0.109", + "syn 2.0.27", ] [[package]] name = "cairo-lang-project" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f7c638a2a30010071a176396c29bc065701f353f2c3205b96f03463b54721c" +checksum = "8889fc471fe82bd43e7a23dd067b93aa4097ac15a7b9158145da582c0f657338" dependencies = [ "cairo-lang-filesystem", "cairo-lang-utils", @@ -826,9 +821,9 @@ dependencies = [ [[package]] name = "cairo-lang-semantic" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3e68af88e60a1e30776877b0a3a346a21a3d15c54c9f8ace844e0652b1036f" +checksum = "0f125c9c693ec20d067b0362e0c4efb9ac3af398a52db45d8c2c1ff14a9db92e" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -839,7 +834,7 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "itertools", + "itertools 0.11.0", "log", "num-bigint", "num-traits 0.2.15", @@ -849,15 +844,15 @@ dependencies = [ [[package]] name = "cairo-lang-sierra" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4ccc934f2d4a063f7f72554d422e724134925c981cd0e592b4defb73ca103a" +checksum = "0bcc305af1cd4174bed72b6856cc0ca24fab608bced0c698ef9e54b0622cc9cd" dependencies = [ "cairo-lang-utils", "const-fnv1a-hash", "convert_case 0.6.0", "derivative", - "itertools", + "itertools 0.11.0", "lalrpop", "lalrpop-util", "num-bigint", @@ -872,35 +867,37 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-ap-change" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6e742ec576f773c9d6c4f1e4be6fbe9f1e5b470cd374f27f5c82e15c151b85" +checksum = "fe36cb757958cfb1381ee9f6bd17234d1fa933331aadf9d1b0f9c4c7f0babb4d" dependencies = [ "cairo-lang-eq-solver", "cairo-lang-sierra", + "cairo-lang-sierra-type-size", "cairo-lang-utils", - "itertools", + "itertools 0.11.0", "thiserror", ] [[package]] name = "cairo-lang-sierra-gas" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc4e1b3793f639724f59f34eb4007253a91d5179de8b2ab2c511c6c5d56155c" +checksum = "2f6ad8d10d5fcaf780b115d4fc337c912b9490fecd61e5c2b94655a26ac25246" dependencies = [ "cairo-lang-eq-solver", "cairo-lang-sierra", + "cairo-lang-sierra-type-size", "cairo-lang-utils", - "itertools", + "itertools 0.11.0", "thiserror", ] [[package]] name = "cairo-lang-sierra-generator" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c323c6f656398254f9404126c4a60e0a5234214255590288783eb323f6f187" +checksum = "4712ca7af12fa771a127a2e0a1e3757160a299b4f9c2db03a5e1e879986a324d" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -915,8 +912,8 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "indexmap 1.9.3", - "itertools", + "indexmap 2.0.0", + "itertools 0.11.0", "num-bigint", "salsa", "smol_str", @@ -924,33 +921,44 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-to-casm" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26fffdbf578f9aaf00d74001ac93cad4a713b510642161a0594f1403a59c543" +checksum = "32af568d896f497bc7154b6b38cf3a63634cd1a49625e788132b897b206aa117" dependencies = [ "assert_matches", - "cairo-felt 0.6.1", + "cairo-felt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "cairo-lang-casm", "cairo-lang-sierra", "cairo-lang-sierra-ap-change", "cairo-lang-sierra-gas", + "cairo-lang-sierra-type-size", "cairo-lang-utils", "indoc", - "itertools", + "itertools 0.11.0", "log", "num-bigint", "num-traits 0.2.15", "thiserror", ] +[[package]] +name = "cairo-lang-sierra-type-size" +version = "2.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12eeec139a81250cb07734913539725de1ae527304d036bd0247424ae053ca74" +dependencies = [ + "cairo-lang-sierra", + "cairo-lang-utils", +] + [[package]] name = "cairo-lang-starknet" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63e026127221a7bb5b5081b631eeef552a99cbdae76414dced7a224694afeaa" +checksum = "3fc16911988deeaa242f3b9111d27a07033c09c720af10970ea30c3091a7cfe7" dependencies = [ "anyhow", - "cairo-felt 0.6.1", + "cairo-felt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "cairo-lang-casm", "cairo-lang-compiler", "cairo-lang-defs", @@ -969,8 +977,9 @@ dependencies = [ "cairo-lang-utils", "convert_case 0.6.0", "genco", + "indent", "indoc", - "itertools", + "itertools 0.11.0", "log", "num-bigint", "num-integer", @@ -985,9 +994,9 @@ dependencies = [ [[package]] name = "cairo-lang-syntax" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b48a1c67679bc19165c2ce45b38e7bc7ce5a4fbb004a07f60361f99b618e73" +checksum = "c8b2dcb8a45ad35acb806b9dae478ecd9090b23d535099aa4b382509d00acf89" dependencies = [ "cairo-lang-debug", "cairo-lang-filesystem", @@ -1002,9 +1011,9 @@ dependencies = [ [[package]] name = "cairo-lang-syntax-codegen" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2102b91819a7638f1efb39379351578a296d042de53f7492684eeb47c3a844" +checksum = "7a68448f3ac131fac80e7160502b47a5f76b7b401c1f72aaced7dccdb4dd892f" dependencies = [ "genco", "xshell", @@ -1012,12 +1021,12 @@ dependencies = [ [[package]] name = "cairo-lang-utils" -version = "2.0.1" +version = "2.1.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25d0873d45a7f6020fa39ebda1386a20d328bf5e448056d5a507641d0bfde0cf" +checksum = "c5a2b7fdb915e2bee7ac65bb120c29562400ffdb8227eb8f0651960a9bb745ef" dependencies = [ - "indexmap 1.9.3", - "itertools", + "indexmap 2.0.0", + "itertools 0.11.0", "num-bigint", "num-integer", "num-traits 0.2.15", @@ -1028,20 +1037,18 @@ dependencies = [ [[package]] name = "cairo-vm" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5565de156db90dc8837664315701f903595b0ee62baab30b3597d29b3b1fd9b" +version = "0.8.2" dependencies = [ "anyhow", "ark-ff", - "ark-std 0.3.0", + "ark-std", "bincode", "bitvec", - "cairo-felt 0.8.1", + "cairo-felt 0.8.2", "cairo-lang-casm", "cairo-lang-starknet", "generic-array", - "hashbrown 0.13.2", + "hashbrown 0.14.0", "hex", "keccak", "lazy_static", @@ -1052,9 +1059,7 @@ dependencies = [ "num-prime", "num-traits 0.2.15", "rand", - "rand_core", "serde", - "serde_bytes", "serde_json", "sha2", "sha3", @@ -1109,7 +1114,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", ] [[package]] @@ -1551,20 +1556,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" dependencies = [ "ahash 0.8.3", + "allocator-api2", "serde", ] -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - [[package]] name = "heck" version = "0.3.3" @@ -1690,6 +1690,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "indent" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6" + [[package]] name = "indexmap" version = "1.9.3" @@ -1709,6 +1715,7 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", "hashbrown 0.14.0", + "serde", ] [[package]] @@ -1757,6 +1764,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.8" @@ -1792,20 +1808,21 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.19.12" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", "bit-set", "diff", "ena", "is-terminal", - "itertools", + "itertools 0.10.5", "lalrpop-util", "petgraph", + "pico-args", "regex", - "regex-syntax 0.6.29", + "regex-syntax", "string_cache", "term", "tiny-keccak", @@ -1814,9 +1831,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.19.12" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" dependencies = [ "regex", ] @@ -2203,9 +2220,9 @@ checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" [[package]] name = "path-clean" -version = "0.1.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" +checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" [[package]] name = "percent-encoding" @@ -2232,6 +2249,12 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project-lite" version = "0.2.10" @@ -2405,15 +2428,9 @@ checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.7.2" @@ -2577,15 +2594,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c5113243e4a3a1c96587342d067f3e6b0f50790b6cf40d2868eb647a3eef0e" -dependencies = [ - "serde", -] - [[package]] name = "serde_derive" version = "1.0.166" @@ -2594,7 +2602,7 @@ checksum = "5dd83d6dde2b6b2d466e14d9d1acce8816dedee94f735eac6395808b3483c6d6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", ] [[package]] @@ -2619,6 +2627,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2757,7 +2774,7 @@ checksum = "af6527b845423542c8a16e060ea1bc43f67229848e7cd4c4d80be994a84220ce" dependencies = [ "starknet-curve 0.4.0", "starknet-ff", - "syn 2.0.23", + "syn 2.0.27", ] [[package]] @@ -2808,9 +2825,9 @@ dependencies = [ [[package]] name = "starknet_api" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f0bba8e26911c7ca40f38589c32d2d41bc6f82769cd3fde03c69ddcfe002c33" +checksum = "edfe4732113f66de3d6e9fc77f713b934cfd4b24d43887ca8cbfbe9462ed9119" dependencies = [ "cairo-lang-starknet", "derive_more", @@ -2836,6 +2853,7 @@ dependencies = [ "coverage-helper", "getset", "hex", + "keccak", "lazy_static", "mimalloc", "num-bigint", @@ -2894,9 +2912,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.23" +version = "2.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", @@ -2951,7 +2969,7 @@ checksum = "d14928354b01c4d6a4f0e549069adef399a284e7995c7ccca94e8a07a5346c59" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", ] [[package]] @@ -3059,11 +3077,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.4.10" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] @@ -3071,14 +3092,19 @@ name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.11" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap 2.0.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -3214,7 +3240,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", "wasm-bindgen-shared", ] @@ -3236,7 +3262,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3337,9 +3363,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.7" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448" +checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" dependencies = [ "memchr", ] @@ -3385,7 +3411,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.27", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 7d4224a83..7027bc1e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,13 +14,15 @@ cairo_1_tests = [] members = ["cli", "fuzzer"] [workspace.dependencies] -cairo-vm = { version = "0.8.1", features = ["cairo-1-hints"] } -starknet_api = "0.1.0" +cairo-vm = { path = "/Users/tomas/cairo/cairo-vm/vm", features = [ + "cairo-1-hints", +] } +starknet_api = "0.3.0" num-traits = "0.2.15" [dependencies] -cairo-lang-starknet = "2.0.0" -cairo-lang-casm = "2.0.0" +cairo-lang-starknet = "2.1.0-rc2" +cairo-lang-casm = "2.1.0-rc2" cairo-vm = { workspace = true, features = ["cairo-1-hints"] } getset = "0.1.2" lazy_static = "1.4.0" @@ -33,6 +35,7 @@ serde_json = { version = "1.0", features = [ "raw_value", ] } sha3 = "0.10.1" +keccak = "0.1.3" # TODO: use sha3 instead of this starknet_api = { workspace = true } starknet-crypto = "0.5.1" thiserror = "1.0.32" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index ab4e52e88..a245a9299 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -11,7 +11,7 @@ with_mimalloc = ["mimalloc"] starknet_in_rust = { path = "../", version = "0.3.0" } num-traits = "0.2.15" serde = { version = "1.0.152", features = ["derive"] } -cairo-vm = { workspace=true, features = ["cairo-1-hints"]} +cairo-vm = { workspace = true, features = ["cairo-1-hints"] } clap = { version = "4.1.8", features = ["derive"] } actix-web = "4.3.1" awc = "3.1.1" diff --git a/src/services/api/contract_classes/deprecated_contract_class.rs b/src/services/api/contract_classes/deprecated_contract_class.rs index 9f475c42e..2635d3723 100644 --- a/src/services/api/contract_classes/deprecated_contract_class.rs +++ b/src/services/api/contract_classes/deprecated_contract_class.rs @@ -310,6 +310,7 @@ mod tests { FunctionAbiEntryWithType { r#type: FunctionAbiEntryType::Function, entry: FunctionAbiEntry { + state_mutability: None, name: "fib".to_string(), inputs: vec![ TypedParameter { diff --git a/src/syscalls/business_logic_syscall_handler.rs b/src/syscalls/business_logic_syscall_handler.rs index ed2ee2e66..f26d83af3 100644 --- a/src/syscalls/business_logic_syscall_handler.rs +++ b/src/syscalls/business_logic_syscall_handler.rs @@ -5,11 +5,12 @@ use std::ops::Add; use super::syscall_handler_errors::SyscallHandlerError; use super::syscall_request::{ - EmitEventRequest, FromPtr, GetBlockHashRequest, GetBlockTimestampRequest, StorageReadRequest, - StorageWriteRequest, + EmitEventRequest, FromPtr, GetBlockHashRequest, GetBlockTimestampRequest, KeccakRequest, + StorageReadRequest, StorageWriteRequest, }; use super::syscall_response::{ - DeployResponse, GetBlockHashResponse, GetBlockTimestampResponse, SyscallResponse, + DeployResponse, GetBlockHashResponse, GetBlockTimestampResponse, KeccakResponse, + SyscallResponse, }; use super::{ syscall_info::get_syscall_size_from_name, @@ -58,6 +59,7 @@ use num_traits::{One, ToPrimitive, Zero}; const STEP: u128 = 100; const SYSCALL_BASE: u128 = 100 * STEP; +const KECCAK_ROUND_COST: u128 = 180000; lazy_static! { /// Felt->syscall map that was extracted from new_syscalls.json (Cairo 1.0 syscalls) static ref SELECTOR_TO_SYSCALL: HashMap = { @@ -79,8 +81,8 @@ lazy_static! { map.insert(1280709301550335749748_u128.into(), "emit_event"); map.insert(25828017502874050592466629733_u128.into(), "storage_write"); map.insert(Felt252::from_bytes_be(&calculate_sn_keccak("get_block_timestamp".as_bytes())), "get_block_timestamp"); - map.insert(Felt252::from_bytes_be(&calculate_sn_keccak("get_block_number".as_bytes())), "get_block_number"); + map.insert(Felt252::from_bytes_be("Keccak".as_bytes()), "keccak"); map }; @@ -109,6 +111,7 @@ lazy_static! { map.insert("emit_event", SYSCALL_BASE + 10 * STEP); map.insert("send_message_to_l1", SYSCALL_BASE + 50 * STEP); map.insert("get_block_timestamp", 0); + map.insert("keccak", SYSCALL_BASE); // TODO: revisit this map }; @@ -455,6 +458,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { } SyscallRequest::GetBlockHash(req) => self.get_block_hash(vm, req, remaining_gas), SyscallRequest::ReplaceClass(req) => self.replace_class(vm, req, remaining_gas), + SyscallRequest::Keccak(req) => self.keccak(vm, req, remaining_gas), } } @@ -839,6 +843,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { "get_execution_info" => Ok(SyscallRequest::GetExecutionInfo), "send_message_to_l1" => SendMessageToL1Request::from_ptr(vm, syscall_ptr), "replace_class" => ReplaceClassRequest::from_ptr(vm, syscall_ptr), + "keccak" => KeccakRequest::from_ptr(vm, syscall_ptr), _ => Err(SyscallHandlerError::UnknownSyscall( syscall_name.to_string(), )), @@ -944,4 +949,63 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { body: None, }) } + + fn keccak( + &mut self, + vm: &mut VirtualMachine, + request: KeccakRequest, + remaining_gas: u128, + ) -> Result { + let length = (request.input_end - request.input_start)?; + let mut gas = remaining_gas; + + if length % 17 != 0 { + let response = self.failure_from_error_msg(vm, b"Invalid keccak input size")?; + return Ok(SyscallResponse { + gas, + body: Some(response), + }); + } + let n_chunks = length / 17; + let mut state = [0u64; 25]; + for i in 0..n_chunks { + if gas < KECCAK_ROUND_COST { + let response = self.failure_from_error_msg(vm, b"Syscall out of gas")?; + return Ok(SyscallResponse { + gas, + body: Some(response), + }); + } + gas -= KECCAK_ROUND_COST; + let chunk_start = (request.input_start + i * 17)?; + let chunk = get_felt_range(vm, chunk_start, (chunk_start + 17)?)?; + for (i, val) in chunk.iter().enumerate() { + state[i] ^= val.to_u64().unwrap(); + } + keccak::f1600(&mut state) + } + let hash_low = (Felt252::from(state[1]) << 64u32) + Felt252::from(state[0]); + let hash_high = (Felt252::from(state[3]) << 64u32) + Felt252::from(state[2]); + Ok(SyscallResponse { + gas, + body: Some(ResponseBody::Keccak(KeccakResponse { + hash_low, + hash_high, + })), + }) + } + + fn failure_from_error_msg( + &mut self, + vm: &mut VirtualMachine, + error_msg: &[u8], + ) -> Result { + let felt_encoded_msg = Felt252::from_bytes_be(error_msg); + let retdata_start = + self.allocate_segment(vm, vec![MaybeRelocatable::from(felt_encoded_msg)])?; + Ok(ResponseBody::Failure(FailureReason { + retdata_start, + retdata_end: (retdata_start + 1)?, + })) + } } diff --git a/src/syscalls/syscall_info.rs b/src/syscalls/syscall_info.rs index f4ba31739..f607c4ee0 100644 --- a/src/syscalls/syscall_info.rs +++ b/src/syscalls/syscall_info.rs @@ -9,6 +9,7 @@ pub fn get_syscall_size_from_name(syscall_name: &str) -> usize { "get_execution_info" => 0, "call_contract" => 4, "replace_class" => 1, + "keccak" => 2, _ => unimplemented!(), } } diff --git a/src/syscalls/syscall_request.rs b/src/syscalls/syscall_request.rs index 4219528b2..d0d3cbbd2 100644 --- a/src/syscalls/syscall_request.rs +++ b/src/syscalls/syscall_request.rs @@ -46,6 +46,8 @@ pub(crate) enum SyscallRequest { GetBlockHash(GetBlockHashRequest), /// Replaces the class of the calling contract. ReplaceClass(ReplaceClassRequest), + /// Computes the Keccak256 hash of the given data. + Keccak(KeccakRequest), } // ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -180,6 +182,16 @@ pub(crate) struct ReplaceClassRequest { pub(crate) class_hash: Felt252, } +/// Computes the Keccak256 hash of the given data. +#[allow(unused)] +#[derive(Clone, Debug, PartialEq)] +pub(crate) struct KeccakRequest { + /// The input data start. + pub(crate) input_start: Relocatable, + /// The input data end. + pub(crate) input_end: Relocatable, +} + // ~~~~~~~~~~~~~~~~~~~~~~~~~ // Into implementations // ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -238,6 +250,12 @@ impl From for SyscallRequest { } } +impl From for SyscallRequest { + fn from(request: KeccakRequest) -> SyscallRequest { + SyscallRequest::Keccak(request) + } +} + // ~~~~~~~~~~~~~~~~~~~~~~~~~ // FromPtr trait // ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -410,3 +428,19 @@ impl FromPtr for StorageWriteRequest { .into()) } } + +impl FromPtr for KeccakRequest { + fn from_ptr( + vm: &VirtualMachine, + syscall_ptr: Relocatable, + ) -> Result { + let input_start = get_relocatable(vm, syscall_ptr)?; + let input_end = get_relocatable(vm, &syscall_ptr + 1)?; + + Ok(KeccakRequest { + input_start, + input_end, + } + .into()) + } +} diff --git a/src/syscalls/syscall_response.rs b/src/syscalls/syscall_response.rs index f780c57ce..d8e39ae2c 100644 --- a/src/syscalls/syscall_response.rs +++ b/src/syscalls/syscall_response.rs @@ -11,6 +11,7 @@ pub(crate) enum ResponseBody { GetBlockTimestamp(GetBlockTimestampResponse), GetExecutionInfo { exec_info_ptr: Relocatable }, GetBlockHash(GetBlockHashResponse), + Keccak(KeccakResponse), } /// Wraps around any response body. It also contains the remaining gas after the execution. #[allow(unused)] @@ -57,6 +58,13 @@ impl SyscallResponse { Some(ResponseBody::GetBlockHash(get_block_hash_response)) => { cairo_args.push(get_block_hash_response.block_hash.clone().into()) } + Some(ResponseBody::Keccak(KeccakResponse { + hash_low, + hash_high, + })) => { + cairo_args.push(hash_low.into()); + cairo_args.push(hash_high.into()); + } None => {} } cairo_args @@ -110,3 +118,11 @@ pub struct GetBlockHashResponse { /// The returned hash. pub block_hash: Felt252, } + +/// Represents the response of the `keccak` syscall +#[derive(Clone, Debug, PartialEq)] +pub struct KeccakResponse { + /// The returned hash. + pub hash_low: Felt252, + pub hash_high: Felt252, +} diff --git a/starknet_programs/cairo2/keccak_syscall.cairo b/starknet_programs/cairo2/keccak_syscall.cairo deleted file mode 100644 index 8fd6ed23b..000000000 --- a/starknet_programs/cairo2/keccak_syscall.cairo +++ /dev/null @@ -1,25 +0,0 @@ -#[starknet::interface] -trait IKeccak { - fn keccak(self: @TContractState) -> felt252; -} - -#[starknet::contract] -mod Keccak { - use array::{Array, ArrayTrait}; - use core::traits::Into; - - #[storage] - struct Storage { - } - - #[external(v0)] - impl Keccak of super::IKeccak { - fn keccak(self: @ContractState) -> felt252 { - let n: u64 = 124152; - let mut arr = ArrayTrait::new(); - arr.append(n); - let res: u256 = keccak::cairo_keccak(ref arr, 0, 0); - res.low.into() - } - } -} diff --git a/starknet_programs/cairo2/test_cairo_keccak.cairo b/starknet_programs/cairo2/test_cairo_keccak.cairo new file mode 100644 index 000000000..b46ae9f59 --- /dev/null +++ b/starknet_programs/cairo2/test_cairo_keccak.cairo @@ -0,0 +1,49 @@ +#[starknet::interface] +trait IKeccak { + fn cairo_keccak_test(self: @TContractState) -> felt252; +} + +#[starknet::contract] +mod Keccak { + use core::clone::Clone; + use array::{Array, ArrayTrait}; + use core::traits::Into; + + #[storage] + struct Storage {} + + #[external(v0)] + impl Keccak of super::IKeccak { + fn cairo_keccak_test(self: @ContractState) -> felt252 { + let mut input = array![ + 0x0000000000000001, + 0x0000000000000002, + 0x0000000000000003, + 0x0000000000000004, + 0x0000000000000005, + 0x0000000000000006, + 0x0000000000000007, + 0x0000000000000008, + 0x0000000000000009, + 0x000000000000000a, + 0x000000000000000b, + 0x000000000000000c, + 0x000000000000000d + ]; + + // We must clone the array to be used in the second part, as it's modified by `cairo_keccak`. + let mut orig_array = input.clone(); + + let res = keccak::cairo_keccak(ref input, 0x11000010, 4); + assert(@res.low == @0x43ccdbe17ae03b02b308ebe4a23c4cc9, 'Wrong hash low 1'); + assert(@res.high == @0xf3cc56e9bd860f83e3e3bc69919b176a, 'Wrong hash high 1'); + + // With "garbage" at the end (note the `aa`s), we should get the same result. + let res = keccak::cairo_keccak(ref orig_array, 0xaaaaaaaa11000010, 4); + assert(@res.low == @0x43ccdbe17ae03b02b308ebe4a23c4cc9, 'Wrong hash low 2'); + assert(@res.high == @0xf3cc56e9bd860f83e3e3bc69919b176a, 'Wrong hash high 2'); + + 1 + } + } +} diff --git a/starknet_programs/keccak_builtin.cairo b/starknet_programs/keccak_builtin.cairo deleted file mode 100644 index 2847aee49..000000000 --- a/starknet_programs/keccak_builtin.cairo +++ /dev/null @@ -1,29 +0,0 @@ -%lang starknet -%builtins keccak range_check -from starkware.cairo.common.cairo_builtins import KeccakBuiltin -from starkware.cairo.common.keccak_state import KeccakBuiltinState -from starkware.cairo.common.alloc import alloc - -func simple_keccak{keccak_ptr: KeccakBuiltin*}(value: felt) -> (res: felt) { - assert keccak_ptr[0].input = KeccakBuiltinState(value, 2, 3, 4, 5, 6, 7, 8); - let result = keccak_ptr[0].output; - let keccak_ptr = keccak_ptr + KeccakBuiltin.SIZE; - assert result.s0 = 528644516554364142278482415480021626364691973678134577961206; - assert result.s1 = 768681319646568210457759892191562701823009052229295869963057; - assert result.s2 = 1439835513376369408063324968379272676079109225238241190228026; - assert result.s3 = 1150396629165612276474514703759718478742374517669870754478270; - assert result.s4 = 1515147102575186161827863034255579930572231617017100845406254; - assert result.s5 = 1412568161597072838250338588041800080889949791225997426843744; - assert result.s6 = 982235455376248641031519404605670648838699214888770304613539; - assert result.s7 = 1339947803093378278438908448344904300127577306141693325151040; - - return (res=result.s0); -} - -@view -func get_balance{}(value: felt) -> (res: felt) { - alloc_locals; - let (local keccak_ptr: KeccakBuiltin*) = alloc(); - let (res) = simple_keccak{keccak_ptr=keccak_ptr}(value); - return (res=0); -} diff --git a/tests/cairo_1_syscalls.rs b/tests/cairo_1_syscalls.rs index 6bb0089a6..0e6ea291c 100644 --- a/tests/cairo_1_syscalls.rs +++ b/tests/cairo_1_syscalls.rs @@ -40,7 +40,7 @@ fn create_execute_extrypoint( entry_point_type, Some(CallType::Delegate), Some(class_hash), - 100000, + 100000000, ) } @@ -2908,7 +2908,7 @@ fn send_messages_to_l1_different_contract_calls_cairo0_to_cairo1() { #[test] #[cfg(not(feature = "cairo_1_tests"))] fn keccak_syscall() { - let program_data = include_bytes!("../starknet_programs/cairo2/keccak_syscall.casm"); + let program_data = include_bytes!("../starknet_programs/cairo2/test_cairo_keccak.casm"); let contract_class: CasmContractClass = serde_json::from_slice(program_data).unwrap(); let entrypoints = contract_class.clone().entry_points_by_type; let read_storage_entrypoint_selector = &entrypoints.external.get(0).unwrap().selector; @@ -2968,8 +2968,7 @@ fn keccak_syscall() { ) .unwrap(); - assert_eq!( - call_info.call_info.unwrap().retdata[0], - felt_str!("375233589013918064796019"), - ); + let retdata = call_info.call_info.unwrap().retdata; + + assert_eq!(retdata[0], Felt252::one()); } From f20be72e66cd7d07dbd5e78242744c6178955f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:07:55 -0300 Subject: [PATCH 15/20] Restore cairo-lang and cairo-vm versions --- Cargo.lock | 231 +++++++++++++++++++++-------------------------------- Cargo.toml | 10 +-- 2 files changed, 97 insertions(+), 144 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91095574f..01f0fc0d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -341,7 +341,7 @@ dependencies = [ "ark-std", "derivative", "digest", - "itertools 0.10.5", + "itertools", "num-bigint", "num-traits 0.2.15", "paste", @@ -489,7 +489,8 @@ checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bincode" version = "2.0.0-rc.3" -source = "git+https://github.com/bincode-org/bincode.git?tag=v2.0.0-rc.3#aada4bb4cb457677a4b8e47572ae7ca8dd44927c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" dependencies = [ "serde", ] @@ -598,7 +599,9 @@ dependencies = [ [[package]] name = "cairo-felt" -version = "0.8.2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec837cac4e5e5a7f7abd6fb26c1d91cf0a588cf394367a7111a9549cabaa0b9" dependencies = [ "lazy_static", "num-bigint", @@ -622,9 +625,9 @@ dependencies = [ [[package]] name = "cairo-lang-casm" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab9793f38a7090c54b6508b0367064dad6609de4192fdd9a065758f2152a19f" +checksum = "65519f6686244c4ba6be09c6ef3d8146d1d4d5c87cbb6693671117c0ae2a5b01" dependencies = [ "cairo-lang-utils", "indoc", @@ -639,9 +642,9 @@ dependencies = [ [[package]] name = "cairo-lang-compiler" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f4a267b8f3006ec7fe20ddc2178020e8a81b3e685120a4f8735d0343ba405d" +checksum = "ee5a8463717f788a132f1573fb1ad6368edd1f41bfdef6f4d143368b3816a1f9" dependencies = [ "anyhow", "cairo-lang-defs", @@ -664,18 +667,18 @@ dependencies = [ [[package]] name = "cairo-lang-debug" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a19fed5e9b0d38eba6249e4835eee9351790b79f4fd15e092b1847b47a3fd00" +checksum = "1ec1fd38b6ae840897d86788a6c81332b903e37f438470c2c2558f79a6ceb9d9" dependencies = [ "cairo-lang-utils", ] [[package]] name = "cairo-lang-defs" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebaaa8b1627fd879ed0dceea2333a2b5652541be5272d9546eb337fc80b7a696" +checksum = "f6e91660f00c69d9d322032a82f8d426463d5eeb84cf614fb6ae3cb9eeb87a50" dependencies = [ "cairo-lang-debug", "cairo-lang-diagnostics", @@ -683,42 +686,41 @@ dependencies = [ "cairo-lang-parser", "cairo-lang-syntax", "cairo-lang-utils", - "indexmap 2.0.0", - "itertools 0.11.0", + "indexmap 1.9.3", + "itertools", "salsa", "smol_str", ] [[package]] name = "cairo-lang-diagnostics" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa9e6394ac948fc3664f005ac2e7d3ff6f232d74b1874e76acba78f5bcda261" +checksum = "aa2c525de1fe9c3e877a75826414246f5d9502712a11cb7bd02a27f916573b2b" dependencies = [ - "cairo-lang-debug", "cairo-lang-filesystem", "cairo-lang-utils", - "itertools 0.11.0", + "itertools", "salsa", ] [[package]] name = "cairo-lang-eq-solver" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93bdea1c5b949e905c15d52e8060bd37e9f7f6384a1937c0b76d3e420098ed0a" +checksum = "8794b6c3c8b76bd04a59a73c490260fb6877ed1780b53d632a5fa6576335d33c" dependencies = [ "cairo-lang-utils", "good_lp", - "indexmap 2.0.0", - "itertools 0.11.0", + "indexmap 1.9.3", + "itertools", ] [[package]] name = "cairo-lang-filesystem" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d47d58533b468218e6599a6a34487481c29eef73422f2a730cf1e85943a195" +checksum = "5a690a34a6b8ead64ee489e1ee0c0922bc11636259b2dffd64eb17921c1e8ee5" dependencies = [ "cairo-lang-debug", "cairo-lang-utils", @@ -730,9 +732,9 @@ dependencies = [ [[package]] name = "cairo-lang-lowering" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9d12f5f01509c5a5197c8e632246934686e4871ea7641afc75b64ee6af41c7" +checksum = "35834c45f88863183fe575b4de20935389cdfba2178b4c6b677bd4a022f841d6" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -744,8 +746,8 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "indexmap 2.0.0", - "itertools 0.11.0", + "indexmap 1.9.3", + "itertools", "log", "num-bigint", "num-traits 0.2.15", @@ -755,9 +757,9 @@ dependencies = [ [[package]] name = "cairo-lang-parser" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ab8f4d4c85615662439a95c5bc92d2a66fb1901a865ffddaf3823ce8715730" +checksum = "334b94f038c8c583002523b4b17adcedcac355f50f6a5b13373c2da58dcabc4c" dependencies = [ "cairo-lang-diagnostics", "cairo-lang-filesystem", @@ -765,7 +767,7 @@ dependencies = [ "cairo-lang-syntax-codegen", "cairo-lang-utils", "colored", - "itertools 0.11.0", + "itertools", "log", "num-bigint", "num-traits 0.2.15", @@ -776,9 +778,9 @@ dependencies = [ [[package]] name = "cairo-lang-plugins" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d608f88a82a581d1c3ed57b27fc396abcf70fdbe28d6904a046dfc139a6f504" +checksum = "71fa6b03b252d501c11e9ecfa5cee009191fce232aafd2b19da521de770a41bf" dependencies = [ "cairo-lang-defs", "cairo-lang-diagnostics", @@ -788,28 +790,27 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "indoc", - "itertools 0.11.0", - "num-bigint", + "itertools", "salsa", "smol_str", ] [[package]] name = "cairo-lang-proc-macros" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecfd29efb3d12c31d5ea0e6668ecf8a1be37e68ff729f4342530d14630156f1c" +checksum = "f927a0a2a84d4fc0400fb6fcb8b7948863a497b194cef0952cef03107af3b087" dependencies = [ "cairo-lang-debug", "quote", - "syn 2.0.27", + "syn 1.0.109", ] [[package]] name = "cairo-lang-project" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8889fc471fe82bd43e7a23dd067b93aa4097ac15a7b9158145da582c0f657338" +checksum = "0cfe69dc1e2f225964fc2b10637a8238bfa3b256fbe4b30cfcec31ad0270728e" dependencies = [ "cairo-lang-filesystem", "cairo-lang-utils", @@ -821,9 +822,9 @@ dependencies = [ [[package]] name = "cairo-lang-semantic" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f125c9c693ec20d067b0362e0c4efb9ac3af398a52db45d8c2c1ff14a9db92e" +checksum = "852484f7908ba89d1423b95dd465f1e66560793f2c6505a4a52fabffa2d82fa4" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -834,7 +835,7 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "itertools 0.11.0", + "itertools", "log", "num-bigint", "num-traits 0.2.15", @@ -844,15 +845,15 @@ dependencies = [ [[package]] name = "cairo-lang-sierra" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bcc305af1cd4174bed72b6856cc0ca24fab608bced0c698ef9e54b0622cc9cd" +checksum = "0d80a2fbb25c54d71135e5603e8c3f2882e06b072ea1ebd6a3163e18a03e958f" dependencies = [ "cairo-lang-utils", "const-fnv1a-hash", "convert_case 0.6.0", "derivative", - "itertools 0.11.0", + "itertools", "lalrpop", "lalrpop-util", "num-bigint", @@ -867,37 +868,35 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-ap-change" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe36cb757958cfb1381ee9f6bd17234d1fa933331aadf9d1b0f9c4c7f0babb4d" +checksum = "fa2b7a53b741b8f4a72aef86ed54a15974d6e5389fa91740225f33ef7bbaafcc" dependencies = [ "cairo-lang-eq-solver", "cairo-lang-sierra", - "cairo-lang-sierra-type-size", "cairo-lang-utils", - "itertools 0.11.0", + "itertools", "thiserror", ] [[package]] name = "cairo-lang-sierra-gas" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f6ad8d10d5fcaf780b115d4fc337c912b9490fecd61e5c2b94655a26ac25246" +checksum = "b101112c0e2a2101b3d1f66a300f06be1c183245e4a7de9739a9c8c564c60936" dependencies = [ "cairo-lang-eq-solver", "cairo-lang-sierra", - "cairo-lang-sierra-type-size", "cairo-lang-utils", - "itertools 0.11.0", + "itertools", "thiserror", ] [[package]] name = "cairo-lang-sierra-generator" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ca7af12fa771a127a2e0a1e3757160a299b4f9c2db03a5e1e879986a324d" +checksum = "0e34636a12e1fd393e9600aec5eac0c1b2ba3ddf4c5e47559bed3d14b81ac289" dependencies = [ "cairo-lang-debug", "cairo-lang-defs", @@ -912,8 +911,8 @@ dependencies = [ "cairo-lang-syntax", "cairo-lang-utils", "id-arena", - "indexmap 2.0.0", - "itertools 0.11.0", + "indexmap 1.9.3", + "itertools", "num-bigint", "salsa", "smol_str", @@ -921,44 +920,33 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-to-casm" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32af568d896f497bc7154b6b38cf3a63634cd1a49625e788132b897b206aa117" +checksum = "7127b5b2f6c08e745f4332aac4bfefd007e2b94d7fc4581447ff1df48f63cf00" dependencies = [ "assert_matches", - "cairo-felt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-felt 0.6.2", "cairo-lang-casm", "cairo-lang-sierra", "cairo-lang-sierra-ap-change", "cairo-lang-sierra-gas", - "cairo-lang-sierra-type-size", "cairo-lang-utils", "indoc", - "itertools 0.11.0", + "itertools", "log", "num-bigint", "num-traits 0.2.15", "thiserror", ] -[[package]] -name = "cairo-lang-sierra-type-size" -version = "2.1.0-rc2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12eeec139a81250cb07734913539725de1ae527304d036bd0247424ae053ca74" -dependencies = [ - "cairo-lang-sierra", - "cairo-lang-utils", -] - [[package]] name = "cairo-lang-starknet" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc16911988deeaa242f3b9111d27a07033c09c720af10970ea30c3091a7cfe7" +checksum = "a2603ecb84110869254287c1c440f14ddc5dafa8b913ce0a66cda201564cad62" dependencies = [ "anyhow", - "cairo-felt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cairo-felt 0.6.2", "cairo-lang-casm", "cairo-lang-compiler", "cairo-lang-defs", @@ -977,9 +965,8 @@ dependencies = [ "cairo-lang-utils", "convert_case 0.6.0", "genco", - "indent", "indoc", - "itertools 0.11.0", + "itertools", "log", "num-bigint", "num-integer", @@ -994,9 +981,9 @@ dependencies = [ [[package]] name = "cairo-lang-syntax" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8b2dcb8a45ad35acb806b9dae478ecd9090b23d535099aa4b382509d00acf89" +checksum = "02676702b628792b3437b391b87cb915480a111037d253a5e995d6a952f59515" dependencies = [ "cairo-lang-debug", "cairo-lang-filesystem", @@ -1011,9 +998,9 @@ dependencies = [ [[package]] name = "cairo-lang-syntax-codegen" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a68448f3ac131fac80e7160502b47a5f76b7b401c1f72aaced7dccdb4dd892f" +checksum = "955668038c14f09e16d708feb4416ab37b657e8d345c09f3c9d48c02a1dcb616" dependencies = [ "genco", "xshell", @@ -1021,12 +1008,12 @@ dependencies = [ [[package]] name = "cairo-lang-utils" -version = "2.1.0-rc2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a2b7fdb915e2bee7ac65bb120c29562400ffdb8227eb8f0651960a9bb745ef" +checksum = "7d38012d7e208df96a5cccb87122dfe8ae02eba2690d29a3d735979c9fb8dde7" dependencies = [ - "indexmap 2.0.0", - "itertools 0.11.0", + "indexmap 1.9.3", + "itertools", "num-bigint", "num-integer", "num-traits 0.2.15", @@ -1038,6 +1025,8 @@ dependencies = [ [[package]] name = "cairo-vm" version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656c25c13b6ffcc75e081292f3c23f27e429b3d4b8d69ecdc327a441798e91f4" dependencies = [ "anyhow", "ark-ff", @@ -1690,12 +1679,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "indent" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6" - [[package]] name = "indexmap" version = "1.9.3" @@ -1715,7 +1698,6 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", "hashbrown 0.14.0", - "serde", ] [[package]] @@ -1764,15 +1746,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.8" @@ -1808,21 +1781,20 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.20.0" +version = "0.19.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" +checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" dependencies = [ "ascii-canvas", "bit-set", "diff", "ena", "is-terminal", - "itertools 0.10.5", + "itertools", "lalrpop-util", "petgraph", - "pico-args", "regex", - "regex-syntax", + "regex-syntax 0.6.29", "string_cache", "term", "tiny-keccak", @@ -1831,9 +1803,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.20.0" +version = "0.19.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" +checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" dependencies = [ "regex", ] @@ -2220,9 +2192,9 @@ checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" [[package]] name = "path-clean" -version = "1.0.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" +checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" [[package]] name = "percent-encoding" @@ -2249,12 +2221,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pico-args" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" - [[package]] name = "pin-project-lite" version = "0.2.10" @@ -2428,9 +2394,15 @@ checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.7.2", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.7.2" @@ -2627,15 +2599,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2825,9 +2788,9 @@ dependencies = [ [[package]] name = "starknet_api" -version = "0.3.0" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe4732113f66de3d6e9fc77f713b934cfd4b24d43887ca8cbfbe9462ed9119" +checksum = "9f0bba8e26911c7ca40f38589c32d2d41bc6f82769cd3fde03c69ddcfe002c33" dependencies = [ "cairo-lang-starknet", "derive_more", @@ -3077,14 +3040,11 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", ] [[package]] @@ -3092,9 +3052,6 @@ name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -3103,8 +3060,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap 2.0.0", - "serde", - "serde_spanned", "toml_datetime", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 7027bc1e5..8d1ecaaed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,15 +14,13 @@ cairo_1_tests = [] members = ["cli", "fuzzer"] [workspace.dependencies] -cairo-vm = { path = "/Users/tomas/cairo/cairo-vm/vm", features = [ - "cairo-1-hints", -] } -starknet_api = "0.3.0" +cairo-vm = { version = "0.8.1", features = ["cairo-1-hints"] } +starknet_api = "0.1.0" num-traits = "0.2.15" [dependencies] -cairo-lang-starknet = "2.1.0-rc2" -cairo-lang-casm = "2.1.0-rc2" +cairo-lang-starknet = "2.0.0" +cairo-lang-casm = "2.0.0" cairo-vm = { workspace = true, features = ["cairo-1-hints"] } getset = "0.1.2" lazy_static = "1.4.0" From 425f0f386419635ab636a869da2457bec7fdbc98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:11:56 -0300 Subject: [PATCH 16/20] Revert "keccak builtin" changes --- src/definitions/constants.rs | 2 +- src/execution/execution_entry_point.rs | 49 ++------------------------ 2 files changed, 3 insertions(+), 48 deletions(-) diff --git a/src/definitions/constants.rs b/src/definitions/constants.rs index 441c280c9..dd880c609 100644 --- a/src/definitions/constants.rs +++ b/src/definitions/constants.rs @@ -56,7 +56,7 @@ lazy_static! { ("ec_op_builtin".to_string(), N_STEPS_FEE_WEIGHT * 1024.0), ("poseidon_builtin".to_string(), N_STEPS_FEE_WEIGHT * 32.0), ("segment_arena_builtin".to_string(), N_STEPS_FEE_WEIGHT * 10.0), - ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 2048.0), // 2**11 + // ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 2048.0), // 2**11 ]); pub static ref DEFAULT_SEQUENCER_ADDRESS: Address = Address(felt_str!( "3711666a3506c99c9d78c4d4013409a87a962b7a0880a1c24af9fe193dafc01", diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index 59c3dbe6b..e148fcf5e 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -341,11 +341,7 @@ impl ExecutionEntryPoint { // create starknet runner let mut vm = VirtualMachine::new(false); - - // get the correct VM layout - let layout = get_cairo0_layout(&contract_class); - - let mut cairo_runner = CairoRunner::new(&contract_class.program, layout, false)?; + let mut cairo_runner = CairoRunner::new(&contract_class.program, "starknet", false)?; cairo_runner.initialize_function_runner(&mut vm)?; validate_contract_deployed(state, &self.contract_address)?; @@ -454,12 +450,8 @@ impl ExecutionEntryPoint { let mut vm = VirtualMachine::new(false); // get a program from the casm contract class let program: Program = contract_class.as_ref().clone().try_into()?; - - // get the correct VM layout - // TODO: add test for this - let layout = get_cairo1_layout(&entry_point); // create and initialize a cairo runner for running cairo 1 programs. - let mut cairo_runner = CairoRunner::new(&program, layout, false)?; + let mut cairo_runner = CairoRunner::new(&program, "starknet", false)?; cairo_runner.initialize_function_runner_cairo_1( &mut vm, @@ -589,40 +581,3 @@ impl ExecutionEntryPoint { ) } } - -fn get_cairo0_layout(contract_class: &ContractClass) -> &str { - let uses_keccak = contract_class - .program() - .iter_builtins() - .any(|b| b == &BuiltinName::keccak); - get_layout(uses_keccak) -} - -fn get_cairo1_layout(entry_point: &CasmContractEntryPoint) -> &str { - let uses_keccak = entry_point - .builtins - .contains(&BuiltinName::keccak.name().to_string()); - get_layout(uses_keccak) -} - -fn get_layout(uses_keccak: bool) -> &'static str { - if uses_keccak { - "starknet_with_keccak" - } else { - "starknet" - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_get_cairo0_layout() { - let contract = ContractClass::from_path("starknet_programs/fibonacci.json").unwrap(); - assert_eq!(get_cairo0_layout(&contract), "starknet"); - - let contract = ContractClass::from_path("starknet_programs/keccak_builtin.json").unwrap(); - assert_eq!(get_cairo0_layout(&contract), "starknet"); // TODO: this should be `starknet_with_keccak`? - } -} From cb574ea55c6363a0811ca1166662e88b713a355c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 1 Aug 2023 10:12:39 -0300 Subject: [PATCH 17/20] Add TODOs --- src/syscalls/business_logic_syscall_handler.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/syscalls/business_logic_syscall_handler.rs b/src/syscalls/business_logic_syscall_handler.rs index f26d83af3..5442e8c2e 100644 --- a/src/syscalls/business_logic_syscall_handler.rs +++ b/src/syscalls/business_logic_syscall_handler.rs @@ -969,6 +969,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { let n_chunks = length / 17; let mut state = [0u64; 25]; for i in 0..n_chunks { + // TODO: check this before the loop, taking care to preserve functionality. if gas < KECCAK_ROUND_COST { let response = self.failure_from_error_msg(vm, b"Syscall out of gas")?; return Ok(SyscallResponse { @@ -995,6 +996,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { }) } + // TODO: refactor code to use this function fn failure_from_error_msg( &mut self, vm: &mut VirtualMachine, From c56c81db91627eeee30342ec55068ae264859192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 1 Aug 2023 11:13:06 -0300 Subject: [PATCH 18/20] Add compiled test_cairo_keccak.casm|.sierra --- .../cairo2/test_cairo_keccak.cairo | 1 + .../cairo2/test_cairo_keccak.casm | 2033 +++++++++++++++++ .../cairo2/test_cairo_keccak.sierra | 943 ++++++++ 3 files changed, 2977 insertions(+) create mode 100644 starknet_programs/cairo2/test_cairo_keccak.casm create mode 100644 starknet_programs/cairo2/test_cairo_keccak.sierra diff --git a/starknet_programs/cairo2/test_cairo_keccak.cairo b/starknet_programs/cairo2/test_cairo_keccak.cairo index b46ae9f59..4d4efe5cb 100644 --- a/starknet_programs/cairo2/test_cairo_keccak.cairo +++ b/starknet_programs/cairo2/test_cairo_keccak.cairo @@ -1,3 +1,4 @@ +// NOTE: needs compiler version 2.1.0-rc0 or higher to compile. #[starknet::interface] trait IKeccak { fn cairo_keccak_test(self: @TContractState) -> felt252; diff --git a/starknet_programs/cairo2/test_cairo_keccak.casm b/starknet_programs/cairo2/test_cairo_keccak.casm new file mode 100644 index 000000000..faa22d975 --- /dev/null +++ b/starknet_programs/cairo2/test_cairo_keccak.casm @@ -0,0 +1,2033 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.1.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffe896e", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x5e", + "0x4825800180007ffa", + "0x17692", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x482680017ff98000", + "0x1", + "0x4824800180007ffe", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x13", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x5e", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff87fff8000", + "0x48127ff57fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x4ea", + "0x482480017fff8000", + "0x4e9", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff77fff", + "0x10780017fff7fff", + "0x24", + "0x4824800180007ff7", + "0x0", + "0x400080007ff87fff", + "0x482480017ff88000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x3b", + "0x20680017fff7ffd", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xfa", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff58000", + "0x1", + "0x48127ff27fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x4", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1", + "0x400080007ffe7fff", + "0x480680017fff8000", + "0x2", + "0x400080017ffd7fff", + "0x480680017fff8000", + "0x3", + "0x400080027ffc7fff", + "0x480680017fff8000", + "0x4", + "0x400080037ffb7fff", + "0x480680017fff8000", + "0x5", + "0x400080047ffa7fff", + "0x480680017fff8000", + "0x6", + "0x400080057ff97fff", + "0x480680017fff8000", + "0x7", + "0x400080067ff87fff", + "0x480680017fff8000", + "0x8", + "0x400080077ff77fff", + "0x480680017fff8000", + "0x9", + "0x400080087ff67fff", + "0x480680017fff8000", + "0xa", + "0x400080097ff57fff", + "0x480680017fff8000", + "0xb", + "0x4000800a7ff47fff", + "0x480680017fff8000", + "0xc", + "0x4000800b7ff37fff", + "0x480680017fff8000", + "0xd", + "0x4000800c7ff27fff", + "0x40137ff27fff8002", + "0x402580017ff28003", + "0xd", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a80027fff8000", + "0x480a80037fff8000", + "0x1104800180018000", + "0x9b", + "0x20680017fff7ffd", + "0x8c", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffd7fff8000", + "0x480a80027fff8000", + "0x480a80037fff8000", + "0x480680017fff8000", + "0x11000010", + "0x480680017fff8000", + "0x4", + "0x40137ff77fff8000", + "0x40137ff87fff8001", + "0x1104800180018000", + "0xa6", + "0x20680017fff7ffb", + "0x75", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x43ccdbe17ae03b02b308ebe4a23c4cc9", + "0x1104800180018000", + "0xea", + "0x20680017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x57726f6e672068617368206c6f772031", + "0x400080007ffe7fff", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0xf3cc56e9bd860f83e3e3bc69919b176a", + "0x1104800180018000", + "0xd5", + "0x20680017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x57726f6e67206861736820686967682031", + "0x400080007ffe7fff", + "0x48127fea7fff8000", + "0x48127fea7fff8000", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x480a80007fff8000", + "0x480a80017fff8000", + "0x480680017fff8000", + "0xaaaaaaaa11000010", + "0x480680017fff8000", + "0x4", + "0x1104800180018000", + "0x6f", + "0x20680017fff7ffb", + "0x36", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x43ccdbe17ae03b02b308ebe4a23c4cc9", + "0x1104800180018000", + "0xb3", + "0x20680017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x57726f6e672068617368206c6f772032", + "0x400080007ffe7fff", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0xf3cc56e9bd860f83e3e3bc69919b176a", + "0x1104800180018000", + "0x9e", + "0x20680017fff7fff", + "0x10", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x57726f6e67206861736820686967682032", + "0x400080007ffe7fff", + "0x48127fea7fff8000", + "0x48127fea7fff8000", + "0x48127fea7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x69", + "0x20680017fff7ffb", + "0x9", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ff77fff8000", + "0x480a7ff87fff8000", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xb9", + "0x20680017fff7ffd", + "0x37", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x4b656363616b", + "0x400280007ff97fff", + "0x400280017ff97ff9", + "0x400280027ff97ffd", + "0x400280037ff97ffe", + "0x480280057ff98000", + "0x20680017fff7fff", + "0xb", + "0x480280047ff98000", + "0x482680017ff98000", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480280067ff98000", + "0x480280077ff98000", + "0x10780017fff7fff", + "0x9", + "0x480280047ff98000", + "0x482680017ff98000", + "0x8", + "0x480680017fff8000", + "0x1", + "0x480280067ff98000", + "0x480280077ff98000", + "0x1104800180018000", + "0x1e0", + "0x20680017fff7ffd", + "0xc", + "0x48127fed7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x480680017fff8000", + "0x0", + "0x48127fec7fff8000", + "0x48127fec7fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127fed7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffd80007ffc", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x35c", + "0x482480017fff8000", + "0x35b", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180007ff9", + "0xf82", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280007ff87fff", + "0x10780017fff7fff", + "0x4a", + "0x4825800180007ff9", + "0xf82", + "0x400280007ff87fff", + "0x482680017ff88000", + "0x1", + "0x48297ffa80007ffb", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffa8000", + "0x1", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffa7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x25", + "0x480080007ffd8000", + "0x1104800180018000", + "0x18f", + "0x400280007ffd7fff", + "0x48127ff47fff8000", + "0x48127ff27fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffcc", + "0x20680017fff7ffb", + "0xb", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff87fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff88000", + "0x1", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x11", + "0x1104800180018000", + "0x152", + "0x20680017fff7ffd", + "0x13b", + "0x20680017fff7ffe", + "0x12c", + "0x48297ffa80007ffb", + "0x480280007ff88004", + "0x4824800180037fff", + "0x1", + "0x48307ffe7fff7ffc", + "0x480280017ff87ffe", + "0x480280027ff87fff", + "0x40507ffe7ff97ffd", + "0x40307fff7ffd7ffa", + "0x482680017ff88000", + "0x3", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x8", + "0x1104800180018000", + "0x14e", + "0x20680017fff7ffd", + "0x113", + "0x48127ffc7fff8000", + "0x48127ffe7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x162", + "0x20680017fff7ffd", + "0x105", + "0x4825800180007ffd", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x94", + "0x4825800180007ffd", + "0x1", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x55", + "0x4825800180007ffd", + "0x2", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x49", + "0x4825800180007ffd", + "0x3", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3d", + "0x4825800180007ffd", + "0x4", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x31", + "0x4825800180007ffd", + "0x5", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x25", + "0x4825800180007ffd", + "0x6", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x19", + "0x4825800180007ffd", + "0x7", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xf", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4b656363616b206c61737420696e70757420776f7264203e3762", + "0x400080007ffe7fff", + "0x48127ff27fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x100000000000000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x1000000000000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x2", + "0x480680017fff8000", + "0x10000000000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x3", + "0x480680017fff8000", + "0x100000000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1000000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x5", + "0x480680017fff8000", + "0x10000", + "0x10780017fff7fff", + "0x6", + "0x40780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x100", + "0x1104800180018000", + "0x126", + "0x20680017fff7ffd", + "0x2c", + "0x20680017fff7ffe", + "0x1d", + "0x480080007fe18004", + "0x4824800180037fff", + "0x1", + "0x48307ffe7fff7ffd", + "0x480080017fde7ffe", + "0x480080027fdd7fff", + "0x40507ffe7ffa7ffd", + "0x40317fff7ffd7ffc", + "0x482480017fdc8000", + "0x3", + "0x48127fe77fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0x124", + "0x20680017fff7ffd", + "0x6", + "0x48127ffc7fff8000", + "0x48127ffe7fff8000", + "0x10780017fff7fff", + "0x22", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x400080007ffe7fff", + "0x48127fdf7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127fe17fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x35", + "0x48127fc67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x11", + "0x480680017fff8000", + "0x1", + "0x1104800180018000", + "0x122", + "0x20680017fff7ffd", + "0x58", + "0x48307fff80007f87", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x3b", + "0x400280007ffb7fe8", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x11", + "0x480680017fff8000", + "0x1", + "0x1104800180018000", + "0x113", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1", + "0x20680017fff7ffb", + "0x27", + "0x48127ffa7fff8000", + "0x48127ffc7fff8000", + "0x48127f6c7fff8000", + "0x1104800180018000", + "0x109", + "0x20680017fff7ffd", + "0x19", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x48127fe67fff8000", + "0x48127fe67fff8000", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0x12b", + "0x20680017fff7ffd", + "0x9", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x8000000000000000", + "0x48127fe67fff8000", + "0x1104800180018000", + "0xb1", + "0x20680017fff7ffd", + "0xb", + "0x400280007ffb7fff", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x400080007ffe7fff", + "0x480a7ff87fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ff87fff8000", + "0x480a7ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x119", + "0x20680017fff7ffd", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x484a7ffd7ffc8000", + "0x1104800180018000", + "0x120", + "0x20680017fff7ffe", + "0xb", + "0x40780017fff7fff", + "0x2", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x7533325f6d756c204f766572666c6f77", + "0x400080007ffe7fff", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffc7fff8000", + "0x482480017ffb8000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x8", + "0x482a7ffd7ffc8000", + "0x4824800180007fff", + "0x100000000", + "0x400280007ffb7fff", + "0x10780017fff7fff", + "0xd", + "0x482a7ffd7ffc8001", + "0x4824800180007fff", + "0xffffffffffffffffffffffff00000000", + "0x400280007ffb7ffe", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x7533325f616464204f766572666c6f77", + "0x1104800180018000", + "0x105", + "0x20680017fff7ffd", + "0x9", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x106", + "0x20680017fff7ffd", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x8", + "0x482a7ffd7ffc8000", + "0x4824800180007fff", + "0x10000000000000000", + "0x400280007ffb7fff", + "0x10780017fff7fff", + "0xd", + "0x482a7ffd7ffc8001", + "0x4824800180007fff", + "0xffffffffffffffff0000000000000000", + "0x400280007ffb7ffe", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffd7fff8000", + "0x10780017fff7fff", + "0x7", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x7536345f616464204f766572666c6f77", + "0x1104800180018000", + "0xf5", + "0x20680017fff7ffd", + "0x9", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48297ffd80017ffc", + "0xa0680017fff7fff", + "0x7", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280007ffb7fff", + "0x10780017fff7fff", + "0xc", + "0x400280007ffb7fff", + "0x40780017fff7fff", + "0x1", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x482480017ffc8000", + "0x100000000", + "0x480680017fff8000", + "0x7533325f737562204f766572666c6f77", + "0x1104800180018000", + "0x9f", + "0x20680017fff7ffd", + "0x9", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0xe4", + "0x482480017fff8000", + "0xe3", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180007ffa", + "0x1612", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x44", + "0x4825800180007ffa", + "0x1612", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x4825800180007ffd", + "0x1", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x2e", + "0x480680017fff8000", + "0x0", + "0x400280007ffc7fff", + "0x48127ffd7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffb6", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x20680017fff7ffb", + "0x19", + "0x48127ffa7fff8000", + "0x48127fe37fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd5", + "0x20680017fff7ffd", + "0x9", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x8000000000000000", + "0x400280007ffc7fff", + "0x48127ffd7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x6d", + "0x20680017fff7ffe", + "0xa", + "0x40780017fff7fff", + "0x2", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x7533322069732030", + "0x400080007ffe7fff", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x4825800180007ffd", + "0x100000000", + "0x400280007ffc7fff", + "0x10780017fff7fff", + "0xc", + "0x482680017ffd8000", + "0xffffffffffffffffffffffff00000000", + "0x400280007ffc7fff", + "0x482680017ffc8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ffc8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0xa", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x480680017fff8000", + "0x1", + "0x48127ffe7fff8000", + "0x482480017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x36", + "0x20680017fff7ffe", + "0xa", + "0x40780017fff7fff", + "0x2", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x7536342069732030", + "0x400080007ffe7fff", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0xa", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x480680017fff8000", + "0x1", + "0x48127ffe7fff8000", + "0x482480017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffd", + "0x8", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x5", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffd", + "0x8", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x5", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x17692" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 22, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 41, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -8 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 61, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 84, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 99, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 118, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 192, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 213, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 247, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 268, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 321, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 365, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -7 + } + } + } + } + ] + ], + [ + 439, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xf82" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -7 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 520, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 547, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -2 + } + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 619, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 676, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -4 + } + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -1 + } + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 703, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 844, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 909, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 921, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": -4 + }, + "b": { + "Deref": { + "register": "FP", + "offset": -3 + } + } + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 980, + [ + { + "TestLessThan": { + "lhs": { + "BinOp": { + "op": "Add", + "a": { + "register": "FP", + "offset": -4 + }, + "b": { + "Deref": { + "register": "FP", + "offset": -3 + } + } + } + }, + "rhs": { + "Immediate": "0x10000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1024, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -4 + } + }, + "dst": { + "register": "AP", + "offset": -1 + } + } + } + ] + ], + [ + 1071, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x1612" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1146, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1173, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1184, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x100000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1218, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1240, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 1261, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 95890 <= memory[fp + -6]" + ] + ], + [ + 22, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 41, + [ + "memory[ap + 0] = 0 <= memory[ap + -8]" + ] + ], + [ + 61, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 84, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 99, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 118, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 192, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 213, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 247, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 268, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 321, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 365, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -7])" + ] + ], + [ + 439, + [ + "memory[ap + 0] = 3970 <= memory[fp + -7]" + ] + ], + [ + 520, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 547, + [ + "(memory[ap + 3], memory[ap + 4]) = divmod(memory[ap + -1], memory[ap + -2])" + ] + ], + [ + 619, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 676, + [ + "(memory[ap + 3], memory[ap + 4]) = divmod(memory[fp + -4], memory[ap + -1])" + ] + ], + [ + 703, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 844, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 909, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 921, + [ + "memory[ap + 0] = memory[fp + -4] + memory[fp + -3] < 4294967296" + ] + ], + [ + 980, + [ + "memory[ap + 0] = memory[fp + -4] + memory[fp + -3] < 18446744073709551616" + ] + ], + [ + 1024, + [ + "memory[ap + -1] = memory[fp + -3] <= memory[fp + -4]" + ] + ], + [ + 1071, + [ + "memory[ap + 0] = 5650 <= memory[fp + -6]" + ] + ], + [ + 1146, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 1173, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 1184, + [ + "memory[ap + 0] = memory[fp + -3] < 4294967296" + ] + ], + [ + 1218, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 1240, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 1261, + [ + "memory[ap + 0] = segments.add()" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x3d91620ebfd3035266d72c83df4f0f314ade6a3449bc2193fe8078df7553873", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/starknet_programs/cairo2/test_cairo_keccak.sierra b/starknet_programs/cairo2/test_cairo_keccak.sierra new file mode 100644 index 000000000..bb1ff0663 --- /dev/null +++ b/starknet_programs/cairo2/test_cairo_keccak.sierra @@ -0,0 +1,943 @@ +{ + "sierra_program": [ + "0x1", + "0x3", + "0x0", + "0x2", + "0x1", + "0x0", + "0x1db", + "0x25", + "0x39", + "0x52616e6765436865636b", + "0x0", + "0x4761734275696c74696e", + "0x66656c74323532", + "0x4172726179", + "0x1", + "0x2", + "0x536e617073686f74", + "0x3", + "0x537472756374", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x4", + "0x753332", + "0x53797374656d", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x9", + "0x5", + "0x456e756d", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0xb", + "0xa", + "0x4275696c74696e436f737473", + "0x1c05ce70474a4304f1383f206fe0f8fb502ee40248665da23dc692001473105", + "0x10203be321c62a7bd4c060d69539c1fbe065baa9e253c74d2cc48be163e259", + "0xf", + "0x753634", + "0x11", + "0x556e696e697469616c697a6564", + "0x12", + "0x8fb98e1acdfdf8aff6b13f16b57042f28186321f7727a98c6627f268fa3619", + "0x15", + "0x75313238", + "0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2", + "0x17", + "0x18", + "0x14bafead7fe2e5d5098831b6ce460a4ea41734e96452eff510098bded016639", + "0x19", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0x8", + "0x3f829a4bc463d91621ba418d447cc38c95ddc483f9ccfebae79050eb7b3dcb6", + "0x14", + "0x1c", + "0x14a41abf590beba6e5ad84c90179e42ae9c264ddc050feb3ce783a67e66479e", + "0x1d", + "0x25e50662218619229b3f53f1dc3253192a0f68ca423d900214253db415a90b4", + "0x1f", + "0xccf52bb0646785c5ad2a653e9ec60b68f9843823a0c386724530f0e305f2c4", + "0x2ce4352eafa6073ab4ecf9445ae96214f99c2c33a29c01fcae68ba501d10e2c", + "0x22", + "0x426f78", + "0x10aadf20f2da2fb70102a7c61aae18a1e861ef78a0161983e81cb182f71363c", + "0x24", + "0x4e6f6e5a65726f", + "0x6", + "0x23d687e999cab78c31d6bd5cbdf8daae101a3c11ab2222105379d7c36f36ea1", + "0x26", + "0x27", + "0xdf75ca2cf6afb9bc933cc3f65b045ad15bd70726819d90effa48df72a2f1c1", + "0x28", + "0x3ab802bcce3a9ca953b0e1f31a5b29eb27a9b727c891e24300e1b5cc57387ba", + "0x2a", + "0x1c93399c577f87390e51b8cb506e46bf14730a3503957dbfa913537c3269e72", + "0x2c", + "0x2d", + "0x1cd2b418923aab36f139f976a4924eeee496567cc062738dc66f7e858c458f6", + "0x2e", + "0x1ee471fea880cdb75aff7b143b1653e4803b9dca47f4fcdd349d11fec9d7a16", + "0x30", + "0x30e6087648fb5594b78751a87d38cc4bb23c443ca7457f975ed5e20cb5c0da3", + "0x32", + "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", + "0x39a088813bcc109470bd475058810a7465bd632650a449e0ab3aee56f2e4e69", + "0x231651df0179b7c1db8cfe7d4b2d0450f932a95f500c3fe114d8a2321ea362", + "0x36", + "0x2fffb69a24c0eccf3220a0a3685e1cefee1b1f63c6dcbe4030d1d50aa7a7b42", + "0x10d", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f6c656e", + "0x736e617073686f745f74616b65", + "0x64726f70", + "0x7533325f636f6e7374", + "0x72656e616d65", + "0x73746f72655f74656d70", + "0x7533325f6571", + "0x7", + "0x66756e6374696f6e5f63616c6c", + "0x61727261795f6e6577", + "0x66656c743235325f636f6e7374", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x61727261795f617070656e64", + "0x7374727563745f636f6e737472756374", + "0x656e756d5f696e6974", + "0xc", + "0x6765745f6275696c74696e5f636f737473", + "0xd", + "0x77697468647261775f6761735f616c6c", + "0xe", + "0x656e756d5f6d61746368", + "0x10", + "0x4f7574206f6620676173", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x64697361626c655f61705f747261636b696e67", + "0x7536345f636f6e7374", + "0x73746f72655f6c6f63616c", + "0x16", + "0x11000010", + "0x1a", + "0x753132385f636f6e7374", + "0x43ccdbe17ae03b02b308ebe4a23c4cc9", + "0x1b", + "0x57726f6e672068617368206c6f772031", + "0xf3cc56e9bd860f83e3e3bc69919b176a", + "0x57726f6e67206861736820686967682031", + "0xaaaaaaaa11000010", + "0x57726f6e672068617368206c6f772032", + "0x57726f6e67206861736820686967682032", + "0x13", + "0x1e", + "0x656e61626c655f61705f747261636b696e67", + "0x20", + "0x6b656363616b5f73797363616c6c", + "0x21", + "0x6a756d70", + "0x23", + "0x753132385f6571", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x25", + "0x756e626f78", + "0x29", + "0x7533325f736166655f6469766d6f64", + "0x647570", + "0x2b", + "0x4b656363616b206c61737420696e70757420776f7264203e3762", + "0x100000000000000", + "0x1000000000000", + "0x10000000000", + "0x100000000", + "0x1000000", + "0x10000", + "0x100", + "0x2f", + "0x7536345f736166655f6469766d6f64", + "0x31", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x8000000000000000", + "0x33", + "0x7533325f776964655f6d756c", + "0x34", + "0x7533325f6d756c204f766572666c6f77", + "0x7533325f6f766572666c6f77696e675f616464", + "0x35", + "0x7533325f616464204f766572666c6f77", + "0x37", + "0x7536345f6f766572666c6f77696e675f616464", + "0x38", + "0x7536345f616464204f766572666c6f77", + "0x7533325f6f766572666c6f77696e675f737562", + "0x7533325f737562204f766572666c6f77", + "0x7533322069732030", + "0x646f776e63617374", + "0x7536342069732030", + "0x7533325f69735f7a65726f", + "0x7536345f69735f7a65726f", + "0x4bc", + "0xffffffffffffffff", + "0x54", + "0x47", + "0x40", + "0x3a", + "0x3b", + "0x3c", + "0x3d", + "0x3e", + "0x3f", + "0x41", + "0x42", + "0x43", + "0x44", + "0x45", + "0x46", + "0x48", + "0x49", + "0x4a", + "0x4b", + "0x4c", + "0x4d", + "0x4e", + "0x4f", + "0x50", + "0x51", + "0x52", + "0x53", + "0x55", + "0x56", + "0x57", + "0x58", + "0x59", + "0x148", + "0x140", + "0xc8", + "0x5a", + "0x5b", + "0x5c", + "0x5d", + "0x5e", + "0x60", + "0x61", + "0x5f", + "0x62", + "0xe6", + "0x63", + "0x64", + "0x65", + "0x66", + "0x67", + "0x68", + "0x69", + "0x6a", + "0x6b", + "0x6c", + "0x6d", + "0x6e", + "0x6f", + "0x74", + "0x75", + "0x76", + "0x77", + "0x78", + "0x79", + "0x70", + "0x71", + "0x72", + "0x73", + "0x7a", + "0x139", + "0x7b", + "0x7c", + "0x7d", + "0x7e", + "0x7f", + "0x80", + "0x81", + "0x82", + "0x83", + "0x84", + "0x85", + "0x86", + "0x87", + "0x88", + "0x8a", + "0x8b", + "0x89", + "0x8c", + "0x112", + "0x8d", + "0x8e", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x93", + "0x94", + "0x95", + "0x96", + "0x97", + "0x98", + "0x99", + "0x9a", + "0x9b", + "0x9c", + "0x9d", + "0x9e", + "0x9f", + "0xa0", + "0xa2", + "0xa3", + "0xa1", + "0xa4", + "0x12f", + "0xa5", + "0xa6", + "0xa7", + "0xa8", + "0xa9", + "0xaa", + "0xab", + "0xac", + "0xad", + "0xae", + "0xaf", + "0xb0", + "0xb1", + "0xb2", + "0xb3", + "0xb4", + "0xb5", + "0xb6", + "0xb7", + "0xb8", + "0xb9", + "0xba", + "0xbb", + "0xbc", + "0xbd", + "0xbe", + "0xbf", + "0xc0", + "0xc1", + "0xc2", + "0xc3", + "0xc4", + "0xc5", + "0x16a", + "0x1a0", + "0x185", + "0x18a", + "0x197", + "0x1b2", + "0x1b6", + "0x1f0", + "0x1c4", + "0x1c9", + "0x1e6", + "0x1e0", + "0x365", + "0x355", + "0x34a", + "0x33f", + "0x2ce", + "0x291", + "0x28b", + "0x285", + "0x27f", + "0x279", + "0x273", + "0x26f", + "0x277", + "0x27d", + "0x283", + "0x289", + "0x28f", + "0x295", + "0x2c3", + "0x2b1", + "0x2a8", + "0x2d4", + "0x335", + "0x31c", + "0x314", + "0x30d", + "0x307", + "0xc6", + "0xc7", + "0xc9", + "0xca", + "0xcb", + "0xcc", + "0xcd", + "0xce", + "0xcf", + "0xd0", + "0xd1", + "0xd2", + "0xd3", + "0xd4", + "0xd5", + "0xd6", + "0xd7", + "0xda", + "0xdb", + "0xdc", + "0xd8", + "0xd9", + "0xdd", + "0x32e", + "0xde", + "0xdf", + "0xe0", + "0xe1", + "0xe2", + "0xe3", + "0xe4", + "0xe5", + "0xe7", + "0xe8", + "0xe9", + "0xea", + "0xeb", + "0xec", + "0xed", + "0xee", + "0xef", + "0xf0", + "0xf1", + "0xf2", + "0xf3", + "0xf4", + "0xf5", + "0xf6", + "0xf7", + "0xf8", + "0xf9", + "0xfa", + "0xfb", + "0xfc", + "0xfd", + "0xfe", + "0xff", + "0x101", + "0x102", + "0x103", + "0x374", + "0x387", + "0x396", + "0x3a8", + "0x3ac", + "0x3b8", + "0x3c7", + "0x3d1", + "0x3d5", + "0x3e1", + "0x3ec", + "0x3f0", + "0x3fc", + "0x444", + "0x438", + "0x431", + "0x42b", + "0x45a", + "0x46b", + "0x470", + "0x47a", + "0x48b", + "0x104", + "0x49d", + "0x105", + "0x4ac", + "0x106", + "0x107", + "0x4af", + "0x108", + "0x109", + "0x4b7", + "0x10a", + "0x10b", + "0x4ba", + "0x10c", + "0x151", + "0x157", + "0x170", + "0x1a8", + "0x1b8", + "0x1ff", + "0x36e", + "0x37a", + "0x37d", + "0x38b", + "0x3a2", + "0x3bd", + "0x3cb", + "0x3e6", + "0x401", + "0x452", + "0x465", + "0x473", + "0x483", + "0x496", + "0x4a6", + "0x4b1", + "0x2b11", + "0x181402070081a0c0302c0407050240c060401c0c06028080802018080200", + "0x182a060a0081213090181e02038281206088181e02048282002030281e02", + "0x700c06028083616030680c190102426070303c0407050600406050082e16", + "0x8120a010842c06100183e020484c3c06078080e0a0f0180c080f0180c1d", + "0xa00c27010242616030980c25010242624030780c0f0102414230308c0c22", + "0x282c061681858020484c50060f018560607808180a150185202038285006", + "0x3c0407050240c24030c00409098580c2f030b80409098a00c1e0303c0409", + "0x4c6e06030d850061a81868020484c3806030cc2c061901862020484c4806", + "0xdc0c0f0101c1416030f00c3b01024263a0303c0407050a00c39030e00409", + "0x4c8206078080e0a1401880061f80812130e0180c360b0187c061e8081213", + "0xe40c0f0101c1416031140c4401024261c0303c0407050580c43031080409", + "0x80e0a1b8186e06248081213140186e062400812130b0188e06230081213", + "0x14404500113c044e268700c1c031300409098580c4b031280409099000c0f", + "0xdc0c062b8dc0c062b0080e062a8dc0c062a0dc0c062981c0c06290480c06", + "0x15cba07031700e060316c5006031500c0903168b2060315c0458010180c57", + "0x18ae0603018ae06039840c07300580c062f8440c062f81c0c062f01c0c06", + "0x168ca060315cca0603150ca060314cca060317c0464318180c5701188c206", + "0x2412062d0240c062b81c0c062a01c0c06298680c062899c0c063301c1206", + "0x150d007031700407308180e600a8180c5f090180c5f048180c54048180c53", + "0x180e06360700c062d808d602350780c06348a00c062b8a00c062f8480c06", + "0x1c0c6c0901c0c6c0601c0c6c0481c0c6c0381c0c6c0e0180c5e0e0180c57", + "0x18d86103818d81503818d81603818d81103818d82803818d85903818d837", + "0x1b0400603144dc060319818090316854060315c3c060314c3c06031b4c607", + "0x780c062a0980c06289c00c063304812062d0780c062b8300e062a9bc0e06", + "0x180c661b8240c5a118180c573901c0c71118180c54118180c53120180c51", + "0x1dc0e06361d80e062e1d40e063899c0c062b8180e670301cc07403818b873", + "0x158f406031500407338180e600d0180c5f0301c0c5c3c81c0c5c3c01c0c5c", + "0xac0c062a0b40c06289ec0c063316412062d0ac0c062b8ac0c062f81c0c06", + "0x198047c140240c5a0301cdc0603980dc060315c0407370180e60100180c5f", + "0x180e7f0301cc002401fc0c062b8080e7f0301cc0023f0bc0c06289f40c06", + "0x15c0407380180e60130180c5f190180c51408180c66088240c5a3f8180c56", + "0x1cc07303018ae02039cc0c0730009042303018ac06039c00c07301c00c06", + "0x18108060315c0407420180e600e0180c83158180c51398180c560301ce606", + "0x80e7b0301cc02d03018be1604818b41c030190a8403018cc0603a100c07", + "0x1987806031450c06031982a09031683807031540c073d8180e603d8180c57", + "0x18a28903018cc6104818b43703019102803818aa02438700c06290e80c06", + "0x1542407031541207031540e07031540c07031547c0603150c609031687c06", + "0x18d87d03018ae06039f40c07302280e062e0700c062a1640e062a8dc0e06", + "0x1b12007031b11e07031b11c07031b11a07031b03806031591807031b11607", + "0x18b402499040c063310c0c0628a480c063319412062d0700c06442440e06", + "0x1805e060317c380903168ce09031692a07031708a06031452806031983409", + "0x2040c062b8080e810301cc03203018be7f03018cc9603818d802039f40c07", + "0x180c5f0101c7406039808e06031452e06031983c09031680c07408180e60", + "0x2640c06331e812062d009300603a180c07302180c062b8080e860301cc03c", + "0x180049b0301d12060398134070317112060315c0407448180e601f0180c5f", + "0xa812062d2700c062b2740e062e0180e9c0301cc09c03018ae0203a700c07", + "0x1d24060398086060317c0407208180e60258180c514f0180c66100240c5a", + "0x2800c07302800c062b8080ea00301cc0024f8180e920301cc09203018ae02", + "0x180c570101d2806039808a060317cdc09031694006031594207031700c07", + "0x1cc04703018be2304818b40203818d8a303818b802510180e940301cc094", + "0x180e601b818380603a940c074b8180e605201c0c5c4b8180c570101d2e06", + "0x18b49c03018cc9903018ac0203018ac0603a640c07302640c062b8080e99", + "0x1980c074f0180e605301c0c5c4f0180c570101d3c060398096060317c4809", + "0x180e410301cc002540e80c062b0e80c062b8180e3a0301cc00253a800c06", + "0x1d56120601d5407030080e060100954060100804a9208180c56208180c57", + "0x182402088195406140181802140195406048181202012a80c0203808b237", + "0x1d5406308182402308195406011640402550182c061b8082a1603aa80c11", + "0x440467032a80c65030a0041a032a80c15030a0040255018c6061b808ca63", + "0x80e02010bc04aa0399c34070a80818065501818060b0083406550183406", + "0x954060f018ca020f0700eaa031e80c63011e80caa0301c0c61010095406", + "0x8054070f00840065501840060e0084006550180467010a80caa030083402", + "0x1954061201840021201954063708c0e2a0108c0caa03008f402370195406", + "0x8c042b032a80c1c031840473032a80c12031b80470032a80c0c030580426", + "0x98047b032a80c021200804aa030080e02168ace670060185a06550184c06", + "0x954060101c04323f81d587d1781d54073d848180938008f60655018f606", + "0xbc0c160100954061a8185a02420d40eaa032040c2b012040caa03008e602", + "0x19540642018f60220019540603818c2024481954063e818dc021f0195406", + "0x924065690c0caa03a180c7d01218783a1c831540620901123e060bc0441", + "0x1d54062281864024a0195406010680445032a80c43031fc0402550180407", + "0x210049e032a80c94030d4044b032a80c97030700402550188e06408092e47", + "0x187402002800eaa032640c390100954064e018ca024e2640eaa032789607", + "0x195406578187c02578195406570190c02570195406000187802012a80ca0", + "0x8c04b3032a80c3c0318404b2032a80c3a031b804b1032a80c390305804b0", + "0x968065501924061000804aa030080e0256acd64b1060195a06550196006", + "0x2d00c23012dc0caa030f00c61012d80caa030e80c6e012d40caa030e40c16", + "0x180489012e40caa030083402012a80c020380970b75b2d418065c0195406", + "0x2ec0caa03008f4025d0195406562e40e1e012b00caa032b00c1c012b00caa", + "0x1b804be032a80c7f0305804bd032a80cbc0308004bc032a80cba5d81c5402", + "0x3017ebe060198206550197a06118098006550180e06308097e06550186406", + "0x1954060122404c2032a80c020d00804aa030240c400100954060101c04c1", + "0xa804c5032a80c023d00988065501986c20387804c3032a80cc30307004c3", + "0x1640c6e0131c0caa030dc0c16013180caa032ac0c20012ac0caa033118a07", + "0x994c96431c180665019540663018460264819540603818c202640195406", + "0x81207038181206550180c06218080e06550180406308080c06550180441", + "0xb40402550180494010095406011140459032a80c02490082406550180492", + "0x440caa030440c99010440caa030092e021401954060111c0402550181206", + "0x1d38020a81954060a81932020a81954060112c0416032a80c111401d3802", + "0x18c66103a700463032a80c63032640463032a80c024f008c206550182a16", + "0x19c0caa03068ca074e00834065501834064c80834065501804a0011940caa", + "0x95c020f01954060e19c0e9c010700caa030700c99010700caa030080002", + "0x195406012bc042a032a80c7a0f01d38023d01954063d01932023d0195406", + "0x2640423032a80c0258008dc0655018402a03a700420032a80c20032640420", + "0x184c064c8084c065501804b1010900caa0308cdc074e0084606550184606", + "0x1cc0caa031cc0c99011cc0caa030096402380195406130900e9c010980caa", + "0x1d3802168195406168193202168195406012cc042b032a80c733801d3802", + "0x185e7b03a70042f032a80c2f03264042f032a80c0256808f606550185a2b", + "0xdc0caa031fcfa074e008fe0655018fe064c808fe065501804b4011f40caa", + "0x874065501804060b009023203aa80c37032d80437032a80c372c81d6a02", + "0xe5083504aa80c861e0e812b8012180caa032040cb7010f00caa030180c6e", + "0x2e8040c032a80c3e032b00402550180407012240ccb1f01954071c8197202", + "0x19540642018dc022381954061a8182c02208195406012ec0440032a80c02", + "0x44044b032a80c4003264049c032a80c32032f00499032a80c07031840497", + "0x3154064f12d38994b91c6ebd010300caa0303024075a8093c06550188206", + "0x2a80ca0032fc0402550180407010000ccc5001954074a0197c024a1152443", + "0x2c80eaa032c00cc2012c56007550195e066080804aa032b80cc0012bd5c07", + "0x98802012a80cad0330c04b45681d5406598198402012a80cb20330c04b3", + "0x1d54065b8198402012a80cb60330c04b75b01d54065a81984025a8195406", + "0x2ac04bb032a80cb90331404ba032a80cb40331404025501970066180972b8", + "0x18ca02012a80c02038097a0666af00caa03ab00cc6012b00caa032ed7407", + "0x31c04be032a80c020d00804aa032c40cc3010095406060198002012a80cbc", + "0x2a80c023d0098006550197ebe0387804bf032a80cbf0307004bf032a80c02", + "0x3100caa0310c0c160130c0caa033080cc8013080caa033018207150098206", + "0x310180663019540661819920255819540622818c20262819540649018dc02", + "0x30c04c86381d5406588198402012a80cbd0319404025501804070131956c5", + "0x1954060132804025501992066180994c903aa80cc8033080402550198e06", + "0x9a4d103aa80cd0033080402550199e0661809a0cf03aa80cce0330804ce", + "0x351a60755809a80655019a40662809a6065501994066280804aa033440cc3", + "0x2a80cd6031940402550180407013600cd76b01954076a8198c026a8195406", + "0x19b4060e009b4065501804ce013640caa030083402012a80c0c033000402", + "0x1954066db700e2a013700caa03008f4026d81954066d3640e1e013680caa", + "0x18404e0032a80c92031b804df032a80c430305804de032a80cdd0332004dd", + "0x804aa030080e0271385c0df06019c40655019bc0664809c206550188a06", + "0x195406218182c02720195406012ec04e3032a80c026780804aa033600c65", + "0x26404e8032a80c0c032f004e7032a80c450318404e6032a80c92031b804e5", + "0x3ac18aa033a9d2e873b99ca375e809d40655019c80608809d20655019c606", + "0x1d5406778197e02012a80c0203809e206783bc0caa03bb80cbe013b9daec", + "0x3ddec0755019e80661009eaf403aa80cf303304040255019e40660009e6f2", + "0x1804c40100954067c01986027cbe00eaa033dc0cc20100954067b0198602", + "0x3f40eaa033f00cc20100954067d81986027e3ec0eaa033e80cc2013e80caa", + "0x1d56028001954067f0198a027f81954067c8198a02012a80cfd0330c04fe", + "0x4080c650100954060101c05040340e04065501e02066300a02065501a00ff", + "0x183802830195406013400505032a80c020d00804aa033d40cc3010095406", + "0x1a0f08038a80508032a80c023d00a0e065501a0d05038780506032a80d06", + "0x4300caa033b00c6e0142c0caa033ac0c16014280caa034240cc8014240caa", + "0x2a80c020380a1d0d8642c180687019540685019920286819540676818c202", + "0x198402012a80d0f0330c05108781d54067a8198402012a80d04031940402", + "0x1d54068981984028981954060132804025501a22066180a251103aa80d10", + "0x31404025501a2c066180a2f1603aa80d150330804025501a28066180a2b14", + "0x4680cc6014680caa0346630075580a32065501a2e066280a30065501a2406", + "0x4780caa030083402012a80d1b031940402550180407014740d1c8d8195407", + "0x8f4029001954068fc780e1e0147c0caa0347c0c1c0147c0caa03009a202", + "0x2a80ceb030580523032a80d22033200522032a80d209081c5402908195406", + "0x1a4e065501a46066480a4c0655019da063080a4a0655019d8063700a4806", + "0x3540528032a80c026900804aa034740c650100954060101c052793496480c", + "0x19d8063700a560655019d6060b00a54065501a52066980a52065501a5006", + "0x1c052e96cb2560c034b80caa034a80cc9014b40caa033b40c61014b00caa", + "0x19540676018dc02980195406758182c02978195406788199002012a80c02", + "0x180407014ce6531980300d33032a80d2f033240532032a80ced031840531", + "0x1b80535032a80c43030580534032a80c000332004025501818066000804aa", + "0x4de6d350601a70065501a68066480a6e06550188a063080a6c06550192406", + "0x2a80c890332004025501824066a00804aa030c80cc00100954060101c0538", + "0xa7806550180e063080a76065501908063700a7406550186a060b00a7206", + "0x180e06038780407032a80c0203358053d9e4ee740c034f40caa034e40cc9", + "0x186e065501818062180824065501812061a8081806550180441010240caa", + "0x182c0206019540603819b0020481954060111c0402550180494010dc2407", + "0x2a80c09032f00416032a80c0c033640411032a80c06031b80428032a80c02", + "0x8c6069f1840caa039640cdb011646e1204aa80c150b044500c6d0082a06", + "0x18ce063280804aa031940cdd0119c346504aa80c61033700402550180407", + "0x8f4065501824060b0083c065501838066f80838065501834066f00804aa", + "0x804aa030080e02100a8f409030800caa030780ce0010a80caa030dc0c6e", + "0x1b80ce0010900caa030dc0c6e0108c0caa030480c16011b80caa0318c0ce1", + "0x2f00416032a80c06031b80411032a80c020305804261208c1206130195406", + "0x58221271008c60655018240608808c2065501818064c8082a06550181206", + "0x834069f9940caa038a00ce40100954060138c04282c8dc12aa0318cc215", + "0x2a80c67032d8040255018380632808386703aa80c65033ac0402550180407", + "0x2a80e2a0396412ec010a80caa030a80cd9010a80caa031e80cd8011e83c07", + "0x800c6e011cc0caa0308c0ced0100954060101c0470130901340119b84009", + "0x8054103009ca023d819540639819dc0216819540637018c202158195406", + "0x2a80c2603184042b032a80c24031b8042f032a80c70033980402550180407", + "0x8fa0655018fe0674008fe0655018f60673808f606550185e06770085a06", + "0x1864067500804aa030092802012a80c02038090206a10c80caa039f40ce9", + "0x1954061b8182c021c819540642019e2024201954061a8780eef010d40caa", + "0x300c3e032a80c39033c80486032a80c2d03184043c032a80c2b031b8043a", + "0x2040cf30100954060f0198002012a80c024a00804aa030080e021f218783a", + "0x19540616818c20220819540615818dc022001954061b8182c02448195406", + "0x95406012500402550180407012488641200300c92032a80c89033c80443", + "0x18c2022381954062c818dc024a01954061b8182c022281954060d019e602", + "0x1c0caa030080cf4012652e474a0300c99032a80c45033c80497032a80c07", + "0x1dea0209019540604819e80206019540603819e80204819540603019e802", + "0x1954061b819ec021b81954060110404025501804070100a86025501c240c", + "0x1954060110404025501804070100a8806013940428032a80c59033dc0459", + "0x180c15032a80c28033e40428032a80c16033dc0416032a80c11033e00411", + "0xdc24075501c180601024e002060195406060184c02060195406010900415", + "0x824065501824060b0082206550180e067d00804aa030080e02141640f45", + "0x2dc0463032a80c15033f00402550180407011840d460a8580eaa038440cfb", + "0x804aa030080e020151c0c0272808340655018c6067e808ca06550182c06", + "0x1838067e808ca0655018c2065b808380655018ce067f008ce06550180441", + "0x1e80caa038680d01010780caa030780cd9010780caa031940cd8010680caa", + "0x800c99010800caa031e80cff010095406012500402550180407010a80d48", + "0x2a80c12030580424032a80c6e0481d38023701954061181a0002118195406", + "0x85e065501848065e008f606550183c066c8085a06550186e06370085606", + "0x180407011fc0d493e819540739819b602399c04c09550185e7b168ac18da", + "0x190806820090806550186a811902604021aa04640955018fa066e00804aa", + "0x2180caa030e40d05010f00caa031c00c6e010e80caa030980c16010e40caa", + "0x2240caa030980c16010f80caa031fc0d060100954060101c04861e0e81206", + "0x954060101c04412022412062081954061f01a0a0220019540638018dc02", + "0x1886090f02604022181954060110404025501854063280804aa030092802", + "0x11c0caa030dc0c6e012500caa030480c16011140caa032480d04012480caa", + "0x37404025501804940100954060101c049723a5012064b81954062281a0a02", + "0x93806550180489012640caa030083402012a80c09033000402550180e06", + "0x2780e2a012780caa03008f4022581954064e2640e1e012700caa032700c1c", + "0x2a80c28031b804ae032a80c59030580400032a80ca00341804a0032a80c4b", + "0x1954060141c0402550180494012c15eae048196006550180006828095e06", + "0x1a9428032a80e37034240437032a80c59034200459032a80c12030440412", + "0x8c206a58540caa038580d0b010580caa030a00d0a0100954060101c0411", + "0x18340608808340655018ca0686008ca6303aa80c07032d80402550180407", + "0x2a80c028700804aa030700c3701078386704aa80c150d008130d010680caa", + "0x8c0caa0308c0c110108c3c07550183c0687808dc0655018ce060b008f406", + "0x44404025501804e30108054075501848233702620021201954063d0182202", + "0xa80c16011cc0caa030980d120100954060101c0470035304c065501c4006", + "0x2a80c7d03044047d0601d54060601a1e021781954063981822023d8195406", + "0x80e021901a9a7f032a80e2d03444042d1581d54063e8bcf60989808fa06", + "0x90806550180459010d502075501818060900804aa031fc0d14010095406", + "0xe80c28010f00caa030d40c280100954061c8186e021d0e40eaa032100c12", + "0x1d5406408182402012a80c0203808054e012a80e861e01c2a02430195406", + "0xa004025501882061b808864103aa80c40030480440032a80c028a809123e", + "0x80e020153c04aa0391524070a8088a06550188606140092406550191206", + "0x2640eaa0325c0c120125c0caa0300a2c0223a500eaa030f80c12010095406", + "0x1c2a024f01954064e0185002258195406238185002012a80c99030dc049c", + "0x2a80c028b80800a003aa80c940304804025501804070100aa0025501d3c4b", + "0x962065501800061400804aa032bc0c37012c15e07550195c06090095c06", + "0x2800c120100954060101c0402a88095407592c40e15012c80caa032c00c28", + "0x2a80cb5030dc04b65a81d54065a01824025a0195406012ec04ad5981d5406", + "0xaa4025501d70b70385404b8032a80cb6030a004b7032a80cad030a00402", + "0x19740609009740655018051a012b172075501966060900804aa030080e02", + "0x2f80caa032f00c28012f40caa032b00c280100954065d8186e025e2ec0eaa", + "0x46004c05f81d54065c8182402012a80c02038080553012a80ebe5e81c2a02", + "0x2a80cc0030a004025501984061b80986c203aa80cc10304804c1032a80c02", + "0x804aa030080e020155004aa03b1588070a8098a06550198606140098806", + "0x198e06090098e06550180519010095406558186e02632ac0eaa032fc0c12", + "0x3380caa033240c28013280caa033180c28010095406640186e0264b200eaa", + "0x18c6066000804aa030092802012a80c02038080555012a80ece6501c2a02", + "0x18051d0133c0caa030083402012a80c090346c0402550183c061b80804aa", + "0x3480caa03008f4026881954066833c0e1e013400caa033400c1c013400caa", + "0x1b804d4032a80c2b0305804d3032a80cd50347804d5032a80cd16901c5402", + "0x480040255018040701361acd404819b00655019a6068f809ac06550180c06", + "0xdc04025501804070100aac060139404da032a80cd90326404d9032a80c02", + "0x1954066d01a44026d01954066d81932026d8195406014840402550197e06", + "0x3740caa0300a4602012a80cb9030dc04025501804070100aae060139404dc", + "0x2a80c0203808055803009ca026f01954066e01a44026e01954066e8193202", + "0x3780d22013780caa0337c0c990137c0caa0300a4802012a80cb3030dc0402", + "0x180525010095406500186e02012a80c0203808055903009ca02700195406", + "0x1c0402ad01804e5013880caa033800d22013800caa033840c99013840caa", + "0x9c40655019c6064c809c6065501805260100954064a0186e02012a80c02", + "0x804aa030f80c370100954060101c0402ad81804e5013900caa033880d22", + "0x3b40d29013b5c80755019c80694009c80655019d6064c809d606550180527", + "0x2a80cee034ac0402550180407013940d5c7701954077601a5402760195406", + "0x2a80ce7048ac132d0100954060101c04e803575ce065501dcc0696009cc06", + "0x3d00caa033900c99013cc0caa033a40c160100954067501a360277ba9d209", + "0x3d80caa03bc80d2f013c9e20755019eaf4798265c027a8195406778193202", + "0x26404f9032a80cf10305804f8032a80cf6034c00402550180407013dc0d5e", + "0x198002012a80c024a00804aa030080e020157c0c0272809f40655019f006", + "0x3f00caa033c40c16013ec0caa033dc0d1e0100954060f0186e02012a80c63", + "0x954060101c04fe7ebf012067f01954067d81a3e027e819540603018dc02", + "0x954060f0186e02012a80c6303300040255019d0063280804aa030092802", + "0x195406014c40501032a80c020d00804aa030240d1b0100954067201a3602", + "0xa80502032a80c023d00a000655019ff010387804ff032a80cff0307004ff", + "0x180c6e014180caa030ac0c16014140caa034100d1e014100caa034020407", + "0x1804940100954060101c050883c1812068401954068281a3e02838195406", + "0x240d1b0100954067201a3602012a80c1e030dc040255018c6066000804aa", + "0x42c0caa030180c6e014280caa030ac0c16014240caa033940d1e010095406", + "0x804aa030240d1b0100954060101c050c85c2812068601954068481a3e02", + "0x2a80d0d0326404f9032a80c2b03058050d032a80c024b80804aa032040c37", + "0xa2a028801954060141c050f8701d54060f0182402012a80c024a009f406", + "0x1954068881822028a81954068801822028a01954067c8182c02888195406", + "0x180407014680d608b81954078981a220289c480eaa0345a2b1404cc80516", + "0x804aa034640c370146e32075501a30060900a30065501a2e068900804aa", + "0x1c0402b080954078f4740e15014780caa0346c0c28014740caa0343c0c28", + "0x4840caa0300a2a029001954060141c051f032a80cfa3181d3802012a80c02", + "0x266402930195406908182202928195406900182202920195406890182c02", + "0x4a00d629381954079181a22028f81954068f819780291c880eaa0349a4b24", + "0x1a52060880a58065501a44060b00a52065501a4e068900804aa030080e02", + "0x1e56068880a572a03aa80d2e96cb01332014b80caa034380c11014b40caa", + "0x195406950182c029881954069781a2402012a80c020380a6006b1cbc0caa", + "0x4cc0538032a80d31030440537032a80d1f032f00536032a80c06031b80535", + "0x2a80c020380a7406b24e40caa03cd00ce4014d2673204aa80d389bcda6a0c", + "0x1e68029e81954060110404025501a78063280a793b03aa80d39033ac0402", + "0x1a6606370099a065501a64060b00acc065501aca069a80aca065501a7b3b", + "0x1a74068f00804aa030080e02b459d9a09035a00caa035980d1f0159c0caa", + "0x5b00caa035a40d1f015ac0caa034cc0c6e015a80caa034c80c16015a40caa", + "0xada065501a60068f00804aa0347c0cc00100954060101c056cb5da81206", + "0x5bedc09035c00caa035b40d1f015bc0caa030180c6e015b80caa034a80c16", + "0x2a80d280347804025501a1c061b80804aa0347c0cc00100954060101c0570", + "0x1ae8065501ae2068f80ae606550180c063700ae4065501a44060b00ae206", + "0x182c02ba8195406014d804025501a1c061b80804aa030080e02ba5cee409", + "0x5e2ef7604cb80578032a80cfa032640577032a80d75032640576032a80d12", + "0x1af6069800804aa030080e02be81af97b032a80f7a034bc057abc81d5406", + "0x195406c05fc0f34016000caa030088202bf8195406bf18c0e9c015f80caa", + "0x47c0584032a80c06031b80583032a80d79030580582032a80d81034d40581", + "0x1a3c02012a80c630330004025501804070135f098304819ae065501b0406", + "0x2a80d850347c0587032a80c06031b80586032a80d79030580585032a80d7d", + "0x954067d01a3602012a80d0e030dc0402550180407016230f860481b1006", + "0x1a24060b00b12065501a34068f00804aa0343c0c37010095406318198002", + "0x80e02c662f1409036300caa036240d1f0162c0caa030180c6e016280caa", + "0x240d1b0100954060f0186e02012a80c63033000402550180494010095406", + "0xb1c065501856060b00b1a065501864068f00804aa030300c37010095406", + "0x804aa030080e02c863f1c09036400caa036340d1f0163c0caa030180c6e", + "0x804aa030780c37010095406318198002012a80c0c030dc0402550180494", + "0x180c063700b24065501854060b00b220655018e0068f00804aa030240d1b", + "0x18c2063280804aa030080e02ca64f2409036500caa036440d1f0164c0caa", + "0x18041a010095406038198002012a80c090346c04025501818061b80804aa", + "0x65c0caa0365b2a070f00b2c065501b2c060e00b2c06550180531016540caa", + "0x182c02cd0195406cc81a3c02cc8195406cbe600e2a016600caa03008f402", + "0xb3b9ccd8240d9d032a80d9a0347c059c032a80c06031b8059b032a80c02", + "0x804aa0301c0cc00100954060481a3602012a80c0c030dc0402550180407", + "0x2440d1f0167c0caa030180c6e016780caa030080c16012440caa030440d1e", + "0x804aa030080e020381b4206032a80e02034dc05a0cfe781206d00195406", + "0x82406030480caa030300d3a010300caa030240d39010240caa030180d38", + "0x2a80c59034ec0459032a80c071b81c54021b8195406011e80402550180407", + "0x2a80c06032640406032a80c020348804110301822065501850069d0085006", + "0x2a80e06034f40406032a80c07034f00407032a80c02030440407030180e06", + "0xdc0caa030480d66010480caa030240d650100954060101c040c036881206", + "0x440c060881954061401ad0021401954062c81ace022c81954061b8199a02", + "0x5a80415030182a06550182c06b40082c06550181806b480804aa030080e02", + "0xdc0f6b011640caa030240c99010dc0caa030080c16010240caa0301c0c07", + "0xa00d6d0100954060101c04110368c50065501c2406b6008240c03aa80c59", + "0x1954060a81ade02308195406060182c020a81954060b01adc020b0195406", + "0x5c00465032a80c020d00804aa030440c650100954060101c04633081c0c63", + "0x2a80c023d008ce0655018346503878041a032a80c1a03070041a032a80c02", + "0xa80caa030300c16011e80caa030780d71010780caa0319c3807150083806", + "0xdc2407d203012075501c0e0601026e402100a80e061001954063d01ade02", + "0x18b206ba00850065501812060b008b206550181806b980804aa030080e02", + "0x480c16010580caa030dc0d750100954060101c0402d281804e5010440caa", + "0x18c0caa030440d7a010540caa0300af2020881954060b01ae802140195406", + "0x1b4c1a032a80e61034440461032a80c653181eec023281954060a8183802", + "0x780d6e010780caa030700d6d010700caa030680d120100954060101c0467", + "0x80e02100a80e061001954063d01ade02150195406140182c023d0195406", + "0x900caa031b80d6f0108c0caa030a00c16011b80caa0319c0d71010095406", + "0x1954070301af0020301954060381aee020381954060101932021208c0e06", + "0x86e06550182406be8082406550181206bd80804aa030080e020601b4e09", + "0x82206030440caa030a00d80010a00caa031640d7f011640caa030dc0d7e", + "0x2704020a8180c15032a80c16036000416032a80c0c036040402550180407", + "0x8b206550181806c180804aa030080e021b8480fa8060240eaa0381c0c02", + "0x954060101c0402d481804e5010440caa031640d84010a00caa030240c16", + "0xb0a020881954060b01b0802140195406090182c020b01954061b819ae02", + "0x2a80c653181f0e023281954060a81838023181954060881b0c020a8195406", + "0x700caa030680d300100954060101c0467036a834065501cc20697808c206", + "0x1b1402150195406140182c023d01954060f01b12020f01954060e01b1002", + "0xa00c16011b80caa0319c0d8b0100954060101c04201501c0c20032a80c7a", + "0x3012075501c0e060102718021208c0e061201954063701b1402118195406", + "0x850065501812060b008b206550181806b980804aa030080e021b8480fab", + "0x580caa030dc0d750100954060101c0402d601804e5010440caa031640d74", + "0x440d7a010540caa0300b1a020881954060b01ae802140195406090182c02", + "0x2a80e61034440461032a80c653181eec023281954060a8183802318195406", + "0x780caa030700d6d010700caa030680d120100954060101c0467036b43406", + "0xa80e061001954063d01ade02150195406140182c023d01954060f01adc02", + "0x1b80d6f0108c0caa030a00c16011b80caa0319c0d710100954060101c0420", + "0x2a80c0c03098040c032a80c021200804aa0300928021208c0e06120195406", + "0x240c120100954060101c04282c81f5c370901d5407060180409380081806", + "0x2a80c61030dc04633081d54060a81824020a81954060145404160881d5406", + "0x540412032a80c1203058041a032a80c63030a00465032a80c16030a00402", + "0x2a80c67032640467032a80c02c700804aa030080e02016bc04aa03868ca07", + "0x840065501824060b0083c06550180515010700caa0319c0e074e008ce06", + "0x8547a03aa80c233708013320108c0caa030780c11011b80caa030440c11", + "0x1a2402012a80c02038084c06d80900caa038a80d11010700caa030700cbc", + "0x2a80c1c032f0042f032a80c37031b8047b032a80c7a030580470032a80c24", + "0xb40ce4010b4567304aa80c7f3e8bcf60c99808fe0655018e00608808fa06", + "0x19080632809083503aa80c32033ac0402550180407012040db1190195407", + "0x878065501874069a808740655018723503cd00439032a80c022080804aa", + "0xf90c09032240caa030f00d1f010f80caa030ac0c6e012180caa031cc0c16", + "0xac0c6e011040caa031cc0c16011000caa032040d1e0100954060101c0489", + "0x700cc00100954060101c04922190412064901954062001a3e02218195406", + "0x11c0caa030dc0c6e012500caa031e80c16011140caa030980d1e010095406", + "0x804aa030440c370100954060101c049723a5012064b81954062281a3e02", + "0x180441012700caa032640e074e00932065501932064c8093206550180536", + "0x195406090182c025001954064f01a6a024f019540625a700f340112c0caa", + "0x2a80c02038095eae000240caf032a80ca00347c04ae032a80c37031b80400", + "0x2a80c0244809600655018041a010095406038198002012a80c09030dc0402", + "0x9660655018047a012c80caa032c560070f00962065501962060e0096206", + "0x18dc025a81954062c8182c025a01954065681a3c02568195406592cc0e2a", + "0x80e06550180406088096eb65a8240cb7032a80cb40347c04b6032a80c28", + "0x1b2002012a80c02038081806d90240caa038180d0b010180caa0301c0d8f", + "0x80e022c8180c59032a80c37036480437032a80c12036440412032a80c09", + "0x1838020881954060164c0428032a80c020d00804aa030300c65010095406", + "0x182c15038a80415032a80c023d0082c06550182228038780411032a80c11", + "0x180407ca808ca06031940caa0318c0d920118c0caa031840d94011840caa", + "0x180e060b0082406550181206cb00804aa030080e020601b66090381d5407", + "0x1804410100954060101c0402da01804e5011640caa030480d97010dc0caa", + "0x1640caa030440d97010dc0caa030300c16010440caa030a00d98010a00caa", + "0x1954070101b36020a8580e060a81954062c81b34020b01954061b81b3202", + "0x5b8040c032a80c07035b40402550180c064080804aa030080e020481b6a07", + "0x240c370100954060101c0437030186e06550182406b78082406550181806", + "0x8220655018047a010a00caa03018b2070f008b20655018041a010095406", + "0x1840c063081954060a81ade020a81954060b01ae2020b0195406140440e2a", + "0x300db60481954070301a58020301954060381b3802038195406010193202", + "0x186e06cf0086e06550182406488082406550181206ce80804aa030080e02", + "0x8500655018041a01009540606018ca02012a80c0203808b206031640caa", + "0x18047a010580caa0304450070f00822065501822060e008220655018059f", + "0x1954063181b3c023181954063081b40023081954060b0540e2a010540caa", + "0x2a80c06032040402550180407010240db80381954070101b6e02328180c65", + "0x180c37032a80c12036280412032a80c0c03624040c032a80c07036200402", + "0x180c59038780459032a80c020d00804aa030240d1b0100954060101c0437", + "0x540caa030580d8b010580caa030a0220715008220655018047a010a00caa", + "0x954060101c0406036e804aa038080db9011840c063081954060a81b1402", + "0x1804e5010300caa030240dbc010240caa0301c0dbb0101c0caa030088202", + "0x1b7c020601954060901b78020901954060301acc02012a80c020380805bd", + "0x88202012a80c02038080c06e000954070101b7e021b8180c37032a80c0c", + "0x805c303009ca020601954060481b84020481954060381b8202038195406", + "0x2a80c0c03710040c032a80c12037080412032a80c06035f40402550180407", + "0x85059039640c020481c0c02309640c0206048b206010304c37030186e06", + "0x813c5030085009038240e076d8240e060119cb20601030ca590300818d6", + "0x30120703008e0590300818370e078b206010df8c0703008dc06010245406", + "0x180412e48240e06011ec0c02048785606010339006011cc0c231181f8e12", + "0xdc0dcc010700c1c0372c0481031fc0dca060240e06011f40c02048dc381e", + "0x1b9e07030091202038dc6e0204f380e060122404071b8dc0409e68090c06", + "0x7480e060122404071b8dc0409e881c0c024a0080e1c0e00813d0012480c1c", + "0x93202038700407ea0092e061b81ba60903818047d0300812370f018040c", + "0x186e06ec01804940301d4007eb8093c060e01bac06012240c074e01faa06", + "0x1da011040c1c03764043a" + ], + "sierra_program_debug_info": { + "type_names": [], + "libfunc_names": [], + "user_func_names": [] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x3d91620ebfd3035266d72c83df4f0f314ade6a3449bc2193fe8078df7553873", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "impl", + "name": "Keccak", + "interface_name": "test_cairo_keccak::test_cairo_keccak::IKeccak" + }, + { + "type": "interface", + "name": "test_cairo_keccak::test_cairo_keccak::IKeccak", + "items": [ + { + "type": "function", + "name": "cairo_keccak_test", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "test_cairo_keccak::test_cairo_keccak::Keccak::Event", + "kind": "enum", + "variants": [] + } + ] +} \ No newline at end of file From a4c45ebf7cb40310bf6a76a943f6a7522a5a111f Mon Sep 17 00:00:00 2001 From: juanbono Date: Tue, 1 Aug 2023 21:31:45 -0300 Subject: [PATCH 19/20] correct the keccak price --- src/syscalls/business_logic_syscall_handler.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/syscalls/business_logic_syscall_handler.rs b/src/syscalls/business_logic_syscall_handler.rs index 5442e8c2e..233324751 100644 --- a/src/syscalls/business_logic_syscall_handler.rs +++ b/src/syscalls/business_logic_syscall_handler.rs @@ -111,7 +111,7 @@ lazy_static! { map.insert("emit_event", SYSCALL_BASE + 10 * STEP); map.insert("send_message_to_l1", SYSCALL_BASE + 50 * STEP); map.insert("get_block_timestamp", 0); - map.insert("keccak", SYSCALL_BASE); // TODO: revisit this + map.insert("keccak", 0); map }; @@ -404,7 +404,13 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { // Check and reduce gas (after validating the syscall selector for consistency wth the OS). let required_gas = SYSCALL_GAS_COST .get(syscall_name) - .map(|&x| x - SYSCALL_BASE) + .map(|&x| { + if x > SYSCALL_BASE { + x - SYSCALL_BASE + } else { + 0 + } + }) .ok_or(SyscallHandlerError::SelectorDoesNotHaveAssociatedGas( selector.to_string(), ))?; From b1805e8721444cbe3043422a61fb3b15f6e1c2ce Mon Sep 17 00:00:00 2001 From: juanbono Date: Wed, 2 Aug 2023 10:58:31 -0300 Subject: [PATCH 20/20] fixes --- Cargo.toml | 3 ++- src/definitions/constants.rs | 2 +- src/syscalls/business_logic_syscall_handler.rs | 12 ++++-------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f35e73ebe..375e2d6f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,7 +38,8 @@ serde_json = { version = "1.0", features = [ "raw_value", ] } sha3 = "0.10.1" -keccak = "0.1.3" # TODO: use sha3 instead of this +# TODO: Replace with sha3. We should look how to integrate it correctly to calculate sn_keccak +keccak = "0.1.3" starknet_api = { workspace = true } starknet-crypto = "0.5.1" thiserror = { workspace = true } diff --git a/src/definitions/constants.rs b/src/definitions/constants.rs index 5683b78a3..bcd2a257e 100644 --- a/src/definitions/constants.rs +++ b/src/definitions/constants.rs @@ -63,7 +63,7 @@ lazy_static! { ("ec_op_builtin".to_string(), N_STEPS_FEE_WEIGHT * 1024.0), ("poseidon_builtin".to_string(), N_STEPS_FEE_WEIGHT * 32.0), ("segment_arena_builtin".to_string(), N_STEPS_FEE_WEIGHT * 10.0), - // ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 2048.0), // 2**11 + ("keccak_builtin".to_string(), N_STEPS_FEE_WEIGHT * 2048.0), // 2**11 ]); pub static ref DEFAULT_SEQUENCER_ADDRESS: Address = Address(felt_str!( "3711666a3506c99c9d78c4d4013409a87a962b7a0880a1c24af9fe193dafc01", diff --git a/src/syscalls/business_logic_syscall_handler.rs b/src/syscalls/business_logic_syscall_handler.rs index 233324751..e6e458bcf 100644 --- a/src/syscalls/business_logic_syscall_handler.rs +++ b/src/syscalls/business_logic_syscall_handler.rs @@ -404,13 +404,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { // Check and reduce gas (after validating the syscall selector for consistency wth the OS). let required_gas = SYSCALL_GAS_COST .get(syscall_name) - .map(|&x| { - if x > SYSCALL_BASE { - x - SYSCALL_BASE - } else { - 0 - } - }) + .map(|&x| x.saturating_sub(SYSCALL_BASE)) .ok_or(SyscallHandlerError::SelectorDoesNotHaveAssociatedGas( selector.to_string(), ))?; @@ -987,7 +981,9 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { let chunk_start = (request.input_start + i * 17)?; let chunk = get_felt_range(vm, chunk_start, (chunk_start + 17)?)?; for (i, val) in chunk.iter().enumerate() { - state[i] ^= val.to_u64().unwrap(); + state[i] ^= val.to_u64().ok_or_else(|| { + SyscallHandlerError::Conversion("Felt252".to_string(), "u64".to_string()) + })?; } keccak::f1600(&mut state) }