Skip to content

Commit ce41dc9

Browse files
committed
fix: settlement tests
1 parent 113b1f1 commit ce41dc9

File tree

4 files changed

+43
-14
lines changed

4 files changed

+43
-14
lines changed

orchestrator/crates/settlement-clients/ethereum/src/conversion.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ mod tests {
355355

356356
let blob_data_vec = vec![hex_string_to_u8_vec(&blob_data).unwrap()];
357357

358-
match prepare_sidecar(&blob_data_vec, &trusted_setup, false) {
358+
match prepare_sidecar(&blob_data_vec, &trusted_setup, true) {
359359
Ok(result) => {
360360
match result {
361361
BlobTransactionSidecarVariant::Eip4844(sidecar) => {

orchestrator/crates/settlement-clients/ethereum/src/lib.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ impl EthereumSettlementClient {
154154
impersonate_account,
155155
max_gas_price_mul_factor: 2f64,
156156
tx_finality_retry_wait_in_seconds: 10,
157-
disable_peerdas: false, // for testing, default to sepolia/testnet behavior
157+
disable_peerdas: true,
158158
}
159159
}
160160

@@ -571,10 +571,29 @@ mod test_config {
571571
#[allow(dead_code)]
572572
pub async fn configure_transaction(
573573
provider: Arc<DefaultHttpProvider>,
574-
tx_envelope: TxEnvelope,
574+
tx_envelope: Signed<TxEip4844Variant<BlobTransactionSidecarVariant>>,
575575
impersonate_account: Option<Address>,
576576
) -> TransactionRequest {
577-
let mut txn_request: TransactionRequest = tx_envelope.into();
577+
// Extract the base transaction from the variant and convert to TransactionRequest
578+
// For testing, we convert the variant to a standard TransactionRequest
579+
let mut txn_request: TransactionRequest = match tx_envelope.tx() {
580+
TxEip4844Variant::TxEip4844(_) => {
581+
panic!("Wrong transaction type")
582+
}
583+
TxEip4844Variant::TxEip4844WithSidecar(tx_with_sidecar) => {
584+
let sidecar = match &tx_with_sidecar.sidecar {
585+
BlobTransactionSidecarVariant::Eip4844(sidecar) => sidecar,
586+
BlobTransactionSidecarVariant::Eip7594(_) => {
587+
panic!("Wrong sidecar type")
588+
}
589+
};
590+
let tx = TxEip4844WithSidecar { tx: tx_with_sidecar.tx.clone(), sidecar: sidecar.clone() };
591+
match tx_with_sidecar {
592+
&_ => {}
593+
}
594+
<TransactionRequest as From<TxEip4844WithSidecar>>::from(tx)
595+
}
596+
};
578597

579598
// IMPORTANT to understand #[cfg(test)], #[cfg(not(test))] and SHOULD_IMPERSONATE_ACCOUNT
580599
// Two tests : `update_state_blob_with_dummy_contract_works` &

orchestrator/crates/settlement-clients/ethereum/src/tests/mod.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ use std::env;
22
use std::path::PathBuf;
33
use std::str::FromStr;
44

5+
use alloy::network::EthereumWallet;
56
use alloy::node_bindings::{Anvil, AnvilInstance};
67
use alloy::primitives::Address;
78
use alloy::providers::ext::AnvilApi;
89
use alloy::providers::ProviderBuilder;
10+
use alloy::signers::local::PrivateKeySigner;
911
use alloy::sol;
1012
use orchestrator_utils::env_utils::get_env_var_or_panic;
1113
// Using the Pipe trait to write chained operations easier
@@ -67,6 +69,7 @@ pub struct EthereumTestBuilder {
6769
pub struct EthereumTest {
6870
_anvil: AnvilInstance,
6971
provider: crate::types::DefaultHttpProvider,
72+
wallet_provider: crate::types::LocalWalletSignerMiddleware,
7073
pub rpc_url: Url,
7174
}
7275

@@ -103,16 +106,24 @@ impl EthereumTestBuilder {
103106
None => Anvil::new().block_time(BLOCK_TIME).try_spawn().expect("Could not spawn Anvil."),
104107
};
105108

106-
// Setup Provider
109+
// Setup wallet for the wallet_provider
110+
let private_key = get_env_var_or_panic("MADARA_ORCHESTRATOR_ETHEREUM_PRIVATE_KEY");
111+
let signer: PrivateKeySigner = private_key.parse().expect("Failed to parse private key");
112+
let wallet = EthereumWallet::from(signer);
113+
114+
// Setup Provider without wallet (for general operations)
107115
let provider = ProviderBuilder::new().connect_http(anvil.endpoint_url());
108116

117+
// Setup Provider with wallet (for contract deployment and write operations)
118+
let wallet_provider = ProviderBuilder::new().wallet(wallet).connect_http(anvil.endpoint_url());
119+
109120
if let Some(impersonator) = self.impersonator {
110121
provider.anvil_impersonate_account(impersonator).await.expect("Unable to impersonate account.");
111122
}
112123

113124
let rpc_url = anvil.endpoint_url();
114125

115-
EthereumTest { _anvil: anvil, provider, rpc_url }
126+
EthereumTest { _anvil: anvil, provider, wallet_provider, rpc_url }
116127
}
117128
}
118129

@@ -127,10 +138,9 @@ mod settlement_client_tests {
127138

128139
use alloy::consensus::Transaction;
129140
use alloy::eips::eip4844::BYTES_PER_BLOB;
130-
use alloy::primitives::Address;
141+
use alloy::primitives::{Address, TxHash};
131142
use alloy::providers::Provider;
132143
use alloy::sol_types::private::U256;
133-
use alloy_primitives::B256;
134144
use orchestrator_settlement_client_interface::{SettlementClient, SettlementVerificationStatus};
135145
use orchestrator_utils::env_utils::get_env_var_or_panic;
136146
use rstest::rstest;
@@ -204,11 +214,11 @@ mod settlement_client_tests {
204214
max_gas_price_mul_factor: get_env_var_or_panic("MADARA_ORCHESTRATOR_EIP1559_MAX_GAS_MUL_FACTOR")
205215
.parse()
206216
.expect("Invalid max gas price mul factor"),
207-
disable_peerdas: false, // for tests, default to sepolia/testnet behavior
217+
disable_peerdas: true,
208218
};
209219

210220
// Deploying a dummy contract
211-
let contract = DummyCoreContract::deploy(&setup.provider).await.expect("Unable to deploy address");
221+
let contract = DummyCoreContract::deploy(&setup.wallet_provider).await.expect("Unable to deploy address");
212222
let ethereum_settlement_client = EthereumSettlementClient::with_test_params(
213223
setup.provider.clone(),
214224
*contract.address(),
@@ -237,7 +247,7 @@ mod settlement_client_tests {
237247

238248
let txn = setup
239249
.provider
240-
.get_transaction_by_hash(B256::from_str(update_state_result.as_str()).expect("Unable to convert txn"))
250+
.get_transaction_by_hash(TxHash::from_str(update_state_result.as_str()).expect("Invalid tx hash"))
241251
.await
242252
.expect("did not get txn from hash")
243253
.unwrap();
@@ -341,7 +351,7 @@ mod settlement_client_tests {
341351
let latest_block_number = contract.stateBlockNumber().call().await.unwrap();
342352

343353
let expected_latest_block_number = bytes_to_u32(program_output[3].as_slice()).unwrap();
344-
assert_eq!(expected_latest_block_number, latest_block_number._0.as_u32());
354+
assert_eq!(expected_latest_block_number, latest_block_number.as_u32());
345355
}
346356

347357
#[rstest]

orchestrator/src/core/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#[cfg(feature = "testing")]
2-
use alloy::providers::RootProvider;
2+
use alloy::providers::ProviderBuilder;
33

44
use crate::utils::rest_client::RestClient;
55
use anyhow::Context;
@@ -397,7 +397,7 @@ impl Config {
397397
#[cfg(feature = "testing")]
398398
{
399399
Ok(Box::new(EthereumSettlementClient::with_test_params(
400-
RootProvider::new_http(ethereum_settlement_params.ethereum_rpc_url.clone()),
400+
ProviderBuilder::new().connect_http(ethereum_settlement_params.ethereum_rpc_url.clone()),
401401
ethereum_settlement_params.l1_core_contract_address,
402402
ethereum_settlement_params.ethereum_rpc_url.clone(),
403403
Some(ethereum_settlement_params.starknet_operator_address),

0 commit comments

Comments
 (0)