node/block_producer_effectful/
block_producer_effectful_service.rs1use 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 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}