@@ -216,30 +216,30 @@ impl<'x> OpenBlock<'x> {
216216 }
217217
218218 /// Turn this into a `ClosedBlock`.
219- pub fn close (
220- mut self ,
221- parent_transactions_root : H256 ,
222- parent_common_params : & CommonParams ,
223- ) -> Result < ClosedBlock , Error > {
219+ pub fn close ( mut self , parent_header : & Header , parent_common_params : & CommonParams ) -> Result < ClosedBlock , Error > {
224220 let unclosed_state = self . block . state . clone ( ) ;
225221
226- if let Err ( e) = self . engine . on_close_block ( & mut self . block , parent_common_params) {
222+ if let Err ( e) = self . engine . on_close_block ( & mut self . block , parent_header , parent_common_params) {
227223 warn ! ( "Encountered error on closing the block: {}" , e) ;
228224 return Err ( e)
229225 }
226+ let header = self . block . header ( ) . clone ( ) ;
230227 for handler in self . engine . action_handlers ( ) {
231- handler. on_close_block ( self . block . state_mut ( ) ) . map_err ( |e| {
232- warn ! ( "Encountered error in {}::on_close_block" , handler. name( ) ) ;
233- e
234- } ) ?;
228+ handler. on_close_block ( self . block . state_mut ( ) , & header, parent_header, parent_common_params) . map_err (
229+ |e| {
230+ warn ! ( "Encountered error in {}::on_close_block" , handler. name( ) ) ;
231+ e
232+ } ,
233+ ) ?;
235234 }
236235
237236 let state_root = self . block . state . commit ( ) . map_err ( |e| {
238237 warn ! ( "Encountered error on state commit: {}" , e) ;
239238 e
240239 } ) ?;
240+ let parent_transactions_root = parent_header. transactions_root ( ) ;
241241 self . block . header . set_transactions_root ( skewed_merkle_root (
242- parent_transactions_root,
242+ * parent_transactions_root,
243243 self . block . transactions . iter ( ) . map ( Encodable :: rlp_bytes) ,
244244 ) ) ;
245245 self . block . header . set_state_root ( state_root) ;
@@ -253,33 +253,37 @@ impl<'x> OpenBlock<'x> {
253253 /// Turn this into a `LockedBlock`.
254254 pub fn close_and_lock (
255255 mut self ,
256- parent_transactions_root : H256 ,
256+ parent_header : & Header ,
257257 parent_common_params : & CommonParams ,
258258 ) -> Result < LockedBlock , Error > {
259- if let Err ( e) = self . engine . on_close_block ( & mut self . block , parent_common_params) {
259+ if let Err ( e) = self . engine . on_close_block ( & mut self . block , parent_header , parent_common_params) {
260260 warn ! ( "Encountered error on closing the block: {}" , e) ;
261261 return Err ( e)
262262 }
263+ let header = self . block . header ( ) . clone ( ) ;
263264 for handler in self . engine . action_handlers ( ) {
264- handler. on_close_block ( self . block . state_mut ( ) ) . map_err ( |e| {
265- warn ! ( "Encountered error in {}::on_close_block" , handler. name( ) ) ;
266- e
267- } ) ?;
265+ handler. on_close_block ( self . block . state_mut ( ) , & header, parent_header, parent_common_params) . map_err (
266+ |e| {
267+ warn ! ( "Encountered error in {}::on_close_block" , handler. name( ) ) ;
268+ e
269+ } ,
270+ ) ?;
268271 }
269272
270273 let state_root = self . block . state . commit ( ) . map_err ( |e| {
271274 warn ! ( "Encountered error on state commit: {}" , e) ;
272275 e
273276 } ) ?;
277+ let parent_transactions_root = parent_header. transactions_root ( ) ;
274278 if self . block . header . transactions_root ( ) . is_zero ( ) || self . block . header . transactions_root ( ) == & BLAKE_NULL_RLP {
275279 self . block . header . set_transactions_root ( skewed_merkle_root (
276- parent_transactions_root,
280+ * parent_transactions_root,
277281 self . block . transactions . iter ( ) . map ( Encodable :: rlp_bytes) ,
278282 ) ) ;
279283 }
280284 debug_assert_eq ! (
281285 self . block. header. transactions_root( ) ,
282- & skewed_merkle_root( parent_transactions_root, self . block. transactions. iter( ) . map( Encodable :: rlp_bytes) , )
286+ & skewed_merkle_root( * parent_transactions_root, self . block. transactions. iter( ) . map( Encodable :: rlp_bytes) , )
283287 ) ;
284288 self . block . header . set_state_root ( state_root) ;
285289
@@ -464,7 +468,7 @@ pub fn enact<C: ChainTimeInfo + EngineInfo + FindActionHandler>(
464468 b. push_transactions ( transactions, client, parent. number ( ) , parent. timestamp ( ) ) ?;
465469
466470 let parent_common_params = client. common_params ( ( * header. parent_hash ( ) ) . into ( ) ) . unwrap ( ) ;
467- b. close_and_lock ( * parent. transactions_root ( ) , & parent_common_params)
471+ b. close_and_lock ( parent, & parent_common_params)
468472}
469473
470474#[ cfg( test) ]
@@ -482,9 +486,8 @@ mod tests {
482486 let genesis_header = scheme. genesis_header ( ) ;
483487 let db = scheme. ensure_genesis_state ( get_temp_state_db ( ) ) . unwrap ( ) ;
484488 let b = OpenBlock :: try_new ( & * scheme. engine , db, & genesis_header, Address :: default ( ) , vec ! [ ] ) . unwrap ( ) ;
485- let parent_transactions_root = * genesis_header. transactions_root ( ) ;
486489 let parent_common_params = CommonParams :: default_for_test ( ) ;
487- let b = b. close_and_lock ( parent_transactions_root , & parent_common_params) . unwrap ( ) ;
490+ let b = b. close_and_lock ( & genesis_header , & parent_common_params) . unwrap ( ) ;
488491 let _ = b. seal ( & * scheme. engine , vec ! [ ] ) ;
489492 }
490493}
0 commit comments