mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-04-22 11:27:59 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8287146003 | |||
| b8cd5d6031 |
@@ -2,7 +2,7 @@
|
||||
|
||||
use alloy::{
|
||||
primitives::{Address, map::HashMap},
|
||||
rpc::types::trace::geth::GethTrace,
|
||||
rpc::types::trace::geth::{AccountState, DiffMode, GethTrace},
|
||||
};
|
||||
use revive_dt_compiler::{Compiler, CompilerInput, SolidityCompiler};
|
||||
use revive_dt_config::Arguments;
|
||||
@@ -94,15 +94,20 @@ where
|
||||
&mut self,
|
||||
input: &Input,
|
||||
node: &T::Blockchain,
|
||||
) -> anyhow::Result<GethTrace> {
|
||||
) -> anyhow::Result<(GethTrace, DiffMode)> {
|
||||
let receipt = node.execute_transaction(input.legacy_transaction(
|
||||
self.config.network_id,
|
||||
0,
|
||||
&self.deployed_contracts,
|
||||
)?)?;
|
||||
dbg!(&receipt);
|
||||
//node.trace_transaction(receipt)
|
||||
todo!()
|
||||
|
||||
log::trace!("Transaction receipt: {:?}", receipt);
|
||||
let trace = node.trace_transaction(receipt.clone())?;
|
||||
log::trace!("Trace result: {:?}", trace);
|
||||
|
||||
let diff = node.state_diff(receipt)?;
|
||||
|
||||
Ok((trace, diff))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,6 +137,32 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
pub fn trace_diff_mode(label: &str, diff: &DiffMode) {
|
||||
log::trace!("{} - PRE STATE:", label);
|
||||
for (addr, state) in &diff.pre {
|
||||
Self::trace_account_state(" [pre]", addr, state);
|
||||
}
|
||||
|
||||
log::trace!("{} - POST STATE:", label);
|
||||
for (addr, state) in &diff.post {
|
||||
Self::trace_account_state(" [post]", addr, state);
|
||||
}
|
||||
}
|
||||
|
||||
fn trace_account_state(prefix: &str, addr: &Address, state: &AccountState) {
|
||||
log::trace!("{} 0x{:x}", prefix, addr);
|
||||
|
||||
if let Some(balance) = &state.balance {
|
||||
log::trace!("{} balance: {}", prefix, balance);
|
||||
}
|
||||
if let Some(nonce) = &state.nonce {
|
||||
log::trace!("{} nonce: {}", prefix, nonce);
|
||||
}
|
||||
if let Some(code) = &state.code {
|
||||
log::trace!("{} code: {}", prefix, code);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn execute(&mut self, span: Span) -> anyhow::Result<()> {
|
||||
for mode in self.metadata.solc_modes() {
|
||||
let mut leader_state = State::<L>::new(self.config, span);
|
||||
@@ -142,8 +173,17 @@ where
|
||||
|
||||
for case in &self.metadata.cases {
|
||||
for input in &case.inputs {
|
||||
let _ = leader_state.execute_input(input, self.leader_node)?;
|
||||
let _ = follower_state.execute_input(input, self.follower_node)?;
|
||||
let (_, leader_diff) = leader_state.execute_input(input, self.leader_node)?;
|
||||
let (_, follower_diff) =
|
||||
follower_state.execute_input(input, self.follower_node)?;
|
||||
|
||||
if leader_diff == follower_diff {
|
||||
log::debug!("State diffs match between leader and follower.");
|
||||
} else {
|
||||
log::debug!("State diffs mismatch between leader and follower.");
|
||||
Self::trace_diff_mode("Leader", &leader_diff);
|
||||
Self::trace_diff_mode("Follower", &follower_diff);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
use revive_dt_compiler::{SolidityCompiler, revive_resolc, solc};
|
||||
use revive_dt_config::TestingPlatform;
|
||||
use revive_dt_node::geth;
|
||||
use revive_dt_node::{geth, kitchensink::KitchensinkNode};
|
||||
use revive_dt_node_interaction::EthereumNode;
|
||||
|
||||
pub mod driver;
|
||||
@@ -37,7 +37,7 @@ impl Platform for Geth {
|
||||
pub struct Kitchensink;
|
||||
|
||||
impl Platform for Kitchensink {
|
||||
type Blockchain = geth::Instance;
|
||||
type Blockchain = KitchensinkNode;
|
||||
type Compiler = revive_resolc::Resolc;
|
||||
|
||||
fn config_id() -> TestingPlatform {
|
||||
|
||||
Reference in New Issue
Block a user