Skip to content

Commit e4ff7c4

Browse files
committed
feat: add fallback for service manager on the batcher init
1 parent c4c7960 commit e4ff7c4

File tree

1 file changed

+32
-8
lines changed
  • batcher/aligned-batcher/src

1 file changed

+32
-8
lines changed

batcher/aligned-batcher/src/lib.rs

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ pub struct Batcher {
7575
payment_service: BatcherPaymentService,
7676
payment_service_fallback: BatcherPaymentService,
7777
service_manager: ServiceManager,
78+
service_manager_fallback: ServiceManager,
7879
batch_state: Mutex<BatchState>,
7980
max_block_interval: u64,
8081
min_batch_len: usize,
@@ -126,6 +127,9 @@ impl Batcher {
126127
let eth_rpc_provider_service_manager =
127128
eth::get_provider(config.eth_rpc_url.clone()).expect("Failed to get provider");
128129

130+
let eth_rpc_provider_service_manager_fallback =
131+
eth::get_provider(config.eth_rpc_url.clone()).expect("Failed to get provider");
132+
129133
// FIXME(marian): We are getting just the last block number right now, but we should really
130134
// have the last submitted batch block registered and query it when the batcher is initialized.
131135
let last_uploaded_batch_block = match eth_rpc_provider.get_block_number().await {
@@ -173,12 +177,20 @@ impl Batcher {
173177

174178
let service_manager = eth::service_manager::get_service_manager(
175179
eth_rpc_provider_service_manager,
176-
config.ecdsa,
180+
config.ecdsa.clone(),
177181
deployment_output.addresses.service_manager.clone(),
178182
)
179183
.await
180184
.expect("Failed to get Service Manager contract");
181185

186+
let service_manager_fallback = eth::service_manager::get_service_manager(
187+
eth_rpc_provider_service_manager_fallback,
188+
config.ecdsa,
189+
deployment_output.addresses.service_manager,
190+
)
191+
.await
192+
.expect("Failed to get fallback Service Manager contract");
193+
182194
let mut user_states = HashMap::new();
183195
let mut batch_state = BatchState::new();
184196
let non_paying_config = if let Some(non_paying_config) = config.batcher.non_paying {
@@ -214,6 +226,7 @@ impl Batcher {
214226
payment_service,
215227
payment_service_fallback,
216228
service_manager,
229+
service_manager_fallback,
217230
max_block_interval: config.batcher.block_interval,
218231
min_batch_len: config.batcher.batch_size_interval,
219232
max_proof_size: config.batcher.max_proof_size,
@@ -393,7 +406,14 @@ impl Batcher {
393406

394407
// When pre-verification is enabled, batcher will verify proofs for faster feedback with clients
395408
if self.pre_verification_is_enabled {
396-
let disabled_verifiers = self.disabled_verifiers().await;
409+
let disabled_verifiers = match self.disabled_verifiers().await {
410+
Ok(disabled_verifiers) => disabled_verifiers,
411+
Err(e) => {
412+
error!("Failed to get disabled verifiers: {e:?}");
413+
send_message(ws_conn_sink.clone(), ValidityResponseMessage::EthRpcError).await;
414+
return Ok(());
415+
}
416+
};
397417
let verification_data = nonced_verification_data.verification_data.clone();
398418
if disabled_verifiers & (U256::one() << verification_data.proving_system as u64)
399419
!= U256::zero()
@@ -685,12 +705,16 @@ impl Batcher {
685705
};
686706
}
687707

688-
async fn disabled_verifiers(&self) -> U256 {
689-
self.service_manager
690-
.disabled_verifiers()
691-
.call()
692-
.await
693-
.unwrap_or_default()
708+
async fn disabled_verifiers(&self) -> Result<U256, ContractError<SignerMiddlewareT>> {
709+
match self.service_manager.disabled_verifiers().call().await {
710+
Ok(disabled_verifiers) => Ok(disabled_verifiers),
711+
Err(_) => {
712+
self.service_manager_fallback
713+
.disabled_verifiers()
714+
.call()
715+
.await
716+
}
717+
}
694718
}
695719

696720
async fn get_user_nonce_from_ethereum(

0 commit comments

Comments
 (0)