Coordination
Workflow.
A workflow is an ordered sequence of saga steps. Each step has an explicit Execute → Verify → Compensate lifecycle and an optional per-step escrow. Workflows produce on-chain receipts and can optionally mirror to a Canton synchronizer for DAML reconciliation.
- STATUS
- Testnet
- CRATE
- tenzro-workflow
- STABILITY
- Stable
- TYPE
- Component
01
Step lifecycle
Pending → Executing → Verifying → Verified
↘
Compensating → Compensated02
Workflow status
Created → Open → Executing → Verifying → Finalized
↘
Compensating → Failed03
Writes
tenzro_workflowOpen
tenzro_workflowStepExecute { workflow_id, step_id, escrow_amount? }
tenzro_workflowStepVerify
tenzro_workflowStepCompensate
tenzro_workflowFinalize
tenzro_mirrorWorkflowToCanton04
Reads
tenzro_getWorkflow
tenzro_getWorkflowSaga
tenzro_getWorkflowLifecycle
tenzro_getWorkflowReceipt
tenzro_getWorkflowOperationalMetrics
tenzro_listWorkflowReceipts
tenzro_listWorkflowsByCreator
tenzro_listWorkflowsByParticipant
tenzro_listWorkflowsByStatus05
DID envelopes
Step payloads can be signed by DIDs. The runtime exposes tenzro_verifyDidEnvelope for verifying authorship and integrity.
06
SDK
// Rust
let opened = client.workflow().open(workflow_json).await?;
client.workflow().step_execute(&id, "step-1", Some(1_000_000)).await?;
client.workflow().step_verify(&id, "step-1").await?;
client.workflow().finalize(&id).await?;
client.workflow().mirror_to_canton(&id).await?;
// TypeScript
const opened = await client.workflow.open(payload);
await client.workflow.stepExecute(opened.workflow_id, "step-1", 1_000_000n);
await client.workflow.stepVerify(opened.workflow_id, "step-1");
await client.workflow.finalize(opened.workflow_id);Related