use starknet_api::abi::abi_utils::selector_from_name;
use starknet_api::core::ContractAddress;
use starknet_api::felt;
use starknet_api::transaction::fields::Calldata;
use starknet_types_core::felt::Felt;
use crate::types::u64_from_usize;
pub fn create_calldata(
contract_address: ContractAddress,
entry_point_name: &str,
entry_point_args: &[Felt],
) -> Calldata {
Calldata(
[
vec![
*contract_address.0.key(), selector_from_name(entry_point_name).0, felt!(u64_from_usize(entry_point_args.len())),
],
entry_point_args.into(),
]
.concat()
.into(),
)
}
pub fn create_trivial_calldata(test_contract_address: ContractAddress) -> Calldata {
create_calldata(
test_contract_address,
"return_result",
&[felt!(2_u8)], )
}
pub fn cairo0_proven_revert_scenario_calldata(
cairo1_contract_address: ContractAddress,
cairo0_contract_address: ContractAddress,
key: Felt,
value: Felt,
) -> Calldata {
let contract_c_calldata = [key, value];
let contract_b_calldata = [
vec![
**cairo0_contract_address,
selector_from_name("test_storage_read_write").0,
contract_c_calldata.len().into(),
],
contract_c_calldata.to_vec(),
]
.concat();
let contract_a_calldata = [
vec![
**cairo1_contract_address,
selector_from_name("middle_revert_contract").0,
contract_b_calldata.len().into(),
],
contract_b_calldata,
vec![false.into()], ]
.concat();
create_calldata(cairo1_contract_address, "test_call_contract_revert", &contract_a_calldata)
}