From 08d802b78fdb531717d7de642d4a38d068d7c183 Mon Sep 17 00:00:00 2001 From: Daniel Firth Date: Fri, 2 May 2025 19:24:57 +0000 Subject: [PATCH] Add genBlockHeader functions to Test.Gen.Cardano.Api.Typed --- cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs b/cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs index 90c41048ba..400e19285d 100644 --- a/cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs +++ b/cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs @@ -137,6 +137,10 @@ module Test.Gen.Cardano.Api.Typed , genMintWitnessable , genPlutusScriptWitness , genIndexedPlutusScriptWitness + , genBlockNo + , genBlockHeader + , genBlockHeaderAt + , genBlockHeaderHash ) where @@ -1488,3 +1492,31 @@ genScriptWitnessForMint sbe = do NoScriptDatumForMint scriptRedeemer <$> genExecutionUnits + +genBlockNo :: Gen BlockNo +genBlockNo = BlockNo <$> Gen.word64 Range.constantBounded + +-- | Fully arbitrary block header with completely random hash. +genBlockHeader :: Gen BlockHeader +genBlockHeader = genSlotNo >>= genBlockHeaderAt + +-- | Generate a random block header with completely random hash, but at a +-- certain slot. +genBlockHeaderAt :: SlotNo -> Gen BlockHeader +genBlockHeaderAt slotNo = BlockHeader slotNo <$> genBlockHeaderHash <*> genBlockNo + +-- | Generate a random block header hash. +-- This will error if the hash size of block headers changes (currently 32 bytes). +genBlockHeaderHash :: Gen (Hash BlockHeader) +genBlockHeaderHash = + unsafeBlockHeaderHashFromBytes . BS.pack <$> Gen.list (Range.singleton 32) Q.arbitrary + where + unsafeBlockHeaderHashFromBytes bytes = + case deserialiseFromRawBytes (proxyToAsType Proxy) bytes of + Left e -> + error $ + "unsafeBlockHeaderHashFromBytes: failed on bytes " + <> show bytes + <> " with error " + <> show e + Right h -> h