Skip to content

Commit a135eda

Browse files
committed
Fixed the contract deployment logic. Added new tracing logging for differential for leader and follower receipt structure
1 parent ee97b62 commit a135eda

File tree

1 file changed

+55
-19
lines changed

1 file changed

+55
-19
lines changed

crates/core/src/driver/mod.rs

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
//! The test driver handles the compilation and execution of the test cases.
22
3+
use alloy::primitives::Bytes;
4+
use alloy::rpc::types::TransactionInput;
35
use alloy::{
4-
network::TransactionBuilder,
5-
primitives::{Address, bytes::Bytes, map::HashMap},
6+
primitives::{Address, TxKind, map::HashMap},
67
rpc::types::{
7-
TransactionRequest,
8+
TransactionReceipt, TransactionRequest,
89
trace::geth::{AccountState, DiffMode, GethTrace},
910
},
1011
};
@@ -116,7 +117,7 @@ where
116117
&mut self,
117118
input: &Input,
118119
node: &T::Blockchain,
119-
) -> anyhow::Result<(GethTrace, DiffMode)> {
120+
) -> anyhow::Result<(TransactionReceipt, GethTrace, DiffMode)> {
120121
log::trace!("Calling execute_input for input: {:?}", input);
121122

122123
let nonce = node.fetch_add_nonce(input.caller)?;
@@ -144,19 +145,31 @@ where
144145
let receipt = match node.execute_transaction(tx) {
145146
Ok(receipt) => receipt,
146147
Err(err) => {
147-
log::error!("Failed to execute transaction: {:?}", err);
148+
log::error!(
149+
"Failed to execute transaction when executing the contract: {}, {:?}",
150+
&input.instance,
151+
err
152+
);
148153
return Err(err);
149154
}
150155
};
151156

152-
log::trace!("Transaction receipt: {:?}", receipt);
157+
log::trace!(
158+
"Transaction receipt for executed contract: {} - {:?}",
159+
&input.instance,
160+
receipt,
161+
);
153162

154163
let trace = node.trace_transaction(receipt.clone())?;
155-
log::trace!("Trace result: {:?}", trace);
164+
log::trace!(
165+
"Trace result for contract: {} - {:?}",
166+
&input.instance,
167+
trace
168+
);
156169

157-
let diff = node.state_diff(receipt)?;
170+
let diff = node.state_diff(receipt.clone())?;
158171

159-
Ok((trace, diff))
172+
Ok((receipt, trace, diff))
160173
}
161174

162175
pub fn deploy_contracts(&mut self, input: &Input, node: &T::Blockchain) -> anyhow::Result<()> {
@@ -207,14 +220,16 @@ where
207220
std::any::type_name::<T>()
208221
);
209222

210-
let tx = TransactionRequest::default()
211-
.with_from(input.caller)
212-
.with_to(Address::ZERO)
213-
.with_input(Bytes::from(code.clone()))
214-
.with_gas_price(5_000_000)
215-
.with_gas_limit(5_000_000)
216-
.with_chain_id(self.config.network_id)
217-
.with_nonce(nonce);
223+
let tx = TransactionRequest {
224+
from: Some(input.caller),
225+
to: Some(TxKind::Create),
226+
gas_price: Some(5_000_000),
227+
gas: Some(5_000_000),
228+
chain_id: Some(self.config.network_id),
229+
nonce: Some(nonce),
230+
input: TransactionInput::new(Bytes::from(code.into_bytes())),
231+
..Default::default()
232+
};
218233

219234
let receipt = match node.execute_transaction(tx) {
220235
Ok(receipt) => receipt,
@@ -228,6 +243,12 @@ where
228243
}
229244
};
230245

246+
log::trace!(
247+
"Deployed transaction receipt for contract: {} - {:?}",
248+
&contract_name,
249+
receipt
250+
);
251+
231252
let Some(address) = receipt.contract_address else {
232253
log::error!(
233254
"contract {} deployment did not return an address",
@@ -316,8 +337,9 @@ where
316337
follower_state.deploy_contracts(input, self.follower_node)?;
317338

318339
log::debug!("Starting executing contract {}", &input.instance);
319-
let (_, leader_diff) = leader_state.execute_input(input, self.leader_node)?;
320-
let (_, follower_diff) =
340+
let (leader_receipt, _, leader_diff) =
341+
leader_state.execute_input(input, self.leader_node)?;
342+
let (follower_receipt, _, follower_diff) =
321343
follower_state.execute_input(input, self.follower_node)?;
322344

323345
if leader_diff == follower_diff {
@@ -327,6 +349,20 @@ where
327349
Self::trace_diff_mode("Leader", &leader_diff);
328350
Self::trace_diff_mode("Follower", &follower_diff);
329351
}
352+
353+
if leader_receipt.logs() != follower_receipt.logs() {
354+
log::debug!("Log/event mismatch between leader and follower.");
355+
log::trace!("Leader logs: {:?}", leader_receipt.logs());
356+
log::trace!("Follower logs: {:?}", follower_receipt.logs());
357+
}
358+
359+
if leader_receipt.status() != follower_receipt.status() {
360+
log::debug!(
361+
"Mismatch in status: leader = {}, follower = {}",
362+
leader_receipt.status(),
363+
follower_receipt.status()
364+
);
365+
}
330366
}
331367
}
332368
}

0 commit comments

Comments
 (0)