{-# LANGUAGE DataKinds #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fplugin Plinth.Plugin #-}
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:defer-errors #-}
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:remove-trace #-}
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:target-version=1.1.0 #-}
module Cardano.Constitution.Validator.Data.Sorted
( constitutionValidator
, defaultConstitutionValidator
, mkConstitutionCode
, defaultConstitutionCode
) where
import Cardano.Constitution.Config
import Cardano.Constitution.Validator.Data.Common as Common
import PlutusCore.Version (plcVersion110)
import PlutusTx as Tx
import PlutusTx.Builtins as B
import PlutusTx.Builtins.Internal qualified as BI
import PlutusTx.Prelude as Tx
constitutionValidator :: ConstitutionConfig -> ConstitutionValidator
constitutionValidator :: ConstitutionConfig -> ConstitutionValidator
constitutionValidator (ConstitutionConfig [Param]
cfg) =
(ChangedParams -> Bool) -> ConstitutionValidator
Common.withChangedParams ([Param] -> ChangedParams -> Bool
runRules [Param]
cfg)
runRules
:: [Param]
-> ChangedParams
-> Bool
runRules :: [Param] -> ChangedParams -> Bool
runRules [Param]
cfg ChangedParams
cparams =
Bool
-> (BuiltinPair BuiltinData BuiltinData -> ChangedParams -> Bool)
-> ChangedParams
-> Bool
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
BI.caseList'
Bool
True
( \BuiltinPair BuiltinData BuiltinData
cparamsHd ChangedParams
cparamsRest ->
case [Param]
cfg of
(Integer
expectedPid, ParamValue
paramValue) : [Param]
cfgRest ->
BuiltinPair BuiltinData BuiltinData
-> (BuiltinData -> BuiltinData -> Bool) -> Bool
forall a b r. BuiltinPair a b -> (a -> b -> r) -> r
BI.casePair BuiltinPair BuiltinData BuiltinData
cparamsHd ((BuiltinData -> BuiltinData -> Bool) -> Bool)
-> (BuiltinData -> BuiltinData -> Bool) -> Bool
forall a b. (a -> b) -> a -> b
$ \BuiltinData
actualPidData BuiltinData
actualValueData ->
case BuiltinData -> Integer
B.unsafeDataAsI BuiltinData
actualPidData Integer -> Integer -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` Integer
expectedPid of
Ordering
EQ ->
ParamValue -> BuiltinData -> Bool
Common.validateParamValue ParamValue
paramValue BuiltinData
actualValueData
Bool -> Bool -> Bool
&& [Param] -> ChangedParams -> Bool
runRules [Param]
cfgRest ChangedParams
cparamsRest
Ordering
GT ->
[Param] -> ChangedParams -> Bool
runRules [Param]
cfgRest ChangedParams
cparams
Ordering
LT ->
Bool
False
[] -> Bool
False
)
ChangedParams
cparams
defaultConstitutionValidator :: ConstitutionValidator
defaultConstitutionValidator :: ConstitutionValidator
defaultConstitutionValidator = ConstitutionConfig -> ConstitutionValidator
constitutionValidator ConstitutionConfig
defaultConstitutionConfig
mkConstitutionCode :: ConstitutionConfig -> CompiledCode ConstitutionValidator
mkConstitutionCode :: ConstitutionConfig -> CompiledCode ConstitutionValidator
mkConstitutionCode ConstitutionConfig
cCfg =
$$(compile [||constitutionValidator||])
CompiledCode (ConstitutionConfig -> ConstitutionValidator)
-> CompiledCodeIn DefaultUni DefaultFun ConstitutionConfig
-> CompiledCode ConstitutionValidator
forall (uni :: * -> *) fun a b.
(Closed uni, Everywhere uni Flat, Flat fun, Pretty fun,
Everywhere uni PrettyConst,
PrettyBy RenderContext (SomeTypeIn uni)) =>
CompiledCodeIn uni fun (a -> b)
-> CompiledCodeIn uni fun a -> CompiledCodeIn uni fun b
`unsafeApplyCode` Version
-> ConstitutionConfig
-> CompiledCodeIn DefaultUni DefaultFun ConstitutionConfig
forall (uni :: * -> *) a fun.
(Lift uni a, GEq uni, Everywhere uni Eq, ThrowableBuiltins uni fun,
Typecheckable uni fun, CaseBuiltin uni,
Default (CostingPart uni fun), Default (BuiltinsInfo uni fun),
Default (RewriteRules uni fun), Hashable fun) =>
Version -> a -> CompiledCodeIn uni fun a
liftCode Version
plcVersion110 ConstitutionConfig
cCfg
defaultConstitutionCode :: CompiledCode ConstitutionValidator
defaultConstitutionCode :: CompiledCode ConstitutionValidator
defaultConstitutionCode = $$(compile [||defaultConstitutionValidator||])