@@ -94,28 +94,6 @@ pub struct ChunkDetails {
9494 pub total_gas_used : u64 ,
9595}
9696
97- impl TryFrom < ChunkProvingTask > for ProvingTask {
98- type Error = eyre:: Error ;
99-
100- fn try_from ( value : ChunkProvingTask ) -> Result < Self > {
101- let witness = value. build_guest_input ( value. version . into ( ) ) ;
102- let serialized_witness = if crate :: witness_use_legacy_mode ( & value. fork_name ) ? {
103- let legacy_witness = LegacyChunkWitness :: from ( witness) ;
104- to_rkyv_bytes :: < RancorError > ( & legacy_witness) ?. into_vec ( )
105- } else {
106- super :: encode_task_to_witness ( & witness) ?
107- } ;
108-
109- Ok ( ProvingTask {
110- identifier : value. identifier ( ) ,
111- fork_name : value. fork_name ,
112- aggregated_proofs : Vec :: new ( ) ,
113- serialized_witness : vec ! [ serialized_witness] ,
114- vk : Vec :: new ( ) ,
115- } )
116- }
117- }
118-
11997impl ChunkProvingTask {
12098 pub fn stats ( & self ) -> ChunkDetails {
12199 let num_blocks = self . block_witnesses . len ( ) ;
@@ -137,6 +115,26 @@ impl ChunkProvingTask {
137115 }
138116 }
139117
118+ pub fn into_proving_task_with_precheck ( self ) -> Result < ( ProvingTask , ChunkInfo , B256 ) > {
119+ let ( witness, chunk_info, chunk_pi_hash) = self . precheck ( ) ?;
120+ let serialized_witness = if crate :: witness_use_legacy_mode ( & self . fork_name ) ? {
121+ let legacy_witness = LegacyChunkWitness :: from ( witness) ;
122+ to_rkyv_bytes :: < RancorError > ( & legacy_witness) ?. into_vec ( )
123+ } else {
124+ super :: encode_task_to_witness ( & witness) ?
125+ } ;
126+
127+ let proving_task = ProvingTask {
128+ identifier : self . identifier ( ) ,
129+ fork_name : self . fork_name ,
130+ aggregated_proofs : Vec :: new ( ) ,
131+ serialized_witness : vec ! [ serialized_witness] ,
132+ vk : Vec :: new ( ) ,
133+ } ;
134+
135+ Ok ( ( proving_task, chunk_info, chunk_pi_hash) )
136+ }
137+
140138 fn identifier ( & self ) -> String {
141139 assert ! ( !self . block_witnesses. is_empty( ) , "{CHUNK_SANITY_MSG}" , ) ;
142140
@@ -180,13 +178,13 @@ impl ChunkProvingTask {
180178 self . block_witnesses [ 0 ] . states . push ( node) ;
181179 }
182180
183- pub fn precheck_and_build_metadata ( & self ) -> Result < ( ChunkInfo , B256 ) > {
181+ fn precheck ( & self ) -> Result < ( ChunkWitness , ChunkInfo , B256 ) > {
184182 let version = Version :: from ( self . version ) ;
185183 let witness = self . build_guest_input ( version) ;
186- let ret = ChunkInfo :: try_from ( witness) . map_err ( |e| eyre:: eyre!( "{e}" ) ) ?;
187- assert_eq ! ( ret . post_msg_queue_hash, self . post_msg_queue_hash) ;
188- let pi_hash = ret . pi_hash_by_version ( version) ;
189- Ok ( ( ret , pi_hash ) )
184+ let chunk_info = ChunkInfo :: try_from ( witness. clone ( ) ) . map_err ( |e| eyre:: eyre!( "{e}" ) ) ?;
185+ assert_eq ! ( chunk_info . post_msg_queue_hash, self . post_msg_queue_hash) ;
186+ let chunk_pi_hash = chunk_info . pi_hash_by_version ( version) ;
187+ Ok ( ( witness , chunk_info , chunk_pi_hash ) )
190188 }
191189
192190 /// this method check the validate of current task (there may be missing storage node)
0 commit comments