{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Babbage (
  BabbageEra,
  BabbageTxOut,
  TxBody (BabbageTxBody),
  Tx (..),
  ApplyTxError (..),
  AlonzoScript,
  AlonzoTxAuxData,
) where

import Cardano.Ledger.Alonzo.Scripts (AlonzoScript (..))
import Cardano.Ledger.Alonzo.TxAuxData (AlonzoTxAuxData (..))
import Cardano.Ledger.Babbage.BlockBody ()
import Cardano.Ledger.Babbage.Era (BabbageEra)
import Cardano.Ledger.Babbage.Rules ()
import Cardano.Ledger.Babbage.State ()
import Cardano.Ledger.Babbage.Transition ()
import Cardano.Ledger.Babbage.Translation ()
import Cardano.Ledger.Babbage.Tx (Tx (..))
import Cardano.Ledger.Babbage.TxBody (BabbageTxOut, TxBody (BabbageTxBody))
import Cardano.Ledger.Babbage.TxInfo ()
import Cardano.Ledger.Babbage.UTxO ()
import Cardano.Ledger.Binary (DecCBOR, EncCBOR)
import Cardano.Ledger.Shelley.API
import Cardano.Ledger.Shelley.Rules (ShelleyLedgerPredFailure)
import Data.Bifunctor (Bifunctor (first))
import Data.List.NonEmpty (NonEmpty)

-- =====================================================

instance ApplyTx BabbageEra where
  newtype ApplyTxError BabbageEra = BabbageApplyTxError (NonEmpty (ShelleyLedgerPredFailure BabbageEra))
    deriving (ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool
(ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool)
-> (ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool)
-> Eq (ApplyTxError BabbageEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool
== :: ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool
$c/= :: ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool
/= :: ApplyTxError BabbageEra -> ApplyTxError BabbageEra -> Bool
Eq, Int -> ApplyTxError BabbageEra -> ShowS
[ApplyTxError BabbageEra] -> ShowS
ApplyTxError BabbageEra -> String
(Int -> ApplyTxError BabbageEra -> ShowS)
-> (ApplyTxError BabbageEra -> String)
-> ([ApplyTxError BabbageEra] -> ShowS)
-> Show (ApplyTxError BabbageEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ApplyTxError BabbageEra -> ShowS
showsPrec :: Int -> ApplyTxError BabbageEra -> ShowS
$cshow :: ApplyTxError BabbageEra -> String
show :: ApplyTxError BabbageEra -> String
$cshowList :: [ApplyTxError BabbageEra] -> ShowS
showList :: [ApplyTxError BabbageEra] -> ShowS
Show)
    deriving newtype (ApplyTxError BabbageEra -> Encoding
(ApplyTxError BabbageEra -> Encoding)
-> EncCBOR (ApplyTxError BabbageEra)
forall a. (a -> Encoding) -> EncCBOR a
$cencCBOR :: ApplyTxError BabbageEra -> Encoding
encCBOR :: ApplyTxError BabbageEra -> Encoding
EncCBOR, Typeable (ApplyTxError BabbageEra)
Typeable (ApplyTxError BabbageEra) =>
(forall s. Decoder s (ApplyTxError BabbageEra))
-> (forall s. Proxy (ApplyTxError BabbageEra) -> Decoder s ())
-> (Proxy (ApplyTxError BabbageEra) -> Text)
-> DecCBOR (ApplyTxError BabbageEra)
Proxy (ApplyTxError BabbageEra) -> Text
forall s. Decoder s (ApplyTxError BabbageEra)
forall a.
Typeable a =>
(forall s. Decoder s a)
-> (forall s. Proxy a -> Decoder s ())
-> (Proxy a -> Text)
-> DecCBOR a
forall s. Proxy (ApplyTxError BabbageEra) -> Decoder s ()
$cdecCBOR :: forall s. Decoder s (ApplyTxError BabbageEra)
decCBOR :: forall s. Decoder s (ApplyTxError BabbageEra)
$cdropCBOR :: forall s. Proxy (ApplyTxError BabbageEra) -> Decoder s ()
dropCBOR :: forall s. Proxy (ApplyTxError BabbageEra) -> Decoder s ()
$clabel :: Proxy (ApplyTxError BabbageEra) -> Text
label :: Proxy (ApplyTxError BabbageEra) -> Text
DecCBOR, NonEmpty (ApplyTxError BabbageEra) -> ApplyTxError BabbageEra
ApplyTxError BabbageEra
-> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
(ApplyTxError BabbageEra
 -> ApplyTxError BabbageEra -> ApplyTxError BabbageEra)
-> (NonEmpty (ApplyTxError BabbageEra) -> ApplyTxError BabbageEra)
-> (forall b.
    Integral b =>
    b -> ApplyTxError BabbageEra -> ApplyTxError BabbageEra)
-> Semigroup (ApplyTxError BabbageEra)
forall b.
Integral b =>
b -> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: ApplyTxError BabbageEra
-> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
<> :: ApplyTxError BabbageEra
-> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
$csconcat :: NonEmpty (ApplyTxError BabbageEra) -> ApplyTxError BabbageEra
sconcat :: NonEmpty (ApplyTxError BabbageEra) -> ApplyTxError BabbageEra
$cstimes :: forall b.
Integral b =>
b -> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
stimes :: forall b.
Integral b =>
b -> ApplyTxError BabbageEra -> ApplyTxError BabbageEra
Semigroup)
  applyTxValidation :: ValidationPolicy
-> Globals
-> MempoolEnv BabbageEra
-> MempoolState BabbageEra
-> Tx TopTx BabbageEra
-> Either
     (ApplyTxError BabbageEra)
     (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
applyTxValidation ValidationPolicy
validationPolicy Globals
globals MempoolEnv BabbageEra
env MempoolState BabbageEra
state Tx TopTx BabbageEra
tx =
    (NonEmpty (ShelleyLedgerPredFailure BabbageEra)
 -> ApplyTxError BabbageEra)
-> Either
     (NonEmpty (ShelleyLedgerPredFailure BabbageEra))
     (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
-> Either
     (ApplyTxError BabbageEra)
     (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
forall a b c. (a -> b) -> Either a c -> Either b c
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first NonEmpty (ShelleyLedgerPredFailure BabbageEra)
-> ApplyTxError BabbageEra
BabbageApplyTxError (Either
   (NonEmpty (ShelleyLedgerPredFailure BabbageEra))
   (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
 -> Either
      (ApplyTxError BabbageEra)
      (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra)))
-> Either
     (NonEmpty (ShelleyLedgerPredFailure BabbageEra))
     (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
-> Either
     (ApplyTxError BabbageEra)
     (MempoolState BabbageEra, Validated (Tx TopTx BabbageEra))
forall a b. (a -> b) -> a -> b
$
      forall (rule :: Symbol) era.
(STS (EraRule rule era), BaseM (EraRule rule era) ~ ShelleyBase,
 Environment (EraRule rule era) ~ LedgerEnv era,
 State (EraRule rule era) ~ MempoolState era,
 Signal (EraRule rule era) ~ Tx TopTx era) =>
ValidationPolicy
-> Globals
-> LedgerEnv era
-> MempoolState era
-> Tx TopTx era
-> Either
     (NonEmpty (PredicateFailure (EraRule rule era)))
     (MempoolState era, Validated (Tx TopTx era))
ruleApplyTxValidation @"LEDGER" ValidationPolicy
validationPolicy Globals
globals MempoolEnv BabbageEra
env MempoolState BabbageEra
state Tx TopTx BabbageEra
tx

instance ApplyBlock BabbageEra