Skip to content

Commit cf1894c

Browse files
author
Naohiro Yoshida
committed
fix dat4
1 parent 0064bf7 commit cf1894c

File tree

3 files changed

+67
-13
lines changed

3 files changed

+67
-13
lines changed

derivation/src/derivation.rs

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ use kona_driver::Driver;
1313
use kona_executor::TrieDBProvider;
1414
use kona_genesis::RollupConfig;
1515
use kona_preimage::{PreimageKey, PreimageOracleClient};
16+
use kona_proof::boot::L2_ROLLUP_CONFIG_KEY;
1617
use kona_proof::sync::new_oracle_pipeline_cursor;
1718
use kona_proof::{
1819
executor::KonaExecutor,
1920
l1::{OracleBlobProvider, OracleL1ChainProvider, OraclePipeline},
2021
l2::OracleL2ChainProvider,
2122
BootInfo,
2223
};
23-
use kona_proof::boot::L2_ROLLUP_CONFIG_KEY;
2424
use serde::{Deserialize, Serialize};
2525

2626
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -138,23 +138,67 @@ impl Derivation {
138138
let header = read.l2_safe_head_header().clone().unseal();
139139
Ok(header)
140140
}
141-
142141
}
143142

144143
async fn verify_config(
145144
rollup_config: &RollupConfig,
146145
oracle: &MemoryOracleClient,
147146
) -> Result<(), Error> {
148147
let config_key = PreimageKey::new_local(L2_ROLLUP_CONFIG_KEY.to());
149-
let local_config = oracle.get(config_key.clone()).await.map_err(|e| Error::UnexpectedPreimageKey {
150-
source: e,
151-
key: config_key.key_value().to_be_bytes(),
152-
})?;
153-
let requested = keccak256(local_config);
154-
let saved = keccak256(serde_json::to_vec(rollup_config)?);
155-
if saved != requested {
156-
return Err(Error::InvalidRollupConfig(saved, requested));
148+
let in_preimage =
149+
oracle
150+
.get(config_key.clone())
151+
.await
152+
.map_err(|e| Error::UnexpectedPreimageKey {
153+
source: e,
154+
key: config_key.key_value().to_be_bytes(),
155+
})?;
156+
let in_state = serde_json::to_vec(rollup_config)?;
157+
if keccak256(&in_state) != keccak256(&in_preimage) {
158+
return Err(Error::InvalidRollupConfig(in_preimage, in_state));
157159
}
158160
Ok(())
159161
}
160162

163+
#[cfg(test)]
164+
mod test {
165+
use crate::derivation::verify_config;
166+
use crate::errors::Error;
167+
use crate::oracle::MemoryOracleClient;
168+
use crate::types::Preimage;
169+
use alloc::vec;
170+
use kona_genesis::RollupConfig;
171+
use kona_preimage::PreimageKey;
172+
use kona_proof::boot::L2_ROLLUP_CONFIG_KEY;
173+
174+
#[test]
175+
async fn test_verify_config_not_found_error() {
176+
let rollup_config = RollupConfig::default();
177+
let oracle = MemoryOracleClient::default();
178+
let err = kona_proof::block_on(verify_config(&rollup_config, &oracle)).unwrap_err();
179+
match err {
180+
Error::UnexpectedPreimageKey { .. } => {}
181+
_ => panic!("Unexpected error, got {:?}", err),
182+
}
183+
}
184+
185+
#[test]
186+
fn test_verify_config_invalid_error() {
187+
let rollup_config = RollupConfig::default();
188+
let rollup_config2 = RollupConfig {
189+
l2_chain_id: rollup_config.l2_chain_id + 1,
190+
..rollup_config.clone()
191+
};
192+
193+
let preimage = vec![Preimage::new(
194+
PreimageKey::new_local(L2_ROLLUP_CONFIG_KEY.to()),
195+
serde_json::to_vec(&rollup_config2).unwrap(),
196+
)];
197+
let oracle = MemoryOracleClient::try_from(preimage).unwrap();
198+
let err = kona_proof::block_on(verify_config(&rollup_config, &oracle)).unwrap_err();
199+
match err {
200+
Error::InvalidRollupConfig { .. } => {}
201+
_ => panic!("Unexpected error, got {:?}", err),
202+
}
203+
}
204+
}

derivation/src/errors.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use kona_preimage::PreimageKey;
77

88
#[derive(thiserror::Error, Debug)]
99
pub enum Error {
10-
#[error("InvalidRollupConfig: saved={0}, requested={1}")]
11-
InvalidRollupConfig(B256, B256),
10+
#[error("InvalidRollupConfig: in_preimage={0:?}, in_state={1:?}")]
11+
InvalidRollupConfig(Vec<u8>, Vec<u8>),
1212
#[error("InvalidClaim actual={0}, expected={1}")]
1313
InvalidClaim(B256, B256),
1414
#[error("UnexpectedKZGCommitment: err={0:?}")]
@@ -53,5 +53,5 @@ pub enum Error {
5353
#[error("SerdeError: err={0:?}")]
5454
SerdeError(#[from] serde_json::Error),
5555
#[error("UnexpectedLocalPreimageKey: key={0:?}")]
56-
UnexpectedLocalPreimageKey(PreimageKey)
56+
UnexpectedLocalPreimageKey(PreimageKey),
5757
}

derivation/src/oracle.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,16 @@ mod test {
308308
}
309309
}
310310

311+
#[test]
312+
fn test_try_from_invalid_local_key() {
313+
let preimage = vec![Preimage::new(PreimageKey::new_local(0), vec![0u8; 10])];
314+
let err = MemoryOracleClient::try_from(preimage).unwrap_err();
315+
match err {
316+
Error::UnexpectedLocalPreimageKey(_) => {}
317+
_ => panic!("Unexpected error, got: {:?}", err),
318+
}
319+
}
320+
311321
#[test]
312322
fn test_try_from_precompile_error() {
313323
let preimage = vec![Preimage::new(

0 commit comments

Comments
 (0)