use miden_node_proto::generated as grpc;
use miden_node_utils::tracing::OpenTelemetrySpanExt;
use crate::server::proof_kind::ProofKind;
use crate::server::service::ProverService;
#[tonic::async_trait]
impl grpc::server::remote_prover_api::Prove for ProverService {
type Input = (ProofKind, grpc::remote_prover::ProofRequest);
type Output = grpc::remote_prover::Proof;
async fn handle(&self, (proof_kind, request): Self::Input) -> tonic::Result<Self::Output> {
tracing::Span::current().set_attribute("request.kind", proof_kind);
if !self.is_supported(proof_kind) {
return Err(tonic::Status::invalid_argument("unsupported proof type"));
}
let _permit = self.acquire_permit()?;
let prover = self.acquire_prover().await;
prover.prove(request).await
}
fn decode(request: grpc::remote_prover::ProofRequest) -> tonic::Result<Self::Input> {
if request.proof_type() as i32 != request.proof_type {
return Err(tonic::Status::invalid_argument("unknown proof_type value"));
}
Ok((ProofKind::from(request.proof_type()), request))
}
fn encode(output: Self::Output) -> tonic::Result<grpc::remote_prover::Proof> {
Ok(output)
}
}