diff --git a/Cargo.toml b/Cargo.toml index 2b4d952..edec0e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,11 +4,11 @@ version = "0.1.0" edition = "2021" [dependencies] -cairo-lang-sierra = "2.8.0" -cairo-lang-sierra-ap-change = "2.8.0" -cairo-lang-sierra-gas = "2.8.0" -cairo-lang-utils = "2.8.0" -clap = { version = "4.5.16", features = ["derive"] } +cairo-lang-sierra = "2.8.2" +cairo-lang-sierra-ap-change = "2.8.2" +cairo-lang-sierra-gas = "2.8.2" +cairo-lang-utils = "2.8.2" +clap = { version = "4.5.17", features = ["derive"] } k256 = "0.13.3" keccak = "0.1.5" num-bigint = "0.4.6" @@ -16,20 +16,20 @@ num-traits = "0.2.19" p256 = "0.13.2" rand = "0.8.5" sec1 = { version = "0.7.3", features = ["std"] } -serde = { version = "1.0.209", features = ["derive"] } -serde_json = "1.0.127" +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" sha2 = { version = "0.10.8", features = ["compress"] } smallvec = "1.13.2" -starknet-crypto = "0.7.1" -starknet-curve = "0.5.0" -starknet-types-core = "0.1.2" +starknet-crypto = "0.7.2" +starknet-curve = "0.5.1" +starknet-types-core = "0.1.5" thiserror = "1.0.63" tracing = "0.1.40" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } [dev-dependencies] -cairo-lang-compiler = "2.8.0" -cairo-lang-starknet = "2.8.0" +cairo-lang-compiler = "2.8.2" +cairo-lang-starknet = "2.8.2" # On dev optimize dependencies a bit so it's not as slow. [profile.dev.package."*"] diff --git a/Makefile b/Makefile index 82e3043..17bbae5 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ UNAME := $(shell uname) -CAIRO_2_VERSION=2.8.0 -SCARB_VERSION = 2.8.0 +CAIRO_2_VERSION=2.8.2 +SCARB_VERSION = 2.8.2 needs-cairo2: ifeq ($(wildcard ./cairo2/.),) diff --git a/src/vm/const.rs b/src/vm/const.rs index 77e3f20..f8c1b59 100644 --- a/src/vm/const.rs +++ b/src/vm/const.rs @@ -55,7 +55,20 @@ pub fn eval_as_immediate( [GenericArg::Value(value)] => Value::Felt(value.into()), _ => unreachable!(), }, - CoreTypeConcrete::NonZero(info) => inner(registry, &info.ty, inner_data), + CoreTypeConcrete::NonZero(_) => match inner_data { + // Copied from the sierra to casm lowering + // NonZero is the same type as the inner type in native. + [GenericArg::Type(inner_ty)] => { + let inner_type = registry.get_type(inner_ty).unwrap(); + let const_inner_type = match inner_type { + CoreTypeConcrete::Const(inner) => inner, + _ => unreachable!(), + }; + + inner(registry, &const_inner_type.inner_ty, &const_inner_type.inner_data) + } + _ => unreachable!(), + }, CoreTypeConcrete::Sint8(_) => match inner_data { [GenericArg::Value(value)] => Value::I8(value.try_into().unwrap()), _ => unreachable!(), @@ -70,6 +83,14 @@ pub fn eval_as_immediate( }, CoreTypeConcrete::Uint128(_) => match inner_data { [GenericArg::Value(value)] => Value::U128(value.try_into().unwrap()), + x => unreachable!("{:?}", x), + }, + CoreTypeConcrete::Uint64(_) => match inner_data { + [GenericArg::Value(value)] => Value::U64(value.try_into().unwrap()), + x => unreachable!("{:?}", x), + }, + CoreTypeConcrete::Uint16(_) => match inner_data { + [GenericArg::Value(value)] => Value::U16(value.try_into().unwrap()), _ => unreachable!(), }, CoreTypeConcrete::Struct(_) => { @@ -80,14 +101,14 @@ pub fn eval_as_immediate( GenericArg::Type(const_field_ty) => { let field_type = registry.get_type(const_field_ty).unwrap(); - match &field_type { - CoreTypeConcrete::Const(const_ty) => { - let field_value = - inner(registry, &const_ty.inner_ty, &const_ty.inner_data); - fields.push(field_value); - } + let const_field_type = match &field_type { + CoreTypeConcrete::Const(inner) => inner, _ => unreachable!(), }; + + let field_value = + inner(registry, &const_field_type.inner_ty, &const_field_type.inner_data); + fields.push(field_value); } _ => unreachable!(), } diff --git a/src/vm/uint252.rs b/src/vm/uint252.rs index d57682e..77b6626 100644 --- a/src/vm/uint252.rs +++ b/src/vm/uint252.rs @@ -88,6 +88,8 @@ pub fn eval_divmod( let lhs = u256_to_biguint(lhs_lo, lhs_hi); + + let [Value::U128(rhs_lo), Value::U128(rhs_hi)]: [Value; 2] = rhs.try_into().unwrap() else { panic!() };