Skip to content

Commit 682b671

Browse files
authored
fix(trin-execution): regression| tx_env modify + no withdrawals + traces broken (#1864)
1 parent 4add18d commit 682b671

File tree

6 files changed

+95
-108
lines changed

6 files changed

+95
-108
lines changed

Cargo.lock

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ rand = "0.9"
7474
rayon = "1.10.0"
7575
reqwest = { version = "0.12.17", features = ["native-tls-vendored", "json"] }
7676
reth-ipc = { tag = "v1.3.12", git = "https://github.com/paradigmxyz/reth.git"}
77-
revm = { version = "23.1", default-features = false, features = ["std", "secp256k1", "serde-json", "c-kzg"] }
77+
revm = { version = "24.0", default-features = false, features = ["std", "secp256k1", "serde-json", "c-kzg"] }
7878
revm-primitives = { version = "19.0.0", default-features = false, features = ["std", "serde"] }
7979
rstest = "0.25"
8080
rust-embed = "8.5.0"

bin/trin-execution/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ rand.workspace = true
3131
rayon.workspace = true
3232
reqwest = { workspace = true, features = ["stream"] }
3333
revm.workspace = true
34-
revm-inspectors = "0.22"
34+
revm-inspectors = "0.23"
3535
revm-primitives.workspace = true
3636
rocksdb = "0.23"
3737
serde = { workspace = true, features = ["rc"] }

bin/trin-execution/src/e2hs/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn process_e2hs_file(raw_e2hs: &[u8]) -> anyhow::Result<ProcessedE2HS> {
3434
blocks.push(ProcessedBlock {
3535
header: header_with_proof.header_with_proof.header,
3636
uncles: Some(body.body.0.ommers),
37-
withdrawals: None,
37+
withdrawals: body.body.0.withdrawals.map(|withdrawals| withdrawals.0),
3838
transactions: transactions_with_recovered_senders,
3939
});
4040
}

bin/trin-execution/src/evm/block_executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use revm::{
1212
database::{states::bundle_state::BundleRetention, State},
1313
handler::MainnetContext,
1414
inspector::inspectors::TracerEip3155,
15-
Context, DatabaseCommit, ExecuteEvm, MainBuilder, MainnetEvm,
15+
Context, DatabaseCommit, ExecuteEvm, InspectEvm, MainBuilder, MainnetEvm,
1616
};
1717
use revm_primitives::{hardfork::SpecId, keccak256, Address, B256, U256};
1818
use serde::{Deserialize, Serialize};
@@ -228,7 +228,7 @@ impl BlockExecutor {
228228
let result = match tracer_fn(&tx.transaction) {
229229
Some(tracer) => {
230230
create_evm_with_tracer(self.evm.block().clone(), tx, self.evm.db(), tracer)
231-
.replay()?
231+
.inspect_replay()?
232232
}
233233
None => self.evm.replay()?,
234234
};

crates/evm/src/tx_env_modifier.rs

Lines changed: 74 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use alloy::{
22
consensus::{TxEip1559, TxEip2930, TxEip4844, TxLegacy},
3-
eips::eip2930::{AccessList, AccessListItem},
43
rpc::types::TransactionRequest,
54
};
6-
use revm::context::{TransactTo, TxEnv};
5+
use revm::context::TxEnv;
76
use revm_primitives::{hardfork::SpecId, TxKind};
87

98
use super::spec_id::get_spec_id;
@@ -14,102 +13,89 @@ pub trait TxEnvModifier {
1413

1514
impl TxEnvModifier for TxLegacy {
1615
fn modify(&self, block_number: u64, tx_env: &mut TxEnv) {
17-
tx_env.gas_limit = self.gas_limit;
18-
tx_env.gas_price = self.gas_price;
19-
tx_env.gas_priority_fee = None;
20-
tx_env.kind = match self.to {
21-
TxKind::Call(to) => TransactTo::Call(to),
22-
TxKind::Create => TransactTo::Create,
23-
};
24-
tx_env.value = self.value;
25-
tx_env.data = self.input.clone();
26-
tx_env.chain_id = if get_spec_id(block_number).is_enabled_in(SpecId::SPURIOUS_DRAGON) {
27-
Some(1)
28-
} else {
29-
None
16+
*tx_env = TxEnv {
17+
tx_type: 0,
18+
caller: tx_env.caller,
19+
gas_limit: self.gas_limit,
20+
gas_price: self.gas_price,
21+
kind: self.to,
22+
value: self.value,
23+
data: self.input.clone(),
24+
nonce: self.nonce,
25+
chain_id: if get_spec_id(block_number).is_enabled_in(SpecId::SPURIOUS_DRAGON) {
26+
Some(1)
27+
} else {
28+
None
29+
},
30+
access_list: Default::default(),
31+
gas_priority_fee: None,
32+
blob_hashes: Default::default(),
33+
max_fee_per_blob_gas: Default::default(),
34+
authorization_list: Default::default(),
3035
};
31-
tx_env.nonce = self.nonce;
32-
tx_env.access_list = AccessList::default();
33-
tx_env.blob_hashes.clear();
34-
tx_env.max_fee_per_blob_gas = 0;
3536
}
3637
}
3738

38-
impl TxEnvModifier for TxEip1559 {
39+
impl TxEnvModifier for TxEip2930 {
3940
fn modify(&self, _block_number: u64, tx_env: &mut TxEnv) {
40-
tx_env.gas_limit = self.gas_limit;
41-
tx_env.gas_price = self.max_fee_per_gas;
42-
tx_env.gas_priority_fee = Some(self.max_priority_fee_per_gas);
43-
tx_env.kind = match self.to {
44-
TxKind::Call(to) => TransactTo::Call(to),
45-
TxKind::Create => TransactTo::Create,
41+
*tx_env = TxEnv {
42+
tx_type: 1,
43+
caller: tx_env.caller,
44+
gas_limit: self.gas_limit,
45+
gas_price: self.gas_price,
46+
kind: self.to,
47+
value: self.value,
48+
data: self.input.clone(),
49+
nonce: self.nonce,
50+
chain_id: Some(self.chain_id),
51+
access_list: self.access_list.clone(),
52+
gas_priority_fee: None,
53+
blob_hashes: Default::default(),
54+
max_fee_per_blob_gas: Default::default(),
55+
authorization_list: Default::default(),
4656
};
47-
tx_env.value = self.value;
48-
tx_env.data = self.input.clone();
49-
tx_env.chain_id = Some(self.chain_id);
50-
tx_env.nonce = self.nonce;
51-
tx_env.access_list = AccessList::from(
52-
self.access_list
53-
.iter()
54-
.map(|l| AccessListItem {
55-
address: l.address,
56-
storage_keys: l.storage_keys.clone(),
57-
})
58-
.collect::<Vec<_>>(),
59-
);
60-
tx_env.blob_hashes.clear();
61-
tx_env.max_fee_per_blob_gas = 0;
6257
}
6358
}
6459

65-
impl TxEnvModifier for TxEip2930 {
60+
impl TxEnvModifier for TxEip1559 {
6661
fn modify(&self, _block_number: u64, tx_env: &mut TxEnv) {
67-
tx_env.gas_limit = self.gas_limit;
68-
tx_env.gas_price = self.gas_price;
69-
tx_env.gas_priority_fee = None;
70-
tx_env.kind = match self.to {
71-
TxKind::Call(to) => TransactTo::Call(to),
72-
TxKind::Create => TransactTo::Create,
62+
*tx_env = TxEnv {
63+
tx_type: 2,
64+
caller: tx_env.caller,
65+
gas_limit: self.gas_limit,
66+
gas_price: self.max_fee_per_gas,
67+
kind: self.to,
68+
value: self.value,
69+
data: self.input.clone(),
70+
nonce: self.nonce,
71+
chain_id: Some(self.chain_id),
72+
access_list: self.access_list.clone(),
73+
gas_priority_fee: Some(self.max_priority_fee_per_gas),
74+
blob_hashes: Default::default(),
75+
max_fee_per_blob_gas: Default::default(),
76+
authorization_list: Default::default(),
7377
};
74-
tx_env.value = self.value;
75-
tx_env.data = self.input.clone();
76-
tx_env.chain_id = Some(self.chain_id);
77-
tx_env.nonce = self.nonce;
78-
tx_env.access_list = AccessList::from(
79-
self.access_list
80-
.iter()
81-
.map(|l| AccessListItem {
82-
address: l.address,
83-
storage_keys: l.storage_keys.clone(),
84-
})
85-
.collect::<Vec<_>>(),
86-
);
87-
tx_env.blob_hashes.clear();
88-
tx_env.max_fee_per_blob_gas = 0;
8978
}
9079
}
9180

9281
impl TxEnvModifier for TxEip4844 {
9382
fn modify(&self, _block_number: u64, tx_env: &mut TxEnv) {
94-
tx_env.gas_limit = self.gas_limit;
95-
tx_env.gas_price = self.max_fee_per_gas;
96-
tx_env.gas_priority_fee = Some(self.max_priority_fee_per_gas);
97-
tx_env.kind = TransactTo::Call(self.to);
98-
tx_env.value = self.value;
99-
tx_env.data = self.input.clone();
100-
tx_env.chain_id = Some(self.chain_id);
101-
tx_env.nonce = self.nonce;
102-
tx_env.access_list = AccessList::from(
103-
self.access_list
104-
.iter()
105-
.map(|l| AccessListItem {
106-
address: l.address,
107-
storage_keys: l.storage_keys.clone(),
108-
})
109-
.collect::<Vec<_>>(),
110-
);
111-
tx_env.blob_hashes.clone_from(&self.blob_versioned_hashes);
112-
tx_env.max_fee_per_blob_gas = self.max_fee_per_blob_gas;
83+
*tx_env = TxEnv {
84+
tx_type: 3,
85+
caller: tx_env.caller,
86+
gas_limit: self.gas_limit,
87+
gas_price: self.max_fee_per_gas,
88+
kind: TxKind::Call(self.to),
89+
value: self.value,
90+
data: self.input.clone(),
91+
nonce: self.nonce,
92+
chain_id: Some(self.chain_id),
93+
access_list: self.access_list.clone(),
94+
gas_priority_fee: Some(self.max_priority_fee_per_gas),
95+
blob_hashes: self.blob_versioned_hashes.clone(),
96+
max_fee_per_blob_gas: self.max_fee_per_blob_gas,
97+
authorization_list: Default::default(),
98+
};
11399
}
114100
}
115101

@@ -140,8 +126,8 @@ impl TxEnvModifier for TransactionRequest {
140126
if let Some(data) = self.input.input() {
141127
tx_env.data.clone_from(data);
142128
}
143-
if let Some(nounce) = self.nonce {
144-
tx_env.nonce = nounce;
129+
if let Some(nonce) = self.nonce {
130+
tx_env.nonce = nonce;
145131
}
146132
tx_env.chain_id = self.chain_id;
147133
if let Some(access_list) = &self.access_list {
@@ -156,6 +142,7 @@ impl TxEnvModifier for TransactionRequest {
156142
#[cfg(test)]
157143
mod tests {
158144
use alloy::primitives::bytes::Bytes;
145+
use revm::context::TransactTo;
159146
use revm_primitives::{TxKind, U256};
160147

161148
use super::*;
@@ -204,7 +191,7 @@ mod tests {
204191
assert_eq!(tx_env.value, U256::from(1));
205192
assert_eq!(tx_env.data.0, vec![1, 2, 3]);
206193
assert_eq!(tx_env.chain_id, Some(1));
207-
assert_eq!(tx_env.access_list, AccessList::default());
194+
assert_eq!(tx_env.access_list, Default::default());
208195
}
209196

210197
#[test]
@@ -228,7 +215,7 @@ mod tests {
228215
assert_eq!(tx_env.value, U256::from(1));
229216
assert_eq!(tx_env.data.0, vec![1, 2, 3]);
230217
assert_eq!(tx_env.chain_id, Some(1));
231-
assert_eq!(tx_env.access_list, AccessList::default());
218+
assert_eq!(tx_env.access_list, Default::default());
232219
}
233220

234221
#[test]
@@ -256,7 +243,7 @@ mod tests {
256243
assert_eq!(tx_env.value, U256::from(1));
257244
assert_eq!(tx_env.data.0, vec![1, 2, 3]);
258245
assert_eq!(tx_env.chain_id, Some(1));
259-
assert_eq!(tx_env.access_list, AccessList::default());
246+
assert_eq!(tx_env.access_list, Default::default());
260247
assert_eq!(tx_env.blob_hashes.len(), 0);
261248
assert_eq!(tx_env.max_fee_per_blob_gas, 1);
262249
}

0 commit comments

Comments
 (0)