From 1c1c2a60efb711cfb2e0c33213e9ff6cf4674530 Mon Sep 17 00:00:00 2001 From: teodanciu Date: Fri, 24 Jan 2025 14:56:24 +0000 Subject: [PATCH] [core] - BHeader --- .../src/Cardano/Protocol/TPraos/BHeader.hs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libs/cardano-protocol-tpraos/src/Cardano/Protocol/TPraos/BHeader.hs b/libs/cardano-protocol-tpraos/src/Cardano/Protocol/TPraos/BHeader.hs index faf5f80f1bd..05f3c41bc72 100644 --- a/libs/cardano-protocol-tpraos/src/Cardano/Protocol/TPraos/BHeader.hs +++ b/libs/cardano-protocol-tpraos/src/Cardano/Protocol/TPraos/BHeader.hs @@ -88,6 +88,7 @@ import Cardano.Ledger.Hashes ( hashKey, ) import Cardano.Ledger.Keys (VKey) +import Cardano.Ledger.MemoBytes (MemoBytes (Memo), decodeMemoized) import Cardano.Ledger.NonIntegral (CompareResult (..), taylorExpCmp) import Cardano.Ledger.Slot (BlockNo (..), SlotNo (..)) import Cardano.Protocol.Crypto @@ -98,6 +99,7 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Builder as BS import qualified Data.ByteString.Builder.Extra as BS import qualified Data.ByteString.Lazy as BSL +import qualified Data.ByteString.Short as SBS import Data.Ratio ((%)) import Data.Typeable import Data.Word (Word32, Word64) @@ -291,6 +293,20 @@ instance Crypto c => DecCBOR (Annotator (BHeader c)) where sig <- decodeSignedKES pure $ pure $ BHeader' bhb sig . BSL.toStrict +data BHeaderRaw c = BHeaderRaw !(BHBody c) !(KES.SignedKES (KES c) (BHBody c)) + +instance Crypto c => DecCBOR (BHeaderRaw c) where + decCBOR = decodeRecordNamed "Header" (const 2) $ do + bhb <- decCBOR + sig <- decodeSignedKES + pure $ BHeaderRaw bhb sig + +instance Crypto c => DecCBOR (BHeader c) where + decCBOR = do + mb <- decodeMemoized decCBOR + let (Memo (BHeaderRaw bhb sig) bs) = mb + pure $ BHeader' bhb sig (SBS.fromShort bs) + -- | Hash a given block header bhHash :: Crypto c => BHeader c -> HashHeader bhHash bh = HashHeader . Hash.castHash . hashEncCBOR version $ bh