Skip to content

Commit 55b9606

Browse files
starknet_os_runner: transfer tx test (#12326)
1 parent cf00e34 commit 55b9606

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

crates/starknet_os_runner/src/runner_test.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use blockifier_reexecution::state_reader::rpc_objects::BlockId;
44
use blockifier_test_utils::calldata::create_calldata;
55
use rstest::rstest;
66
use starknet_api::core::ContractAddress;
7-
use starknet_api::invoke_tx_args;
87
use starknet_api::test_utils::invoke::invoke_tx;
8+
use starknet_api::{contract_address, felt, invoke_tx_args};
99

1010
use crate::runner::VirtualSnosRunner;
1111
use crate::test_utils::{
@@ -49,3 +49,45 @@ async fn test_run_os_with_balance_of_transaction() {
4949
.await
5050
.expect("run_virtual_os should succeed");
5151
}
52+
53+
/// Integration test for the full Runner flow with a STRK transfer transaction.
54+
///
55+
/// # Running
56+
///
57+
/// ```bash
58+
/// SEPOLIA_NODE_URL=https://your-rpc-node cargo test -p starknet_os_runner test_run_os_with_transfer_transaction -- --ignored
59+
/// ```
60+
#[rstest]
61+
#[tokio::test(flavor = "multi_thread")]
62+
#[ignore] // Requires RPC access.
63+
async fn test_run_os_with_transfer_transaction() {
64+
let strk_token = ContractAddress::try_from(STRK_TOKEN_ADDRESS_SEPOLIA).unwrap();
65+
let account = ContractAddress::try_from(DUMMY_ACCOUNT_ADDRESS).unwrap();
66+
let recipient = contract_address!("0x123");
67+
68+
// Transfer amount: 1 wei (u256 = low + high * 2^128).
69+
let amount_low = felt!("1");
70+
let amount_high = felt!("0");
71+
72+
// Calldata matches dummy account's __execute__(contract_address, selector, calldata).
73+
// transfer(recipient, amount) where amount is u256 (low, high).
74+
let calldata =
75+
create_calldata(strk_token, "transfer", &[recipient.into(), amount_low, amount_high]);
76+
77+
let resource_bounds = default_resource_bounds_for_client_side_tx();
78+
79+
let invoke_tx = invoke_tx(invoke_tx_args! {
80+
sender_address: account,
81+
calldata,
82+
resource_bounds,
83+
});
84+
85+
let factory = sepolia_runner_factory();
86+
let block_id = BlockId::Latest;
87+
88+
// Verify execution succeeds.
89+
factory
90+
.run_virtual_os(block_id, vec![(invoke_tx)])
91+
.await
92+
.expect("run_virtual_os should succeed");
93+
}

0 commit comments

Comments
 (0)