Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,9 @@
{
"DeprecatedSyscallHint": "GetSequencerAddress"
},
{
"DeprecatedSyscallHint": "GetTxInfo"
},
{
"DeprecatedSyscallHint": "GetTxSignature"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@
{
"DeprecatedSyscallHint": "GetSequencerAddress"
},
{
"DeprecatedSyscallHint": "GetTxInfo"
},
{
"DeprecatedSyscallHint": "GetTxSignature"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,9 @@
{
"DeprecatedSyscallHint": "GetSequencerAddress"
},
{
"DeprecatedSyscallHint": "GetTxInfo"
},
{
"DeprecatedSyscallHint": "GetTxSignature"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@
{
"DeprecatedSyscallHint": "GetSequencerAddress"
},
{
"DeprecatedSyscallHint": "GetTxInfo"
},
{
"DeprecatedSyscallHint": "GetTxSignature"
},
Expand Down
108 changes: 107 additions & 1 deletion crates/starknet_os_flow_tests/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ async fn test_os_logic(
) {
let (mut test_manager, _) =
TestManager::<DictStateReader>::new_with_default_initial_state([]).await;
let n_expected_txs = 29;
let n_expected_txs = 31;
let mut expected_storage_updates = HashMap::new();

// Declare a Cairo 0 test contract.
Expand Down Expand Up @@ -693,6 +693,19 @@ async fn test_os_logic(
);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

// Test get_sequencer_address syscall.
let calldata = create_calldata(
contract_addresses[0],
"test_get_sequencer_address",
&[Felt::from_hex_unchecked(TEST_SEQUENCER_ADDRESS)],
);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

// Test tx_version syscall.
let calldata =
create_calldata(contract_addresses[0], "test_tx_version", &[TransactionVersion::THREE.0]);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

// Delegate proxy tests.

let delegate_proxy_contract = FeatureContract::DelegateProxy;
Expand Down Expand Up @@ -1568,6 +1581,10 @@ async fn test_new_syscalls_flow(#[case] use_kzg_da: bool, #[case] n_blocks_in_mu
let calldata = create_calldata(main_contract_address, "test_keccak", &[]);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

// Call test_ec_op.
let calldata = create_calldata(main_contract_address, "test_ec_op", &[]);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

// Points for keccak / secp tests.
let x_low = Felt::from(302934307671667531413257853548643485645u128);
let x_high = Felt::from(328530677494498397859470651507255972949u128);
Expand Down Expand Up @@ -1917,6 +1934,64 @@ async fn test_deprecated_tx_info() {
test_output.expect_hint_coverage("test_deprecated_tx_info");
}

#[rstest]
#[tokio::test]
async fn test_deprecated_send_to_l1() {
let (mut test_manager, [test_contract_address]) =
TestManager::<DictStateReader>::new_with_default_initial_state([(
FeatureContract::TestContract(CairoVersion::Cairo0),
calldata![Felt::ZERO, Felt::ZERO],
)])
.await;

let to_address = Felt::from(85);
let calldata = create_calldata(test_contract_address, "send_message", &[to_address]);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });

let expected_messages_to_l1 = vec![MessageToL1 {
from_address: test_contract_address,
to_address: to_address.try_into().unwrap(),
// These numbers are hard-coded in the `send_message` entrypoint.
payload: L2ToL1Payload(vec![Felt::from(12), Felt::from(34)]),
}];

let test_output = test_manager
.execute_test_with_default_block_contexts(&TestParameters {
messages_to_l1: expected_messages_to_l1,
..Default::default()
})
.await;
test_output.perform_default_validations();
}

#[rstest]
#[tokio::test]
async fn test_replace_class() {
let empty_contract = FeatureContract::Empty(CairoVersion::Cairo1(RunnableCairo1::Casm));
let (
mut test_manager,
[test_contract_address_cairo0, test_contract_address_cairo1, _empty_contract_address],
) = TestManager::<DictStateReader>::new_with_default_initial_state([
(FeatureContract::TestContract(CairoVersion::Cairo0), calldata![Felt::ZERO, Felt::ZERO]),
(
FeatureContract::TestContract(CairoVersion::Cairo1(RunnableCairo1::Casm)),
calldata![Felt::ZERO, Felt::ZERO],
),
(empty_contract, calldata![]),
])
.await;
let empty_class_hash = get_class_hash_of_feature_contract(empty_contract);

for address in [test_contract_address_cairo1, test_contract_address_cairo0] {
let calldata = create_calldata(address, "test_replace_class", &[empty_class_hash.0]);
test_manager.add_funded_account_invoke(invoke_tx_args! { calldata });
}

let test_output =
test_manager.execute_test_with_default_block_contexts(&TestParameters::default()).await;
test_output.perform_default_validations();
}

#[rstest]
#[tokio::test]
async fn test_deploy_syscall() {
Expand Down Expand Up @@ -2932,3 +3007,34 @@ async fn test_empty_multi_block() {
);
test_output.expect_hint_coverage("test_empty_multi_block");
}

/// Tests deploying a contract with no constructor.
/// The OS returns (retdata_size=0, retdata=0) from the deploy_contract function (in
/// deprecated_execute_syscalls.cairo, used both by Cairo0 and 1 contracts). This means retdata is
/// not relocatable in the VM as in all other cases. This test verifies our support for this case.
#[rstest]
#[tokio::test]
async fn test_deploy_no_ctor_contract() {
let empty_contract_cairo0 = FeatureContract::Empty(CairoVersion::Cairo0);
let (mut test_manager, _) = TestManager::<DictStateReader>::new_with_default_initial_state([(
empty_contract_cairo0,
calldata![],
)])
.await;
let class_hash = get_class_hash_of_feature_contract(empty_contract_cairo0);

// Deploy the empty contract using the deploy syscall.
let (deploy_tx, _address) = get_deploy_contract_tx_and_address_with_salt(
class_hash,
calldata![],
test_manager.next_nonce(*FUNDED_ACCOUNT_ADDRESS),
*NON_TRIVIAL_RESOURCE_BOUNDS,
ContractAddressSalt(Felt::ZERO),
);
test_manager.add_invoke_tx(deploy_tx, None);

// Run the test.
let test_output =
test_manager.execute_test_with_default_block_contexts(&TestParameters::default()).await;
test_output.perform_default_validations();
}