Function holochain::core::check_prev_action
source · pub fn check_prev_action(action: &Action) -> SysValidationResult<()>
Expand description
Check that the correct actions have the correct setting for prev_action:
- Dna can never have a prev_action, and must have seq == 0.
- All other actions must have prev_action, and seq > 0.
Examples found in repository?
src/core/workflow/sys_validation_workflow.rs (line 568)
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
async fn register_agent_activity(
action: &Action,
workspace: &SysValidationWorkspace,
network: HolochainP2pDna,
incoming_dht_ops_sender: Option<IncomingDhtOpSender>,
) -> SysValidationResult<()> {
// Get data ready to validate
let prev_action_hash = action.prev_action();
// Checks
check_prev_action(action)?;
check_valid_if_dna(action, workspace).await?;
if let Some(prev_action_hash) = prev_action_hash {
check_and_hold_register_agent_activity(
prev_action_hash,
workspace,
network,
incoming_dht_ops_sender,
|_| Ok(()),
)
.await?;
}
check_chain_rollback(action, workspace).await?;
Ok(())
}
async fn store_record(
action: &Action,
workspace: &SysValidationWorkspace,
network: HolochainP2pDna,
) -> SysValidationResult<()> {
// Get data ready to validate
let prev_action_hash = action.prev_action();
// Checks
check_prev_action(action)?;
if let Some(prev_action_hash) = prev_action_hash {
let mut cascade = workspace.full_cascade(network);
let prev_action = cascade
.retrieve_action(prev_action_hash.clone(), Default::default())
.await?
.ok_or_else(|| ValidationOutcome::DepMissingFromDht(prev_action_hash.clone().into()))?;
check_prev_timestamp(action, prev_action.action())?;
check_prev_seq(action, prev_action.action())?;
}
Ok(())
}