@@ -20,58 +20,57 @@ allTransitions ::
2020 ( Maybe (Spine (State script )) -- source 'State'
2121 , Maybe (Spine (State script )) -- target 'State'
2222 )
23- allTransitions = Map. map foo transitionSpec
23+ allTransitions = Map. map inOut transitionSpec
2424 where
25- foo :: [TxConstraint False script ] -> (Maybe (Spine (State script )), Maybe (Spine (State script )))
26- foo cs = (transitionInStateSpine cs, transitionOutStateSpine cs)
25+ inOut :: [TxConstraint False script ] -> (Maybe (Spine (State script )), Maybe (Spine (State script )))
26+ inOut cs = (transitionInStateSpine cs, transitionOutStateSpine cs)
2727
2828transitionInStateSpine ::
2929 (CEMScript script ) =>
3030 [TxConstraint False script ] ->
3131 Maybe (Spine (State script ))
32- transitionInStateSpine spec = case transitionStateSpines In spec of
33- [x] -> Just x
34- [] -> Nothing
35- _ ->
36- error
37- " Transition should not have more than one SameScript In constraint"
32+ transitionInStateSpine = onlyTransitionStateSpine In
3833
3934transitionOutStateSpine ::
4035 (CEMScript script ) =>
4136 [TxConstraint False script ] ->
4237 Maybe (Spine (State script ))
43- transitionOutStateSpine spec = case transitionStateSpines Out spec of
38+ transitionOutStateSpine = onlyTransitionStateSpine Out
39+
40+ onlyTransitionStateSpine ::
41+ (CEMScript script ) =>
42+ TxFanKind ->
43+ [TxConstraint False script ] ->
44+ Maybe (Spine (State script ))
45+ onlyTransitionStateSpine kind spec = case transitionStateSpines kind spec of
4446 [x] -> Just x
4547 [] -> Nothing
4648 _ ->
4749 error
48- " Transition should not have more than one SameScript In constraint"
50+ " Transition should not have more than one SameScript In/Out/InRef constraint"
4951
50- transitionStateSpines :: (CEMScript script ) => TxFanKind -> [TxConstraint False script ] -> [Spine (State script )]
51- transitionStateSpines kind spec = concat $ map (sameScriptStateSpinesOfKind kind) spec
52+ -- | Get all states for a transition constraints based on a utxo kind.
53+ transitionStateSpines ::
54+ forall script .
55+ (CEMScript script ) =>
56+ TxFanKind ->
57+ [TxConstraint False script ] ->
58+ [Spine (State script )]
59+ transitionStateSpines kind spec = concat $ map ownUtxoState spec
5260 where
53- sameScriptStateSpinesOfKind ::
54- forall script .
55- (CEMScript script ) =>
56- TxFanKind ->
57- TxConstraint False script ->
58- [Spine (State script )]
59- sameScriptStateSpinesOfKind xKind constr = case constr of
60- TxFan kind (SameScript (MkSameScriptArg state)) _ -> [parseSpine state | kind == xKind]
61- If _ t e -> recur t <> recur e
62- MatchBySpine _ caseSwitch -> foldMap recur (Map. elems caseSwitch)
61+ ownUtxoState constr = case constr of
62+ TxFan kind' (SameScript (MkSameScriptArg state)) _ -> [parseSpine state | kind' == kind]
63+ If _ t e -> ownUtxoState t <> ownUtxoState e
64+ MatchBySpine _ caseSwitch -> foldMap ownUtxoState (Map. elems caseSwitch)
6365 _ -> []
64- where
65- recur = sameScriptStateSpinesOfKind xKind
66- parseSpine ::
67- ConstraintDSL script (State script ) -> Spine (State script )
68- parseSpine (Pure state) = getSpine state
69- parseSpine (UnsafeOfSpine spine _) = spine
70- parseSpine (UnsafeUpdateOfSpine _ spine _) = spine
71- -- FIXME: yet another not-properly DSL type encoded place
72- parseSpine _ = error " SameScript is too complex to statically know its spine"
7366
74- -- FIXME: check MainSignerCoinSelect, ...
67+ parseSpine :: ConstraintDSL script (State script ) -> Spine (State script )
68+ parseSpine (Pure state) = getSpine state
69+ parseSpine (UnsafeOfSpine spine _) = spine
70+ parseSpine (UnsafeUpdateOfSpine _ spine _) = spine
71+ -- This should not happen anymore due to use of 'SameScriptArg'
72+ -- and smart constructors.
73+ parseSpine _ = error " SameScript is too complex to statically know its spine"
7574
7675-- | Checking for errors and normalising
7776preProcessForOnChainCompilation ::
0 commit comments