mev_engine/
utils.rs

1use color_eyre::{eyre::eyre, Result};
2use starknet::{
3    accounts::SingleOwnerAccount,
4    core::{
5        types::{BlockId, BlockTag, Felt, FunctionCall},
6        utils::get_selector_from_name,
7    },
8    providers::{jsonrpc::HttpTransport, JsonRpcClient, Provider},
9    signers::LocalWallet,
10};
11use std::sync::Arc;
12
13pub type LocalWalletSignerMiddleware =
14    Arc<SingleOwnerAccount<Arc<JsonRpcClient<HttpTransport>>, LocalWallet>>;
15
16pub async fn call_contract<P>(
17    provider: Arc<P>,
18    address: Felt,
19    method: &str,
20    calldata: Vec<Felt>,
21) -> Result<Vec<Felt>>
22where
23    P: Provider + Sync + Send,
24{
25    let entry_point_selector = get_selector_from_name(method)
26        .map_err(|e| eyre!("Invalid selector for {}: {}", method, e))?;
27    let function_call = FunctionCall {
28        contract_address: address,
29        entry_point_selector,
30        calldata,
31    };
32    provider
33        .call(function_call, BlockId::Tag(BlockTag::Latest))
34        .await
35        .map_err(|e| eyre!("Provider error: {}", e))
36}