@@ -72,29 +72,54 @@ transitionStateSpines kind spec = concat $ map ownUtxoState spec
7272 -- and smart constructors.
7373 parseSpine _ = error " SameScript is too complex to statically know its spine"
7474
75- -- | Checking for errors and normalising
75+ -- -----------------------------------------------------------------------------
76+ -- Some preliminary checks
77+ -- -----------------------------------------------------------------------------
78+
79+ -- Checks are based on this pseudo-lattice ordering.
80+ data CheckResult = Yes | No | Maybe
81+ deriving stock (Eq , Show )
82+
83+ opposite :: Ordering -> Ordering
84+ opposite EQ = EQ
85+ opposite LT = GT
86+ opposite GT = LT
87+
88+ instance Ord CheckResult where
89+ compare Yes No = EQ
90+ compare Yes Maybe = GT
91+ compare No Maybe = GT
92+ compare Yes Yes = EQ
93+ compare No No = EQ
94+ compare Maybe Maybe = EQ
95+ compare x y = opposite $ compare y x
96+
97+ {- | Performs some preliminary checks over the CEM script specification:
98+ * there is only one initial transition
99+ * every transition has zero or one `In` state
100+ -}
76101preProcessForOnChainCompilation ::
77102 (CEMScript script , Show a ) =>
78103 Map. Map a [TxConstraint False script ] ->
79104 Map. Map a [TxConstraint False script ]
80105preProcessForOnChainCompilation spec =
81- if length possibleCreators == 1
106+ if length initialTransitions == 1
82107 then
83108 let
84- -- FIXME: relies on `error` inside...
109+ -- PM relies on `error` inside transitionInStateSpine
85110 ! _ = map transitionInStateSpine $ Map. elems spec
86111 in
87112 spec
88113 else
89114 error $
90- " CEMScript should have exactly 1 creating transition, "
91- <> " while possible creators are "
92- <> ppShowList possibleCreators
115+ " CEMScript must have exactly one initial transition, "
116+ <> " while there are many ones: "
117+ <> ppShowList initialTransitions
93118 where
94- possibleCreators = filter (maybeIsCreator . snd ) (Map. toList spec)
119+ initialTransitions = filter (isInitial . snd ) (Map. toList spec)
95120
96- maybeIsCreator :: [TxConstraint resolved script ] -> Bool
97- maybeIsCreator constrs =
121+ isInitial :: [TxConstraint resolved script ] -> Bool
122+ isInitial constrs =
98123 not (maybeHasSameScriptFanOfKind In )
99124 && maybeHasSameScriptFanOfKind Out
100125 where
@@ -111,21 +136,3 @@ preProcessForOnChainCompilation spec =
111136 _ -> No
112137 where
113138 recur = isSameScriptOfKind xKind
114-
115- -- | We have abstract interpretator at home
116- data CheckResult = Yes | No | Maybe
117- deriving stock (Eq , Show )
118-
119- opposite :: Ordering -> Ordering
120- opposite EQ = EQ
121- opposite LT = GT
122- opposite GT = LT
123-
124- instance Ord CheckResult where
125- compare Yes No = EQ
126- compare Yes Maybe = GT
127- compare No Maybe = GT
128- compare Yes Yes = EQ
129- compare No No = EQ
130- compare Maybe Maybe = EQ
131- compare x y = opposite $ compare y x
0 commit comments