@@ -1898,7 +1898,11 @@ impl<Block: BlockT> Backend<Block> {
18981898 }
18991899
19001900 if remove_displaced {
1901- let new_displaced = self . blockchain . displaced_leaves_after_finalizing ( f_hash, f_num) ?;
1901+ let new_displaced = self . blockchain . displaced_leaves_after_finalizing (
1902+ f_hash,
1903+ f_num,
1904+ * f_header. parent_hash ( ) ,
1905+ ) ?;
19021906
19031907 self . blockchain . leaves . write ( ) . remove_displaced_leaves ( FinalizationOutcome :: new (
19041908 new_displaced. displaced_leaves . iter ( ) . copied ( ) ,
@@ -3289,16 +3293,18 @@ pub(crate) mod tests {
32893293 let a4_hash =
32903294 insert_disconnected_header ( & backend, a4_number, a3_hash, H256 :: from ( [ 2 ; 32 ] ) , true ) ;
32913295 {
3292- let displaced =
3293- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3296+ let displaced = blockchain
3297+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, H256 :: from ( [ 200 ; 32 ] ) )
3298+ . unwrap ( ) ;
32943299 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ a4_hash, genesis_hash] ) ;
32953300 assert_eq ! ( displaced. displaced_leaves, vec![ ( genesis_number, genesis_hash) ] ) ;
32963301 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
32973302 }
32983303
32993304 {
3300- let displaced =
3301- blockchain. displaced_leaves_after_finalizing ( a4_hash, a4_number) . unwrap ( ) ;
3305+ let displaced = blockchain
3306+ . displaced_leaves_after_finalizing ( a4_hash, a4_number, a3_hash)
3307+ . unwrap ( ) ;
33023308 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ a4_hash, genesis_hash] ) ;
33033309 assert_eq ! ( displaced. displaced_leaves, vec![ ( genesis_number, genesis_hash) ] ) ;
33043310 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
@@ -3315,8 +3321,9 @@ pub(crate) mod tests {
33153321 false ,
33163322 ) ;
33173323 {
3318- let displaced =
3319- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3324+ let displaced = blockchain
3325+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, H256 :: from ( [ 2 ; 32 ] ) )
3326+ . unwrap ( ) ;
33203327 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ a4_hash, a1_hash] ) ;
33213328 assert_eq ! ( displaced. displaced_leaves, vec![ ] ) ;
33223329 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
@@ -3334,8 +3341,9 @@ pub(crate) mod tests {
33343341 false ,
33353342 ) ;
33363343 {
3337- let displaced =
3338- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3344+ let displaced = blockchain
3345+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, H256 :: from ( [ 2 ; 32 ] ) )
3346+ . unwrap ( ) ;
33393347 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ a4_hash, a1_hash, b1_hash] ) ;
33403348 assert_eq ! ( displaced. displaced_leaves, vec![ ] ) ;
33413349 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
@@ -3358,8 +3366,9 @@ pub(crate) mod tests {
33583366 let b5_hash =
33593367 insert_disconnected_header ( & backend, b5_number, b4_hash, H256 :: from ( [ 43 ; 32 ] ) , false ) ;
33603368 {
3361- let displaced =
3362- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3369+ let displaced = blockchain
3370+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, H256 :: from ( [ 2 ; 32 ] ) )
3371+ . unwrap ( ) ;
33633372 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ b5_hash, a4_hash, a1_hash] ) ;
33643373 assert_eq ! ( displaced. displaced_leaves, vec![ ] ) ;
33653374 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
@@ -3374,8 +3383,9 @@ pub(crate) mod tests {
33743383 let c4_hash =
33753384 insert_disconnected_header ( & backend, c4_number, a3_hash, H256 :: from ( [ 44 ; 32 ] ) , false ) ;
33763385 {
3377- let displaced =
3378- blockchain. displaced_leaves_after_finalizing ( a4_hash, a4_number) . unwrap ( ) ;
3386+ let displaced = blockchain
3387+ . displaced_leaves_after_finalizing ( a4_hash, a4_number, a3_hash)
3388+ . unwrap ( ) ;
33793389 assert_eq ! ( blockchain. leaves( ) . unwrap( ) , vec![ b5_hash, a4_hash, c4_hash, a1_hash] ) ;
33803390 assert_eq ! ( displaced. displaced_leaves, vec![ ( c4_number, c4_hash) ] ) ;
33813391 assert_eq ! ( displaced. displaced_blocks, vec![ c4_hash] ) ;
@@ -3404,33 +3414,37 @@ pub(crate) mod tests {
34043414
34053415 {
34063416 let displaced = blockchain
3407- . displaced_leaves_after_finalizing ( genesis_hash, genesis_number)
3417+ . displaced_leaves_after_finalizing ( genesis_hash, genesis_number, Default :: default ( ) )
34083418 . unwrap ( ) ;
34093419 assert_eq ! ( displaced. displaced_leaves, vec![ ] ) ;
34103420 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
34113421 }
34123422 {
3413- let displaced_a1 =
3414- blockchain. displaced_leaves_after_finalizing ( a1_hash, a1_number) . unwrap ( ) ;
3423+ let displaced_a1 = blockchain
3424+ . displaced_leaves_after_finalizing ( a1_hash, a1_number, genesis_hash)
3425+ . unwrap ( ) ;
34153426 assert_eq ! ( displaced_a1. displaced_leaves, vec![ ] ) ;
34163427 assert_eq ! ( displaced_a1. displaced_blocks, vec![ ] ) ;
34173428
3418- let displaced_a2 =
3419- blockchain. displaced_leaves_after_finalizing ( a2_hash, a3_number) . unwrap ( ) ;
3429+ let displaced_a2 = blockchain
3430+ . displaced_leaves_after_finalizing ( a2_hash, a2_number, a1_hash)
3431+ . unwrap ( ) ;
34203432 assert_eq ! ( displaced_a2. displaced_leaves, vec![ ] ) ;
34213433 assert_eq ! ( displaced_a2. displaced_blocks, vec![ ] ) ;
34223434
3423- let displaced_a3 =
3424- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3435+ let displaced_a3 = blockchain
3436+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, a2_hash)
3437+ . unwrap ( ) ;
34253438 assert_eq ! ( displaced_a3. displaced_leaves, vec![ ] ) ;
34263439 assert_eq ! ( displaced_a3. displaced_blocks, vec![ ] ) ;
34273440 }
34283441 {
34293442 // Finalized block is above leaves and not imported yet.
34303443 // We will not be able to make a connection,
34313444 // nothing can be marked as displaced.
3432- let displaced =
3433- blockchain. displaced_leaves_after_finalizing ( H256 :: from ( [ 57 ; 32 ] ) , 10 ) . unwrap ( ) ;
3445+ let displaced = blockchain
3446+ . displaced_leaves_after_finalizing ( H256 :: from ( [ 57 ; 32 ] ) , 10 , H256 :: from ( [ 56 ; 32 ] ) )
3447+ . unwrap ( ) ;
34343448 assert_eq ! ( displaced. displaced_leaves, vec![ ] ) ;
34353449 assert_eq ! ( displaced. displaced_blocks, vec![ ] ) ;
34363450 }
@@ -3454,8 +3468,9 @@ pub(crate) mod tests {
34543468 let d2_hash = insert_header ( & backend, d2_number, d1_hash, None , Default :: default ( ) ) ;
34553469
34563470 {
3457- let displaced_a1 =
3458- blockchain. displaced_leaves_after_finalizing ( a1_hash, a1_number) . unwrap ( ) ;
3471+ let displaced_a1 = blockchain
3472+ . displaced_leaves_after_finalizing ( a1_hash, a1_number, genesis_hash)
3473+ . unwrap ( ) ;
34593474 assert_eq ! (
34603475 displaced_a1. displaced_leaves,
34613476 vec![ ( c2_number, c2_hash) , ( d2_number, d2_hash) ]
@@ -3464,27 +3479,31 @@ pub(crate) mod tests {
34643479 displaced_blocks. sort ( ) ;
34653480 assert_eq ! ( displaced_a1. displaced_blocks, displaced_blocks) ;
34663481
3467- let displaced_a2 =
3468- blockchain. displaced_leaves_after_finalizing ( a2_hash, a2_number) . unwrap ( ) ;
3482+ let displaced_a2 = blockchain
3483+ . displaced_leaves_after_finalizing ( a2_hash, a2_number, a1_hash)
3484+ . unwrap ( ) ;
34693485 assert_eq ! ( displaced_a1. displaced_leaves, displaced_a2. displaced_leaves) ;
34703486 assert_eq ! ( displaced_a1. displaced_blocks, displaced_a2. displaced_blocks) ;
34713487
3472- let displaced_a3 =
3473- blockchain. displaced_leaves_after_finalizing ( a3_hash, a3_number) . unwrap ( ) ;
3488+ let displaced_a3 = blockchain
3489+ . displaced_leaves_after_finalizing ( a3_hash, a3_number, a2_hash)
3490+ . unwrap ( ) ;
34743491 assert_eq ! ( displaced_a1. displaced_leaves, displaced_a3. displaced_leaves) ;
34753492 assert_eq ! ( displaced_a1. displaced_blocks, displaced_a3. displaced_blocks) ;
34763493 }
34773494 {
3478- let displaced =
3479- blockchain. displaced_leaves_after_finalizing ( b1_hash, b1_number) . unwrap ( ) ;
3495+ let displaced = blockchain
3496+ . displaced_leaves_after_finalizing ( b1_hash, b1_number, genesis_hash)
3497+ . unwrap ( ) ;
34803498 assert_eq ! ( displaced. displaced_leaves, vec![ ( a3_number, a3_hash) ] ) ;
34813499 let mut displaced_blocks = vec ! [ a1_hash, a2_hash, a3_hash] ;
34823500 displaced_blocks. sort ( ) ;
34833501 assert_eq ! ( displaced. displaced_blocks, displaced_blocks) ;
34843502 }
34853503 {
3486- let displaced =
3487- blockchain. displaced_leaves_after_finalizing ( b2_hash, b2_number) . unwrap ( ) ;
3504+ let displaced = blockchain
3505+ . displaced_leaves_after_finalizing ( b2_hash, b2_number, b1_hash)
3506+ . unwrap ( ) ;
34883507 assert_eq ! (
34893508 displaced. displaced_leaves,
34903509 vec![ ( a3_number, a3_hash) , ( d2_number, d2_hash) ]
@@ -3494,8 +3513,9 @@ pub(crate) mod tests {
34943513 assert_eq ! ( displaced. displaced_blocks, displaced_blocks) ;
34953514 }
34963515 {
3497- let displaced =
3498- blockchain. displaced_leaves_after_finalizing ( c2_hash, c2_number) . unwrap ( ) ;
3516+ let displaced = blockchain
3517+ . displaced_leaves_after_finalizing ( c2_hash, c2_number, c1_hash)
3518+ . unwrap ( ) ;
34993519 assert_eq ! (
35003520 displaced. displaced_leaves,
35013521 vec![ ( a3_number, a3_hash) , ( d2_number, d2_hash) ]
0 commit comments