99 hashers:: keccak256_160:: Keccak160 ,
1010 wormhole:: { AccumulatorSequenceTracker , MessageData , PostedMessageUnreliableData } ,
1111 } ,
12+ solana_measure:: measure:: Measure ,
1213 solana_sdk:: {
1314 account:: { AccountSharedData , ReadableAccount } ,
1415 borsh, feature_set,
@@ -136,10 +137,20 @@ pub fn update_v1(
136137
137138 let message_buffer_accounts;
138139 let v1_messages = if use_message_buffers {
140+ let mut measure = Measure :: start ( "update_v1_load_program_accounts" ) ;
141+
139142 message_buffer_accounts = bank
140143 . get_program_accounts ( & MESSAGE_BUFFER_PID , & ScanConfig :: new ( true ) )
141144 . map_err ( AccumulatorUpdateErrorV1 :: GetProgramAccounts ) ?;
142145
146+ measure. stop ( ) ;
147+ debug ! (
148+ "Accumulator: Loaded message buffer accounts in {}us" ,
149+ measure. as_us( )
150+ ) ;
151+
152+ let mut measure = Measure :: start ( "update_v1_extract_message_data" ) ;
153+
143154 let preimage = b"account:MessageBuffer" ;
144155 let mut expected_sighash = [ 0u8 ; 8 ] ;
145156 expected_sighash. copy_from_slice ( & hashv ( & [ preimage] ) . to_bytes ( ) [ ..8 ] ) ;
@@ -154,7 +165,7 @@ pub fn update_v1(
154165
155166 // This code, using the offsets in each Account, extracts the various data versions from
156167 // the account. We deduplicate this result because the accumulator expects a set.
157- message_buffer_accounts
168+ let res = message_buffer_accounts
158169 . map ( |( _, account) | {
159170 let data = account. data ( ) ;
160171 let mut cursor = std:: io:: Cursor :: new ( & data) ;
@@ -185,11 +196,21 @@ pub fn update_v1(
185196 . collect :: < std:: result:: Result < Vec < _ > , std:: io:: Error > > ( ) ?
186197 . into_iter ( )
187198 . flatten ( )
188- . collect ( )
199+ . collect ( ) ;
200+
201+ measure. stop ( ) ;
202+ debug ! (
203+ "Accumulator: Extracted message data in {}us" ,
204+ measure. as_us( )
205+ ) ;
206+
207+ res
189208 } else {
190209 Vec :: new ( )
191210 } ;
192211
212+ let mut measure = Measure :: start ( "create_message_set" ) ;
213+
193214 let mut messages = v1_messages;
194215 messages. extend ( v2_messages. iter ( ) . map ( |x| & * * x) ) ;
195216 messages. sort_unstable ( ) ;
@@ -220,11 +241,27 @@ pub fn update_v1(
220241 account
221242 } ;
222243
244+ measure. stop ( ) ;
245+ debug ! ( "Accumulator: Created message set in {}us" , measure. as_us( ) ) ;
246+
223247 // Generate a Message owned by Wormhole to be sent cross-chain. This short-circuits the
224248 // Wormhole message generation code that would normally be called, but the Guardian
225249 // set filters our messages so this does not pose a security risk.
226- if let Some ( accumulator) = MerkleAccumulator :: < Keccak160 > :: from_set ( messages. into_iter ( ) ) {
250+ let mut measure = Measure :: start ( "create_accumulator" ) ;
251+
252+ let maybe_accumulator = MerkleAccumulator :: < Keccak160 > :: from_set ( messages. into_iter ( ) ) ;
253+
254+ measure. stop ( ) ;
255+ debug ! ( "Accumulator: Created accumulator in {}us" , measure. as_us( ) ) ;
256+
257+ if let Some ( accumulator) = maybe_accumulator {
258+ let mut measure = Measure :: start ( "post_accumulator_attestation" ) ;
227259 post_accumulator_attestation ( bank, accumulator, ring_index) ?;
260+ measure. stop ( ) ;
261+ debug ! (
262+ "Accumulator: Posted accumulator attestation in {}us" ,
263+ measure. as_us( )
264+ ) ;
228265 }
229266
230267 // Write the Account Set into `accumulator_state` so that the hermes application can
@@ -233,7 +270,14 @@ pub fn update_v1(
233270 "Accumulator: Writing accumulator state to {:?}" ,
234271 accumulator_account
235272 ) ;
273+
274+ let mut measure = Measure :: start ( "store_account_and_update_capitalization" ) ;
236275 bank. store_account_and_update_capitalization ( & accumulator_account, & accumulator_data) ;
276+ measure. stop ( ) ;
277+ debug ! (
278+ "Accumulator: Stored accumulator state in {}us" ,
279+ measure. as_us( )
280+ ) ;
237281
238282 Ok ( ( ) )
239283}
@@ -333,10 +377,20 @@ fn post_accumulator_attestation(
333377}
334378
335379pub fn update_v2 ( bank : & Bank ) -> std:: result:: Result < ( ) , AccumulatorUpdateErrorV1 > {
380+ let mut measure = Measure :: start ( "update_v2_load_program_accounts" ) ;
381+
336382 let accounts = bank
337383 . get_program_accounts ( & ORACLE_PID , & ScanConfig :: new ( true ) )
338384 . map_err ( AccumulatorUpdateErrorV1 :: GetProgramAccounts ) ?;
339385
386+ measure. stop ( ) ;
387+ debug ! (
388+ "Accumulator: Loaded oracle program accounts in {}us" ,
389+ measure. as_us( )
390+ ) ;
391+
392+ let mut measure = Measure :: start ( "update_v2_aggregate_price" ) ;
393+
340394 let mut any_v1_aggregations = false ;
341395 let mut v2_messages = Vec :: new ( ) ;
342396
@@ -364,5 +418,12 @@ pub fn update_v2(bank: &Bank) -> std::result::Result<(), AccumulatorUpdateErrorV
364418 }
365419 }
366420
421+ measure. stop ( ) ;
422+ debug ! (
423+ "Accumulator: Aggregated oracle prices in {}us and generated {} messages" ,
424+ measure. as_us( ) ,
425+ v2_messages. len( )
426+ ) ;
427+
367428 update_v1 ( bank, & v2_messages, any_v1_aggregations)
368429}
0 commit comments