{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

module Test.Cardano.Ledger.Alonzo.Examples.Consensus where

import Cardano.Ledger.Alonzo (AlonzoEra)
import Cardano.Ledger.Alonzo.Core
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis (..))
import Cardano.Ledger.Alonzo.Scripts (
  AlonzoPlutusPurpose (..),
  AlonzoScript (..),
  ExUnits (..),
  Prices (..),
 )
import Cardano.Ledger.Alonzo.Tx (AlonzoTx (..), IsValid (..))
import Cardano.Ledger.Alonzo.TxAuxData (mkAlonzoTxAuxData)
import Cardano.Ledger.Alonzo.TxBody (AlonzoTxOut (..), TxBody (..))
import Cardano.Ledger.Alonzo.TxWits (AlonzoTxWits (..), Redeemers (..), TxDats (..))
import Cardano.Ledger.BaseTypes (NonNegativeInterval, StrictMaybe (..), boundRational)
import Cardano.Ledger.Coin (Coin (..))
import Cardano.Ledger.Keys (asWitness)
import Cardano.Ledger.Mary.Value (MaryValue (..))
import Cardano.Ledger.Plutus.CostModels (mkCostModels)
import Cardano.Ledger.Plutus.Data (Data (..), hashData)
import Cardano.Ledger.Plutus.Language (Language (..))
import Cardano.Ledger.Shelley.API (
  ApplyTxError (..),
  Credential (..),
  Network (..),
  NewEpochState (..),
  ProposedPPUpdates (..),
  RewardAccount (..),
  TxId (..),
  Update (..),
 )
import Cardano.Ledger.Shelley.Rules (ShelleyDelegsPredFailure (..), ShelleyLedgerPredFailure (..))
import Cardano.Ledger.Shelley.Scripts
import Cardano.Ledger.Shelley.Tx (ShelleyTx (..))
import Cardano.Ledger.TxIn (mkTxInPartial)
import Cardano.Slotting.Slot (EpochNo (..), SlotNo (..))
import Data.Default (def)
import qualified Data.Map.Strict as Map
import qualified Data.Sequence.Strict as StrictSeq
import qualified Data.Set as Set
import GHC.Stack (HasCallStack)
import Lens.Micro
import qualified PlutusLedgerApi.Common as P
import Test.Cardano.Ledger.Alonzo.Arbitrary (alwaysFails, alwaysSucceeds)
import Test.Cardano.Ledger.Core.KeyPair (mkAddr, mkWitnessesVKey)
import Test.Cardano.Ledger.Core.Utils (mkDummySafeHash)
import qualified Test.Cardano.Ledger.Mary.Examples.Consensus as SLE
import Test.Cardano.Ledger.Plutus (zeroTestingCostModelV1)
import qualified Test.Cardano.Ledger.Shelley.Examples.Consensus as SLE

-- | ShelleyLedgerExamples for Alonzo era
ledgerExamplesAlonzo :: SLE.ShelleyLedgerExamples AlonzoEra
ledgerExamplesAlonzo :: ShelleyLedgerExamples AlonzoEra
ledgerExamplesAlonzo =
  SLE.ShelleyLedgerExamples
    { sleBlock :: Block (BHeader StandardCrypto) AlonzoEra
SLE.sleBlock = Tx AlonzoEra -> Block (BHeader StandardCrypto) AlonzoEra
forall era.
EraSegWits era =>
Tx era -> Block (BHeader StandardCrypto) era
SLE.exampleShelleyLedgerBlock Tx AlonzoEra
AlonzoTx AlonzoEra
exampleTransactionInBlock
    , sleHashHeader :: HashHeader
SLE.sleHashHeader = HashHeader
SLE.exampleHashHeader
    , sleTx :: Tx AlonzoEra
SLE.sleTx = Tx AlonzoEra
AlonzoTx AlonzoEra
exampleTransactionInBlock
    , sleApplyTxError :: ApplyTxError AlonzoEra
SLE.sleApplyTxError =
        NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra))
-> ApplyTxError AlonzoEra
forall era.
NonEmpty (PredicateFailure (EraRule "LEDGER" era))
-> ApplyTxError era
ApplyTxError (NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra))
 -> ApplyTxError AlonzoEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra))
