diff --git a/.gitignore b/.gitignore index 3634da34334..fb9f7a2a112 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ .idea/ .spr.yml node_modules -.DS_Store +.DS_Store \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 971d6100063..b05350060f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1103,7 +1103,6 @@ dependencies = [ "salsa", "serde_json", "smol_str", - "snapbox", "starknet_api", "test-case", "thiserror", @@ -3116,12 +3115,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -4214,6 +4207,19 @@ dependencies = [ "keccak", ] +[[package]] +name = "sierra-compile" +version = "2.0.0-rc5" +dependencies = [ + "anyhow", + "cairo-lang-sierra 2.0.0-rc5", + "cairo-lang-sierra-to-casm 2.0.0-rc5", + "cairo-lang-utils 2.0.0-rc5", + "clap", + "indoc", + "log", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -4223,12 +4229,6 @@ dependencies = [ "libc", ] -[[package]] -name = "similar" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" - [[package]] name = "siphasher" version = "0.3.10" @@ -4259,28 +4259,6 @@ dependencies = [ "serde", ] -[[package]] -name = "snapbox" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bccd62078347f89a914e3004d94582e13824d4e3d8a816317862884c423835" -dependencies = [ - "anstream", - "anstyle", - "normalize-line-endings", - "similar", - "snapbox-macros", -] - -[[package]] -name = "snapbox-macros" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaaf09df9f0eeae82be96290918520214530e738a7fe5a351b0f24cf77c0ca31" -dependencies = [ - "anstream", -] - [[package]] name = "socket2" version = "0.4.9" diff --git a/Cargo.toml b/Cargo.toml index 6105c38ed9e..152352d13e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ members = [ "crates/bin/cairo-format", "crates/bin/cairo-test", "crates/bin/cairo-run", + "crates/bin/sierra-compile", "crates/bin/starknet-compile", "crates/bin/starknet-sierra-compile", "crates/bin/generate-syntax", diff --git a/corelib/src/cheatcodes.cairo b/corelib/src/cheatcodes.cairo index 7d9bf97882f..e12403521ca 100644 --- a/corelib/src/cheatcodes.cairo +++ b/corelib/src/cheatcodes.cairo @@ -1,28 +1,17 @@ use array::ArrayTrait; -use option::OptionTrait; +use array::SpanTrait; use clone::Clone; +use integer::Into; +use integer::TryInto; +use option::OptionTrait; +use starknet::testing::cheatcode; -extern fn start_roll( - block_number: felt252, target_contract_address: felt252 -) -> Result::<(), felt252> nopanic; - -extern fn stop_roll(target_contract_address: felt252) -> Result::<(), felt252> nopanic; - -extern fn start_warp( - block_timestamp: felt252, target_contract_address: felt252 -) -> Result::<(), felt252> nopanic; - -extern fn stop_warp(target_contract_address: felt252) -> Result::<(), felt252> nopanic; - -extern fn start_prank( - caller_address: felt252, target_contract_address: felt252 -) -> Result::<(), felt252> nopanic; - -extern fn stop_prank(target_contract_address: felt252) -> Result::<(), felt252> nopanic; - -extern fn declare(contract: felt252) -> Result:: nopanic; - -extern fn declare_cairo0(contract: felt252) -> Result:: nopanic; +#[derive(Drop, Clone)] +struct PreparedContract { + contract_address: felt252, + class_hash: felt252, + constructor_calldata: @Array::, +} #[derive(Drop, Clone)] struct RevertedTransaction { @@ -35,146 +24,62 @@ trait RevertedTransactionTrait { impl RevertedTransactionImpl of RevertedTransactionTrait { fn first(self: @RevertedTransaction) -> felt252 { - *self.panic_data.at(0_usize) - } -} - -extern fn invoke_impl( - contract_address: felt252, function_name: felt252, calldata: @Array:: -) -> Result::<(), Array> nopanic; - -fn invoke( - contract_address: felt252, function_name: felt252, calldata: @Array:: -) -> Result::<(), RevertedTransaction> nopanic { - match invoke_impl(contract_address, function_name, calldata) { - Result::Ok(x) => Result::<(), RevertedTransaction>::Ok(x), - Result::Err(x) => Result::<(), - RevertedTransaction>::Err(RevertedTransaction { panic_data: x, }) - } -} - -extern fn mock_call( - contract_address: felt252, function_name: felt252, response: @Array:: -) -> Result::<(), felt252> nopanic; - -#[derive(Drop, Clone)] -struct PreparedContract { - contract_address: felt252, - class_hash: felt252, - constructor_calldata: @Array::, -} - -// returns deployed `contract_address` -extern fn deploy_impl( - prepared_contract_address: felt252, - prepared_class_hash: felt252, - prepared_constructor_calldata: @Array:: -) -> Result::> nopanic; - -fn deploy(prepared_contract: PreparedContract) -> Result:: nopanic { - let PreparedContract{contract_address, class_hash, constructor_calldata } = prepared_contract; - match deploy_impl(contract_address, class_hash, constructor_calldata) { - Result::Ok(x) => Result::::Ok(x), - Result::Err(x) => Result::::Err(RevertedTransaction { panic_data: x, }) + *self.panic_data.at(0) } } -extern fn prepare_impl( - class_hash: felt252, calldata: @Array:: -) -> Result::<(Array::, felt252, felt252), felt252> nopanic; +fn declare(contract: felt252) -> Result:: { + let span = cheatcode::<'declare'>(array![contract].span()); -fn prepare( - class_hash: felt252, calldata: @Array:: -) -> Result:: nopanic { - match prepare_impl(class_hash, calldata) { - Result::Ok(( - constructor_calldata, contract_address, class_hash - )) => Result::::Ok( - PreparedContract { - constructor_calldata: @constructor_calldata, - contract_address: contract_address, - class_hash: class_hash, - } - ), - Result::Err(x) => Result::::Err(x) - } -} + let exit_code = *span[0]; + let result = *span[1]; -fn deploy_contract( - contract: felt252, calldata: @Array:: -) -> Result:: { - let mut class_hash: Option:: = Option::None(()); - match declare(contract) { - Result::Ok(x) => { - class_hash = Option::Some(x); - }, - Result::Err(x) => { - let mut panic_data = ArrayTrait::new(); - panic_data.append(x); - - return Result::::Err(RevertedTransaction { panic_data }); - } + if exit_code == 0 { + Result::::Ok(result) + } else { + Result::::Err(result) } - - let mut prepared_contract: Option:: = Option::None(()); - match prepare(class_hash.unwrap(), calldata) { - Result::Ok(x) => { - prepared_contract = Option::Some(x); - }, - Result::Err(x) => { - let mut panic_data = ArrayTrait::new(); - panic_data.append(x); - - return Result::::Err(RevertedTransaction { panic_data }); - } - } - deploy(prepared_contract.unwrap()) } -fn deploy_contract_cairo0( - contract: felt252, calldata: @Array:: -) -> Result:: { - let mut class_hash: Option:: = Option::None(()); - match declare_cairo0(contract) { - Result::Ok(x) => { - class_hash = Option::Some(x); - }, - Result::Err(x) => { - let mut panic_data = ArrayTrait::new(); - panic_data.append(x); - - return Result::::Err(RevertedTransaction { panic_data }); - } - } +fn deploy(prepared_contract: PreparedContract) -> Result:: { + let PreparedContract{contract_address, class_hash, constructor_calldata } = prepared_contract; + let mut inputs = array![contract_address, class_hash]; - let mut prepared_contract: Option:: = Option::None(()); - match prepare(class_hash.unwrap(), calldata) { - Result::Ok(x) => { - prepared_contract = Option::Some(x); - }, - Result::Err(x) => { - let mut panic_data = ArrayTrait::new(); - panic_data.append(x); + let calldata_len_felt = constructor_calldata.len().into(); + inputs.append(calldata_len_felt); - return Result::::Err(RevertedTransaction { panic_data }); + let calldata_len = constructor_calldata.len(); + let mut i = 0; + loop { + if calldata_len == i { + break (); } - } - deploy(prepared_contract.unwrap()) -} - -extern fn call_impl( - contract: felt252, function_name: felt252, calldata: @Array:: -) -> Result::, Array> nopanic; - + inputs.append(*constructor_calldata[i]); + i += 1; + }; + + let outputs = cheatcode::<'deploy'>(inputs.span()); + let exit_code = *outputs[0]; + + if exit_code == 0 { + let result = *outputs[1]; + Result::::Ok(result) + } else { + // TODO: feel free to change depending on the cheatcode::<'deploy'> low level implementation of error handling + let panic_data_len_felt = *outputs[1]; + let panic_data_len = panic_data_len_felt.try_into().unwrap(); + let mut panic_data = array![]; + + let offset = 2; + let mut i = offset; + loop { + if panic_data_len + offset == i { + break (); + } + panic_data.append(*outputs[i]); + i += 1; + }; -fn call( - contract: felt252, function_name: felt252, calldata: @Array:: -) -> Result::, RevertedTransaction> nopanic { - match call_impl(contract, function_name, calldata) { - Result::Ok(x) => Result::, RevertedTransaction>::Ok(x), - Result::Err(x) => Result::, - RevertedTransaction>::Err(RevertedTransaction { panic_data: x, }) + Result::::Err(RevertedTransaction { panic_data }) } } diff --git a/corelib/src/lib.cairo b/corelib/src/lib.cairo index edc914a5239..92fe69899e0 100644 --- a/corelib/src/lib.cairo +++ b/corelib/src/lib.cairo @@ -310,24 +310,9 @@ use starknet::System; // Cheatcodes mod cheatcodes; -use cheatcodes::start_roll; -use cheatcodes::stop_roll; use cheatcodes::declare; -use cheatcodes::declare_cairo0; -use cheatcodes::start_prank; -use cheatcodes::stop_prank; -use cheatcodes::start_warp; -use cheatcodes::stop_warp; -use cheatcodes::invoke; -use cheatcodes::mock_call; use cheatcodes::deploy; -use cheatcodes::deploy_impl; use cheatcodes::PreparedContract; -use cheatcodes::prepare_impl; -use cheatcodes::prepare; -use cheatcodes::deploy_contract; -use cheatcodes::deploy_contract_cairo0; -use cheatcodes::call; mod protostar_print; diff --git a/corelib/src/protostar_print.cairo b/corelib/src/protostar_print.cairo index d38df6eb637..23d631619c4 100644 --- a/corelib/src/protostar_print.cairo +++ b/corelib/src/protostar_print.cairo @@ -1,14 +1,15 @@ use array::ArrayTrait; use traits::Into; -use starknet::ContractAddressIntoFelt252; use option::Option; +use starknet::ContractAddressIntoFelt252; +use starknet::testing::cheatcode; extern fn print(message: Array) nopanic; fn print_felt252(message: felt252) { let mut arr = ArrayTrait::new(); arr.append(message); - print(arr); + cheatcode::<'print'>(arr.span()); } trait PrintTrait { @@ -64,6 +65,6 @@ impl U256PrintImpl of PrintTrait { impl ArrayGenericPrintImpl of PrintTrait> { fn print(mut self: Array::) { - print(self); + cheatcode::<'print'>(self.span()); } } diff --git a/crates/bin/cairo-compile/src/main.rs b/crates/bin/cairo-compile/src/main.rs index 4729f73dabb..5244f4f9b88 100644 --- a/crates/bin/cairo-compile/src/main.rs +++ b/crates/bin/cairo-compile/src/main.rs @@ -36,7 +36,6 @@ fn main() -> anyhow::Result<()> { let sierra_program = compile_cairo_project_at_path( &args.path, CompilerConfig { replace_ids: args.replace_ids, ..CompilerConfig::default() }, - None, )?; match args.output { diff --git a/crates/bin/sierra-compile/src/main.rs b/crates/bin/sierra-compile/src/main.rs index ad2c0e9cea9..256ce4aee7f 100644 --- a/crates/bin/sierra-compile/src/main.rs +++ b/crates/bin/sierra-compile/src/main.rs @@ -40,4 +40,4 @@ fn main() -> anyhow::Result<()> { .with_context(|| "Compilation failed.")?; fs::write(args.output, format!("{cairo_program}")).with_context(|| "Failed to write output.") -} \ No newline at end of file +} diff --git a/crates/cairo-lang-casm/src/builder.rs b/crates/cairo-lang-casm/src/builder.rs index 7ee11b040ad..78b72cf622f 100644 --- a/crates/cairo-lang-casm/src/builder.rs +++ b/crates/cairo-lang-casm/src/builder.rs @@ -836,20 +836,6 @@ macro_rules! casm_build_extend { $($output_name : $output_value),* }; $($tok)*) }; - ($builder:ident, hint ProtostarHint::$hint_name:ident { - $($input_name:ident : $input_value:ident),* - } into { - $($output_name:ident : $output_value:ident),* - }; $($tok:tt)*) => { - $builder.add_hint( - |[$($input_name),*], [$($output_name),*]| $crate::hints::ProtostarHint::$hint_name { - $($input_name,)* $($output_name,)* - }, - [$($input_value,)*], - [$($output_value,)*], - ); - $crate::casm_build_extend!($builder, $($tok)*) - }; ($builder:ident, hint $hint_head:ident$(::$hint_tail:ident)* { $($arg_name:ident : $arg_value:ident),* }; $($tok:tt)*) => { diff --git a/crates/cairo-lang-casm/src/hints/mod.rs b/crates/cairo-lang-casm/src/hints/mod.rs index b78a919b06e..235df3af7df 100644 --- a/crates/cairo-lang-casm/src/hints/mod.rs +++ b/crates/cairo-lang-casm/src/hints/mod.rs @@ -21,8 +21,6 @@ pub enum Hint { Core(CoreHintBase), #[codec(index = 1)] Starknet(StarknetHint), - #[codec(index = 2)] - Protostar(ProtostarHint), } impl Hint { @@ -41,11 +39,6 @@ impl From for Hint { Hint::Starknet(value) } } -impl From for Hint { - fn from(value: ProtostarHint) -> Self { - Hint::Protostar(value) - } -} /// A trait for displaying the pythonic version of a hint. /// Should only be used from within the compiler. @@ -58,7 +51,6 @@ impl PythonicHint for Hint { match self { Hint::Core(hint) => hint.get_pythonic_hint(), Hint::Starknet(hint) => hint.get_pythonic_hint(), - Hint::Protostar(hint) => hint.get_pythonic_hint(), } } } @@ -78,85 +70,6 @@ pub enum StarknetHint { }, } -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone, Encode, Decode, JsonSchema)] -pub enum ProtostarHint { - #[codec(index = 0)] - StartRoll { block_number: ResOperand, target_contract_address: ResOperand, err_code: CellRef }, - #[codec(index = 1)] - StopRoll { target_contract_address: ResOperand, err_code: CellRef }, - #[codec(index = 3)] - StartWarp { - block_timestamp: ResOperand, - target_contract_address: ResOperand, - err_code: CellRef, - }, - #[codec(index = 4)] - StopWarp { target_contract_address: ResOperand, err_code: CellRef }, - #[codec(index = 5)] - Declare { contract: ResOperand, result: CellRef, err_code: CellRef }, - #[codec(index = 6)] - DeclareCairo0 { contract: ResOperand, result: CellRef, err_code: CellRef }, - #[codec(index = 7)] - StartPrank { - caller_address: ResOperand, - target_contract_address: ResOperand, - err_code: CellRef, - }, - #[codec(index = 8)] - StopPrank { target_contract_address: ResOperand, err_code: CellRef }, - #[codec(index = 9)] - Invoke { - contract_address: ResOperand, - function_name: ResOperand, - calldata_start: ResOperand, - calldata_end: ResOperand, - panic_data_start: CellRef, - panic_data_end: CellRef, - }, - #[codec(index = 10)] - MockCall { - contract_address: ResOperand, - function_name: ResOperand, - response_start: ResOperand, - response_end: ResOperand, - err_code: CellRef, - }, - #[codec(index = 11)] - Deploy { - prepared_contract_address: ResOperand, - prepared_class_hash: ResOperand, - prepared_constructor_calldata_start: ResOperand, - prepared_constructor_calldata_end: ResOperand, - deployed_contract_address: CellRef, - panic_data_start: CellRef, - panic_data_end: CellRef, - }, - #[codec(index = 12)] - Prepare { - class_hash: ResOperand, - calldata_start: ResOperand, - calldata_end: ResOperand, - contract_address: CellRef, - return_class_hash: CellRef, - constructor_calldata_start: CellRef, - constructor_calldata_end: CellRef, - err_code: CellRef, - }, - #[codec(index = 13)] - Call { - contract_address: ResOperand, - function_name: ResOperand, - calldata_start: ResOperand, - calldata_end: ResOperand, - return_data_start: CellRef, - return_data_end: CellRef, - panic_data_start: CellRef, - panic_data_end: CellRef, - }, - #[codec(index = 14)] - Print { start: ResOperand, end: ResOperand }, -} - // Represents a cairo core hint. #[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone, Encode, Decode, JsonSchema)] #[serde(untagged)] @@ -717,7 +630,7 @@ impl PythonicHint for CoreHint { CoreHint::DebugPrint { start, end } => formatdoc!( " - start = {} + curr = {} end = {} while curr != end: print(hex(memory[curr])) @@ -752,269 +665,3 @@ impl PythonicHint for StarknetHint { } } } - -impl PythonicHint for ProtostarHint { - fn get_pythonic_hint(&self) -> String { - match self { - ProtostarHint::StartRoll { block_number, target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = start_roll( - block_number=memory[{block_number}[0]], - target_contract_address=memory[{target_contract_address}[0]] - ).err_code; - " - ) - } - ProtostarHint::StopRoll { target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = stop_roll( - target_contract_address=memory[{target_contract_address}[0]] - ).err_code; - " - ) - } - ProtostarHint::StartWarp { block_timestamp, target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = start_warp( - block_timestamp=memory[{block_timestamp}[0]], - target_contract_address=memory[{target_contract_address}[0]] - ).err_code; - " - ) - } - ProtostarHint::StopWarp { target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = stop_warp( - target_contract_address=memory[{target_contract_address}[0]] - ).err_code; - " - ) - } - ProtostarHint::StartPrank { caller_address, target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = start_prank(caller_address=memory[{caller_address}[0]], \ - target_contract_address=memory[{target_contract_address}[0]]).err_code; - " - ) - } - ProtostarHint::StopPrank { target_contract_address, err_code } => { - formatdoc!( - " - memory{err_code} = \ - stop_prank(target_contract_address=memory[{target_contract_address}[0]]).\ - err_code - " - ) - } - ProtostarHint::Declare { contract, result, err_code } => { - formatdoc!( - " - r = declare(contract=memory[{contract}[0]]); - memory{err_code} = r.err_code - memory{result} = 0 if r.err_code != 0 else r.ok.class_hash - " - ) - } - ProtostarHint::DeclareCairo0 { contract, result, err_code } => { - formatdoc!( - " - r = declare_cairo0(contract=memory[{contract}[0]]); - memory{err_code} = r.err_code - memory{result} = 0 if r.err_code != 0 else r.ok.class_hash - " - ) - } - ProtostarHint::Invoke { - contract_address, - function_name, - calldata_start, - calldata_end, - panic_data_start, - panic_data_end, - } => { - formatdoc!( - " - calldata = [] - it = memory[{calldata_start}[0]] - end = memory[{calldata_end}[0]] - while it != end: - calldata.append(memory[it]) - it = it + 1 - r = invoke( - contract_address=memory[{contract_address}[0]], - function_name=memory[{function_name}[0]], - calldata=calldata, - ) - panic_data_start = panic_data_end = 0 - panicked = hasattr(r, 'panic_data') and bool(r.panic_data) - if panicked: - panic_data_start = segments.add() - panic_data_end = segments.load_data(panic_data_start, r.panic_data + [0]) \ - - 1 - memory{panic_data_start} = panic_data_start - memory{panic_data_end} = panic_data_end - " - ) - } - ProtostarHint::MockCall { - contract_address, - function_name, - response_start, - response_end, - err_code, - } => { - formatdoc!( - " - response = [] - it = memory[{response_start}[0]] - end = memory[{response_end}[0]] - while it != end: - response.append(memory[it]) - it = it + 1 - r = mock_call( - contract_address=memory[{contract_address}[0]], - function_name=memory[{function_name}[0]], - response=response, - ); - memory{err_code} = r.err_code - " - ) - } - ProtostarHint::Deploy { - prepared_contract_address, - prepared_class_hash, - prepared_constructor_calldata_start, - prepared_constructor_calldata_end, - deployed_contract_address, - panic_data_start, - panic_data_end, - } => { - formatdoc!( - " - calldata = [] - it = memory[{prepared_constructor_calldata_start}[0]] - end = memory[{prepared_constructor_calldata_end}[0]] - while it != end: - calldata.append(memory[it]) - it = it + 1 - r = deploy_impl( - contract_address=memory[{prepared_contract_address}[0]], - class_hash=memory[{prepared_class_hash}[0]], - constructor_calldata=calldata, - ); - - panic_data_start = panic_data_end = 0 - panicked = hasattr(r, 'panic_data') and bool(r.panic_data) - if panicked: - panic_data_start = segments.add() - panic_data_end = segments.load_data(panic_data_start, r.panic_data + [0]) \ - - 1 - memory{panic_data_start} = panic_data_start - memory{panic_data_end} = panic_data_end - memory{deployed_contract_address} = 0 if panicked else r.ok.contract_address - " - ) - } - ProtostarHint::Prepare { - class_hash, - calldata_start, - calldata_end, - contract_address, - return_class_hash, - constructor_calldata_start, - constructor_calldata_end, - err_code, - } => { - formatdoc!( - " - calldata = [] - it = memory[{calldata_start}[0]] - end = memory[{calldata_end}[0]] - while it != end: - calldata.append(memory[it]) - it = it + 1 - r = prepare_impl( - class_hash=memory[{class_hash}[0]], - calldata=calldata - ) - memory{err_code} = r.err_code - memory{contract_address} = 0 if r.err_code != 0 else r.ok.contract_address - memory{return_class_hash} = 0 if r.err_code != 0 else r.ok.class_hash - - constructor_calldata_start = constructor_calldata_end = 0 - if r.err_code == 0 and r.ok.constructor_calldata: - constructor_calldata_start = segments.add() - constructor_calldata_end = segments.load_data( - constructor_calldata_start, r.ok.constructor_calldata + [0] - ) - 1 - - memory{constructor_calldata_start} = constructor_calldata_start - memory{constructor_calldata_end} = constructor_calldata_end - " - ) - } - ProtostarHint::Call { - contract_address, - function_name, - calldata_start, - calldata_end, - return_data_start, - return_data_end, - panic_data_start, - panic_data_end, - } => { - formatdoc!( - " - calldata = [] - it = memory[{calldata_start}[0]] - end = memory[{calldata_end}[0]] - while it != end: - calldata.append(memory[it]) - it = it + 1 - r = call( - contract_address=memory[{contract_address}[0]], - function_name=memory[{function_name}[0]], - calldata=calldata - ) - - panic_data_start = panic_data_end = 0 - panicked = hasattr(r, 'panic_data') and bool(r.panic_data) - if panicked: - panic_data_start = segments.add() - panic_data_end = segments.load_data(panic_data_start, r.panic_data + [0]) \ - - 1 - memory{panic_data_start} = panic_data_start - memory{panic_data_end} = panic_data_end - - return_data_start = return_data_end = 0 - if not panicked and r.ok.return_data: - return_data_start = segments.add() - return_data_end = segments.load_data(return_data_start, r.ok.return_data + \ - [0]) - 1 - - memory{return_data_start} = return_data_start - memory{return_data_end} = return_data_end - " - ) - } - ProtostarHint::Print { start, end } => formatdoc!( - " - start = {} - end = {} - data = [] - while start != end: - data.append(memory[start]) - start = start + 1 - protostar_print(data) - ", - ResOperandFormatter(start), - ResOperandFormatter(end), - ), - } - } -} diff --git a/crates/cairo-lang-casm/src/inline.rs b/crates/cairo-lang-casm/src/inline.rs index c2b414b88cd..a880317cffe 100644 --- a/crates/cairo-lang-casm/src/inline.rs +++ b/crates/cairo-lang-casm/src/inline.rs @@ -210,28 +210,6 @@ macro_rules! casm_extend { }.into()); $crate::casm_extend!($ctx, $($tok)*) }; - ($ctx:ident, %{ syscall_handler.syscall(segments=segments, syscall_ptr=$addr:tt) %} $($tok:tt)*) => { - $ctx.current_hints.push($crate::hints::Hint::SystemCall { - system: ResOperand::BinOp(BinOpOperand { - op: casm::operand::Operation::Add, - a: $crate::deref!($addr), - b: $crate::deref_or_immediate!(0), - })}); - $crate::casm_extend!($ctx, $($tok)*) - }; - ($ctx:ident, %{ syscall_handler.syscall(segments=segments, syscall_ptr=$addr:tt) %} $($tok:tt)*) => { - $ctx.current_hints.push($crate::hints::Hint::SystemCall { - system: ResOperand::BinOp(BinOpOperand { - op: casm::operand::Operation::Add, - a: $crate::deref!($addr), - b: $crate::deref_or_immediate!(0), - })}); - $crate::casm_extend!($ctx, $($tok)*) - }; - ($ctx:ident, %{ roll(address=$addr:tt, caller_address=$caddr:tt) %} $($tok:tt)*) => { - $ctx.current_hints.push($crate::hints::Hint::Roll); - $crate::casm_extend!($ctx, $($tok)*) - }; } #[macro_export] diff --git a/crates/cairo-lang-compiler/src/lib.rs b/crates/cairo-lang-compiler/src/lib.rs index 862f89d17d6..9f66e8ad46a 100644 --- a/crates/cairo-lang-compiler/src/lib.rs +++ b/crates/cairo-lang-compiler/src/lib.rs @@ -58,15 +58,9 @@ pub type SierraProgram = Arc; pub fn compile_cairo_project_at_path( path: &Path, compiler_config: CompilerConfig<'_>, - maybe_cairo_paths: Option>, ) -> Result { let mut db = RootDatabase::builder().detect_corelib().build()?; let main_crate_ids = setup_project(&mut db, path)?; - if let Some(cairo_paths) = maybe_cairo_paths { - for cairo_path in cairo_paths { - setup_project(&mut db, Path::new(cairo_path))?; - } - } compile_prepared_db(&mut db, main_crate_ids, compiler_config) } diff --git a/crates/cairo-lang-runner/Cargo.toml b/crates/cairo-lang-runner/Cargo.toml index 630e8e38207..8ad18441192 100644 --- a/crates/cairo-lang-runner/Cargo.toml +++ b/crates/cairo-lang-runner/Cargo.toml @@ -31,7 +31,6 @@ cairo-lang-starknet = { path = "../cairo-lang-starknet", version = "2.0.0-rc5" } cairo-lang-utils = { path = "../cairo-lang-utils", version = "2.0.0-rc5" } starknet_api = { git = "https://github.com/starkware-libs/starknet-api", rev = "24a7249" } blockifier = { git = "https://github.com/software-mansion-labs/blockifier.git", branch="kb/use-in-protostar" } -snapbox = "0.4.11" cairo-vm.workspace = true itertools.workspace = true keccak.workspace = true diff --git a/crates/cairo-lang-runner/src/casm_run/mod.rs b/crates/cairo-lang-runner/src/casm_run/mod.rs index a965a41b1e3..3ca676f81ee 100644 --- a/crates/cairo-lang-runner/src/casm_run/mod.rs +++ b/crates/cairo-lang-runner/src/casm_run/mod.rs @@ -2,31 +2,21 @@ use std::any::Any; use std::borrow::Cow; use std::collections::{HashMap, VecDeque}; use std::ops::{Deref, Shl}; -use std::{i64, str}; +use std::str; use anyhow::Result; use ark_ff::fields::{Fp256, MontBackend, MontConfig}; use ark_ff::{BigInteger, Field, PrimeField}; use ark_std::UniformRand; -use blockifier::block_context::BlockContext; -use blockifier::execution::contract_class::{ - ContractClass as BlockifierContractClass, ContractClassV1, -}; use blockifier::state::cached_state::CachedState; use blockifier::test_utils::DictStateReader; -use blockifier::transaction::account_transaction::AccountTransaction; -use blockifier::transaction::transaction_utils_for_protostar::{ - declare_tx_default, deploy_account_tx, create_state_with_trivial_validation_account, -}; -use blockifier::transaction::transactions::{DeclareTransaction, ExecutableTransaction}; +use blockifier::transaction::transaction_utils_for_protostar::create_state_with_trivial_validation_account; use cairo_felt::{felt_str as felt252_str, Felt252}; -use cairo_lang_casm::hints::{CoreHint, DeprecatedHint, Hint, ProtostarHint, StarknetHint}; +use cairo_lang_casm::hints::{CoreHint, DeprecatedHint, Hint, StarknetHint}; use cairo_lang_casm::instructions::Instruction; use cairo_lang_casm::operand::{ BinOpOperand, CellRef, DerefOrImmediate, Operation, Register, ResOperand, }; -use cairo_lang_starknet::casm_contract_class::CasmContractClass; -use cairo_lang_starknet::contract_class::ContractClass; use cairo_lang_sierra::ids::FunctionId; use cairo_lang_utils::bigint::BigIntAsHex; use cairo_lang_utils::extract_matches; @@ -47,7 +37,6 @@ use dict_manager::DictManagerExecScope; use num_bigint::BigUint; use num_integer::Integer; use num_traits::{FromPrimitive, ToPrimitive, Zero}; -use starknet_api::transaction::Fee; use {ark_secp256k1 as secp256k1, ark_secp256r1 as secp256r1}; use self::dict_manager::DictSquashExecScope; @@ -341,13 +330,6 @@ impl HintProcessor for CairoHintProcessor<'_> { Hint::Core(core_hint_base) => { return execute_core_hint_base(vm, exec_scopes, core_hint_base); } - Hint::Protostar(hint) => { - let blockifier_state = self - .blockifier_state - .as_mut() - .expect("blockifier state is needed for executing hints"); - return execute_protostar_hint(vm, exec_scopes, hint, blockifier_state); - } Hint::Starknet(hint) => hint, }; match hint { @@ -1822,162 +1804,6 @@ pub fn execute_core_hint( Ok(()) } -#[allow(unused)] -fn execute_protostar_hint( - vm: &mut VirtualMachine, - exec_scopes: &mut ExecutionScopes, - hint: &cairo_lang_casm::hints::ProtostarHint, - blockifier_state: &mut CachedState, -) -> Result<(), HintError> { - match hint { - &ProtostarHint::StartRoll { .. } => todo!(), - &ProtostarHint::StopRoll { .. } => todo!(), - &ProtostarHint::StartWarp { .. } => todo!(), - &ProtostarHint::StopWarp { .. } => todo!(), - ProtostarHint::Declare { contract, result, err_code } => { - let contract_value = get_val(vm, contract)?; - - let contract_value_as_short_str = - as_cairo_short_string(&contract_value).expect("conversion to short string failed"); - - let paths = std::fs::read_dir("./target/dev") - .expect("failed to read ./target/dev, maybe build failed"); - let mut maybe_sierra_path: Option = None; - for path in paths { - let path_str = path - .expect("path not resolved properly") - .path() - .to_str() - .expect("failed to convert path to string") - .to_string(); - if path_str.contains(&contract_value_as_short_str[..]) - && path_str.contains(".sierra.json") - { - maybe_sierra_path = Some(path_str); - } - } - let file = std::fs::File::open( - maybe_sierra_path.expect("no valid path to sierra file detected"), - ) - .expect("file should open read only"); - let sierra_contract_class: ContractClass = - serde_json::from_reader(file).expect("file should be proper JSON"); - - let casm_contract_class = - CasmContractClass::from_contract_class(sierra_contract_class, true) - .expect("sierra to casm failed"); - let casm_serialized = - serde_json::to_string_pretty(&casm_contract_class).expect("serialization failed"); - - let contract_class = ContractClassV1::try_from_json_string(&casm_serialized) - .expect("error reading contract class from json"); - let contract_class = BlockifierContractClass::V1(contract_class); - - let declare_tx = declare_tx_default(); - let tx = DeclareTransaction { - tx: starknet_api::transaction::DeclareTransaction::V1(declare_tx), - contract_class: contract_class.clone(), - }; - let account_tx = AccountTransaction::Declare(tx); - let block_context = &BlockContext::create_for_account_testing(); - - let actual_execution_info = account_tx - .execute(blockifier_state, block_context) - .expect("error executing transaction declare"); - - let class_hash = actual_execution_info - .validate_call_info - .as_ref() - .expect("error reading validate call info of transaction") - .call - .class_hash - .expect("error reading class hash of transaction"); - let class_hash_int = - i64::from_str_radix(&class_hash.to_string().replace("0x", "")[..], 16) - .expect("error converting hex string to int"); - - insert_value_to_cellref!(vm, result, Felt252::from(class_hash_int))?; - // TODO https://github.com/software-mansion/protostar/issues/2024 - // in case of errors above, consider not panicking, set an error and return it here - // instead - insert_value_to_cellref!(vm, err_code, Felt252::from(0))?; - Ok(()) - } - &ProtostarHint::DeclareCairo0 { .. } => todo!(), - &ProtostarHint::StartPrank { .. } => todo!(), - &ProtostarHint::StopPrank { .. } => todo!(), - &ProtostarHint::Invoke { .. } => todo!(), - &ProtostarHint::MockCall { .. } => todo!(), - ProtostarHint::Deploy { - prepared_contract_address, - prepared_class_hash, - prepared_constructor_calldata_start, - prepared_constructor_calldata_end, - deployed_contract_address, - panic_data_start, - panic_data_end, - } => { - let contract_address = get_val(vm, prepared_contract_address)?; - let class_hash = get_val(vm, prepared_class_hash)?; - - let as_relocatable = |vm, value| { - let (base, offset) = extract_buffer(value); - get_ptr(vm, base, &offset) - }; - let mut curr = as_relocatable(vm, prepared_constructor_calldata_start)?; - let end = as_relocatable(vm, prepared_constructor_calldata_end)?; - let mut calldata: Vec = vec![]; - while curr != end { - let value = vm.get_integer(curr)?; - calldata.push(value.into_owned()); - curr += 1; - } - let chint = Felt252::to_i128(&class_hash).expect("failed to convert felt to i128"); - let chstr = format!("{:x}", chint); - let mut deploy_account_tx = deploy_account_tx(&chstr, None, None); - deploy_account_tx.max_fee = Fee(0); - let account_tx = AccountTransaction::DeployAccount(deploy_account_tx.clone()); - let block_context = &BlockContext::create_for_account_testing(); - let actual_execution_info = account_tx - .execute(blockifier_state, block_context) - .expect("error executing transaction deploy"); - - insert_value_to_cellref!(vm, deployed_contract_address, contract_address)?; - // todo in case of error, consider filling the panic data instead of packing in rust - insert_value_to_cellref!(vm, panic_data_start, Felt252::from(0))?; - insert_value_to_cellref!(vm, panic_data_end, Felt252::from(0))?; - - Ok(()) - } - &ProtostarHint::Prepare { .. } => todo!(), - &ProtostarHint::Call { .. } => todo!(), - ProtostarHint::Print { start, end } => { - let as_relocatable = |vm, value| { - let (base, offset) = extract_buffer(value); - get_ptr(vm, base, &offset) - }; - - let mut curr = as_relocatable(vm, start)?; - let end = as_relocatable(vm, end)?; - - while curr != end { - let value = vm.get_integer(curr)?; - if let Some(shortstring) = as_cairo_short_string(&value) { - println!( - "original value: [{}], converted to a string: [{}]", - value, shortstring - ); - } else { - println!("original value: [{}]", value); - } - curr += 1; - } - - Ok(()) - } - } -} - /// Reads the result of a function call that returns `Array`. fn read_array_result_as_vec(memory: &[Option], value: &[Felt252]) -> Vec { // TODO(spapini): Handle failures. @@ -2005,7 +1831,7 @@ fn vm_get_range( } /// Extracts a parameter assumed to be a buffer. -fn extract_buffer(buffer: &ResOperand) -> (&CellRef, Felt252) { +pub fn extract_buffer(buffer: &ResOperand) -> (&CellRef, Felt252) { let (cell, base_offset) = match buffer { ResOperand::Deref(cell) => (cell, 0.into()), ResOperand::BinOp(BinOpOperand { op: Operation::Add, a, b }) => { diff --git a/crates/cairo-lang-runner/src/lib.rs b/crates/cairo-lang-runner/src/lib.rs index 129a14e5f39..2df56bf614a 100644 --- a/crates/cairo-lang-runner/src/lib.rs +++ b/crates/cairo-lang-runner/src/lib.rs @@ -187,8 +187,12 @@ impl SierraCasmRunner { chain!(entry_code.iter(), self.casm_program.instructions.iter(), footer.iter()); let (hints_dict, string_to_hint) = build_hints_dict(instructions.clone()); let blockifier_state = create_state_with_trivial_validation_account(); - let mut hint_processor = - CairoHintProcessor { runner: Some(self), starknet_state, string_to_hint, blockifier_state: Some(blockifier_state), }; + let mut hint_processor = CairoHintProcessor { + runner: Some(self), + starknet_state, + string_to_hint, + blockifier_state: Some(blockifier_state), + }; self.run_function(func, &mut hint_processor, hints_dict, instructions, builtins).map(|v| { RunResultStarknet { gas_counter: v.gas_counter, diff --git a/crates/cairo-lang-sierra-ap-change/src/core_libfunc_ap_change.rs b/crates/cairo-lang-sierra-ap-change/src/core_libfunc_ap_change.rs index aab66fe7dd6..e13d43d4415 100644 --- a/crates/cairo-lang-sierra-ap-change/src/core_libfunc_ap_change.rs +++ b/crates/cairo-lang-sierra-ap-change/src/core_libfunc_ap_change.rs @@ -3,7 +3,6 @@ use cairo_lang_sierra::extensions::array::ArrayConcreteLibfunc; use cairo_lang_sierra::extensions::boolean::BoolConcreteLibfunc; use cairo_lang_sierra::extensions::boxing::BoxConcreteLibfunc; use cairo_lang_sierra::extensions::casts::CastConcreteLibfunc; -use cairo_lang_sierra::extensions::cheatcodes::CheatcodesConcreteLibFunc; use cairo_lang_sierra::extensions::core::CoreConcreteLibfunc; use cairo_lang_sierra::extensions::ec::EcConcreteLibfunc; use cairo_lang_sierra::extensions::enm::EnumConcreteLibfunc; @@ -268,26 +267,6 @@ pub fn core_libfunc_ap_change( vec![ApChange::Known(0), ApChange::Known(0)] } }, - CoreConcreteLibfunc::Cheatcodes(libfunc) => match libfunc { - CheatcodesConcreteLibFunc::Declare(_) => vec![ApChange::Known(2), ApChange::Known(2)], - CheatcodesConcreteLibFunc::DeclareCairo0(_) => { - vec![ApChange::Known(2), ApChange::Known(2)] - } - CheatcodesConcreteLibFunc::StartRoll(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::StopRoll(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::StartPrank(_) => { - vec![ApChange::Known(1), ApChange::Known(1)] - } - CheatcodesConcreteLibFunc::StopPrank(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::StartWarp(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::StopWarp(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::Invoke(_) => vec![ApChange::Known(3), ApChange::Known(3)], - CheatcodesConcreteLibFunc::MockCall(_) => vec![ApChange::Known(1), ApChange::Known(1)], - CheatcodesConcreteLibFunc::Deploy(_) => vec![ApChange::Known(4), ApChange::Known(4)], - CheatcodesConcreteLibFunc::Prepare(_) => vec![ApChange::Known(5), ApChange::Known(5)], - CheatcodesConcreteLibFunc::Call(_) => vec![ApChange::Known(5), ApChange::Known(5)], - CheatcodesConcreteLibFunc::Print(_) => vec![ApChange::Known(0)], - }, CoreConcreteLibfunc::Debug(_) => vec![ApChange::Known(0)], CoreConcreteLibfunc::SnapshotTake(_) => vec![ApChange::Known(0)], CoreConcreteLibfunc::Felt252DictEntry(libfunc) => match libfunc { diff --git a/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs b/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs deleted file mode 100644 index 92fbca12751..00000000000 --- a/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs +++ /dev/null @@ -1,23 +0,0 @@ -use cairo_lang_sierra::extensions::cheatcodes::CheatcodesConcreteLibFunc; - -use crate::objects::ConstCost; - -pub fn cheatcodes_libfunc_cost_base(libfunc: &CheatcodesConcreteLibFunc) -> Vec { - let steps = |value| ConstCost { steps: value, ..Default::default() }; - match libfunc { - CheatcodesConcreteLibFunc::Declare(_) => vec![steps(2), steps(2)], - CheatcodesConcreteLibFunc::DeclareCairo0(_) => vec![steps(2), steps(2)], - CheatcodesConcreteLibFunc::StartRoll(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::StopRoll(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::StartWarp(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::StopWarp(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::StartPrank(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::StopPrank(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::Invoke(_) => vec![steps(3), steps(3)], - CheatcodesConcreteLibFunc::MockCall(_) => vec![steps(1), steps(1)], - CheatcodesConcreteLibFunc::Deploy(_) => vec![steps(3), steps(3)], - CheatcodesConcreteLibFunc::Prepare(_) => vec![steps(2), steps(2)], - CheatcodesConcreteLibFunc::Call(_) => vec![steps(3), steps(3)], - CheatcodesConcreteLibFunc::Print(_) => vec![steps(1)], - } -} diff --git a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs index 1769dbb51e3..4e792013f77 100644 --- a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs +++ b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs @@ -39,7 +39,6 @@ use cairo_lang_utils::casts::IntoOrPanic; use cairo_lang_utils::ordered_hash_map::OrderedHashMap; use itertools::{chain, Itertools}; -use crate::cheatcodes_libfunc_cost_base::cheatcodes_libfunc_cost_base; use crate::objects::{BranchCost, ConstCost, CostInfoProvider, PreCost}; use crate::starknet_libfunc_cost_base::starknet_libfunc_cost_base; @@ -348,9 +347,6 @@ pub fn core_libfunc_cost( CoreConcreteLibfunc::StarkNet(libfunc) => { starknet_libfunc_cost_base(libfunc).into_iter().map(BranchCost::from).collect() } - CoreConcreteLibfunc::Cheatcodes(libfunc) => { - cheatcodes_libfunc_cost_base(libfunc).into_iter().map(BranchCost::from).collect() - } CoreConcreteLibfunc::Nullable(libfunc) => match libfunc { NullableConcreteLibfunc::Null(_) => vec![ConstCost::default().into()], NullableConcreteLibfunc::NullableFromBox(_) => vec![ConstCost::default().into()], diff --git a/crates/cairo-lang-sierra-gas/src/lib.rs b/crates/cairo-lang-sierra-gas/src/lib.rs index 3be091400b5..d2ae41069d0 100644 --- a/crates/cairo-lang-sierra-gas/src/lib.rs +++ b/crates/cairo-lang-sierra-gas/src/lib.rs @@ -21,7 +21,6 @@ use itertools::Itertools; use objects::CostInfoProvider; use thiserror::Error; -mod cheatcodes_libfunc_cost_base; pub mod compute_costs; pub mod core_libfunc_cost; mod core_libfunc_cost_base; diff --git a/crates/cairo-lang-sierra-to-casm/src/compiler.rs b/crates/cairo-lang-sierra-to-casm/src/compiler.rs index 082cb5a32b0..46a59cfc68d 100644 --- a/crates/cairo-lang-sierra-to-casm/src/compiler.rs +++ b/crates/cairo-lang-sierra-to-casm/src/compiler.rs @@ -1,5 +1,4 @@ use std::fmt::Display; -use std::fs; use cairo_lang_casm::instructions::{Instruction, InstructionBody, RetInstruction}; use cairo_lang_sierra::extensions::core::{CoreConcreteLibfunc, CoreLibfunc, CoreType}; @@ -8,7 +7,6 @@ use cairo_lang_sierra::extensions::ConcreteLibfunc; use cairo_lang_sierra::ids::VarId; use cairo_lang_sierra::program::{BranchTarget, Invocation, Program, Statement, StatementIdx}; use cairo_lang_sierra::program_registry::{ProgramRegistry, ProgramRegistryError}; -use cairo_lang_sierra::ProgramParser; use cairo_lang_sierra_type_size::get_type_size_map; use itertools::zip_eq; use thiserror::Error; @@ -17,7 +15,7 @@ use crate::annotations::{AnnotationError, ProgramAnnotations, StatementAnnotatio use crate::invocations::{ check_references_on_stack, compile_invocation, InvocationError, ProgramInfo, }; -use crate::metadata::{calc_metadata, Metadata}; +use crate::metadata::Metadata; use crate::references::{check_types_match, ReferencesError}; use crate::relocations::{relocate_instructions, RelocationEntry}; @@ -265,33 +263,6 @@ pub fn compile( }) } -/// Command line args parser. -/// Exits with 0/1 if the input is formatted correctly/incorrectly. -#[derive(Debug)] -pub struct Args { - /// The file to compile - pub file: String, - pub output: String, -} - -pub fn compile_at_path(path: &str) -> Result { - let sierra_code = fs::read_to_string(path).expect("Could not read file!"); - compile_contents(&sierra_code) -} - -pub fn compile_contents(contents: &str) -> Result { - let program = ProgramParser::new().parse(&contents).unwrap(); - - let gas_usage_check = true; - let cairo_program = compile( - &program, - &calc_metadata(&program, Default::default()).expect("Failed calculating Sierra variables."), - gas_usage_check, - ) - .expect("Compilation failed."); - - Ok(cairo_program) -} /// Returns true if `statement` is an invocation of the branch_align libfunc. fn is_branch_align( registry: &ProgramRegistry, diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/call.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/call.rs deleted file mode 100644 index 93346e3919b..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/call.rs +++ /dev/null @@ -1,71 +0,0 @@ -use std::ops::Deref; - -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_call( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let refs = builder.try_get_refs::<3>()?; - - // contract address - let mut optional_contract_address = None; - if let [maybe_contract_address] = refs[0].cells.deref() { - optional_contract_address = Some(maybe_contract_address); - } - let contract_address = optional_contract_address.ok_or(InvocationError::InvalidGenericArg)?; - - // function name - let mut optional_function_name = None; - if let [maybe_function_name] = refs[1].cells.deref() { - optional_function_name = Some(maybe_function_name); - } - let function_name = optional_function_name.ok_or(InvocationError::InvalidGenericArg)?; - - // calldata - let [calldata_start, calldata_end] = refs[2].try_unpack()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref contract_address; - deref function_name; - deref calldata_start; - deref calldata_end; - }; - - casm_build_extend! {casm_builder, - tempvar return_data_start; - tempvar return_data_end; - tempvar panic_data_start; - tempvar panic_data_end; - hint ProtostarHint::Call { - contract_address: contract_address, - function_name: function_name, - calldata_start: calldata_start, - calldata_end: calldata_end - } into { - return_data_start: return_data_start, - return_data_end: return_data_end, - panic_data_start: panic_data_start, - panic_data_end: panic_data_end - }; - tempvar failure = panic_data_end - panic_data_start; - ap += 4; - jump Failure if failure != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[&[return_data_start, return_data_end]], None), - ("Failure", &[&[panic_data_start, panic_data_end]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare.rs deleted file mode 100644 index 29fd1f89318..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare.rs +++ /dev/null @@ -1,39 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -// pub const SYSTEM_CALL_COST: i32 = -// ConstCost { steps: 100, holes: 0, range_checks: 0 }.cost(); - -pub fn build_declare( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [contract] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref contract; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - tempvar result; - hint ProtostarHint::Declare {contract: contract} into {result: result, err_code: err_code}; - ap += 1; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[&[result]], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare_cairo0.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare_cairo0.rs deleted file mode 100644 index 4d9795623b7..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/declare_cairo0.rs +++ /dev/null @@ -1,39 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -// pub const SYSTEM_CALL_COST: i32 = -// ConstCost { steps: 100, holes: 0, range_checks: 0 }.cost(); - -pub fn build_declare_cairo0( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [contract] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref contract; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - tempvar result; - hint ProtostarHint::DeclareCairo0 {contract: contract} into {result: result, err_code: err_code}; - ap += 1; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[&[result]], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/deploy.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/deploy.rs deleted file mode 100644 index b2f906e5e45..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/deploy.rs +++ /dev/null @@ -1,70 +0,0 @@ -use std::ops::Deref; - -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_deploy( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let refs = builder.try_get_refs::<3>()?; - - let mut optional_prepared_contract_address = None; - if let [maybe_contract_address] = refs[0].cells.deref() { - optional_prepared_contract_address = Some(maybe_contract_address); - } - let prepared_contract_address = - optional_prepared_contract_address.ok_or(InvocationError::InvalidGenericArg)?; - - let mut optional_prepared_class_hash = None; - if let [maybe_prepared_class_hash] = refs[1].cells.deref() { - optional_prepared_class_hash = Some(maybe_prepared_class_hash); - } - let prepared_class_hash = - optional_prepared_class_hash.ok_or(InvocationError::InvalidGenericArg)?; - - let [prepared_constructor_calldata_start, prepared_constructor_calldata_end] = - refs[2].try_unpack()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref prepared_contract_address; - deref prepared_class_hash; - deref prepared_constructor_calldata_start; - deref prepared_constructor_calldata_end; - }; - - casm_build_extend! { - casm_builder, - tempvar deployed_contract_address; - tempvar panic_data_start; - tempvar panic_data_end; - hint ProtostarHint::Deploy { - prepared_contract_address: prepared_contract_address, - prepared_class_hash: prepared_class_hash, - prepared_constructor_calldata_start: prepared_constructor_calldata_start, - prepared_constructor_calldata_end: prepared_constructor_calldata_end - } into { - deployed_contract_address: deployed_contract_address, - panic_data_start: panic_data_start, - panic_data_end: panic_data_end - }; - tempvar failure = panic_data_end - panic_data_start; - ap += 3; - jump Failure if failure != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[&[deployed_contract_address]], None), - ("Failure", &[&[panic_data_start, panic_data_end]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/invoke.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/invoke.rs deleted file mode 100644 index d0b22bd1234..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/invoke.rs +++ /dev/null @@ -1,64 +0,0 @@ -use std::ops::Deref; - -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_invoke( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let refs = builder.try_get_refs::<3>()?; - - let mut optional_contract_address = None; - if let [maybe_contract_address] = refs[0].cells.deref() { - optional_contract_address = Some(maybe_contract_address); - } - let contract_address = optional_contract_address.ok_or(InvocationError::InvalidGenericArg)?; - - let mut optional_function_name = None; - if let [maybe_function_name] = refs[1].cells.deref() { - optional_function_name = Some(maybe_function_name); - } - let function_name = optional_function_name.ok_or(InvocationError::InvalidGenericArg)?; - - let [calldata_start, calldata_end] = refs[2].try_unpack()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref contract_address; - deref function_name; - deref calldata_start; - deref calldata_end; - }; - - casm_build_extend! {casm_builder, - tempvar panic_data_start; - tempvar panic_data_end; - hint ProtostarHint::Invoke { - contract_address: contract_address, - function_name: function_name, - calldata_start: calldata_start, - calldata_end: calldata_end - } into { - panic_data_start: panic_data_start, - panic_data_end: panic_data_end - }; - tempvar failure = panic_data_end - panic_data_start; - ap += 2; - jump Failure if failure != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[panic_data_start, panic_data_end]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mock_call.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mock_call.rs deleted file mode 100644 index 21a5dc2b801..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mock_call.rs +++ /dev/null @@ -1,58 +0,0 @@ -use std::ops::Deref; - -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_mock_call( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let refs = builder.try_get_refs::<3>()?; - - let mut optional_contract_address = None; - if let [maybe_contract_address] = refs[0].cells.deref() { - optional_contract_address = Some(maybe_contract_address); - } - let contract_address = optional_contract_address.ok_or(InvocationError::InvalidGenericArg)?; - - let mut optional_function_name = None; - if let [maybe_function_name] = refs[1].cells.deref() { - optional_function_name = Some(maybe_function_name); - } - let function_name = optional_function_name.ok_or(InvocationError::InvalidGenericArg)?; - - let [response_start, response_end] = refs[2].try_unpack()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref contract_address; - deref function_name; - deref response_start; - deref response_end; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::MockCall { - contract_address: contract_address, - function_name: function_name, - response_start: response_start, - response_end: response_end - } into {err_code: err_code}; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mod.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mod.rs deleted file mode 100644 index 573abe43075..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/mod.rs +++ /dev/null @@ -1,56 +0,0 @@ -use cairo_lang_sierra::extensions::cheatcodes::CheatcodesConcreteLibFunc; - -use self::call::build_call; -use self::declare::build_declare; -use self::declare_cairo0::build_declare_cairo0; -use self::deploy::build_deploy; -use self::invoke::build_invoke; -use self::mock_call::build_mock_call; -use self::prepare::build_prepare; -use self::print::build_protostar_print; -use self::start_prank::build_start_prank; -use self::start_roll::build_start_roll; -use self::start_warp::build_start_warp; -use self::stop_prank::build_stop_prank; -use self::stop_roll::build_stop_roll; -use self::stop_warp::build_stop_warp; -use super::{CompiledInvocation, CompiledInvocationBuilder}; -use crate::invocations::InvocationError; - -mod call; -mod declare; -mod declare_cairo0; -mod deploy; -mod invoke; -mod mock_call; -mod prepare; -mod print; -mod start_prank; -mod start_roll; -mod start_warp; -mod stop_prank; -mod stop_roll; -mod stop_warp; - -/// Builds instructions for Sierra array operations. -pub fn build( - libfunc: &CheatcodesConcreteLibFunc, - builder: CompiledInvocationBuilder<'_>, -) -> Result { - match libfunc { - CheatcodesConcreteLibFunc::StartRoll(_) => build_start_roll(builder), - CheatcodesConcreteLibFunc::StopRoll(_) => build_stop_roll(builder), - CheatcodesConcreteLibFunc::StartWarp(_) => build_start_warp(builder), - CheatcodesConcreteLibFunc::StopWarp(_) => build_stop_warp(builder), - CheatcodesConcreteLibFunc::Declare(_) => build_declare(builder), - CheatcodesConcreteLibFunc::DeclareCairo0(_) => build_declare_cairo0(builder), - CheatcodesConcreteLibFunc::StartPrank(_) => build_start_prank(builder), - CheatcodesConcreteLibFunc::StopPrank(_) => build_stop_prank(builder), - CheatcodesConcreteLibFunc::Invoke(_) => build_invoke(builder), - CheatcodesConcreteLibFunc::MockCall(_) => build_mock_call(builder), - CheatcodesConcreteLibFunc::Deploy(_) => build_deploy(builder), - CheatcodesConcreteLibFunc::Prepare(_) => build_prepare(builder), - CheatcodesConcreteLibFunc::Call(_) => build_call(builder), - CheatcodesConcreteLibFunc::Print(_) => build_protostar_print(builder), - } -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/prepare.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/prepare.rs deleted file mode 100644 index c6fc5bd77d9..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/prepare.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::ops::Deref; - -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_prepare( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let refs = builder.try_get_refs::<2>()?; - - let mut optional_class_hash = None; - if let [maybe_class_hash] = refs[0].cells.deref() { - optional_class_hash = Some(maybe_class_hash); - } - let class_hash = optional_class_hash.ok_or(InvocationError::InvalidGenericArg)?; - - let [calldata_start, calldata_end] = refs[1].try_unpack()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref class_hash; - deref calldata_start; - deref calldata_end; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - tempvar contract_address; - tempvar return_class_hash; - tempvar constructor_calldata_start; - tempvar constructor_calldata_end; - hint ProtostarHint::Prepare { - class_hash: class_hash, - calldata_start: calldata_start, - calldata_end: calldata_end - } into { - contract_address: contract_address, - return_class_hash: return_class_hash, - constructor_calldata_start: constructor_calldata_start, - constructor_calldata_end: constructor_calldata_end, - err_code: err_code - }; - ap += 5; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ( - "Fallthrough", - &[ - &[constructor_calldata_start, constructor_calldata_end], - &[contract_address], - &[return_class_hash], - ], - None, - ), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/print.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/print.rs deleted file mode 100644 index 460e0c7a934..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/print.rs +++ /dev/null @@ -1,27 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::add_input_variables; - -/// Builds Casm instructions for the `print()` libfunc. -pub fn build_protostar_print( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let [arr_start, arr_end] = builder.try_get_refs::<1>()?[0].try_unpack()?; - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - buffer(0) arr_start; - buffer(0) arr_end; - } - casm_build_extend! {casm_builder, - hint ProtostarHint::Print {start: arr_start, end: arr_end} into {}; - // Since we can't have hints not carried on actual instructions. - ap += 0; - } - Ok(builder.build_from_casm_builder( - casm_builder, - [("Fallthrough", &[], None)], - Default::default(), - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_prank.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_prank.rs deleted file mode 100644 index 237f0562dd3..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_prank.rs +++ /dev/null @@ -1,35 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_start_prank( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [caller_address, target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref caller_address; - deref target_contract_address; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StartPrank {caller_address: caller_address, target_contract_address: target_contract_address} into {err_code: err_code}; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_roll.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_roll.rs deleted file mode 100644 index 53b75141586..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_roll.rs +++ /dev/null @@ -1,35 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_start_roll( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [block_number, target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref block_number; - deref target_contract_address; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StartRoll {block_number: block_number, target_contract_address: target_contract_address} into {err_code: err_code}; - jump Failure if err_code != 0; - }; - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_warp.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_warp.rs deleted file mode 100644 index 9cfaa56c5ec..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/start_warp.rs +++ /dev/null @@ -1,34 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use super::{CompiledInvocation, CompiledInvocationBuilder, InvocationError}; -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CostValidationInfo, -}; - -pub fn build_start_warp( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [block_timestamp, target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, - deref block_timestamp; - deref target_contract_address; - }; - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StartWarp {block_timestamp: block_timestamp, target_contract_address: target_contract_address} into {err_code: err_code}; - jump Failure if err_code != 0; - }; - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_prank.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_prank.rs deleted file mode 100644 index 41cf18385b6..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_prank.rs +++ /dev/null @@ -1,34 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CompiledInvocation, - CompiledInvocationBuilder, CostValidationInfo, InvocationError, -}; - -pub fn build_stop_prank( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, deref target_contract_address;} - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StopPrank { - target_contract_address: target_contract_address - } into {err_code: err_code}; - jump Failure if err_code != 0; - } - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_roll.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_roll.rs deleted file mode 100644 index 4f48dae4a60..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_roll.rs +++ /dev/null @@ -1,34 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CompiledInvocation, - CompiledInvocationBuilder, CostValidationInfo, InvocationError, -}; - -pub fn build_stop_roll( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, deref target_contract_address;} - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StopRoll { - target_contract_address: target_contract_address - } into {err_code: err_code}; - jump Failure if err_code != 0; - } - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_warp.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_warp.rs deleted file mode 100644 index 9c27f1eddc6..00000000000 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/cheatcodes/stop_warp.rs +++ /dev/null @@ -1,34 +0,0 @@ -use cairo_lang_casm::{builder::CasmBuilder, hints::ProtostarHint}; -use cairo_lang_casm::casm_build_extend; - -use crate::invocations::{ - add_input_variables, get_non_fallthrough_statement_id, CompiledInvocation, - CompiledInvocationBuilder, CostValidationInfo, InvocationError, -}; - -pub fn build_stop_warp( - builder: CompiledInvocationBuilder<'_>, -) -> Result { - let failure_handle_statement_id = get_non_fallthrough_statement_id(&builder); - let [target_contract_address] = builder.try_get_single_cells()?; - - let mut casm_builder = CasmBuilder::default(); - add_input_variables! {casm_builder, deref target_contract_address;} - - casm_build_extend! {casm_builder, - tempvar err_code; - hint ProtostarHint::StopWarp { - target_contract_address: target_contract_address - } into {err_code: err_code}; - jump Failure if err_code != 0; - } - - Ok(builder.build_from_casm_builder( - casm_builder, - [ - ("Fallthrough", &[], None), - ("Failure", &[&[err_code]], Some(failure_handle_statement_id)), - ], - CostValidationInfo { range_check_info: None, extra_costs: None }, - )) -} diff --git a/crates/cairo-lang-sierra-to-casm/src/invocations/mod.rs b/crates/cairo-lang-sierra-to-casm/src/invocations/mod.rs index fd92146ab1f..5ddb8e7f81f 100644 --- a/crates/cairo-lang-sierra-to-casm/src/invocations/mod.rs +++ b/crates/cairo-lang-sierra-to-casm/src/invocations/mod.rs @@ -35,7 +35,6 @@ mod bitwise; mod boolean; mod boxing; mod casts; -mod cheatcodes; mod debug; mod ec; mod enm; @@ -615,7 +614,6 @@ pub fn compile_invocation( CoreConcreteLibfunc::Poseidon(libfunc) => poseidon::build(libfunc, builder), CoreConcreteLibfunc::StarkNet(libfunc) => starknet::build(libfunc, builder), CoreConcreteLibfunc::Nullable(libfunc) => nullable::build(libfunc, builder), - CoreConcreteLibfunc::Cheatcodes(libfunc) => cheatcodes::build(libfunc, builder), CoreConcreteLibfunc::Debug(libfunc) => debug::build(libfunc, builder), CoreConcreteLibfunc::SnapshotTake(_) => misc::build_dup(builder), CoreConcreteLibfunc::Felt252DictEntry(libfunc) => { diff --git a/crates/cairo-lang-sierra/src/extensions/core.rs b/crates/cairo-lang-sierra/src/extensions/core.rs index 58562c7d841..8799e0c00fb 100644 --- a/crates/cairo-lang-sierra/src/extensions/core.rs +++ b/crates/cairo-lang-sierra/src/extensions/core.rs @@ -4,7 +4,6 @@ use super::bitwise::BitwiseType; use super::boolean::BoolLibfunc; use super::branch_align::BranchAlignLibfunc; use super::casts::CastLibfunc; -use super::cheatcodes::CheatcodesLibFunc; use super::debug::DebugLibfunc; use super::drop::DropLibfunc; use super::duplicate::DupLibfunc; @@ -123,7 +122,6 @@ define_libfunc_hierarchy! { Pedersen(PedersenLibfunc), Poseidon(PoseidonLibfunc), StarkNet(StarkNetLibfunc), - Cheatcodes(CheatcodesLibFunc), Debug(DebugLibfunc), SnapshotTake(SnapshotTakeLibfunc), }, CoreConcreteLibfunc diff --git a/crates/cairo-lang-sierra/src/extensions/modules/cheatcodes.rs b/crates/cairo-lang-sierra/src/extensions/modules/cheatcodes.rs deleted file mode 100644 index 5d0dc65fe20..00000000000 --- a/crates/cairo-lang-sierra/src/extensions/modules/cheatcodes.rs +++ /dev/null @@ -1,599 +0,0 @@ -use super::array::ArrayType; -use super::felt252::Felt252Type; -use crate::define_libfunc_hierarchy; -use crate::extensions::lib_func::{ - BranchSignature, LibfuncSignature, OutputVarInfo, ParamSignature, SierraApChange, - SignatureSpecializationContext, -}; -use crate::extensions::snapshot::snapshot_ty; -use crate::extensions::{ - NamedType, NoGenericArgsGenericLibfunc, OutputVarReferenceInfo, SpecializationError, -}; - -define_libfunc_hierarchy! { - pub enum CheatcodesLibFunc { - StartRoll(StartRollLibFunc), - StopRoll(StopRollLibFunc), - StartWarp(StartWarpLibFunc), - StopWarp(StopWarpLibFunc), - Declare(DeclareLibFunc), - DeclareCairo0(DeclareCairo0LibFunc), - StartPrank(StartPrankLibFunc), - StopPrank(StopPrankLibFunc), - Invoke(InvokeLibFunc), - MockCall(MockCallLibFunc), - Deploy(DeployLibFunc), - Prepare(PrepareLibFunc), - Call(CallLibFunc), - Print(PrintLibFunc), - }, CheatcodesConcreteLibFunc -} - -#[derive(Default)] -pub struct DeclareLibFunc {} -impl NoGenericArgsGenericLibfunc for DeclareLibFunc { - const STR_ID: &'static str = "declare"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Contract - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![OutputVarInfo { - // ty: context.get_concrete_type(ClassHashType::id(), &[])?, - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -#[derive(Default)] -pub struct DeclareCairo0LibFunc {} -impl NoGenericArgsGenericLibfunc for DeclareCairo0LibFunc { - const STR_ID: &'static str = "declare_cairo0"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Contract - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![OutputVarInfo { - // ty: context.get_concrete_type(ClassHashType::id(), &[])?, - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::SameAsParam { param_idx: 0 }, - }], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for starting roll -#[derive(Default)] -pub struct StartRollLibFunc {} -impl NoGenericArgsGenericLibfunc for StartRollLibFunc { - const STR_ID: &'static str = "start_roll"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Block number - ParamSignature::new(felt_ty.clone()), - // Target contract address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for stopping roll -#[derive(Default)] -pub struct StopRollLibFunc {} -impl NoGenericArgsGenericLibfunc for StopRollLibFunc { - const STR_ID: &'static str = "stop_roll"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Target contract address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for starting warp -#[derive(Default)] -pub struct StartWarpLibFunc {} -impl NoGenericArgsGenericLibfunc for StartWarpLibFunc { - const STR_ID: &'static str = "start_warp"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Block number - ParamSignature::new(felt_ty.clone()), - // Target Address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for starting warp -#[derive(Default)] -pub struct StopWarpLibFunc {} -impl NoGenericArgsGenericLibfunc for StopWarpLibFunc { - const STR_ID: &'static str = "stop_warp"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // Target Address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for starting a prank -#[derive(Default)] -pub struct StartPrankLibFunc {} -impl NoGenericArgsGenericLibfunc for StartPrankLibFunc { - const STR_ID: &'static str = "start_prank"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - Ok(LibfuncSignature { - param_signatures: vec![ - // caller_address - ParamSignature::new(felt_ty.clone()), - // target_contract_address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - // Failure branch - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for stopping a prank -#[derive(Default)] -pub struct StopPrankLibFunc {} -impl NoGenericArgsGenericLibfunc for StopPrankLibFunc { - const STR_ID: &'static str = "stop_prank"; - - // noinspection DuplicatedCode - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - - Ok(LibfuncSignature { - param_signatures: vec![ - // Target address - ParamSignature::new(felt_ty.clone()), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - // Failure branch - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for creating a new array. -#[derive(Default)] -pub struct InvokeLibFunc {} -impl NoGenericArgsGenericLibfunc for InvokeLibFunc { - const STR_ID: &'static str = "invoke_impl"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_ty = context.get_wrapped_concrete_type(ArrayType::id(), felt_ty.clone())?; - Ok(LibfuncSignature { - param_signatures: vec![ - // contract_address - ParamSignature::new(felt_ty.clone()), - // function_name - ParamSignature::new(felt_ty.clone()), - // calldata - ParamSignature::new(snapshot_ty(context, arr_ty.clone())?), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - // Failure branch - BranchSignature { - vars: vec![ - // Panic data - OutputVarInfo { - ty: arr_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -/// LibFunc for creating a new array. -#[derive(Default)] -pub struct MockCallLibFunc {} -impl NoGenericArgsGenericLibfunc for MockCallLibFunc { - const STR_ID: &'static str = "mock_call"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_ty = context.get_wrapped_concrete_type(ArrayType::id(), felt_ty.clone())?; - Ok(LibfuncSignature { - param_signatures: vec![ - // contract_address - ParamSignature::new(felt_ty.clone()), - // function_name - ParamSignature::new(felt_ty.clone()), - // response - ParamSignature::new(snapshot_ty(context, arr_ty.clone())?), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - // Failure branch - BranchSignature { - vars: vec![ - // Error reason - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -#[derive(Default)] -pub struct DeployLibFunc {} -impl NoGenericArgsGenericLibfunc for DeployLibFunc { - const STR_ID: &'static str = "deploy_impl"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_ty = context.get_wrapped_concrete_type(ArrayType::id(), felt_ty.clone())?; - Ok(LibfuncSignature { - param_signatures: vec![ - // prepared_contract_address - ParamSignature::new(felt_ty.clone()), - // prepared_class_hash - ParamSignature::new(felt_ty.clone()), - // prepared_constructor_calldata - ParamSignature::new(snapshot_ty(context, arr_ty.clone())?), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::SameAsParam { param_idx: 0 }, - }], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![ - // Panic data - OutputVarInfo { - ty: arr_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -#[derive(Default)] -pub struct PrepareLibFunc {} -impl NoGenericArgsGenericLibfunc for PrepareLibFunc { - const STR_ID: &'static str = "prepare_impl"; - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_ty = context.get_wrapped_concrete_type(ArrayType::id(), felt_ty.clone())?; - Ok(LibfuncSignature { - param_signatures: vec![ - ParamSignature::new(felt_ty.clone()), - ParamSignature::new(snapshot_ty(context, arr_ty.clone())?), - ], - branch_signatures: vec![ - BranchSignature { - vars: vec![ - // Constructor Calldata - OutputVarInfo { - ty: arr_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - // Contract Address - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - // Class Hash - OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - vars: vec![OutputVarInfo { - ty: felt_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -#[derive(Default)] -pub struct CallLibFunc {} -impl NoGenericArgsGenericLibfunc for CallLibFunc { - const STR_ID: &'static str = "call_impl"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - let felt_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_ty = context.get_wrapped_concrete_type(ArrayType::id(), felt_ty.clone())?; - Ok(LibfuncSignature { - param_signatures: vec![ - // contract_address - ParamSignature::new(felt_ty.clone()), - // function_name - ParamSignature::new(felt_ty.clone()), - // calldata - ParamSignature::new(snapshot_ty(context, arr_ty.clone())?), - ], - branch_signatures: vec![ - // Success branch - BranchSignature { - vars: vec![ - // Return Data - OutputVarInfo { - ty: arr_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }, - ], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - BranchSignature { - // Panic data - vars: vec![OutputVarInfo { - ty: arr_ty.clone(), - ref_info: OutputVarReferenceInfo::NewTempVar { idx: 0 }, - }], - ap_change: SierraApChange::Known { new_vars_only: false }, - }, - ], - fallthrough: Some(0), - }) - } -} - -#[derive(Default)] -pub struct PrintLibFunc {} -impl NoGenericArgsGenericLibfunc for PrintLibFunc { - const STR_ID: &'static str = "print"; - - fn specialize_signature( - &self, - context: &dyn SignatureSpecializationContext, - ) -> Result { - // TODO(spapini): We should get a StringView, which is something like - // (Span, len), or something like that. - let felt252_ty = context.get_concrete_type(Felt252Type::id(), &[])?; - let arr_type = context.get_wrapped_concrete_type(ArrayType::id(), felt252_ty)?; - Ok(LibfuncSignature::new_non_branch( - vec![arr_type], - vec![], - SierraApChange::Known { new_vars_only: true }, - )) - } -} diff --git a/crates/cairo-lang-sierra/src/extensions/modules/mod.rs b/crates/cairo-lang-sierra/src/extensions/modules/mod.rs index f4f59c3830f..3db3582df95 100644 --- a/crates/cairo-lang-sierra/src/extensions/modules/mod.rs +++ b/crates/cairo-lang-sierra/src/extensions/modules/mod.rs @@ -13,7 +13,6 @@ pub mod boolean; pub mod boxing; pub mod branch_align; pub mod casts; -pub mod cheatcodes; pub mod consts; pub mod debug; pub mod drop; diff --git a/crates/cairo-lang-sierra/src/simulation/core.rs b/crates/cairo-lang-sierra/src/simulation/core.rs index a8fab536aad..9c1611db6d6 100644 --- a/crates/cairo-lang-sierra/src/simulation/core.rs +++ b/crates/cairo-lang-sierra/src/simulation/core.rs @@ -320,10 +320,6 @@ pub fn simulate< CoreConcreteLibfunc::Nullable(_) => { unimplemented!("Simulation of nullable is not implemented yet.") } - CoreConcreteLibfunc::Cheatcodes(_) => { - unimplemented!("Simulation of the Cheatcodes functionalities is not implemented yet.") - } - // TODO: Implement simulation for the cheatcode functions. CoreConcreteLibfunc::Debug(_) => { if inputs.len() == 1 { let arr = extract_matches!(&inputs[0], CoreValue::Array); diff --git a/crates/cairo-lang-starknet/protostar_test_data/test_contract.cairo b/crates/cairo-lang-starknet/protostar_test_data/test_contract.cairo deleted file mode 100644 index 278a9fc1089..00000000000 --- a/crates/cairo-lang-starknet/protostar_test_data/test_contract.cairo +++ /dev/null @@ -1,27 +0,0 @@ -#[contract] -mod TestContract { - struct Storage { - my_storage_var: felt, - } - - fn internal_func(ref system: System) -> felt { - 1 - } - - fn internal_func2(ref system: System) -> felt { - roll(1, 2); - 2 - } - - - // TODO(ilya): Remove implicits once the order is consistent. - #[external] - fn test( - ref system: System, ref arg: felt, arg1: felt, arg2: felt - ) -> felt implicits(RangeCheck, GasBuiltin) { - let x = super::my_storage_var::read(system); - super::my_storage_var::write(system, x + 1); - x + internal_func(system); - x + internal_func2(system) - } -} diff --git a/crates/cairo-lang-starknet/src/contract_class.rs b/crates/cairo-lang-starknet/src/contract_class.rs index 61f01c92a23..46b3a54c3c2 100644 --- a/crates/cairo-lang-starknet/src/contract_class.rs +++ b/crates/cairo-lang-starknet/src/contract_class.rs @@ -79,7 +79,6 @@ pub fn compile_path( path: &Path, contract_path: Option<&str>, compiler_config: CompilerConfig<'_>, - maybe_cairo_paths: Option>, ) -> Result { let mut db = RootDatabase::builder() .detect_corelib() @@ -87,11 +86,6 @@ pub fn compile_path( .build()?; let main_crate_ids = setup_project(&mut db, Path::new(&path))?; - if let Some(cairo_paths) = maybe_cairo_paths { - for cairo_path in cairo_paths { - setup_project(&mut db, Path::new(cairo_path))?; - } - } compile_contract_in_prepared_db(&db, contract_path, main_crate_ids, compiler_config) } @@ -270,7 +264,6 @@ pub fn starknet_compile( &crate_path, contract_path.as_deref(), if let Some(config) = config { config } else { CompilerConfig::default() }, - Some(vec![]), )?; validate_compatible_sierra_version( &contract, diff --git a/examples/cheatcode_caller.cairo b/examples/cheatcode_caller.cairo deleted file mode 100644 index 3c5da97e321..00000000000 --- a/examples/cheatcode_caller.cairo +++ /dev/null @@ -1,251 +0,0 @@ -use result::ResultTrait; -use array::ArrayTrait; - -#[test] -fn test_start_roll() { - match start_roll(1, 2) { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} -#[test] -fn test_stop_roll() { - match stop_roll(1) { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - - -#[test] -fn test_start_warp() { - match start_warp(1, 2) { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_stop_warp() { - match stop_warp(1) { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_declare() { - match declare('test') { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_declare_cairo0() { - match declare_cairo0('test') { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_start_prank() { - match start_prank(123, 123) { - Result::Ok(_) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_stop_prank() { - match stop_prank(123) { - Result::Ok(class_hash) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_invoke() { - let mut arr = ArrayTrait::new(); - arr.append(10); - arr.append(11); - arr.append(12); - match invoke(123, 'test', @arr) { - Result::Ok(class_hash) => (), - Result::Err(x) => { - panic(x.panic_data) - }, - } -} - -#[test] -fn test_mock_call() { - let mut arr = ArrayTrait::new(); - arr.append(10); - arr.append(11); - arr.append(12); - match mock_call(123, 'test', @arr) { - Result::Ok(()) => (), - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_deploy_impl() { - let mut arr = ArrayTrait::new(); - arr.append(1); - arr.append(2); - match deploy_impl(123, 123, @arr) { - Result::Ok(deployed_contract_address) => (), - Result::Err(x) => { - panic(x) - }, - } -} - -#[test] -fn test_deploy() { - let mut arr = ArrayTrait::new(); - arr.append(1); - arr.append(2); - arr.append(3); - match deploy( - PreparedContract { contract_address: 123, class_hash: 123, constructor_calldata: @arr } - ) { - Result::Ok(deployed_contract_address) => (), - Result::Err(x) => { - panic(x.panic_data) - }, - } -} - -#[test] -fn test_prepare_impl() { - let mut arr = ArrayTrait::new(); - arr.append(0xBAD); - arr.append(0xC0DE); - match prepare_impl(0xBEEF, @arr) { - Result::Ok(( - constructor_calldata, contract_address, class_hash - )) => { - drop(constructor_calldata); - drop(contract_address); - drop(class_hash); - }, - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_prepare() { - let mut arr = ArrayTrait::new(); - arr.append(0xBAD); - arr.append(0xC0DE); - match prepare(0xBEEF, @arr) { - Result::Ok(prepared_contract) => { - drop(prepared_contract) - }, - Result::Err(x) => { - let mut data = ArrayTrait::new(); - data.append(x); - panic(data) - }, - } -} - -#[test] -fn test_deploy_contract() { - let mut arr = ArrayTrait::new(); - arr.append(0xBAD); - arr.append(0xC0DE); - match deploy_contract(0xBEEF, @arr) { - Result::Ok(_) => (), - Result::Err(x) => { - panic(x.panic_data) - }, - } -} - -#[test] -fn test_deploy_contract_cairo0() { - let mut arr = ArrayTrait::new(); - arr.append(0xBAD); - arr.append(0xC0DE); - match deploy_contract_cairo0(0xBEEF, @arr) { - Result::Ok(_) => (), - Result::Err(x) => { - panic(x.panic_data) - }, - } -} - -#[test] -fn test_call() { - let mut arr = ArrayTrait::new(); - arr.append(12); - arr.append(23); - arr.append(34); - match call(123, 'test', @arr) { - Result::Ok(return_data) => {}, - Result::Err(x) => { - panic(x.panic_data) - }, - } -} - -use protostar_print::PrintTrait; - -#[test] -fn test_print() { - 123.print(); - 'aaa'.print(); - - let mut arr = ArrayTrait::new(); - arr.append(12); - arr.append(17); - arr.append(21); - arr.print(); - - (1 == 5).print(); -} diff --git a/examples/lib.cairo b/examples/lib.cairo index 5aea49c5ad3..9a8ea784cbe 100644 --- a/examples/lib.cairo +++ b/examples/lib.cairo @@ -1,18 +1,17 @@ -// mod corelib_usage; -// mod enum_flow; -// mod fib; -// mod fib_array; -// mod fib_box; -// mod fib_caller; -// mod fib_counter; -// mod fib_loop; -// mod fib_local; -// mod fib_struct; -// mod fib_u128_checked; -// mod fib_u128; -// mod fib_unary; -// mod hash_chain_gas; -// mod hash_chain; -// mod pedersen_test; -// mod testing; -mod cheatcode_caller; +mod corelib_usage; +mod enum_flow; +mod fib; +mod fib_array; +mod fib_box; +mod fib_caller; +mod fib_counter; +mod fib_loop; +mod fib_local; +mod fib_struct; +mod fib_u128_checked; +mod fib_u128; +mod fib_unary; +mod hash_chain_gas; +mod hash_chain; +mod pedersen_test; +mod testing; diff --git a/scripts/test_cheatcodes.sh b/scripts/test_cheatcodes.sh deleted file mode 100755 index 69b2b35fc0a..00000000000 --- a/scripts/test_cheatcodes.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -set -e - -echo "compiling cairo => sierra..." -cargo run --bin cairo-compile -- --replace-ids examples/cheatcode_caller.cairo ./target/output.sierra -echo "compiling sierra => casm done" - -echo "compiling sierra => casm..." -cargo run --bin sierra-compile -- ./target/output.sierra ./target/out.json -echo "compiling sierra => casm done"