{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Cardano.Ledger.Api.Leios ( validateLeiosCert, LeiosCertEnv (..), DijkstraLeiosCertPredFailure (..), LeiosCert, ) where import Cardano.Crypto.Leios (LeiosCert) import Cardano.Ledger.BaseTypes (Globals) import Cardano.Ledger.Core (Era) import Cardano.Ledger.Dijkstra.Rules ( DijkstraLeiosCertPredFailure (..), LEIOSCERT, LeiosCertEnv (..), ) import Control.Monad.Trans.Reader (runReader) import Control.State.Transition.Extended (TRC (..), applySTS) import Data.List.NonEmpty (NonEmpty) validateLeiosCert :: forall era. Era era => Globals -> LeiosCertEnv -> LeiosCert -> Either (NonEmpty (DijkstraLeiosCertPredFailure era)) () validateLeiosCert :: forall era. Era era => Globals -> LeiosCertEnv -> LeiosCert -> Either (NonEmpty (DijkstraLeiosCertPredFailure era)) () validateLeiosCert Globals globals LeiosCertEnv env LeiosCert cert = Reader Globals (Either (NonEmpty (DijkstraLeiosCertPredFailure era)) ()) -> Globals -> Either (NonEmpty (DijkstraLeiosCertPredFailure era)) () forall r a. Reader r a -> r -> a runReader (forall s (m :: * -> *) (rtype :: RuleType). (STS s, RuleTypeRep rtype, m ~ BaseM s) => RuleContext rtype s -> m (Either (NonEmpty (PredicateFailure s)) (State s)) applySTS @(LEIOSCERT era) ((Environment (LEIOSCERT era), State (LEIOSCERT era), Signal (LEIOSCERT era)) -> TRC (LEIOSCERT era) forall sts. (Environment sts, State sts, Signal sts) -> TRC sts TRC (LeiosCertEnv Environment (LEIOSCERT era) env, (), LeiosCert Signal (LEIOSCERT era) cert))) Globals globals