diff --git a/src/validation/status.rs b/src/validation/status.rs index 33499a1c..9978a1c9 100644 --- a/src/validation/status.rs +++ b/src/validation/status.rs @@ -345,7 +345,7 @@ pub enum Failure { /// {1}. Details: {2} SealsInvalid(BundleId, Txid, String), /// single-use seals for the operation {0} were not validated, which - /// probably indicateds unanchored state transition. + /// probably indicates unanchored state transition. SealsUnvalidated(OpId), /// transition bundle {0} is not properly anchored to the witness /// transaction {1}. Details: {2} diff --git a/src/validation/validator.rs b/src/validation/validator.rs index 2778b350..a228352e 100644 --- a/src/validation/validator.rs +++ b/src/validation/validator.rs @@ -32,9 +32,9 @@ use super::status::{Failure, Warning}; use super::{CheckedConsignment, ConsignmentApi, Status, Validity, VirtualMachine}; use crate::vm::AluRuntime; use crate::{ - AltLayer1, AnchorSet, BundleId, ContractId, Layer1, OpId, OpRef, Operation, Opout, Schema, - SchemaId, SchemaRoot, Script, SubSchema, Transition, TransitionBundle, TypedAssigns, WitnessId, - XAnchor, + AltLayer1, AnchorSet, BundleId, ContractId, Layer1, OpId, OpRef, OpType, Operation, Opout, + Schema, SchemaId, SchemaRoot, Script, SubSchema, Transition, TransitionBundle, TypedAssigns, + WitnessId, XAnchor, }; #[derive(Clone, Debug, Display, Error, From)] @@ -243,13 +243,15 @@ impl<'consignment, 'resolver, C: ConsignmentApi, R: ResolveTx> continue; } - if !self.validated_op_seals.contains(&opid) { + if !self.validated_op_seals.contains(&opid) && + operation.op_type() == OpType::StateTransition + { self.status.add_failure(Failure::SealsUnvalidated(opid)); } // [VALIDATION]: Verify operation against the schema and scripts - self.status += schema.validate_state(&self.consignment, operation, self.vm.as_ref()); - if !self.validated_op_state.insert(opid) { - self.status.add_failure(Failure::CyclicGraph(opid)); + if self.validated_op_state.insert(opid) { + self.status += + schema.validate_state(&self.consignment, operation, self.vm.as_ref()); } match operation {