@@ -8,14 +8,11 @@ use anyhow::Result;
88use kona_genesis:: RollupConfig ;
99use kona_host:: single:: { SingleChainHintHandler , SingleChainHost } ;
1010use kona_host:: { MemoryKeyValueStore , OnlineHostBackend , PreimageServer , SplitKeyValueStore } ;
11- use kona_preimage:: {
12- BidirectionalChannel , HintReader , HintWriter , OracleReader , OracleServer , PreimageKey ,
13- } ;
11+ use kona_preimage:: { BidirectionalChannel , HintReader , HintWriter , NativeChannel , OracleReader , OracleServer , PreimageKey } ;
1412use kona_proof:: boot:: L2_ROLLUP_CONFIG_KEY ;
1513use kona_proof:: HintType ;
1614use std:: sync:: Arc ;
1715use tokio:: sync:: RwLock ;
18- use tokio:: task;
1916
2017#[ derive( Debug , Clone ) ]
2118pub struct DerivationRequest {
@@ -42,6 +39,21 @@ impl DerivationRequest {
4239 ) ) ) ) )
4340 }
4441
42+ async fn run_server ( & self , preimage_host : NativeChannel , hint_host : NativeChannel , backend : OnlineHostBackend < SingleChainHost , SingleChainHintHandler > ) -> Result < ( ) > {
43+ PreimageServer :: new (
44+ OracleServer :: new ( preimage_host) ,
45+ HintReader :: new ( hint_host) ,
46+ Arc :: new ( backend) ,
47+ ) . start ( ) . await . map_err ( |e| e. into ( ) )
48+ }
49+
50+ async fn run_client ( & self , preimage_client : NativeChannel , hint_client : NativeChannel ) -> Result < ( ) > {
51+ kona_client:: single:: run (
52+ OracleReader :: new ( preimage_client) ,
53+ HintWriter :: new ( hint_client) ,
54+ ) . await . map_err ( |e| e. into ( ) )
55+ }
56+
4557 pub async fn start ( & self ) -> Result < Vec < u8 > > {
4658 let hint = BidirectionalChannel :: new ( ) ?;
4759 let preimage = BidirectionalChannel :: new ( ) ?;
@@ -62,41 +74,27 @@ impl DerivationRequest {
6274 OnlineHostBackend :: new ( cfg, kv_store. clone ( ) , providers, SingleChainHintHandler )
6375 . with_proactive_hint ( HintType :: L2PayloadWitness ) ;
6476
65- let server_task = task:: spawn (
66- PreimageServer :: new (
67- OracleServer :: new ( preimage. host ) ,
68- HintReader :: new ( hint. host ) ,
69- Arc :: new ( backend) ,
70- )
71- . start ( ) ,
72- ) ;
73- let client_task = task:: spawn ( kona_client:: single:: run (
74- OracleReader :: new ( preimage. client ) ,
75- HintWriter :: new ( hint. client ) ,
76- ) ) ;
77+ let server_task = self . run_server ( preimage. host , hint. host , backend) ;
78+ let client_task = self . run_client ( preimage. client , hint. client ) ;
79+ tokio:: try_join!( server_task, client_task) ?;
7780
78- let ( _, client_result) = tokio:: try_join!( server_task, client_task) ?;
79- match client_result {
80- Ok ( _) => {
81- let mut used = {
82- let mut lock = kv_store. write ( ) . await ;
83- std:: mem:: take ( & mut lock. used )
84- } ;
85- let local_key = PreimageKey :: new_local ( L2_ROLLUP_CONFIG_KEY . to ( ) ) ;
86- let roll_up_config_json = serde_json:: to_vec ( & self . rollup_config ) ?;
87- used. insert ( local_key, roll_up_config_json) ;
81+ // Collect preimages from the kv store
82+ let mut used = {
83+ let mut lock = kv_store. write ( ) . await ;
84+ std:: mem:: take ( & mut lock. used )
85+ } ;
86+ let local_key = PreimageKey :: new_local ( L2_ROLLUP_CONFIG_KEY . to ( ) ) ;
87+ let roll_up_config_json = serde_json:: to_vec ( & self . rollup_config ) ?;
88+ used. insert ( local_key, roll_up_config_json) ;
8889
89- let entry_size = used. len ( ) ;
90- let preimage = encode_to_bytes ( used) ;
91- let preimage_bytes: Vec < u8 > = preimage. into_vec ( ) . unwrap ( ) ;
92- tracing:: info!(
93- "Preimage entry: {}, size: {}" ,
94- entry_size,
95- preimage_bytes. len( )
96- ) ;
97- Ok ( preimage_bytes)
98- }
99- Err ( e) => Err ( e. into ( ) ) ,
100- }
90+ let entry_size = used. len ( ) ;
91+ let preimage = encode_to_bytes ( used) ;
92+ let preimage_bytes: Vec < u8 > = preimage. into_vec ( ) . unwrap ( ) ;
93+ tracing:: info!(
94+ "Preimage entry: {}, size: {}" ,
95+ entry_size,
96+ preimage_bytes. len( )
97+ ) ;
98+ Ok ( preimage_bytes)
10199 }
102100}
0 commit comments