node/block_producer_effectful/
block_producer_effectful_service.rs

1use std::sync::Arc;
2
3use ledger::proofs::provers::BlockProver;
4use mina_p2p_messages::v2::{
5    ConsensusBodyReferenceStableV1, LedgerProofProdStableV2, MinaBasePendingCoinbaseUpdateStableV1,
6    MinaBasePendingCoinbaseWitnessStableV2, MinaBaseSparseLedgerBaseStableV2,
7    MinaBaseStagedLedgerHashStableV1, ProverExtendBlockchainInputStableV2,
8    StagedLedgerDiffDiffStableV2, StateHash,
9};
10use openmina_node_account::AccountSecretKey;
11use serde::{Deserialize, Serialize};
12
13#[derive(Serialize, Deserialize, Debug, Clone)]
14pub struct StagedLedgerDiffCreateOutput {
15    pub diff: StagedLedgerDiffDiffStableV2,
16    /// `protocol_state.blockchain_state.body_reference`
17    pub diff_hash: ConsensusBodyReferenceStableV1,
18    pub staged_ledger_hash: MinaBaseStagedLedgerHashStableV1,
19    pub emitted_ledger_proof: Option<Arc<LedgerProofProdStableV2>>,
20    pub pending_coinbase_update: MinaBasePendingCoinbaseUpdateStableV1,
21    pub pending_coinbase_witness: MinaBasePendingCoinbaseWitnessStableV2,
22    pub stake_proof_sparse_ledger: MinaBaseSparseLedgerBaseStableV2,
23}
24
25pub trait BlockProducerService {
26    fn provers(&self) -> BlockProver;
27    fn prove(&mut self, block_hash: StateHash, input: Box<ProverExtendBlockchainInputStableV2>);
28    fn with_producer_keypair<T>(&self, f: impl FnOnce(&AccountSecretKey) -> T) -> Option<T>;
29}