-> ApplyTxError AlonzoEra
forall a b. (a -> b) -> a -> b
$
          PredicateFailure (EraRule "LEDGER" AlonzoEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra))
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PredicateFailure (EraRule "LEDGER" AlonzoEra)
 -> NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra)))
-> PredicateFailure (EraRule "LEDGER" AlonzoEra)
-> NonEmpty (PredicateFailure (EraRule "LEDGER" AlonzoEra))
forall a b. (a -> b) -> a -> b
$
            PredicateFailure (EraRule "DELEGS" AlonzoEra)
-> ShelleyLedgerPredFailure AlonzoEra
forall era.
PredicateFailure (EraRule "DELEGS" era)
-> ShelleyLedgerPredFailure era
DelegsFailure (PredicateFailure (EraRule "DELEGS" AlonzoEra)
 -> ShelleyLedgerPredFailure AlonzoEra)
-> PredicateFailure (EraRule "DELEGS" AlonzoEra)
-> ShelleyLedgerPredFailure AlonzoEra
forall a b. (a -> b) -> a -> b
$
              forall era. KeyHash 'StakePool -> ShelleyDelegsPredFailure era
DelegateeNotRegisteredDELEG @AlonzoEra (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 AlonzoEra
SLE.sleResultExamples = ShelleyResultExamples AlonzoEra
resultExamples
    , sleNewEpochState :: NewEpochState AlonzoEra
SLE.sleNewEpochState = NewEpochState AlonzoEra
exampleAlonzoNewEpochState
    , sleChainDepState :: ChainDepState
SLE.sleChainDepState = Word64 -> ChainDepState
SLE.exampleLedgerChainDepState Word64
1
    , sleTranslationContext :: TranslationContext AlonzoEra
SLE.sleTranslationContext = TranslationContext AlonzoEra
AlonzoGenesis
exampleAlonzoGenesis
    }
  where
    resultExamples :: ShelleyResultExamples AlonzoEra
