From df2cd9d4404790fbb7a5e6cf17a530a98b7110b4 Mon Sep 17 00:00:00 2001 From: Dori Medini Date: Sat, 19 Oct 2024 18:10:07 +0300 Subject: [PATCH] test(blockifier): add class hash (if set) to cairo1 revert trace --- .../blockifier/src/execution/stack_trace.rs | 7 ++- .../src/execution/stack_trace_test.rs | 55 ++++++++++--------- .../syscalls/syscall_tests/failure_format.rs | 2 +- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/crates/blockifier/src/execution/stack_trace.rs b/crates/blockifier/src/execution/stack_trace.rs index 9f0043e5534..9012c015180 100644 --- a/crates/blockifier/src/execution/stack_trace.rs +++ b/crates/blockifier/src/execution/stack_trace.rs @@ -159,8 +159,13 @@ pub fn extract_trailing_cairo1_revert_trace(root_callinfo: &CallInfo) -> String .tail_iter() .map(|callinfo| { format!( - "Error in contract (contract address: {:#064x}, selector: {:#064x}):\n{}", + "Error in contract (contract address: {:#064x}, class hash: {}, selector: \ + {:#064x}):\n{}", callinfo.call.storage_address.0.key(), + match callinfo.call.class_hash { + Some(class_hash) => format!("{:#064x}", class_hash.0), + None => "_".to_string(), + }, callinfo.call.entry_point_selector.0, format_panic_data(&callinfo.execution.retdata.0) ) diff --git a/crates/blockifier/src/execution/stack_trace_test.rs b/crates/blockifier/src/execution/stack_trace_test.rs index 5fd4cffa5be..6f37fa206f6 100644 --- a/crates/blockifier/src/execution/stack_trace_test.rs +++ b/crates/blockifier/src/execution/stack_trace_test.rs @@ -215,17 +215,17 @@ An ASSERT_EQ instruction failed: 1 != 0. 0: Error in the called contract (contract address: {account_address_felt:#064x}, class hash: \ {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): Execution failed. Failure reason: -Error in contract (contract address: {account_address_felt:#064x}, selector: \ - {execute_selector_felt:#064x}): +Error in contract (contract address: {account_address_felt:#064x}, class hash: \ + {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): (0x6661696c ('fail'), 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED'), \ 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {test_contract_address_felt:#064x}, selector: \ - {external_entry_point_selector_felt:#064x}): +Error in contract (contract address: {test_contract_address_felt:#064x}, class hash: \ + {test_contract_hash:#064x}, selector: {external_entry_point_selector_felt:#064x}): (0x6661696c ('fail'), 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {test_contract_address_2_felt:#064x}, selector: \ - {inner_entry_point_selector_felt:#064x}): +Error in contract (contract address: {test_contract_address_2_felt:#064x}, class hash: \ + {test_contract_hash:#064x}, selector: {inner_entry_point_selector_felt:#064x}): 0x6661696c ('fail'). " ); @@ -343,17 +343,17 @@ Unknown location (pc=0:{expected_pc1}) 0: Error in the called contract (contract address: {account_address_felt:#064x}, class hash: \ {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): Execution failed. Failure reason: -Error in contract (contract address: {account_address_felt:#064x}, selector: \ - {execute_selector_felt:#064x}): +Error in contract (contract address: {account_address_felt:#064x}, class hash: \ + {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): ({expected_error}, 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED'), \ 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {contract_address_felt:#064x}, selector: \ - {invoke_call_chain_selector_felt:#064x}): +Error in contract (contract address: {contract_address_felt:#064x}, class hash: \ + {test_contract_hash:#064x}, selector: {invoke_call_chain_selector_felt:#064x}): ({expected_error}, 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {contract_address_felt:#064x}, selector: \ - {invoke_call_chain_selector_felt:#064x}): +Error in contract (contract address: {contract_address_felt:#064x}, class hash: \ + {test_contract_hash:#064x}, selector: {invoke_call_chain_selector_felt:#064x}): {expected_error}. " ) @@ -501,23 +501,23 @@ Unknown location (pc=0:{expected_pc3}) 0: Error in the called contract (contract address: {account_address_felt:#064x}, class hash: \ {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): Execution failed. Failure reason: -Error in contract (contract address: {account_address_felt:#064x}, selector: \ - {execute_selector_felt:#064x}): +Error in contract (contract address: {account_address_felt:#064x}, class hash: \ + {account_contract_hash:#064x}, selector: {execute_selector_felt:#064x}): ({expected_error}, 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED'), \ 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED'), \ 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {address_felt:#064x}, selector: \ - {invoke_call_chain_selector_felt:#064x}): +Error in contract (contract address: {address_felt:#064x}, class hash: {test_contract_hash:#064x}, \ + selector: {invoke_call_chain_selector_felt:#064x}): ({expected_error}, 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED'), \ 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {address_felt:#064x}, selector: \ - {invoke_call_chain_selector_felt:#064x}): +Error in contract (contract address: {address_felt:#064x}, class hash: {test_contract_hash:#064x}, \ + selector: {invoke_call_chain_selector_felt:#064x}): ({expected_error}, 0x454e545259504f494e545f4641494c4544 ('ENTRYPOINT_FAILED')) -Error in contract (contract address: {address_felt:#064x}, selector: \ - {last_func_selector_felt:#064x}): +Error in contract (contract address: {address_felt:#064x}, class hash: {test_contract_hash:#064x}, \ + selector: {last_func_selector_felt:#064x}): {expected_error}. " ) @@ -617,8 +617,10 @@ An ASSERT_EQ instruction failed: 1 != 0. ), CairoVersion::Cairo1 => format!( "The `validate` entry point panicked with: -Error in contract (contract address: {contract_address:#064x}, selector: {selector:#064x}): -0x496e76616c6964207363656e6172696f ('Invalid scenario')." +Error in contract (contract address: {contract_address:#064x}, class hash: {:#064x}, selector: \ + {selector:#064x}): +0x496e76616c6964207363656e6172696f ('Invalid scenario').", + class_hash.0 ), }; @@ -685,10 +687,11 @@ An ASSERT_EQ instruction failed: 1 != 0. .to_string(), CairoVersion::Cairo1 => format!( "Execution failed. Failure reason: -Error in contract (contract address: {expected_address:#064x}, selector: \ +Error in contract (contract address: {expected_address:#064x}, class hash: {:#064x}, selector: \ {expected_selector:#064x}): 0x496e76616c6964207363656e6172696f ('Invalid scenario'). -" +", + class_hash.0 ) .to_string(), }; @@ -818,11 +821,13 @@ Error at pc=0:{}: Error at pc=0:{}: {frame_2} Execution failed. Failure reason: -Error in contract (contract address: {expected_address:#064x}, selector: {:#064x}): +Error in contract (contract address: {expected_address:#064x}, class hash: {:#064x}, selector: \ + {:#064x}): 0x496e76616c6964207363656e6172696f ('Invalid scenario'). ", execute_offset + 205, deploy_offset + 194, + faulty_class_hash.0, ctor_selector.0 ) } diff --git a/crates/blockifier/src/execution/syscalls/syscall_tests/failure_format.rs b/crates/blockifier/src/execution/syscalls/syscall_tests/failure_format.rs index fd582b4c7bd..98285f18e18 100644 --- a/crates/blockifier/src/execution/syscalls/syscall_tests/failure_format.rs +++ b/crates/blockifier/src/execution/syscalls/syscall_tests/failure_format.rs @@ -34,7 +34,7 @@ fn test_syscall_failure_format() { error.to_string(), format!( "Execution failed. Failure reason: -Error in contract (contract address: {:#064x}, selector: {:#064x}): +Error in contract (contract address: {:#064x}, class hash: _, selector: {:#064x}): \"Execution failure\".", ContractAddress::default().0.key(), EntryPointSelector::default().0