{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}

module Test.Cardano.Ledger.Api.Examples.Consensus.Dijkstra (
  ledgerExamplesDijkstra,
  collateralOutput,
  exampleTxBodyDijkstra,
  datumExample,
  redeemerExample,
  exampleTx,
  exampleTransactionInBlock,
  exampleDijkstraNewEpochState,
  exampleDijkstraGenesis,
) where

import Cardano.Ledger.Alonzo.Scripts (AlonzoScript (..), ExUnits (..))
import Cardano.Ledger.Alonzo.TxAuxData (mkAlonzoTxAuxData)
import Cardano.Ledger.Alonzo.TxWits (Redeemers (..), TxDats (..))
import Cardano.Ledger.Babbage.TxBody (BabbageTxOut (..))
import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Binary (mkSized)
import Cardano.Ledger.Coin (Coin (..))
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Governance (VotingProcedures (..))
import Cardano.Ledger.Conway.Rules (ConwayDELEG, ConwayDelegPredFailure (..), ConwayLEDGER)
import Cardano.Ledger.Conway.Scripts (ConwayPlutusPurpose (..))
import Cardano.Ledger.Conway.Tx (AlonzoTx (..))
import Cardano.Ledger.Conway.TxWits (AlonzoTxWits (..))
import Cardano.Ledger.Credential (Credential (KeyHashObj, ScriptHashObj))
import Cardano.Ledger.Dijkstra (DijkstraEra)
import Cardano.Ledger.Dijkstra.Tx (Tx (..))
import Cardano.Ledger.Dijkstra.TxBody (TxBody (..))
import Cardano.Ledger.Keys (asWitness)
import Cardano.Ledger.Mary.Value (MaryValue (..))
import Cardano.Ledger.Plutus.Data (
  Data (..),
  Datum (..),
  dataToBinaryData,
  hashData,
 )
import Cardano.Ledger.Plutus.Language (Language (..))
import Cardano.Ledger.Shelley.API (
  ApplyTxError (..),
  NewEpochState (..),
  ProposedPPUpdates (..),
  RewardAccount (..),
  TxId (..),
 )
import Cardano.Ledger.Shelley.Scripts (
  pattern RequireAllOf,
 )
import Cardano.Ledger.Shelley.Tx (ShelleyTx (..))
import Cardano.Ledger.TxIn (mkTxInPartial)
import Control.State.Transition.Extended (Embed (..))
import Data.Default (Default (def))
import qualified Data.Map.Strict as Map
import qualified Data.Sequence.Strict as StrictSeq
import qualified Data.Set as Set
import Lens.Micro
import qualified PlutusLedgerApi.Common as P
import Test.Cardano.Ledger.Alonzo.Arbitrary (alwaysFails, alwaysSucceeds)
import qualified Test.Cardano.Ledger.Api.Examples.Consensus.Conway as SLE
import qualified Test.Cardano.Ledger.Api.Examples.Consensus.Mary as MarySLE
import qualified Test.Cardano.Ledger.Api.Examples.Consensus.Shelley as SLE
import Test.Cardano.Ledger.Core.KeyPair (mkAddr, mkWitnessesVKey)
import Test.Cardano.Ledger.Core.Utils (mkDummySafeHash)
import Test.Cardano.Ledger.Dijkstra.ImpTest (exampleDijkstraGenesis)

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

ledgerExamplesDijkstra ::
  SLE.ShelleyLedgerExamples DijkstraEra
ledgerExamplesDijkstra :: ShelleyLedgerExamples DijkstraEra
ledgerExamplesDijkstra =
  SLE.ShelleyLedgerExamples
    { sleBlock :: Block (BHeader StandardCrypto) DijkstraEra
SLE.sleBlock = Tx DijkstraEra -> Block (BHeader StandardCrypto) DijkstraEra
forall era.
EraBlockBody era =>
Tx era -> Block (BHeader StandardCrypto) era
SLE.exampleShelleyLedgerBlock (Tx DijkstraEra -> Block (BHeader StandardCrypto) DijkstraEra)
-> Tx DijkstraEra -> Block (BHeader StandardCrypto) DijkstraEra
forall a b. (a -> b) -> a -> b
$ AlonzoTx DijkstraEra -> Tx DijkstraEra
MkDijkstraTx AlonzoTx DijkstraEra
exampleTransactionInBlock
    , sleHashHeader :: HashHeader
SLE.sleHashHeader = HashHeader
SLE.exampleHashHeader
    , sleTx :: Tx DijkstraEra
SLE.sleTx = AlonzoTx DijkstraEra -> Tx DijkstraEra
MkDijkstraTx AlonzoTx DijkstraEra
exampleTransactionInBlock
    , sleApplyTxError :: ApplyTxError DijkstraEra
SLE.sleApplyTxError =
        NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra))
