@@ -99,66 +99,69 @@ pub fn sync_block_headers(
9999 Err ( _) => continue ,
100100 } ;
101101 tracing:: info!( "Connection established" ) ;
102- let mut get_next = true ;
103- loop {
104- let mut kill = false ;
105- if get_next {
106- let curr = chainman. best_header ( ) . block_hash ( ) . hash ;
107- let locator = BlockHash :: from_byte_array ( curr) ;
108- let getheaders = GetHeadersMessage {
109- version : PROTOCOL_VERSION ,
110- locator_hashes : vec ! [ locator] ,
111- stop_hash : BlockHash :: GENESIS_PREVIOUS_BLOCK_HASH ,
112- } ;
113- tracing:: info!( "Requesting {locator}" ) ;
114- if writer
115- . send_message ( NetworkMessage :: GetHeaders ( getheaders) )
116- . is_err ( )
117- {
118- break ;
119- }
120- }
121- while let Ok ( Some ( message) ) = reader. read_message ( ) {
122- match message {
123- NetworkMessage :: Headers ( message) => {
124- for header in message. 0 {
125- chainman
126- . process_new_block_headers ( & consensus:: serialize ( & header) , true )
127- . expect ( "process headers failed" ) ;
128- get_next = true ;
129- if header. block_hash ( ) . eq ( & stop_hash) {
130- tracing:: info!( "Done syncing block headers" ) ;
131- if let Some ( message_rate) =
132- metrics. message_rate ( p2p:: TimedMessage :: BlockHeaders )
133- {
134- let mps = message_rate
135- . messages_per_secs ( Instant :: now ( ) )
136- . unwrap_or ( 0. ) ;
137- tracing:: info!( "Peer responses per second: {mps}" ) ;
138- }
139- elapsed_time ( then) ;
140- return ;
102+ let curr = chainman. best_header ( ) . block_hash ( ) . hash ;
103+ let locator = BlockHash :: from_byte_array ( curr) ;
104+ if locator. eq ( & stop_hash) {
105+ tracing:: info!( "Using existing header state" ) ;
106+ return ;
107+ }
108+ let getheaders = GetHeadersMessage {
109+ version : PROTOCOL_VERSION ,
110+ locator_hashes : vec ! [ locator] ,
111+ stop_hash : BlockHash :: GENESIS_PREVIOUS_BLOCK_HASH ,
112+ } ;
113+ tracing:: info!( "Requesting {locator}" ) ;
114+ if writer
115+ . send_message ( NetworkMessage :: GetHeaders ( getheaders) )
116+ . is_err ( )
117+ {
118+ continue ;
119+ }
120+ while let Ok ( Some ( message) ) = reader. read_message ( ) {
121+ match message {
122+ NetworkMessage :: Headers ( message) => {
123+ for header in message. 0 {
124+ chainman
125+ . process_new_block_headers ( & consensus:: serialize ( & header) , true )
126+ . expect ( "process headers failed" ) ;
127+ if header. block_hash ( ) . eq ( & stop_hash) {
128+ tracing:: info!( "Done syncing block headers" ) ;
129+ if let Some ( message_rate) =
130+ metrics. message_rate ( p2p:: TimedMessage :: BlockHeaders )
131+ {
132+ let mps =
133+ message_rate. messages_per_secs ( Instant :: now ( ) ) . unwrap_or ( 0. ) ;
134+ tracing:: info!( "Peer responses per second: {mps}" ) ;
141135 }
136+ elapsed_time ( then) ;
137+ return ;
142138 }
143- tracing:: info!( "Update chain tip: {}" , chainman. best_header( ) . height( ) ) ;
144- break ;
145139 }
146- NetworkMessage :: Inv ( _) => {
147- kill = true ;
140+ tracing:: info!( "Update chain tip: {}" , chainman. best_header( ) . height( ) ) ;
141+ let curr = chainman. best_header ( ) . block_hash ( ) . hash ;
142+ let locator = BlockHash :: from_byte_array ( curr) ;
143+ let getheaders = GetHeadersMessage {
144+ version : PROTOCOL_VERSION ,
145+ locator_hashes : vec ! [ locator] ,
146+ stop_hash : BlockHash :: GENESIS_PREVIOUS_BLOCK_HASH ,
147+ } ;
148+ tracing:: info!( "Requesting {locator}" ) ;
149+ if writer
150+ . send_message ( NetworkMessage :: GetHeaders ( getheaders) )
151+ . is_err ( )
152+ {
148153 break ;
149154 }
150- NetworkMessage :: Ping ( nonce) => {
151- get_next = false ;
152- let _ = writer. send_message ( NetworkMessage :: Pong ( nonce) ) ;
153- }
154- e => {
155- get_next = false ;
156- tracing:: info!( "Ignoring message {}" , e. command( ) ) ;
157- }
158155 }
159- }
160- if kill {
161- break ;
156+ NetworkMessage :: Inv ( _) => {
157+ break ;
158+ }
159+ NetworkMessage :: Ping ( nonce) => {
160+ let _ = writer. send_message ( NetworkMessage :: Pong ( nonce) ) ;
161+ }
162+ e => {
163+ tracing:: info!( "Ignoring message {}" , e. command( ) ) ;
164+ }
162165 }
163166 }
164167 }
0 commit comments