@@ -13,14 +13,14 @@ use kona_driver::Driver;
1313use kona_executor:: TrieDBProvider ;
1414use kona_genesis:: RollupConfig ;
1515use kona_preimage:: { PreimageKey , PreimageOracleClient } ;
16+ use kona_proof:: boot:: L2_ROLLUP_CONFIG_KEY ;
1617use kona_proof:: sync:: new_oracle_pipeline_cursor;
1718use 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 ;
2424use 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
144143async 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+ }
0 commit comments