-> ApplyTxError DijkstraEra
forall era.
NonEmpty (PredicateFailure (EraRule "LEDGER" era))
-> ApplyTxError era
ApplyTxError (NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra))
 -> ApplyTxError DijkstraEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra))
-> ApplyTxError DijkstraEra
forall a b. (a -> b) -> a -> b
$
          PredicateFailure (EraRule "LEDGER" DijkstraEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra))
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PredicateFailure (EraRule "LEDGER" DijkstraEra)
 -> NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra)))
-> PredicateFailure (EraRule "LEDGER" DijkstraEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra))
forall a b. (a -> b) -> a -> b
$
            forall sub super.
Embed sub super =>
PredicateFailure sub -> PredicateFailure super
wrapFailed @(ConwayDELEG DijkstraEra) @(ConwayLEDGER DijkstraEra) (PredicateFailure (ConwayDELEG DijkstraEra)
 -> PredicateFailure (ConwayLEDGER DijkstraEra))
-> PredicateFailure (ConwayDELEG DijkstraEra)
-> PredicateFailure (ConwayLEDGER DijkstraEra)
forall a b. (a -> b) -> a -> b
$
              forall era. KeyHash 'StakePool -> ConwayDelegPredFailure era
DelegateeStakePoolNotRegisteredDELEG @DijkstraEra (Int -> KeyHash 'StakePool
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
1)
    , sleRewardsCredentials :: Set (Either Coin (Credential 'Staking))
SLE.sleRewardsCredentials =
        [Either Coin (Credential 'Staking)]
-> Set (Either Coin (Credential 'Staking))
forall a. Ord a => [a] -> Set a
Set.fromList
          [ Coin -> Either Coin (Credential 'Staking)
forall a b. a -> Either a b
Left (Integer -> Coin
Coin Integer
100)
          , Credential 'Staking -> Either Coin (Credential 'Staking)
forall a b. b -> Either a b
Right (ScriptHash -> Credential 'Staking
forall (kr :: KeyRole). ScriptHash -> Credential kr
ScriptHashObj (Int -> ScriptHash
SLE.mkScriptHash Int
1))
          , Credential 'Staking -> Either Coin (Credential 'Staking)
forall a b. b -> Either a b
Right (KeyHash 'Staking -> Credential 'Staking
forall (kr :: KeyRole). KeyHash kr -> Credential kr
KeyHashObj (Int -> KeyHash 'Staking
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
2))
          ]
    , sleResultExamples :: ShelleyResultExamples DijkstraEra
SLE.sleResultExamples = ShelleyResultExamples DijkstraEra
resultExamples
    , sleNewEpochState :: NewEpochState DijkstraEra
SLE.sleNewEpochState = NewEpochState DijkstraEra
exampleDijkstraNewEpochState
    , sleChainDepState :: ChainDepState
SLE.sleChainDepState = Word64 -> ChainDepState
SLE.exampleLedgerChainDepState Word64
1
    , sleTranslationContext :: TranslationContext DijkstraEra
SLE.sleTranslationContext = TranslationContext DijkstraEra
DijkstraGenesis
exampleDijkstraGenesis
    }
  where
    resultExamples :: ShelleyResultExamples DijkstraEra
resultExamples =
      SLE.ShelleyResultExamples
        { srePParams :: PParams DijkstraEra
SLE.srePParams = PParams DijkstraEra
forall a. Default a => a
def
        , sreProposedPPUpdates :: ProposedPPUpdates DijkstraEra
SLE.sreProposedPPUpdates = ProposedPPUpdates DijkstraEra
examplePPPU
        , srePoolDistr :: PoolDistr
SLE.srePoolDistr = PoolDistr
SLE.examplePoolDistr
        , sreNonMyopicRewards :: Map
  (Either Coin (Credential 'Staking)) (Map (KeyHash 'StakePool) Coin)
SLE.sreNonMyopicRewards = Map
  (Either Coin (Credential 'Staking)) (Map (KeyHash 'StakePool) Coin)
SLE.exampleNonMyopicRewards
        , sreShelleyGenesis :: ShelleyGenesis
SLE.sreShelleyGenesis = ShelleyGenesis
SLE.testShelleyGenesis
        }
    examplePPPU :: ProposedPPUpdates DijkstraEra
examplePPPU =
      Map (KeyHash 'Genesis) (PParamsUpdate DijkstraEra)
-> ProposedPPUpdates DijkstraEra
forall era.
Map (KeyHash 'Genesis) (PParamsUpdate era) -> ProposedPPUpdates era
ProposedPPUpdates (Map (KeyHash 'Genesis) (PParamsUpdate DijkstraEra)
 -> ProposedPPUpdates DijkstraEra)
-> Map (KeyHash 'Genesis) (PParamsUpdate DijkstraEra)
-> ProposedPPUpdates DijkstraEra
forall a b. (a -> b) -> a -> b
$
        KeyHash 'Genesis
-> PParamsUpdate DijkstraEra
-> Map (KeyHash 'Genesis) (PParamsUpdate DijkstraEra)
forall k a. k -> a -> Map k a
Map.singleton
          (Int -> KeyHash 'Genesis
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
0)
          (PParamsUpdate DijkstraEra
forall era. EraPParams era => PParamsUpdate era
emptyPParamsUpdate PParamsUpdate DijkstraEra
-> (PParamsUpdate DijkstraEra -> PParamsUpdate DijkstraEra)
-> PParamsUpdate DijkstraEra
forall a b. a -> (a -> b) -> b
& (StrictMaybe Natural -> Identity (StrictMaybe Natural))
-> PParamsUpdate DijkstraEra
-> Identity (PParamsUpdate DijkstraEra)
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Natural)
Lens' (PParamsUpdate DijkstraEra) (StrictMaybe Natural)
ppuCollateralPercentageL ((StrictMaybe Natural -> Identity (StrictMaybe Natural))
 -> PParamsUpdate DijkstraEra
 -> Identity (PParamsUpdate DijkstraEra))
-> StrictMaybe Natural
-> PParamsUpdate DijkstraEra
-> PParamsUpdate DijkstraEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Natural -> StrictMaybe Natural
forall a. a -> StrictMaybe a
SJust Natural
150)

collateralOutput :: BabbageTxOut DijkstraEra
collateralOutput :: BabbageTxOut DijkstraEra
collateralOutput =
  Addr
-> Value DijkstraEra
-> Datum DijkstraEra
-> StrictMaybe (Script DijkstraEra)
-> BabbageTxOut DijkstraEra
forall era.
(Era era, Val (Value era), HasCallStack) =>
Addr
-> Value era
-> Datum era
-> StrictMaybe (Script era)
-> BabbageTxOut era
BabbageTxOut
    (KeyPair 'Payment -> KeyPair 'Staking -> Addr
forall p s.
(MakeCredential p 'Payment, MakeStakeReference s) =>
p -> s -> Addr
mkAddr KeyPair 'Payment
SLE.examplePayKey KeyPair 'Staking
SLE.exampleStakeKey)
    (Coin -> MultiAsset -> MaryValue
MaryValue (Integer -> Coin
Coin Integer
8675309) MultiAsset
forall a. Monoid a => a
mempty)
    Datum DijkstraEra
forall era. Datum era
NoDatum
    StrictMaybe (Script DijkstraEra)
StrictMaybe (AlonzoScript DijkstraEra)
forall a. StrictMaybe a
SNothing

exampleTxBodyDijkstra :: TxBody DijkstraEra
exampleTxBodyDijkstra :: TxBody DijkstraEra
exampleTxBodyDijkstra =
  Set TxIn
-> Set TxIn
-> Set TxIn
-> StrictSeq (Sized (TxOut DijkstraEra))
-> StrictMaybe (Sized (TxOut DijkstraEra))
-> StrictMaybe Coin
-> OSet (TxCert DijkstraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> VotingProcedures DijkstraEra
-> OSet (ProposalProcedure DijkstraEra)
-> StrictMaybe Coin
-> Coin
-> TxBody DijkstraEra
DijkstraTxBody
    ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial (SafeHash EraIndependentTxBody -> TxId
TxId (Int -> SafeHash EraIndependentTxBody
forall a. Int -> SafeHash a
mkDummySafeHash Int
1)) Integer
0]) -- spending inputs
    ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial (SafeHash EraIndependentTxBody -> TxId
TxId (Int -> SafeHash EraIndependentTxBody
forall a. Int -> SafeHash a
mkDummySafeHash Int
2)) Integer
1]) -- collateral inputs
    ([TxIn] -> Set TxIn
forall a. Ord a => [a] -> Set a
Set.fromList [HasCallStack => TxId -> Integer -> TxIn
TxId -> Integer -> TxIn
mkTxInPartial (SafeHash EraIndependentTxBody -> TxId
TxId (Int -> SafeHash EraIndependentTxBody
forall a. Int -> SafeHash a
mkDummySafeHash Int
1)) Integer
3]) -- reference inputs
    ( [Sized (BabbageTxOut DijkstraEra)]
-> StrictSeq (Sized (BabbageTxOut DijkstraEra))
forall a. [a] -> StrictSeq a
StrictSeq.fromList
        [ Version
-> BabbageTxOut DijkstraEra -> Sized (BabbageTxOut DijkstraEra)
forall a. EncCBOR a => Version -> a -> Sized a
mkSized (forall era. Era era => Version
eraProtVerHigh @DijkstraEra) (BabbageTxOut DijkstraEra -> Sized (BabbageTxOut DijkstraEra))
-> BabbageTxOut DijkstraEra -> Sized (BabbageTxOut DijkstraEra)
forall a b. (a -> b) -> a -> b
$
            Addr
-> Value DijkstraEra
-> Datum DijkstraEra
-> StrictMaybe (Script DijkstraEra)
-> BabbageTxOut DijkstraEra
forall era.
(Era era, Val (Value era), HasCallStack) =>
Addr
-> Value era
-> Datum era
-> StrictMaybe (Script era)
-> BabbageTxOut era
BabbageTxOut
              (KeyPair 'Payment -> KeyPair 'Staking -> Addr
forall p s.
(MakeCredential p 'Payment, MakeStakeReference s) =>
p -> s -> Addr
mkAddr KeyPair 'Payment
SLE.examplePayKey KeyPair 'Staking
SLE.exampleStakeKey)
              (Int -> MaryValue
MarySLE.exampleMultiAssetValue Int
2)
              (BinaryData DijkstraEra -> Datum DijkstraEra
forall era. BinaryData era -> Datum era
Datum (BinaryData DijkstraEra -> Datum DijkstraEra)
-> BinaryData DijkstraEra -> Datum DijkstraEra
forall a b. (a -> b) -> a -> b
$ Data DijkstraEra -> BinaryData DijkstraEra
forall era. Data era -> BinaryData era
dataToBinaryData Data DijkstraEra
datumExample) -- inline datum
              (Script DijkstraEra -> StrictMaybe (Script DijkstraEra)
forall a. a -> StrictMaybe a
SJust (Script DijkstraEra -> StrictMaybe (Script DijkstraEra))
-> Script DijkstraEra -> StrictMaybe (Script DijkstraEra)
forall a b. (a -> b) -> a -> b
$ forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysSucceeds @'PlutusV2 Natural
3) -- reference script
        ]
    )
    (Sized (TxOut DijkstraEra)
-> StrictMaybe (Sized (TxOut DijkstraEra))
forall a. a -> StrictMaybe a
SJust (Sized (TxOut DijkstraEra)
 -> StrictMaybe (Sized (TxOut DijkstraEra)))
-> Sized (TxOut DijkstraEra)
-> StrictMaybe (Sized (TxOut DijkstraEra))
forall a b. (a -> b) -> a -> b
$ Version
-> BabbageTxOut DijkstraEra -> Sized (BabbageTxOut DijkstraEra)
forall a. EncCBOR a => Version -> a -> Sized a
mkSized (forall era. Era era => Version
eraProtVerHigh @DijkstraEra) BabbageTxOut DijkstraEra
collateralOutput) -- collateral return
    (Coin -> StrictMaybe Coin
forall a. a -> StrictMaybe a
SJust (Coin -> StrictMaybe Coin) -> Coin -> StrictMaybe Coin
forall a b. (a -> b) -> a -> b
$ Integer -> Coin
Coin Integer
8675309) -- collateral tot
    OSet (TxCert DijkstraEra)
OSet (ConwayTxCert DijkstraEra)
forall era. OSet (ConwayTxCert era)
SLE.exampleConwayCerts -- txcerts
    ( Map RewardAccount Coin -> Withdrawals
Withdrawals (Map RewardAccount Coin -> Withdrawals)
-> Map RewardAccount Coin -> Withdrawals
forall a b. (a -> b) -> a -> b
$
        RewardAccount -> Coin -> Map RewardAccount Coin
forall k a. k -> a -> Map k a
Map.singleton
          (Network -> Credential 'Staking -> RewardAccount
RewardAccount Network
Testnet (KeyPair 'Staking -> Credential 'Staking
forall (r :: KeyRole). KeyPair r -> Credential r
SLE.keyToCredential KeyPair 'Staking
SLE.exampleStakeKey))
          (Integer -> Coin
Coin Integer
100) -- txwdrls
    )
    (Integer -> Coin
Coin Integer
999) -- txfee
    (StrictMaybe SlotNo -> StrictMaybe SlotNo -> ValidityInterval
ValidityInterval (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (Word64 -> SlotNo
SlotNo Word64
2)) (SlotNo -> StrictMaybe SlotNo
forall a. a -> StrictMaybe a
SJust (Word64 -> SlotNo
SlotNo Word64
4))) -- txvldt
    (KeyHash 'Witness -> Set (KeyHash 'Witness)
forall a. a -> Set a
Set.singleton (KeyHash 'Witness -> Set (KeyHash 'Witness))
-> KeyHash 'Witness -> Set (KeyHash 'Witness)
forall a b. (a -> b) -> a -> b
$ Int -> KeyHash 'Witness
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
212) -- reqSignerHashes
    MultiAsset
exampleMultiAsset -- mint
    (ScriptIntegrityHash -> StrictMaybe ScriptIntegrityHash
forall a. a -> StrictMaybe a
SJust (ScriptIntegrityHash -> StrictMaybe ScriptIntegrityHash)
-> ScriptIntegrityHash -> StrictMaybe ScriptIntegrityHash
forall a b. (a -> b) -> a -> b
$ Int -> ScriptIntegrityHash
forall a. Int -> SafeHash a
mkDummySafeHash Int
42) -- scriptIntegrityHash
    (TxAuxDataHash -> StrictMaybe TxAuxDataHash
forall a. a -> StrictMaybe a
SJust (TxAuxDataHash -> StrictMaybe TxAuxDataHash)
-> (SafeHash EraIndependentTxAuxData -> TxAuxDataHash)
-> SafeHash EraIndependentTxAuxData
-> StrictMaybe TxAuxDataHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SafeHash EraIndependentTxAuxData -> TxAuxDataHash
TxAuxDataHash (SafeHash EraIndependentTxAuxData -> StrictMaybe TxAuxDataHash)
-> SafeHash EraIndependentTxAuxData -> StrictMaybe TxAuxDataHash
forall a b. (a -> b) -> a -> b
$ Int -> SafeHash EraIndependentTxAuxData
forall a. Int -> SafeHash a
mkDummySafeHash Int
42) -- adHash
    (Network -> StrictMaybe Network
forall a. a -> StrictMaybe a
SJust Network
Mainnet) -- txnetworkid
    (Map Voter (Map GovActionId (VotingProcedure DijkstraEra))
-> VotingProcedures DijkstraEra
forall era.
Map Voter (Map GovActionId (VotingProcedure era))
-> VotingProcedures era
VotingProcedures Map Voter (Map GovActionId (VotingProcedure DijkstraEra))
forall a. Monoid a => a
mempty)
    OSet (ProposalProcedure DijkstraEra)
forall a. Monoid a => a
mempty
    (Coin -> StrictMaybe Coin
forall a. a -> StrictMaybe a
SJust (Coin -> StrictMaybe Coin) -> Coin -> StrictMaybe Coin
forall a b. (a -> b) -> a -> b
$ Integer -> Coin
Coin Integer
867530900000) -- current treasury value
    Coin
forall a. Monoid a => a
mempty
  where
    MaryValue Coin
_ MultiAsset
exampleMultiAsset = Int -> MaryValue
MarySLE.exampleMultiAssetValue Int
3

datumExample :: Data DijkstraEra
datumExample :: Data DijkstraEra
datumExample = Data -> Data DijkstraEra
forall era. Era era => Data -> Data era
Data (Integer -> Data
P.I Integer
191)

redeemerExample :: Data DijkstraEra
redeemerExample :: Data DijkstraEra
redeemerExample = Data -> Data DijkstraEra
forall era. Era era => Data -> Data era
Data (Integer -> Data
P.I Integer
919)

exampleTx :: ShelleyTx DijkstraEra
exampleTx :: ShelleyTx DijkstraEra
exampleTx =
  TxBody DijkstraEra
-> TxWits DijkstraEra
-> StrictMaybe (TxAuxData DijkstraEra)
-> ShelleyTx DijkstraEra
forall era.
TxBody era
-> TxWits era -> StrictMaybe (TxAuxData era) -> ShelleyTx era
ShelleyTx
    TxBody DijkstraEra
exampleTxBodyDijkstra
    ( Set (WitVKey 'Witness)
-> Set BootstrapWitness
-> Map ScriptHash (Script DijkstraEra)
-> TxDats DijkstraEra
-> Redeemers DijkstraEra
-> AlonzoTxWits DijkstraEra
forall era.
AlonzoEraScript era =>
Set (WitVKey 'Witness)
-> Set BootstrapWitness
-> Map ScriptHash (Script era)
-> TxDats era
-> Redeemers era
-> AlonzoTxWits era
AlonzoTxWits
        (SafeHash EraIndependentTxBody
-> [KeyPair 'Witness] -> Set (WitVKey 'Witness)
forall (kr :: KeyRole).
SafeHash EraIndependentTxBody
-> [KeyPair kr] -> Set (WitVKey 'Witness)
mkWitnessesVKey (TxBody DijkstraEra -> SafeHash EraIndependentTxBody
forall x i. HashAnnotated x i => x -> SafeHash i
hashAnnotated TxBody DijkstraEra
exampleTxBodyDijkstra) [KeyPair 'Payment -> KeyPair 'Witness
forall (a :: KeyRole -> *) (r :: KeyRole).
HasKeyRole a =>
a r -> a 'Witness
asWitness KeyPair 'Payment
SLE.examplePayKey]) -- vkey
        Set BootstrapWitness
forall a. Monoid a => a
mempty -- bootstrap
        ( ScriptHash
-> AlonzoScript DijkstraEra
-> Map ScriptHash (AlonzoScript DijkstraEra)
forall k a. k -> a -> Map k a
Map.singleton
            (forall era. EraScript era => Script era -> ScriptHash
hashScript @DijkstraEra (Script DijkstraEra -> ScriptHash)
-> Script DijkstraEra -> ScriptHash
forall a b. (a -> b) -> a -> b
$ forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysSucceeds @'PlutusV1 Natural
3)
            (forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysSucceeds @'PlutusV1 Natural
3) -- txscripts
        )
        (Map DataHash (Data DijkstraEra) -> TxDats DijkstraEra
forall era. Era era => Map DataHash (Data era) -> TxDats era
TxDats (Map DataHash (Data DijkstraEra) -> TxDats DijkstraEra)
-> Map DataHash (Data DijkstraEra) -> TxDats DijkstraEra
forall a b. (a -> b) -> a -> b
$ DataHash -> Data DijkstraEra -> Map DataHash (Data DijkstraEra)
forall k a. k -> a -> Map k a
Map.singleton (Data DijkstraEra -> DataHash
forall era. Data era -> DataHash
hashData Data DijkstraEra
datumExample) Data DijkstraEra
datumExample)
        ( Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)
-> Redeemers DijkstraEra
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Redeemers (Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)
 -> Redeemers DijkstraEra)
-> Map (PlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)
-> Redeemers DijkstraEra
forall a b. (a -> b) -> a -> b
$
            ConwayPlutusPurpose AsIx DijkstraEra
-> (Data DijkstraEra, ExUnits)
-> Map
     (ConwayPlutusPurpose AsIx DijkstraEra) (Data DijkstraEra, ExUnits)
forall k a. k -> a -> Map k a
Map.singleton (AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> ConwayPlutusPurpose f era
ConwaySpending (AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx DijkstraEra)
-> AsIx Word32 TxIn -> ConwayPlutusPurpose AsIx DijkstraEra
forall a b. (a -> b) -> a -> b
$ Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
0) (Data DijkstraEra
redeemerExample, Natural -> Natural -> ExUnits
ExUnits Natural
5000 Natural
5000)
        ) -- redeemers
    )
    ( TxAuxData DijkstraEra -> StrictMaybe (TxAuxData DijkstraEra)
forall a. a -> StrictMaybe a
SJust (TxAuxData DijkstraEra -> StrictMaybe (TxAuxData DijkstraEra))
-> TxAuxData DijkstraEra -> StrictMaybe (TxAuxData DijkstraEra)
forall a b. (a -> b) -> a -> b
$
        Map Word64 Metadatum
-> [AlonzoScript DijkstraEra] -> AlonzoTxAuxData DijkstraEra
forall (f :: * -> *) era.
(Foldable f, AlonzoEraScript era) =>
Map Word64 Metadatum -> f (AlonzoScript era) -> AlonzoTxAuxData era
mkAlonzoTxAuxData
          Map Word64 Metadatum
SLE.exampleAuxDataMap -- metadata
          [forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysFails @'PlutusV1 Natural
2, Timelock DijkstraEra -> AlonzoScript DijkstraEra
forall era. Timelock era -> AlonzoScript era
TimelockScript (Timelock DijkstraEra -> AlonzoScript DijkstraEra)
-> Timelock DijkstraEra -> AlonzoScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAllOf StrictSeq (Timelock DijkstraEra)
StrictSeq (NativeScript DijkstraEra)
forall a. Monoid a => a
mempty] -- Scripts
    )

exampleTransactionInBlock :: AlonzoTx DijkstraEra
exampleTransactionInBlock :: AlonzoTx DijkstraEra
exampleTransactionInBlock = TxBody DijkstraEra
-> TxWits DijkstraEra
-> IsValid
-> StrictMaybe (TxAuxData DijkstraEra)
-> AlonzoTx DijkstraEra
forall era.
TxBody era
-> TxWits era
-> IsValid
-> StrictMaybe (TxAuxData era)
-> AlonzoTx era
AlonzoTx TxBody DijkstraEra
b TxWits DijkstraEra
AlonzoTxWits DijkstraEra
w (Bool -> IsValid
IsValid Bool
True) StrictMaybe (TxAuxData DijkstraEra)
StrictMaybe (AlonzoTxAuxData DijkstraEra)
a
  where
    ShelleyTx TxBody DijkstraEra
b TxWits DijkstraEra
w StrictMaybe (TxAuxData DijkstraEra)
a = ShelleyTx DijkstraEra
exampleTx

exampleDijkstraNewEpochState :: NewEpochState DijkstraEra
exampleDijkstraNewEpochState :: NewEpochState DijkstraEra
exampleDijkstraNewEpochState =
  Value DijkstraEra
-> PParams DijkstraEra
-> PParams DijkstraEra
-> NewEpochState DijkstraEra
forall era.
(EraTxOut era, EraGov era, EraStake era, EraCertState era,
 Default (StashedAVVMAddresses era)) =>
Value era -> PParams era -> PParams era -> NewEpochState era
SLE.exampleNewEpochState
    (Int -> MaryValue
MarySLE.exampleMultiAssetValue Int
1)
    PParams DijkstraEra
forall era. EraPParams era => PParams era
emptyPParams
    (PParams DijkstraEra
forall era. EraPParams era => PParams era
emptyPParams PParams DijkstraEra
-> (PParams DijkstraEra -> PParams DijkstraEra)
-> PParams DijkstraEra
forall a b. a -> (a -> b) -> b
& (CoinPerByte -> Identity CoinPerByte)
-> PParams DijkstraEra -> Identity (PParams DijkstraEra)
forall era.
BabbageEraPParams era =>
Lens' (PParams era) CoinPerByte
Lens' (PParams DijkstraEra) CoinPerByte
ppCoinsPerUTxOByteL ((CoinPerByte -> Identity CoinPerByte)
 -> PParams DijkstraEra -> Identity (PParams DijkstraEra))
-> CoinPerByte -> PParams DijkstraEra -> PParams DijkstraEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Coin -> CoinPerByte
CoinPerByte (Integer -> Coin
Coin Integer
1))