pub async fn validate_proposal_safety_and_liveness<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions>(
    proposal: Proposal<TYPES, QuorumProposal<TYPES>>,
    parent_leaf: Leaf<TYPES>,
    consensus: OuterConsensus<TYPES>,
    decided_upgrade_certificate: Arc<RwLock<Option<UpgradeCertificate<TYPES>>>>,
    quorum_membership: Arc<TYPES::Membership>,
    event_stream: Sender<Arc<HotShotEvent<TYPES>>>,
    sender: TYPES::SignatureKey,
    event_sender: Sender<Event<TYPES>>,
    id: u64,
    upgrade_lock: UpgradeLock<TYPES, V>,
    storage: Arc<RwLock<I::Storage>>
) -> Result<()>
Expand description

Validate the state and safety and liveness of a proposal then emit a QuorumProposalValidated event.

§Errors

If any validation or state update fails. TODO - This should just take the QuorumProposalRecv task state after we merge the dependency tasks.