@@ -74,6 +74,7 @@ use its_storage::{interface::FetchBlocks, BlockPruner, SidechainStorageLock};
7474use log:: * ;
7575use my_node_runtime:: { Hash , Header , RuntimeEvent } ;
7676use sgx_types:: * ;
77+ use std:: thread;
7778use substrate_api_client:: {
7879 primitives:: StorageChangeSet , rpc:: HandleSubscription , GetHeader , SubmitAndWatch ,
7980 SubscribeChain , SubscribeFrameSystem , XtStatus ,
@@ -85,7 +86,7 @@ use sgx_verify::extract_tcb_info_from_raw_dcap_quote;
8586use sp_core:: crypto:: { AccountId32 , Ss58Codec } ;
8687use sp_keyring:: AccountKeyring ;
8788use sp_runtime:: traits:: Header as HeaderTrait ;
88- use std:: { path:: PathBuf , str, sync:: Arc , thread , time:: Duration } ;
89+ use std:: { path:: PathBuf , str, sync:: Arc , time:: Duration } ;
8990use teerex_primitives:: ShardIdentifier ;
9091
9192mod account_funding;
@@ -113,7 +114,8 @@ const VERSION: &str = env!("CARGO_PKG_VERSION");
113114pub type EnclaveWorker =
114115 Worker < Config , NodeApiFactory , Enclave , InitializationHandler < WorkerModeProvider > > ;
115116
116- fn main ( ) {
117+ #[ tokio:: main]
118+ async fn main ( ) {
117119 // Setup logging
118120 env_logger:: init ( ) ;
119121
@@ -204,7 +206,8 @@ fn main() {
204206 node_api,
205207 tokio_handle,
206208 initialization_handler,
207- ) ;
209+ )
210+ . await ;
208211 } else if let Some ( smatches) = matches. subcommand_matches ( "request-state" ) {
209212 println ! ( "*** Requesting state from a registered worker \n " ) ;
210213 let node_api =
@@ -273,7 +276,7 @@ fn main() {
273276
274277/// FIXME: needs some discussion (restructuring?)
275278#[ allow( clippy:: too_many_arguments) ]
276- fn start_worker < E , T , D , InitializationHandler , WorkerModeProvider > (
279+ async fn start_worker < E , T , D , InitializationHandler , WorkerModeProvider > (
277280 config : Config ,
278281 shard : & ShardIdentifier ,
279282 enclave : Arc < E > ,
@@ -317,7 +320,7 @@ fn start_worker<E, T, D, InitializationHandler, WorkerModeProvider>(
317320 let is_development_mode = run_config. dev ;
318321 let ra_url = config. mu_ra_url ( ) ;
319322 let enclave_api_key_prov = enclave. clone ( ) ;
320- thread :: spawn ( move || {
323+ tokio :: task :: spawn_blocking ( move || {
321324 enclave_run_state_provisioning_server (
322325 enclave_api_key_prov. as_ref ( ) ,
323326 sgx_quote_sign_type_t:: SGX_UNLINKABLE_SIGNATURE ,
@@ -375,7 +378,7 @@ fn start_worker<E, T, D, InitializationHandler, WorkerModeProvider>(
375378 {
376379 let direct_invocation_server_addr = config. trusted_worker_url_internal ( ) ;
377380 let enclave_for_direct_invocation = enclave. clone ( ) ;
378- thread :: spawn ( move || {
381+ tokio :: task :: spawn_blocking ( move || {
379382 println ! (
380383 "[+] Trusted RPC direct invocation server listening on {}" ,
381384 direct_invocation_server_addr
@@ -503,22 +506,22 @@ fn start_worker<E, T, D, InitializationHandler, WorkerModeProvider>(
503506 sidechain_storage,
504507 & last_synced_header,
505508 )
509+ . await
506510 . unwrap ( ) ;
507511 }
508512
509513 // ------------------------------------------------------------------------
510514 // start parentchain syncing loop (subscribe to header updates)
511- thread:: Builder :: new ( )
512- . name ( "parentchain_sync_loop" . to_owned ( ) )
513- . spawn ( move || {
514- if let Err ( e) =
515- subscribe_to_parentchain_new_headers ( parentchain_handler, last_synced_header)
516- {
517- error ! ( "Parentchain block syncing terminated with a failure: {:?}" , e) ;
518- }
519- println ! ( "[!] Parentchain block syncing has terminated" ) ;
520- } )
521- . unwrap ( ) ;
515+ tokio:: task:: spawn_blocking ( move || {
516+ if let Err ( e) =
517+ subscribe_to_parentchain_new_headers ( parentchain_handler, last_synced_header)
518+ {
519+ error ! ( "Parentchain block syncing terminated with a failure: {:?}" , e) ;
520+ }
521+ println ! ( "[!] Parentchain block syncing has terminated" ) ;
522+ } )
523+ . await
524+ . unwrap ( ) ;
522525 }
523526
524527 // ------------------------------------------------------------------------
@@ -552,7 +555,7 @@ fn spawn_worker_for_shard_polling<InitializationHandler>(
552555 InitializationHandler : TrackInitialization + Sync + Send + ' static ,
553556{
554557 let shard_for_initialized = * shard;
555- thread :: spawn ( move || {
558+ tokio :: task :: spawn_blocking ( move || {
556559 const POLL_INTERVAL_SECS : u64 = 2 ;
557560
558561 loop {
@@ -716,7 +719,7 @@ fn fetch_marblerun_events_every_hour<E>(
716719 E : RemoteAttestation + Clone + Sync + Send + ' static ,
717720{
718721 let enclave = enclave. clone ( ) ;
719- let handle = thread :: spawn ( move || {
722+ let handle = tokio :: task :: spawn ( move || {
720723 const POLL_INTERVAL_5_MINUTES_IN_SECS : u64 = 5 * 60 ;
721724 loop {
722725 info ! ( "Polling marblerun events for quotes to register" ) ;
@@ -729,7 +732,7 @@ fn fetch_marblerun_events_every_hour<E>(
729732 marblerun_base_url. clone ( ) ,
730733 ) ;
731734
732- thread :: sleep ( Duration :: from_secs ( POLL_INTERVAL_5_MINUTES_IN_SECS ) ) ;
735+ tokio :: time :: sleep ( Duration :: from_secs ( POLL_INTERVAL_5_MINUTES_IN_SECS ) ) ;
733736 }
734737 } ) ;
735738
0 commit comments