mirror of
https://github.com/pezkuwichain/revive-differential-tests.git
synced 2026-04-22 20:47:58 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8287146003 | |||
| b8cd5d6031 |
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use alloy::{
|
use alloy::{
|
||||||
primitives::{Address, map::HashMap},
|
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_compiler::{Compiler, CompilerInput, SolidityCompiler};
|
||||||
use revive_dt_config::Arguments;
|
use revive_dt_config::Arguments;
|
||||||
@@ -94,15 +94,20 @@ where
|
|||||||
&mut self,
|
&mut self,
|
||||||
input: &Input,
|
input: &Input,
|
||||||
node: &T::Blockchain,
|
node: &T::Blockchain,
|
||||||
) -> anyhow::Result<GethTrace> {
|
) -> anyhow::Result<(GethTrace, DiffMode)> {
|
||||||
let receipt = node.execute_transaction(input.legacy_transaction(
|
let receipt = node.execute_transaction(input.legacy_transaction(
|
||||||
self.config.network_id,
|
self.config.network_id,
|
||||||
0,
|
0,
|
||||||
&self.deployed_contracts,
|
&self.deployed_contracts,
|
||||||
)?)?;
|
)?)?;
|
||||||
dbg!(&receipt);
|
|
||||||
//node.trace_transaction(receipt)
|
log::trace!("Transaction receipt: {:?}", receipt);
|
||||||
todo!()
|
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<()> {
|
pub fn execute(&mut self, span: Span) -> anyhow::Result<()> {
|
||||||
for mode in self.metadata.solc_modes() {
|
for mode in self.metadata.solc_modes() {
|
||||||
let mut leader_state = State::<L>::new(self.config, span);
|
let mut leader_state = State::<L>::new(self.config, span);
|
||||||
@@ -142,8 +173,17 @@ where
|
|||||||
|
|
||||||
for case in &self.metadata.cases {
|
for case in &self.metadata.cases {
|
||||||
for input in &case.inputs {
|
for input in &case.inputs {
|
||||||
let _ = leader_state.execute_input(input, self.leader_node)?;
|
let (_, leader_diff) = leader_state.execute_input(input, self.leader_node)?;
|
||||||
let _ = follower_state.execute_input(input, self.follower_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_compiler::{SolidityCompiler, revive_resolc, solc};
|
||||||
use revive_dt_config::TestingPlatform;
|
use revive_dt_config::TestingPlatform;
|
||||||
use revive_dt_node::geth;
|
use revive_dt_node::{geth, kitchensink::KitchensinkNode};
|
||||||
use revive_dt_node_interaction::EthereumNode;
|
use revive_dt_node_interaction::EthereumNode;
|
||||||
|
|
||||||
pub mod driver;
|
pub mod driver;
|
||||||
@@ -37,7 +37,7 @@ impl Platform for Geth {
|
|||||||
pub struct Kitchensink;
|
pub struct Kitchensink;
|
||||||
|
|
||||||
impl Platform for Kitchensink {
|
impl Platform for Kitchensink {
|
||||||
type Blockchain = geth::Instance;
|
type Blockchain = KitchensinkNode;
|
||||||
type Compiler = revive_resolc::Resolc;
|
type Compiler = revive_resolc::Resolc;
|
||||||
|
|
||||||
fn config_id() -> TestingPlatform {
|
fn config_id() -> TestingPlatform {
|
||||||
|
|||||||
Reference in New Issue
Block a user