@@ -134,38 +134,41 @@ where
134134 initializer. epoch_height ,
135135 ) ;
136136
137- let genesis_cert1 = initializer. high_qc . clone ( ) ;
138- let genesis_proposal = message:: Proposal {
139- block_header : initializer. anchor_leaf . block_header ( ) . clone ( ) ,
140- view_number : ViewNumber :: genesis ( ) ,
141- epoch : EpochNumber :: genesis ( ) ,
142- justify_qc : genesis_cert1. clone ( ) ,
137+ let anchor_leaf = & initializer. anchor_leaf ;
138+ let anchor_view = anchor_leaf. view_number ( ) ;
139+ let anchor_epoch = anchor_leaf
140+ . epoch ( initializer. epoch_height )
141+ . unwrap_or ( EpochNumber :: genesis ( ) ) ;
142+ let cert1 = initializer. high_qc . clone ( ) ;
143+ let parent_proposal = message:: Proposal {
144+ block_header : anchor_leaf. block_header ( ) . clone ( ) ,
145+ view_number : anchor_view,
146+ epoch : anchor_epoch,
147+ justify_qc : anchor_leaf. justify_qc ( ) ,
143148 next_epoch_justify_qc : None ,
144- upgrade_certificate : None ,
145- view_change_evidence : None ,
146- next_drb_result : None ,
149+ upgrade_certificate : anchor_leaf. upgrade_certificate ( ) ,
150+ view_change_evidence : anchor_leaf
151+ . view_change_evidence
152+ . clone ( )
153+ . and_then ( |e| match e {
154+ hotshot_types:: data:: ViewChangeEvidence2 :: Timeout ( tc) => Some ( tc) ,
155+ hotshot_types:: data:: ViewChangeEvidence2 :: ViewSync ( _) => None ,
156+ } ) ,
157+ next_drb_result : anchor_leaf. next_drb_result ,
147158 state_cert : None ,
148159 } ;
160+
149161 let mut state_manager = StateManager :: new (
150162 Arc :: new ( initializer. instance_state . clone ( ) ) ,
151163 upgrade_lock. clone ( ) ,
152164 ) ;
153165 state_manager. seed_state (
154- initializer. anchor_leaf . view_number ( ) ,
155- initializer. anchor_state . clone ( ) ,
156- initializer. anchor_leaf . clone ( ) ,
157- ) ;
158- // The synthetic genesis proposal has a non-null justify_qc (the genesis
159- // cert1) so the leaf derived from it has a different commitment than
160- // the anchor leaf produced by `Leaf2::genesis`. `request_header` for
161- // view 1 looks up the parent state by the *proposal's* leaf
162- // commitment, so seed the same state under that commitment too.
163- state_manager. seed_state (
164- ViewNumber :: genesis ( ) ,
166+ anchor_view,
165167 initializer. anchor_state . clone ( ) ,
166- Leaf2 :: from ( genesis_proposal . clone ( ) ) ,
168+ anchor_leaf . clone ( ) ,
167169 ) ;
168- consensus. seed_genesis ( genesis_cert1, genesis_proposal) ;
170+ consensus. seed_parent ( cert1, parent_proposal) ;
171+ consensus. set_view ( anchor_view, anchor_epoch) ;
169172
170173 let lock = upgrade_lock. clone ( ) ;
171174 Self :: builder ( )
0 commit comments