anvil_zksync_api_server/impls/
anvil_zks.rs

1use anvil_zksync_api_decl::AnvilZksNamespaceServer;
2use anvil_zksync_core::node::boojumos_get_batch_witness;
3use anvil_zksync_l1_sidecar::L1Sidecar;
4use jsonrpsee::core::{async_trait, RpcResult};
5use zksync_types::web3::Bytes;
6use zksync_types::{L1BatchNumber, H256};
7
8use crate::error::{rpc_invalid_params, RpcErrorAdapter};
9
10pub struct AnvilZksNamespace {
11    l1_sidecar: L1Sidecar,
12}
13
14impl AnvilZksNamespace {
15    pub fn new(l1_sidecar: L1Sidecar) -> Self {
16        Self { l1_sidecar }
17    }
18}
19
20#[async_trait]
21impl AnvilZksNamespaceServer for AnvilZksNamespace {
22    async fn commit_batch(&self, batch_number: L1BatchNumber) -> RpcResult<H256> {
23        self.l1_sidecar
24            .commit_batch(batch_number)
25            .await
26            .map_err(RpcErrorAdapter::into)
27    }
28
29    async fn prove_batch(&self, batch_number: L1BatchNumber) -> RpcResult<H256> {
30        self.l1_sidecar
31            .prove_batch(batch_number)
32            .await
33            .map_err(RpcErrorAdapter::into)
34    }
35
36    async fn execute_batch(&self, batch_number: L1BatchNumber) -> RpcResult<H256> {
37        self.l1_sidecar
38            .execute_batch(batch_number)
39            .await
40            .map_err(RpcErrorAdapter::into)
41    }
42
43    async fn get_boojum_witness(&self, batch_number: L1BatchNumber) -> RpcResult<Bytes> {
44        Ok(boojumos_get_batch_witness(&batch_number)
45            .ok_or(rpc_invalid_params(
46                "Batch with this number doesn't exist yet".to_string(),
47            ))?
48            .into())
49    }
50}