resultExamples =
      SLE.ShelleyResultExamples
        { srePParams :: PParams AlonzoEra
SLE.srePParams = PParams AlonzoEra
forall a. Default a => a
def
        , sreProposedPPUpdates :: ProposedPPUpdates AlonzoEra
SLE.sreProposedPPUpdates = ProposedPPUpdates AlonzoEra
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 AlonzoEra
examplePPPU =
      Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
-> ProposedPPUpdates AlonzoEra
forall era.
Map (KeyHash 'Genesis) (PParamsUpdate era) -> ProposedPPUpdates era
ProposedPPUpdates (Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
 -> ProposedPPUpdates AlonzoEra)
-> Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
-> ProposedPPUpdates AlonzoEra
forall a b. (a -> b) -> a -> b
$
        KeyHash 'Genesis
-> PParamsUpdate AlonzoEra
-> Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
forall k a. k -> a -> Map k a
Map.singleton
          (Int -> KeyHash 'Genesis
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
0)
          (PParamsUpdate AlonzoEra
forall era. EraPParams era => PParamsUpdate era
emptyPParamsUpdate PParamsUpdate AlonzoEra
-> (PParamsUpdate AlonzoEra -> PParamsUpdate AlonzoEra)
-> PParamsUpdate AlonzoEra
forall a b. a -> (a -> b) -> b
& (StrictMaybe Natural -> Identity (StrictMaybe Natural))
-> PParamsUpdate AlonzoEra -> Identity (PParamsUpdate AlonzoEra)
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Natural)
Lens' (PParamsUpdate AlonzoEra) (StrictMaybe Natural)
ppuCollateralPercentageL ((StrictMaybe Natural -> Identity (StrictMaybe Natural))
 -> PParamsUpdate AlonzoEra -> Identity (PParamsUpdate AlonzoEra))
-> StrictMaybe Natural
-> PParamsUpdate AlonzoEra
-> PParamsUpdate AlonzoEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Natural -> StrictMaybe Natural
forall a. a -> StrictMaybe a
SJust Natural
150)

exampleTxBodyAlonzo :: TxBody AlonzoEra
exampleTxBodyAlonzo :: TxBody AlonzoEra
exampleTxBodyAlonzo =
  Set TxIn
-> Set TxIn
-> StrictSeq (TxOut AlonzoEra)
-> StrictSeq (TxCert AlonzoEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AlonzoEra)
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> TxBody AlonzoEra
AlonzoTxBody
    ([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]) -- 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
    ( [AlonzoTxOut AlonzoEra] -> StrictSeq (AlonzoTxOut AlonzoEra)
forall a. [a] -> StrictSeq a
StrictSeq.fromList
        [ Addr
-> Value AlonzoEra -> StrictMaybe DataHash -> AlonzoTxOut AlonzoEra
forall era.
(Era era, Val (Value era), HasCallStack) =>
Addr -> Value era -> StrictMaybe DataHash -> AlonzoTxOut era
AlonzoTxOut
            (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
SLE.exampleMultiAssetValue Int
2)
            (DataHash -> StrictMaybe DataHash
forall a. a -> StrictMaybe a
SJust (DataHash -> StrictMaybe DataHash)
-> DataHash -> StrictMaybe DataHash
forall a b. (a -> b) -> a -> b
$ Int -> DataHash
forall a. Int -> SafeHash a
mkDummySafeHash Int
1) -- outputs
        ]
    )
    StrictSeq (TxCert AlonzoEra)
forall era.
(ShelleyEraTxCert era, ProtVerAtMost era 8) =>
StrictSeq (TxCert era)
SLE.exampleCerts -- 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
    ( Update AlonzoEra -> StrictMaybe (Update AlonzoEra)
forall a. a -> StrictMaybe a
SJust (Update AlonzoEra -> StrictMaybe (Update AlonzoEra))
-> Update AlonzoEra -> StrictMaybe (Update AlonzoEra)
forall a b. (a -> b) -> a -> b
$
        ProposedPPUpdates AlonzoEra -> EpochNo -> Update AlonzoEra
forall era. ProposedPPUpdates era -> EpochNo -> Update era
Update
          ( Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
-> ProposedPPUpdates AlonzoEra
forall era.
Map (KeyHash 'Genesis) (PParamsUpdate era) -> ProposedPPUpdates era
ProposedPPUpdates (Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
 -> ProposedPPUpdates AlonzoEra)
-> Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
-> ProposedPPUpdates AlonzoEra
forall a b. (a -> b) -> a -> b
$
              KeyHash 'Genesis
-> PParamsUpdate AlonzoEra
-> Map (KeyHash 'Genesis) (PParamsUpdate AlonzoEra)
forall k a. k -> a -> Map k a
Map.singleton
                (Int -> KeyHash 'Genesis
forall (discriminator :: KeyRole). Int -> KeyHash discriminator
SLE.mkKeyHash Int
1)
                (PParamsUpdate AlonzoEra
forall era. EraPParams era => PParamsUpdate era
emptyPParamsUpdate PParamsUpdate AlonzoEra
-> (PParamsUpdate AlonzoEra -> PParamsUpdate AlonzoEra)
-> PParamsUpdate AlonzoEra
forall a b. a -> (a -> b) -> b
& (StrictMaybe Word16 -> Identity (StrictMaybe Word16))
-> PParamsUpdate AlonzoEra -> Identity (PParamsUpdate AlonzoEra)
forall era.
EraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Word16)
Lens' (PParamsUpdate AlonzoEra) (StrictMaybe Word16)
ppuMaxBHSizeL ((StrictMaybe Word16 -> Identity (StrictMaybe Word16))
 -> PParamsUpdate AlonzoEra -> Identity (PParamsUpdate AlonzoEra))
-> StrictMaybe Word16
-> PParamsUpdate AlonzoEra
-> PParamsUpdate AlonzoEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Word16 -> StrictMaybe Word16
forall a. a -> StrictMaybe a
SJust Word16
4000)
          )
          (Word64 -> EpochNo
EpochNo Word64
0)
    ) -- txUpdates
    (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
  where
    MaryValue Coin
_ MultiAsset
exampleMultiAsset = Int -> MaryValue
SLE.exampleMultiAssetValue Int
3

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

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

exampleTx :: ShelleyTx AlonzoEra
exampleTx :: ShelleyTx AlonzoEra
exampleTx =
  TxBody AlonzoEra
-> TxWits AlonzoEra
-> StrictMaybe (TxAuxData AlonzoEra)
-> ShelleyTx AlonzoEra
forall era.
TxBody era
-> TxWits era -> StrictMaybe (TxAuxData era) -> ShelleyTx era
ShelleyTx
    TxBody AlonzoEra
exampleTxBodyAlonzo
    ( Set (WitVKey 'Witness)
-> Set BootstrapWitness
-> Map ScriptHash (Script AlonzoEra)
-> TxDats AlonzoEra
-> Redeemers AlonzoEra
-> AlonzoTxWits AlonzoEra
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 AlonzoEra -> SafeHash EraIndependentTxBody
forall x i. HashAnnotated x i => x -> SafeHash i
hashAnnotated TxBody AlonzoEra
exampleTxBodyAlonzo) [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 AlonzoEra
-> Map ScriptHash (AlonzoScript AlonzoEra)
forall k a. k -> a -> Map k a
Map.singleton
            (forall era. EraScript era => Script era -> ScriptHash
hashScript @AlonzoEra (Script AlonzoEra -> ScriptHash) -> Script AlonzoEra -> 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 AlonzoEra) -> TxDats AlonzoEra
forall era. Era era => Map DataHash (Data era) -> TxDats era
TxDats (Map DataHash (Data AlonzoEra) -> TxDats AlonzoEra)
-> Map DataHash (Data AlonzoEra) -> TxDats AlonzoEra
forall a b. (a -> b) -> a -> b
$ DataHash -> Data AlonzoEra -> Map DataHash (Data AlonzoEra)
forall k a. k -> a -> Map k a
Map.singleton (Data AlonzoEra -> DataHash
forall era. Data era -> DataHash
hashData Data AlonzoEra
datumExample) Data AlonzoEra
datumExample)
        ( Map (PlutusPurpose AsIx AlonzoEra) (Data AlonzoEra, ExUnits)
-> Redeemers AlonzoEra
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Redeemers (Map (PlutusPurpose AsIx AlonzoEra) (Data AlonzoEra, ExUnits)
 -> Redeemers AlonzoEra)
-> Map (PlutusPurpose AsIx AlonzoEra) (Data AlonzoEra, ExUnits)
-> Redeemers AlonzoEra
forall a b. (a -> b) -> a -> b
$
            AlonzoPlutusPurpose AsIx AlonzoEra
-> (Data AlonzoEra, ExUnits)
-> Map
     (AlonzoPlutusPurpose AsIx AlonzoEra) (Data AlonzoEra, ExUnits)
forall k a. k -> a -> Map k a
Map.singleton (AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx AlonzoEra)
-> AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx AlonzoEra
forall a b. (a -> b) -> a -> b
$ Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
0) (Data AlonzoEra
redeemerExample, Natural -> Natural -> ExUnits
ExUnits Natural
5000 Natural
5000)
        ) -- redeemers
    )
    ( TxAuxData AlonzoEra -> StrictMaybe (TxAuxData AlonzoEra)
forall a. a -> StrictMaybe a
SJust (TxAuxData AlonzoEra -> StrictMaybe (TxAuxData AlonzoEra))
-> TxAuxData AlonzoEra -> StrictMaybe (TxAuxData AlonzoEra)
forall a b. (a -> b) -> a -> b
$
        Map Word64 Metadatum
-> [AlonzoScript AlonzoEra] -> AlonzoTxAuxData AlonzoEra
forall (f :: * -> *) era.
(Foldable f, AlonzoEraScript era) =>
Map Word64 Metadatum -> f (AlonzoScript era) -> AlonzoTxAuxData era
mkAlonzoTxAuxData
          Map Word64 Metadatum
SLE.exampleAuxDataMap -- auxiliary data
          [forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysFails @'PlutusV1 Natural
2, Timelock AlonzoEra -> AlonzoScript AlonzoEra
forall era. Timelock era -> AlonzoScript era
TimelockScript (Timelock AlonzoEra -> AlonzoScript AlonzoEra)
-> Timelock AlonzoEra -> AlonzoScript AlonzoEra
forall a b. (a -> b) -> a -> b
$ StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAllOf StrictSeq (Timelock AlonzoEra)
StrictSeq (NativeScript AlonzoEra)
forall a. Monoid a => a
mempty] -- Scripts
    )

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

exampleAlonzoNewEpochState :: NewEpochState AlonzoEra
exampleAlonzoNewEpochState :: NewEpochState AlonzoEra
exampleAlonzoNewEpochState =
  Value AlonzoEra
-> PParams AlonzoEra
-> PParams AlonzoEra
-> NewEpochState AlonzoEra
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
SLE.exampleMultiAssetValue Int
1)
    PParams AlonzoEra
forall era. EraPParams era => PParams era
emptyPParams
    (PParams AlonzoEra
forall era. EraPParams era => PParams era
emptyPParams PParams AlonzoEra
-> (PParams AlonzoEra -> PParams AlonzoEra) -> PParams AlonzoEra
forall a b. a -> (a -> b) -> b
& (CoinPerWord -> Identity CoinPerWord)
-> PParams AlonzoEra -> Identity (PParams AlonzoEra)
forall era.
(AlonzoEraPParams era, ExactEra AlonzoEra era) =>
Lens' (PParams era) CoinPerWord
Lens' (PParams AlonzoEra) CoinPerWord
ppCoinsPerUTxOWordL ((CoinPerWord -> Identity CoinPerWord)
 -> PParams AlonzoEra -> Identity (PParams AlonzoEra))
-> CoinPerWord -> PParams AlonzoEra -> PParams AlonzoEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Coin -> CoinPerWord
CoinPerWord (Integer -> Coin
Coin Integer
1))

exampleAlonzoGenesis :: AlonzoGenesis
exampleAlonzoGenesis :: AlonzoGenesis
exampleAlonzoGenesis =
  AlonzoGenesis
    { agCoinsPerUTxOWord :: CoinPerWord
agCoinsPerUTxOWord = Coin -> CoinPerWord
CoinPerWord (Coin -> CoinPerWord) -> Coin -> CoinPerWord
forall a b. (a -> b) -> a -> b
$ Integer -> Coin
Coin Integer
1
    , agCostModels :: CostModels
agCostModels = Map Language CostModel -> CostModels
mkCostModels ([(Language, CostModel)] -> Map Language CostModel
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [(Language
PlutusV1, CostModel
HasCallStack => CostModel
zeroTestingCostModelV1)])
    , agPrices :: Prices
agPrices = NonNegativeInterval -> NonNegativeInterval -> Prices
Prices (HasCallStack => Rational -> NonNegativeInterval
Rational -> NonNegativeInterval
boundRational' Rational
90) (HasCallStack => Rational -> NonNegativeInterval
Rational -> NonNegativeInterval
boundRational' Rational
91)
    , agMaxTxExUnits :: ExUnits
agMaxTxExUnits = Natural -> Natural -> ExUnits
ExUnits Natural
123 Natural
123
    , agMaxBlockExUnits :: ExUnits
agMaxBlockExUnits = Natural -> Natural -> ExUnits
ExUnits Natural
223 Natural
223
    , agMaxValSize :: Natural
agMaxValSize = Natural
1234
    , agCollateralPercentage :: Natural
agCollateralPercentage = Natural
20
    , agMaxCollateralInputs :: Natural
agMaxCollateralInputs = Natural
30
    }
  where
    boundRational' :: HasCallStack => Rational -> NonNegativeInterval
    boundRational' :: HasCallStack => Rational -> NonNegativeInterval
boundRational' Rational
x = case Rational -> Maybe NonNegativeInterval
forall r. BoundedRational r => Rational -> Maybe r
boundRational Rational
x of
      Maybe NonNegativeInterval
Nothing -> [Char] -> NonNegativeInterval
forall a. HasCallStack => [Char] -> a
error ([Char] -> NonNegativeInterval) -> [Char] -> NonNegativeInterval
forall a b. (a -> b) -> a -> b
$ [Char]
"Expected non-negative value but got: " [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> Rational -> [Char]
forall a. Show a => a -> [Char]
show Rational
x
      Just NonNegativeInterval
x' -> NonNegativeInterval
x'