cardano-node-emulator-1.2.0.0
Safe HaskellNone
LanguageHaskell2010

Cardano.Node.Emulator.Generators

Description

Generators for constructing blockchains and transactions for use in property-based testing.

Synopsis

Mockchain

data Mockchain Source #

Blockchain for testing the emulator implementation and traces.

To avoid having to rely on functions from the implementation of plutus-ledger (in particular, unspentOutputs) we note the unspent outputs of the chain when it is first created.

Constructors

Mockchain 

Fields

Instances

Instances details
Show Mockchain Source # 
Instance details

Defined in Cardano.Node.Emulator.Generators

genMockchain :: Gen Mockchain Source #

Generate a mockchain using the default GeneratorModel.

genMockchain' :: GeneratorModel -> Gen Mockchain Source #

Generate a mockchain.

TODO: Generate more than 1 txn

emptyChain :: Mockchain Source #

The empty mockchain.

data GeneratorModel Source #

The parameters for the generators in this module.

Constructors

GeneratorModel 

Fields

generatorModel :: GeneratorModel Source #

A generator model with some sensible defaults.

Transactions

genValidTransaction :: Mockchain -> Gen CardanoTx Source #

Generate a valid transaction, using the unspent outputs provided. Fails if the there are no unspent outputs, or if the total value of the unspent outputs is smaller than the minimum fee.

genValidTransactionBody :: Mockchain -> Gen (TxBodyContent BuildTx BabbageEra) Source #

genValidTransaction' :: GeneratorModel -> Mockchain -> Gen CardanoTx Source #

Generate a valid transaction, using the unspent outputs provided. Fails if the there are no unspent outputs, or if the total value of the unspent outputs is smaller than the estimated fee.

genValidTransactionSpending :: [TxIn] -> Value -> Gen CardanoTx Source #

genValidTransactionSpending' :: GeneratorModel -> [TxIn] -> Value -> Gen CardanoTx Source #

genInitialTransaction :: GeneratorModel -> Gen (CardanoTx, [TxOut]) Source #

A transaction with no inputs that mints some value (to be used at the beginning of a blockchain).

makeTx :: MonadFail m => TxBodyContent BuildTx BabbageEra -> m CardanoTx Source #

Assertions

assertValid :: (MonadTest m, HasCallStack) => CardanoTx -> Mockchain -> m () Source #

Assert that a transaction is valid in a chain.

Time

genInterval :: (MonadFail m, Ord a) => m a -> m (Interval a) Source #

Generate an 'Interval where the lower bound if less or equal than the upper bound.

genSlotRange :: (MonadFail m, MonadGen m) => m SlotRange Source #

Generate a SlotRange where the lower bound if less or equal than the upper bound.

genTimeRange :: (MonadFail m, MonadGen m) => SlotConfig -> m POSIXTimeRange Source #

Generate a POSIXTimeRange where the lower bound if less or equal than the upper bound.

genSlot :: MonadGen m => m Slot Source #

Generate a Slot where the lowest slot number is 0.

genPOSIXTime :: MonadGen m => SlotConfig -> m POSIXTime Source #

Generate a POSIXTime where the lowest value is scSlotZeroTime given a SlotConfig.

genSlotConfig :: MonadGen m => m SlotConfig Source #

Generate a SlotConfig where the slot length goes from 1 to 100000 ms and the time of Slot 0 is the default scSlotZeroTime.

Etc.

failOnCardanoError :: MonadFail m => Either ToCardanoError a -> m a Source #

Catch cardano error and fail wi it

genPolicyId :: Gen PolicyId Source #

genAssetId :: Gen AssetId Source #

genAssetName :: Gen AssetName #

genSingleton :: Range Integer -> Gen Value Source #

genValue :: Gen Value Source #

Generate a Value with a value range of minBound .. maxBound.

genValueNonNegative :: Gen Value Source #

Generate a Value with a value range of 0 .. maxBound.

genSizedByteString :: forall m. MonadGen m => Int -> m ByteString Source #

Generate a 'ByteString s' of up to s bytes.

genSeed :: MonadGen m => m ByteString Source #

Seed suitable for testing a seed but not for actual wallets as ScrubbedBytes isn't used to ensure memory isn't inspectable

genPassphrase :: MonadGen m => m Passphrase Source #

splitVal :: (MonadGen m, Integral n) => Int -> n -> m [n] Source #

Split a value into max. n positive-valued parts such that the sum of the parts equals the original value. Each part should contain the required minimum amount of Ada.

I noticed how for values of mx > 1000 the resulting lists are much smaller than one would expect. I think this may be caused by the way we select the next value for the split. It looks like the available funds get exhausted quite fast, which makes the function return before generating anything close to mx values.

validateMockchain :: Mockchain -> CardanoTx -> Maybe ValidationErrorInPhase Source #

Validate a transaction in a mockchain.

signAll :: CardanoTx -> CardanoTx Source #

Attach signatures of all known private keys to a transaction.

knownAddresses :: [CardanoAddress] #

knownPaymentPublicKeys :: [PaymentPubKey] #

knownPaymentPrivateKeys :: [PaymentPrivateKey] #

knownPaymentKeys :: Map PaymentPubKey PaymentPrivateKey #

knownXPrvs :: [XPrv] Source #

alwaysSucceedPolicy :: MintingPolicy Source #

someTokenValue :: AssetName -> Integer -> Value Source #

emptyTxBodyContent :: TxBodyContent BuildTx BabbageEra #