Skip to content

Commit

Permalink
Specify sierra version in Contract Executor (#1078)
Browse files Browse the repository at this point in the history
* Add sierra version tu contract executor

* Adapt tests

* Update starknet-block refs

* Update cmp script

* Add major version check
  • Loading branch information
JulianGCalderon authored Feb 3, 2025
1 parent 33606e4 commit 03273cb
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 9 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/starknet-blocks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
with:
repository: lambdaclass/starknet-replay
path: starknet-replay
ref: 546457d800fd02f080888331aebecc15824bed91
ref: 313a19cce2e930cbd644606aa732b6408fcf2246
# We need native to build the runtime
- name: Checkout Native
uses: actions/checkout@v4
Expand All @@ -43,7 +43,7 @@ jobs:
with:
repository: lambdaclass/sequencer
path: sequencer
ref: 15d6452d162ad5e3538e673d1e4df5abcff9452f
ref: f9b0f034e55c63103c11248b59b7f85da6eaef65

- name: Cache RPC Calls
uses: actions/cache@v4
Expand Down
4 changes: 2 additions & 2 deletions scripts/cmp_state_dumps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ for vm_dump in state_dumps/vm/*/*.json; do
block=${block_name//block/}

if ! cmp -s \
<(sed '/"reverted": /d' "$native_dump") \
<(sed '/"reverted": /d' "$vm_dump")
<(sed '/"revert_error": /d' "$native_dump") \
<(sed '/"revert_error": /d' "$vm_dump")
then
echo "Diff at block $block, tx $tx"
diffing=$((diffing+1))
Expand Down
34 changes: 30 additions & 4 deletions src/executor/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,17 @@ use cairo_lang_sierra::{
ids::FunctionId,
program::Program,
};
use cairo_lang_starknet_classes::casm_contract_class::ENTRY_POINT_COST;
use cairo_lang_starknet_classes::contract_class::ContractEntryPoints;
use cairo_lang_starknet_classes::{
casm_contract_class::ENTRY_POINT_COST, compiler_version::VersionId,
};
use educe::Educe;
use libloading::Library;
use serde::{Deserialize, Serialize};
use starknet_types_core::felt::Felt;
use std::{
alloc::Layout,
cmp::Ordering,
collections::{BTreeMap, HashSet},
ffi::c_void,
path::{Path, PathBuf},
Expand Down Expand Up @@ -132,6 +135,7 @@ impl AotContractExecutor {
pub fn new(
sierra_program: &Program,
entry_points: &ContractEntryPoints,
sierra_version: VersionId,
opt_level: OptLevel,
) -> Result<Self> {
let native_context = NativeContext::new();
Expand All @@ -150,6 +154,12 @@ impl AotContractExecutor {
used_function_ids.insert(entry.function_idx as u64);
}

// true if sierra version is at least 1.4
let no_eq_solver = match sierra_version.major.cmp(&1) {
Ordering::Less => false,
Ordering::Equal => sierra_version.minor >= 4,
Ordering::Greater => true,
};
let module = native_context.compile(
sierra_program,
true,
Expand All @@ -163,8 +173,8 @@ impl AotContractExecutor {
)
})
.collect(),
linear_gas_solver: false,
linear_ap_change_solver: false,
linear_gas_solver: no_eq_solver,
linear_ap_change_solver: no_eq_solver,
}),
)?;

Expand Down Expand Up @@ -611,7 +621,9 @@ impl Drop for AotContractExecutor {
mod tests {
use super::*;
use crate::{starknet_stub::StubSyscallHandler, utils::test::load_starknet_contract};
use cairo_lang_starknet_classes::contract_class::ContractClass;
use cairo_lang_starknet_classes::contract_class::{
version_id_from_serialized_sierra_program, ContractClass,
};
use rayon::iter::ParallelBridge;
use rstest::*;

Expand Down Expand Up @@ -704,10 +716,13 @@ mod tests {
) {
use rayon::iter::ParallelIterator;

let (sierra_version, _) =
version_id_from_serialized_sierra_program(&starknet_program.sierra_program).unwrap();
let executor = Arc::new(
AotContractExecutor::new(
&starknet_program.extract_sierra_program().unwrap(),
&starknet_program.entry_points_by_type,
sierra_version,
optlevel,
)
.unwrap(),
Expand Down Expand Up @@ -741,9 +756,12 @@ mod tests {
#[case(OptLevel::None)]
#[case(OptLevel::Default)]
fn test_contract_executor(starknet_program: ContractClass, #[case] optlevel: OptLevel) {
let (sierra_version, _) =
version_id_from_serialized_sierra_program(&starknet_program.sierra_program).unwrap();
let executor = AotContractExecutor::new(
&starknet_program.extract_sierra_program().unwrap(),
&starknet_program.entry_points_by_type,
sierra_version,
optlevel,
)
.unwrap();
Expand Down Expand Up @@ -776,9 +794,13 @@ mod tests {
starknet_program_factorial: ContractClass,
#[case] optlevel: OptLevel,
) {
let (sierra_version, _) =
version_id_from_serialized_sierra_program(&starknet_program_factorial.sierra_program)
.unwrap();
let executor = AotContractExecutor::new(
&starknet_program_factorial.extract_sierra_program().unwrap(),
&starknet_program_factorial.entry_points_by_type,
sierra_version,
optlevel,
)
.unwrap();
Expand Down Expand Up @@ -812,9 +834,13 @@ mod tests {
starknet_program_empty: ContractClass,
#[case] optlevel: OptLevel,
) {
let (sierra_version, _) =
version_id_from_serialized_sierra_program(&starknet_program_empty.sierra_program)
.unwrap();
let executor = AotContractExecutor::new(
&starknet_program_empty.extract_sierra_program().unwrap(),
&starknet_program_empty.entry_points_by_type,
sierra_version,
optlevel,
)
.unwrap();
Expand Down
5 changes: 4 additions & 1 deletion tests/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use cairo_lang_starknet::{
};
use cairo_lang_starknet_classes::{
casm_contract_class::{CasmContractClass, ENTRY_POINT_COST},
contract_class::ContractClass,
contract_class::{version_id_from_serialized_sierra_program, ContractClass},
};
use cairo_lang_utils::Upcast;
use cairo_native::{
Expand Down Expand Up @@ -448,9 +448,12 @@ pub fn run_native_starknet_aot_contract(
args: &[Felt],
handler: impl StarknetSyscallHandler,
) -> ContractExecutionResult {
let (sierra_version, _) =
version_id_from_serialized_sierra_program(&contract.sierra_program).unwrap();
let native_executor = AotContractExecutor::new(
&contract.extract_sierra_program().unwrap(),
&contract.entry_points_by_type,
sierra_version,
Default::default(),
)
.unwrap();
Expand Down

0 comments on commit 03273cb

Please sign in to comment.