{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.TxWits () where

import Cardano.Ledger.Alonzo.TxWits (
  addrAlonzoTxWitsL,
  bootAddrAlonzoTxWitsL,
  datsAlonzoTxWitsL,
  rdmrsAlonzoTxWitsL,
  scriptAlonzoTxWitsL,
  upgradeRedeemers,
  upgradeTxDats,
 )
import Cardano.Ledger.Conway.Core (AlonzoEraTxWits (..), EraScript (..), EraTxWits (..))
import Cardano.Ledger.Conway.TxWits (AlonzoTxWits (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Scripts ()

instance EraTxWits DijkstraEra where
  type TxWits DijkstraEra = AlonzoTxWits DijkstraEra

  mkBasicTxWits :: TxWits DijkstraEra
mkBasicTxWits = TxWits DijkstraEra
AlonzoTxWits DijkstraEra
forall a. Monoid a => a
mempty

  addrTxWitsL :: Lens' (TxWits DijkstraEra) (Set (WitVKey 'Witness))
addrTxWitsL = (Set (WitVKey 'Witness) -> f (Set (WitVKey 'Witness)))
-> TxWits DijkstraEra -> f (TxWits DijkstraEra)
(Set (WitVKey 'Witness) -> f (Set (WitVKey 'Witness)))
-> AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens' (AlonzoTxWits era) (Set (WitVKey 'Witness))
Lens' (AlonzoTxWits DijkstraEra) (Set (WitVKey 'Witness))
addrAlonzoTxWitsL
  {-# INLINE addrTxWitsL #-}

  bootAddrTxWitsL :: Lens' (TxWits DijkstraEra) (Set BootstrapWitness)
bootAddrTxWitsL = (Set BootstrapWitness -> f (Set BootstrapWitness))
-> TxWits DijkstraEra -> f (TxWits DijkstraEra)
(Set BootstrapWitness -> f (Set BootstrapWitness))
-> AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens' (AlonzoTxWits era) (Set BootstrapWitness)
Lens' (AlonzoTxWits DijkstraEra) (Set BootstrapWitness)
bootAddrAlonzoTxWitsL
  {-# INLINE bootAddrTxWitsL #-}

  scriptTxWitsL :: Lens' (TxWits DijkstraEra) (Map ScriptHash (Script DijkstraEra))
scriptTxWitsL = (Map ScriptHash (Script DijkstraEra)
 -> f (Map ScriptHash (Script DijkstraEra)))
-> TxWits DijkstraEra -> f (TxWits DijkstraEra)
(Map ScriptHash (Script DijkstraEra)
 -> f (Map ScriptHash (Script DijkstraEra)))
-> AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens' (AlonzoTxWits era) (Map ScriptHash (Script era))
Lens'
  (AlonzoTxWits DijkstraEra) (Map ScriptHash (Script DijkstraEra))
scriptAlonzoTxWitsL
  {-# INLINE scriptTxWitsL #-}

  upgradeTxWits :: EraTxWits (PreviousEra DijkstraEra) =>
TxWits (PreviousEra DijkstraEra) -> TxWits DijkstraEra
upgradeTxWits TxWits (PreviousEra DijkstraEra)
atw =
    AlonzoTxWits
      { txwitsVKey :: Set (WitVKey 'Witness)
txwitsVKey = AlonzoTxWits ConwayEra -> Set (WitVKey 'Witness)
forall era.
AlonzoEraScript era =>
AlonzoTxWits era -> Set (WitVKey 'Witness)
txwitsVKey TxWits (PreviousEra DijkstraEra)
AlonzoTxWits ConwayEra
atw
      , txwitsBoot :: Set BootstrapWitness
txwitsBoot = AlonzoTxWits ConwayEra -> Set BootstrapWitness
forall era.
AlonzoEraScript era =>
AlonzoTxWits era -> Set BootstrapWitness
txwitsBoot TxWits (PreviousEra DijkstraEra)
AlonzoTxWits ConwayEra
atw
      , txscripts :: Map ScriptHash (Script DijkstraEra)
txscripts = Script (PreviousEra DijkstraEra) -> Script DijkstraEra
forall era.
(EraScript era, EraScript (PreviousEra era)) =>
Script (PreviousEra era) -> Script era
upgradeScript (Script (PreviousEra DijkstraEra) -> Script DijkstraEra)
-> Map ScriptHash (Script (PreviousEra DijkstraEra))
-> Map ScriptHash (Script DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> AlonzoTxWits (PreviousEra DijkstraEra)
-> Map ScriptHash (Script (PreviousEra DijkstraEra))
forall era.
AlonzoEraScript era =>
AlonzoTxWits era -> Map ScriptHash (Script era)
txscripts TxWits (PreviousEra DijkstraEra)
AlonzoTxWits (PreviousEra DijkstraEra)
atw
      , txdats :: TxDats DijkstraEra
txdats = TxDats ConwayEra -> TxDats DijkstraEra
forall era1 era2.
(Era era1, Era era2) =>
TxDats era1 -> TxDats era2
upgradeTxDats (AlonzoTxWits ConwayEra -> TxDats ConwayEra
forall era. AlonzoEraScript era => AlonzoTxWits era -> TxDats era
txdats TxWits (PreviousEra DijkstraEra)
AlonzoTxWits ConwayEra
atw)
      , txrdmrs :: Redeemers DijkstraEra
txrdmrs = Redeemers (PreviousEra DijkstraEra) -> Redeemers DijkstraEra
forall era.
(AlonzoEraScript (PreviousEra era), AlonzoEraScript era) =>
Redeemers (PreviousEra era) -> Redeemers era
upgradeRedeemers (AlonzoTxWits ConwayEra -> Redeemers ConwayEra
forall era.
AlonzoEraScript era =>
AlonzoTxWits era -> Redeemers era
txrdmrs TxWits (PreviousEra DijkstraEra)
AlonzoTxWits ConwayEra
atw)
      }

instance AlonzoEraTxWits DijkstraEra where
  datsTxWitsL :: Lens' (TxWits DijkstraEra) (TxDats DijkstraEra)
datsTxWitsL = (TxDats DijkstraEra -> f (TxDats DijkstraEra))
-> TxWits DijkstraEra -> f (TxWits DijkstraEra)
(TxDats DijkstraEra -> f (TxDats DijkstraEra))
-> AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens' (AlonzoTxWits era) (TxDats era)
Lens' (AlonzoTxWits DijkstraEra) (TxDats DijkstraEra)
datsAlonzoTxWitsL
  {-# INLINE datsTxWitsL #-}

  rdmrsTxWitsL :: Lens' (TxWits DijkstraEra) (Redeemers DijkstraEra)
rdmrsTxWitsL = (Redeemers DijkstraEra -> f (Redeemers DijkstraEra))
-> TxWits DijkstraEra -> f (TxWits DijkstraEra)
(Redeemers DijkstraEra -> f (Redeemers DijkstraEra))
-> AlonzoTxWits DijkstraEra -> f (AlonzoTxWits DijkstraEra)
forall era.
AlonzoEraScript era =>
Lens' (AlonzoTxWits era) (Redeemers era)
Lens' (AlonzoTxWits DijkstraEra) (Redeemers DijkstraEra)
rdmrsAlonzoTxWitsL
  {-# INLINE rdmrsTxWitsL #-}