1- use crate :: heartbeat:: NilAVRouter :: NilAVRouterInstance ;
1+ use crate :: { heartbeat:: NilAVRouter :: NilAVRouterInstance , monitors :: caddy :: CaddyStatus } ;
22use alloy:: { primitives:: Address , providers:: ProviderBuilder , signers:: local:: PrivateKeySigner , sol_types:: sol} ;
33use alloy_provider:: { Provider , WsConnect } ;
44use anyhow:: Context ;
@@ -32,6 +32,7 @@ pub(crate) struct HeartbeatEmitterArgs {
3232 pub ( crate ) measurement_hash_url : String ,
3333 pub ( crate ) cpu_count : u64 ,
3434 pub ( crate ) gpu_count : u64 ,
35+ pub ( crate ) caddy_status : CaddyStatus ,
3536}
3637
3738pub ( crate ) struct HeartbeatEmitter {
@@ -62,6 +63,7 @@ impl HeartbeatEmitter {
6263 measurement_hash_url,
6364 cpu_count,
6465 gpu_count,
66+ caddy_status,
6567 } = args;
6668 let contract_address: Address = contract_address. parse ( ) . context ( "Invalid contract address" ) ?;
6769 let attestation_url = format ! ( "https://{workload_domain}{ATTESTATION_PATH}" ) ;
@@ -81,11 +83,15 @@ impl HeartbeatEmitter {
8183 cpu_count,
8284 gpu_count,
8385 } ;
84- tokio:: spawn ( async move { submitter. run ( ) . await } ) ;
86+ tokio:: spawn ( async move { submitter. run ( caddy_status ) . await } ) ;
8587 Ok ( ( ) )
8688 }
8789
88- async fn run ( self ) {
90+ async fn run ( self , caddy_status : CaddyStatus ) {
91+ info ! ( "Waiting for caddy to generate a TLS certificate before emitting heartbeats" ) ;
92+ caddy_status. wait_tls_certificate ( ) . await ;
93+ info ! ( "Starting heartbeat generation" ) ;
94+
8995 let provider = loop {
9096 match self . connect ( ) . await {
9197 Ok ( out) => break out,
@@ -111,8 +117,12 @@ impl HeartbeatEmitter {
111117
112118 async fn connect ( & self ) -> anyhow:: Result < impl Provider > {
113119 let ws = WsConnect :: new ( & self . rpc_endpoint ) . with_max_retries ( u32:: MAX ) ;
114- let provider =
115- ProviderBuilder :: new ( ) . wallet ( self . wallet . clone ( ) ) . with_simple_nonce_management ( ) . connect_ws ( ws) . await ?;
120+ let provider = ProviderBuilder :: new ( )
121+ . wallet ( self . wallet . clone ( ) )
122+ . with_simple_nonce_management ( )
123+ . with_gas_estimation ( )
124+ . connect_ws ( ws)
125+ . await ?;
116126 Ok ( provider)
117127 }
118128
@@ -133,7 +143,8 @@ impl HeartbeatEmitter {
133143 let pending_tx = call. send ( ) . await ?;
134144 let receipt = pending_tx. get_receipt ( ) . await ?;
135145 let tx_hash = receipt. transaction_hash ;
136- info ! ( "HTX submitted in transaction {tx_hash}" ) ;
146+ let status = if receipt. status ( ) { "success" } else { "failure" } ;
147+ info ! ( "HTX submitted in transaction {tx_hash} with status {status}" ) ;
137148 Ok ( ( ) )
138149 }
139150}
0 commit comments