node/external_snark_worker_effectful/
external_snark_worker_service.rs

1use mina_p2p_messages::v2::{CurrencyFeeStableV1, NonZeroCurvePoint};
2use serde::{Deserialize, Serialize};
3use snark::TransactionVerifier;
4
5use crate::external_snark_worker::{
6    ExternalSnarkWorkerError, ExternalSnarkWorkerWorkError, SnarkWorkResult, SnarkWorkSpec,
7};
8
9#[derive(Serialize, Deserialize, Debug, Clone, derive_more::From)]
10pub enum ExternalSnarkWorkerEvent {
11    Started,
12    Killed,
13    WorkResult(SnarkWorkResult),
14    WorkError(ExternalSnarkWorkerWorkError),
15    WorkCancelled,
16    Error(ExternalSnarkWorkerError),
17}
18
19pub trait ExternalSnarkWorkerService {
20    /// Starts external process.
21    fn start(
22        &mut self,
23        public_key: NonZeroCurvePoint,
24        fee: CurrencyFeeStableV1,
25        work_verifier: TransactionVerifier,
26    ) -> Result<(), ExternalSnarkWorkerError>;
27
28    /// Submits snark work
29    fn submit(&mut self, spec: SnarkWorkSpec) -> Result<(), ExternalSnarkWorkerError>;
30
31    /// Cancel current work
32    fn cancel(&mut self) -> Result<(), ExternalSnarkWorkerError>;
33
34    /// Kills external process.
35    fn kill(&mut self) -> Result<(), ExternalSnarkWorkerError>;
36}