@@ -131,7 +131,7 @@ pub mod pallet {
131131 /// The on_finalize trigger the query result aggregation.
132132 /// The argument block_number has big impact on the weight.
133133 fn on_finalize ( block_number : T :: BlockNumber ) {
134- log:: info!( "ocw on_finalize. {:?}." , block_number) ;
134+ log:: info!( "ocw on_finalize {:?}." , block_number) ;
135135
136136 let query_session_length: usize = T :: QuerySessionLength :: get ( ) as usize ;
137137 let index_in_session = TryInto :: < usize > :: try_into ( block_number)
@@ -150,14 +150,18 @@ pub mod pallet {
150150 /// TODO block N offchain_worker will be called after block N+1 finalize
151151 /// Trigger by offchain framework in each block
152152 fn offchain_worker ( block_number : T :: BlockNumber ) {
153+ log:: info!( "ocw hook function called on block {:?}." , block_number) ;
154+
153155 let query_session_length: usize = T :: QuerySessionLength :: get ( ) as usize ;
154156
155157 let index_in_session = TryInto :: < usize > :: try_into ( block_number)
156158 . map_or ( query_session_length, |bn| bn % query_session_length) ;
157159
158160 // Start query at second block of a session
159161 if index_in_session == 1 {
160- Self :: start ( block_number) ;
162+ // TODO make use of the returned value of start,
163+ // and adjust the logics of OCW accordingly
164+ let _ = Self :: start ( block_number) ;
161165 }
162166 }
163167 }
@@ -185,6 +189,10 @@ pub mod pallet {
185189 InvalidAccountIndex ,
186190 /// Offchain worker index overflow
187191 OffchainWorkerIndexOverflow ,
192+ /// Token Server no response
193+ TokenServerNoResponse ,
194+ /// Storage retrieval error
195+ InvalidStorageRetrieval ,
188196 }
189197
190198 #[ pallet:: pallet]
@@ -410,25 +418,31 @@ pub mod pallet {
410418 }
411419
412420 // Start new round of offchain worker
413- fn start ( block_number : T :: BlockNumber ) {
421+ fn start ( block_number : T :: BlockNumber ) -> Result < ( ) , Error < T > > {
414422 let local_token = StorageValueRef :: persistent ( b"offchain-worker::token" ) ;
415423
416424 match local_token. get :: < urls:: TokenInfo > ( ) {
417425 Ok ( Some ( token) ) => {
426+ log:: info!( "API keys found! Start to query from sources." ) ;
418427 Self :: query ( block_number, & token) ;
428+ Ok ( ( ) )
419429 } ,
420- _ => {
430+ Ok ( None ) => {
431+ log:: info!( "No API keys stored! Request keys from local server." ) ;
421432 // Get token from local server
422- let _ = urls:: get_token ( ) ;
433+ urls:: get_token ( ) . map_err ( |_| Error :: < T > :: TokenServerNoResponse )
423434 } ,
424- } ;
435+ Err ( _) => {
436+ Err ( Error :: < T > :: InvalidStorageRetrieval )
437+ } ,
438+ }
425439 }
426440
427441 /// Aggregate query result and then record on chain
428442 /// ---------------------
429443 /// Algorithm description as following:
430444 /// 1. collect all query result from `CommitAccountBalance`
431- /// 2. select the most frequence result as final, then store them on-chain
445+ /// 2. select the most frequent result as final, then store them on-chain
432446 /// 3. store the successful commit according to off-chain worker account
433447 /// 4. reward the off-chain worker based on its correct query and submit
434448 /// 5. update the Eth and BTC balances on-chain
0 commit comments