ouroboros-consensus:cardano
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Shelley.Protocol.Abstract

Description

Commonality between multiple protocols.

Everything in this module is indexed on the protocol (or the crypto), rather than on the block type. This allows it to be imported in Ouroboros.Consensus.Shelley.Ledger.Block.

Synopsis

Documentation

type family ProtoCrypto proto Source #

Instances

Instances details
type ProtoCrypto (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

type ProtoCrypto (Praos c) = c
type ProtoCrypto (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

type ProtoCrypto (TPraos c) = c

class (Eq (EnvelopeCheckError proto), NoThunks (EnvelopeCheckError proto), Show (EnvelopeCheckError proto)) ⇒ ProtocolHeaderSupportsEnvelope proto where Source #

Indicates that the header (determined by the protocol) supports " Envelope " functionality. Envelope functionality refers to the minimal functionality required to construct a chain.

Associated Types

type EnvelopeCheckError proto Source #

Instances

Instances details
PraosCrypto c ⇒ ProtocolHeaderSupportsEnvelope (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

Associated Types

type EnvelopeCheckError (Praos c) 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

PraosCrypto c ⇒ ProtocolHeaderSupportsEnvelope (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

Associated Types

type EnvelopeCheckError (TPraos c) 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

class ProtocolHeaderSupportsKES proto where Source #

ProtocolHeaderSupportsKES describes functionality common to protocols using key evolving signature schemes. This includes verifying the header integrity (e.g. validating the KES signature), as well as constructing the header (made specific to KES-using protocols through the need to handle the hot key).

Methods

configSlotsPerKESPeriod ∷ ConsensusConfig proto → Word64 Source #

Extract the "slots per KES period" value from the protocol config.

Note that we do not require ConsensusConfig in verifyHeaderIntegrity since that function is also invoked with StorageConfig.

verifyHeaderIntegrity Source #

Arguments

∷ Word64

Slots per KES period

→ ShelleyProtocolHeader proto 
→ Bool 

Verify that the signature on a header is correct and valid.

mkHeader Source #

Arguments

∷ (Crypto crypto, Monad m, crypto ~ ProtoCrypto proto) 
⇒ HotKey crypto m 
→ CanBeLeader proto 
→ IsLeader proto 
→ SlotNo

Slot no

→ BlockNo

Block no

→ PrevHash

Hash of the previous block

→ Hash HASH EraIndependentBlockBody

Hash of the block body to include in the header

→ Int

Size of the block body

→ ProtVer

Protocol version

→ m (ShelleyProtocolHeader proto) 

Instances

Instances details
PraosCrypto c ⇒ ProtocolHeaderSupportsKES (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

Methods

configSlotsPerKESPeriod ∷ ConsensusConfig (Praos c) → Word64 Source #

verifyHeaderIntegrity ∷ Word64 → ShelleyProtocolHeader (Praos c) → Bool Source #

mkHeader ∷ (Crypto crypto, Monad m, crypto ~ ProtoCrypto (Praos c)) ⇒ HotKey crypto m → CanBeLeader (Praos c) → IsLeader (Praos c) → SlotNo → BlockNo → PrevHash → Hash HASH EraIndependentBlockBody → Int → ProtVer → m (ShelleyProtocolHeader (Praos c)) Source #

PraosCrypto c ⇒ ProtocolHeaderSupportsKES (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

Methods

configSlotsPerKESPeriod ∷ ConsensusConfig (TPraos c) → Word64 Source #

verifyHeaderIntegrity ∷ Word64 → ShelleyProtocolHeader (TPraos c) → Bool Source #

mkHeader ∷ (Crypto crypto, Monad m, crypto ~ ProtoCrypto (TPraos c)) ⇒ HotKey crypto m → CanBeLeader (TPraos c) → IsLeader (TPraos c) → SlotNo → BlockNo → PrevHash → Hash HASH EraIndependentBlockBody → Int → ProtVer → m (ShelleyProtocolHeader (TPraos c)) Source #

class ProtocolHeaderSupportsProtocol proto where Source #

ProtocolHeaderSupportsProtocol` provides support for the concrete block header to support the ConsensusProtocol itself.

Associated Types

type CannotForgeError proto Source #

Methods

protocolHeaderView ∷ ShelleyProtocolHeader proto → ValidateView proto Source #

pHeaderIssuer ∷ ShelleyProtocolHeader proto → VKey 'BlockIssuer Source #

pHeaderIssueNo ∷ ShelleyProtocolHeader proto → Word64 Source #

pTieBreakVRFValue ∷ ShelleyProtocolHeader proto → OutputVRF (VRF (ProtoCrypto proto)) Source #

A VRF value in the header, used to choose between otherwise equally preferable chains.

Instances

Instances details
PraosCrypto c ⇒ ProtocolHeaderSupportsProtocol (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

Associated Types

type CannotForgeError (Praos c) 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

type CannotForgeError (Praos c) = PraosCannotForge c
PraosCrypto c ⇒ ProtocolHeaderSupportsProtocol (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

Associated Types

type CannotForgeError (TPraos c) 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

type CannotForgeError (TPraos c) = TPraosCannotForge c

newtype ShelleyHash Source #

Instances

Instances details
FromJSON ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

ToJSON ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

FromCBOR ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

ToCBOR ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Methods

toCBOR ∷ ShelleyHash → Encoding Source #

encodedSizeExpr ∷ (∀ t. ToCBOR t ⇒ Proxy t → Size) → Proxy ShelleyHash → Size Source #

encodedListSizeExpr ∷ (∀ t. ToCBOR t ⇒ Proxy t → Size) → Proxy [ShelleyHash] → Size Source #

NFData ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Methods

rnf ∷ ShelleyHash → () #

Eq ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Ord ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Generic ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Associated Types

type Rep ShelleyHash 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

type Rep ShelleyHash = D1 ('MetaData "ShelleyHash" "Ouroboros.Consensus.Shelley.Protocol.Abstract" "ouroboros-consensus-4.0.0.0-inplace-cardano" 'True) (C1 ('MetaCons "ShelleyHash" 'PrefixI 'True) (S1 ('MetaSel ('Just "unShelleyHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Hash HASH EraIndependentBlockHeader))))
Show ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

NoThunks ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Condense ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

Serialise ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

type Rep ShelleyHash Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Abstract

type Rep ShelleyHash = D1 ('MetaData "ShelleyHash" "Ouroboros.Consensus.Shelley.Protocol.Abstract" "ouroboros-consensus-4.0.0.0-inplace-cardano" 'True) (C1 ('MetaCons "ShelleyHash" 'PrefixI 'True) (S1 ('MetaSel ('Just "unShelleyHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Hash HASH EraIndependentBlockHeader))))

class (ConsensusProtocol proto, Typeable (ShelleyProtocolHeader proto), ProtocolHeaderSupportsEnvelope proto, ProtocolHeaderSupportsKES proto, ProtocolHeaderSupportsProtocol proto, Serialise (ChainDepState proto), SignedHeader (ShelleyProtocolHeader proto), HasMaxMajorProtVer proto) ⇒ ShelleyProtocol proto Source #

Instances

Instances details
PraosCrypto c ⇒ ShelleyProtocol (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

PraosCrypto c ⇒ ShelleyProtocol (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

type family ShelleyProtocolHeader proto = (sh ∷ Type) | sh → proto Source #

Shelley header, determined by the associated protocol.

Instances

Instances details
type ShelleyProtocolHeader (Praos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.Praos

type ShelleyProtocolHeader (Praos c) = Header c
type ShelleyProtocolHeader (TPraos c) Source # 
Instance details

Defined in Ouroboros.Consensus.Shelley.Protocol.TPraos

type ShelleyProtocolHeader (TPraos c) = BHeader c