Skip to content

Commit e8cd701

Browse files
authored
feat: direct db onto zktrie (#38)
* upgrade zktrie * noisy log * fix typo * add chunk mode * add chunk mode to binary tool * disable key cache * fix unwrap * build once * clippy * add tracker * add tracker * fix some order * fix clippy * add metrics exporter * some adjustment * some adjustment * typo * adjust range based on super2 * fix * fix * fix * update Cargo.lock * fix clippy * add new traces * remove aggregator unit test * fix * suppress measure log * refactor * remove StateDB * remove unneeded * remove get_account * fix clippy * fix * refactor
1 parent b7c15f4 commit e8cd701

17 files changed

+531
-437
lines changed

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ edition = "2021"
66
[dependencies]
77
hex = "0.4"
88
itertools = "0.13.0" # for compatibility msrv 1.75
9+
once_cell = "1.19"
910
rkyv = { version = "0.7", features = ["validation"] }
1011
thiserror = "1.0"
1112
tiny-keccak = "2.0"
@@ -41,7 +42,6 @@ ctor = { version = "0.2", optional = true }
4142
hyper = { version = "1.4", features = ["server", "http1"], optional = true }
4243
hyper-util = { version = "0.1", features = ["tokio"], optional = true }
4344
http-body-util = { version = "0.1", optional = true }
44-
once_cell = { version = "1.19", optional = true }
4545
prometheus-client = { version = "0.22", optional = true }
4646
pprof = { version = "0.13", features = ["flamegraph"], optional = true }
4747
tracing = { version = "0.1", optional = true }
@@ -100,7 +100,7 @@ profiling = ["pprof"]
100100
debug-account = ["csv", "revm/serde"]
101101
debug-storage = ["csv", "revm/serde"]
102102
dev = ["ctor", "tracing", "tracing-subscriber"]
103-
metrics = ["hyper", "hyper-util", "http-body-util", "once_cell", "prometheus-client", "tokio", "tokio/macros", "tokio/signal"]
103+
metrics = ["hyper", "hyper-util", "http-body-util", "prometheus-client", "tokio", "tokio/macros", "tokio/signal"]
104104

105105
# sp1 related
106106
sp1 = []

src/bin/trace-verifier/commands/run_file.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,27 @@ impl RunFileCommand {
7474
}
7575

7676
let fork_config = fork_config(traces[0].chain_id);
77-
let (chunk_info, zktrie_state) = ChunkInfo::from_block_traces(&traces);
77+
let (chunk_info, mut zktrie_state) = ChunkInfo::from_block_traces(&traces);
7878

7979
let tx_bytes_hasher = Rc::new(RefCell::new(Keccak::v256()));
8080

81-
let mut executor = EvmExecutorBuilder::new()
81+
let mut executor = EvmExecutorBuilder::new(&zktrie_state)
8282
.hardfork_config(fork_config)
8383
.with_execute_hooks(|hooks| {
8484
let hasher = tx_bytes_hasher.clone();
8585
hooks.add_tx_rlp_handler(move |_, rlp| {
8686
hasher.borrow_mut().update(rlp);
8787
});
8888
})
89-
.zktrie_state(&zktrie_state)
90-
.build(&traces[0]);
89+
.build(&traces[0])?;
9190
executor.handle_block(&traces[0])?;
9291

9392
for trace in traces[1..].iter() {
94-
executor.update_db(trace, &zktrie_state);
93+
executor.update_db(trace)?;
9594
executor.handle_block(trace)?;
9695
}
9796

98-
let post_state_root = executor.commit_changes();
97+
let post_state_root = executor.commit_changes(&mut zktrie_state);
9998
if post_state_root != chunk_info.post_state_root() {
10099
bail!("post state root mismatch");
101100
}

src/bin/trace-verifier/utils.rs

+19-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use eth_types::l2_types::BlockTrace;
2-
use stateless_block_verifier::{post_check, EvmExecutorBuilder, HardforkConfig, VerificationError};
2+
use mpt_zktrie::ZktrieState;
3+
use stateless_block_verifier::{
4+
post_check, utils::ext::BlockZktrieExt, EvmExecutorBuilder, HardforkConfig, VerificationError,
5+
};
36

47
pub fn verify(
58
l2_trace: &BlockTrace,
@@ -35,7 +38,19 @@ fn verify_inner(
3538
.build()
3639
.unwrap();
3740

38-
let mut executor = EvmExecutorBuilder::new()
41+
let mut zktrie_state = cycle_track!(
42+
{
43+
let old_root = l2_trace.storage_trace.root_before;
44+
let mut zktrie_state = ZktrieState::construct(old_root);
45+
l2_trace.build_zktrie_state(&mut zktrie_state);
46+
zktrie_state
47+
},
48+
"build ZktrieState"
49+
);
50+
51+
cycle_tracker_end!("build ZktrieState");
52+
53+
let mut executor = EvmExecutorBuilder::new(&zktrie_state)
3954
.hardfork_config(*fork_config)
4055
.with_execute_hooks(|hooks| {
4156
let l2_trace = l2_trace.clone();
@@ -45,7 +60,7 @@ fn verify_inner(
4560
})
4661
}
4762
})
48-
.build(&l2_trace);
63+
.build(&l2_trace)?;
4964

5065
// TODO: change to Result::inspect_err when sp1 toolchain >= 1.76
5166
#[allow(clippy::map_identity)]
@@ -58,7 +73,7 @@ fn verify_inner(
5873
update_metrics_counter!(verification_error);
5974
e
6075
})?;
61-
let revm_root_after = executor.commit_changes();
76+
let revm_root_after = executor.commit_changes(&mut zktrie_state);
6277

6378
#[cfg(feature = "profiling")]
6479
if let Ok(report) = guard.report().build() {

src/chunk.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,11 @@ mod tests {
135135
});
136136

137137
let fork_config = HardforkConfig::default_from_chain_id(traces[0].chain_id);
138-
let (chunk_info, zktrie_state) = ChunkInfo::from_block_traces(&traces);
138+
let (chunk_info, mut zktrie_state) = ChunkInfo::from_block_traces(&traces);
139139

140140
let tx_bytes_hasher = Rc::new(RefCell::new(Keccak::v256()));
141141

142-
let mut executor = EvmExecutorBuilder::new()
142+
let mut executor = EvmExecutorBuilder::new(&zktrie_state)
143143
.hardfork_config(fork_config)
144144
.with_execute_hooks(|hooks| {
145145
let hasher = tx_bytes_hasher.clone();
@@ -148,15 +148,16 @@ mod tests {
148148
});
149149
})
150150
.zktrie_state(&zktrie_state)
151-
.build(&traces[0]);
151+
.build(&traces[0])
152+
.unwrap();
152153
executor.handle_block(&traces[0]).unwrap();
153154

154155
for trace in traces[1..].iter() {
155-
executor.update_db(trace, &zktrie_state);
156+
executor.update_db(trace).unwrap();
156157
executor.handle_block(trace).unwrap();
157158
}
158159

159-
let post_state_root = executor.commit_changes();
160+
let post_state_root = executor.commit_changes(&mut zktrie_state);
160161
assert_eq!(post_state_root, chunk_info.post_state_root);
161162
drop(executor); // drop executor to release Rc<Keccek>
162163

0 commit comments

Comments
 (0)