Skip to content

Panic while executing an EC operation in a _debug_ build #1205

@kkovaacs

Description

@kkovaacs

Describe the bug
I was re-executing already existing transactions on the Starknet testnet and noticed that cairo-vm panics while executing some of those transactions.

Panics here because in debug builds overflow during u32 arithmetic operations panics: https://github.com/lambdaclass/cairo-rs/blob/ae87c315396e7456fb847f9f739254c4801101d2/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs#L515

The full panic message:

thread '<unnamed>' panicked at 'attempt to subtract with overflow', /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs:515:38
stack backtrace:
   0: rust_begin_unwind
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/panicking.rs:578:5
   1: core::panicking::panic_fmt
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/panicking.rs:67:14
   2: core::panicking::panic
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/panicking.rs:117:5
   3: cairo_vm::hint_processor::builtin_hint_processor::secp::ec_utils::n_pair_bits::{{closure}}
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs:515:38
   4: core::iter::adapters::map::map_fold::{{closure}}
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs:84:28
   5: core::iter::traits::iterator::Iterator::fold
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs:2482:21
   6: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs:124:9
   7: cairo_vm::hint_processor::builtin_hint_processor::secp::ec_utils::n_pair_bits
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs:513:24
   8: cairo_vm::hint_processor::builtin_hint_processor::secp::ec_utils::quad_bit
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/hint_processor/builtin_hint_processor/secp/ec_utils.rs:467:5
   9: <cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor as cairo_vm::hint_processor::hint_processor_definition::HintProcessor>::execute_hint
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs:763:36
  10: starknet_rs::core::syscalls::deprecated_syscall_handler::DeprecatedSyscallHintProcessor<T>::should_run_syscall_hint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_syscall_handler.rs:44:15
  11: <starknet_rs::core::syscalls::deprecated_syscall_handler::DeprecatedSyscallHintProcessor<T> as cairo_vm::hint_processor::hint_processor_definition::HintProcessor>::execute_hint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_syscall_handler.rs:150:12
  12: cairo_vm::vm::vm_core::VirtualMachine::step_hint
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/vm_core.rs:433:17
  13: cairo_vm::vm::vm_core::VirtualMachine::step
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/vm_core.rs:469:9
  14: cairo_vm::vm::runners::cairo_runner::CairoRunner::run_until_pc
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/runners/cairo_runner.rs:533:13
  15: cairo_vm::vm::runners::cairo_runner::CairoRunner::run_from_entrypoint
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/runners/cairo_runner.rs:940:9
  16: starknet_rs::starknet_runner::runner::StarknetRunner<H>::run_from_entrypoint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/starknet_runner/runner.rs:82:9
  17: starknet_rs::business_logic::execution::execution_entry_point::ExecutionEntryPoint::_execute_version0_class
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/execution/execution_entry_point.rs:314:9
  18: starknet_rs::business_logic::execution::execution_entry_point::ExecutionEntryPoint::execute
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/execution/execution_entry_point.rs:103:58
  19: starknet_rs::core::syscalls::deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler<T>::syscall_call_contract
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_business_logic_syscall_handler.rs:428:9
  20: starknet_rs::core::syscalls::deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler<T>::call_contract_and_write_response
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_business_logic_syscall_handler.rs:591:23
  21: starknet_rs::core::syscalls::deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler<T>::library_call
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_business_logic_syscall_handler.rs:726:9
  22: starknet_rs::core::syscalls::deprecated_syscall_handler::DeprecatedSyscallHintProcessor<T>::execute_syscall_hint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_syscall_handler.rs:94:17
  23: <starknet_rs::core::syscalls::deprecated_syscall_handler::DeprecatedSyscallHintProcessor<T> as cairo_vm::hint_processor::hint_processor_definition::HintProcessor>::execute_hint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/core/syscalls/deprecated_syscall_handler.rs:151:13
  24: cairo_vm::vm::vm_core::VirtualMachine::step_hint
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/vm_core.rs:433:17
  25: cairo_vm::vm::vm_core::VirtualMachine::step
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/vm_core.rs:469:9
  26: cairo_vm::vm::runners::cairo_runner::CairoRunner::run_until_pc
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/runners/cairo_runner.rs:533:13
  27: cairo_vm::vm::runners::cairo_runner::CairoRunner::run_from_entrypoint
             at /home/hidden/.cargo/git/checkouts/cairo-rs-550f844fbb3def24/de6a232/src/vm/runners/cairo_runner.rs:940:9
  28: starknet_rs::starknet_runner::runner::StarknetRunner<H>::run_from_entrypoint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/starknet_runner/runner.rs:82:9
  29: starknet_rs::business_logic::execution::execution_entry_point::ExecutionEntryPoint::_execute_version0_class
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/execution/execution_entry_point.rs:314:9
  30: starknet_rs::business_logic::execution::execution_entry_point::ExecutionEntryPoint::execute
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/execution/execution_entry_point.rs:103:58
  31: starknet_rs::business_logic::transaction::objects::internal_invoke_function::InternalInvokeFunction::run_validate_entrypoint
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/transaction/objects/internal_invoke_function.rs:138:25
  32: starknet_rs::business_logic::transaction::objects::internal_invoke_function::InternalInvokeFunction::apply
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/transaction/objects/internal_invoke_function.rs:200:13
  33: starknet_rs::business_logic::transaction::objects::internal_invoke_function::InternalInvokeFunction::execute
             at /home/hidden/Source/github.com/lambdaclass/starknet-in-rust/src/business_logic/transaction/objects/internal_invoke_function.rs:264:36
  34: pathfinder_rpc::cairo::starknet_rs::Transaction::execute
             at ./crates/rpc/src/cairo/starknet_rs.rs:279:40
  35: pathfinder_rpc::cairo::starknet_rs::estimate_fee_impl
             at ./crates/rpc/src/cairo/starknet_rs.rs:238:23
  36: pathfinder_rpc::cairo::starknet_rs::estimate_fee_for_gateway_transactions
             at ./crates/rpc/src/cairo/starknet_rs.rs:198:18
  37: re_execute::execute
             at ./crates/pathfinder/examples/re_execute.rs:122:15
  38: re_execute::main::{{closure}}::{{closure}}
             at ./crates/pathfinder/examples/re_execute.rs:53:40
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.```

**To Reproduce**
I don't yet have a standalone tool for reproduction. Right now you need the `re_execute` [tool](https://github.com/eqlabs/pathfinder/blob/krisztian/re-execute/crates/pathfinder/examples/re_execute.rs) from pathfinder for easy reproduction.

**Expected behavior**
cairo-vm should not panic.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions