ouroboros-consensus-cardano-0.20.0.0: The instantation of the Ouroboros consensus layer used by Cardano
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Consensus.ByronDual.Ledger

Synopsis

Shorthand

Bridge

data ByronSpecBridge Source #

Bridge the gap between the Byron implementation and specification

The relation between the Byron implementation and specification for the linear case is tested in the Byron implementation itself, specifically in ts_prop_generatedChainsAreValidated. The main goal of the consensus DualByron tests is to lift these tests to the general consensus setting, where time is not linear but branching.

In the linear case, the tests maintain some state linking the spec and the implementation. In the consensus case, this state cannot be maintained like this, and so it has to become part of transactions, blocks, and the ledger state itself.

Constructors

ByronSpecBridge 

Fields

  • toSpecKeysMap (PBftVerKeyHash PBftByronCrypto) VKey

    Map between keys

    Some observations:

    • The abstract chain environment contains a set of allowed delegators (of type Set VKeyGenesis), which gets translated to gdGenesisKeyHashes (of type Set Common.KeyHash) in the concrete genesis config.
    • During the translation from abstract blocks to concrete blocks, the VKey of the block is translated to a concrete SigningKey (as well as a VerificationKey) in elaborateKeyPair.
    • Although this translation is deterministic, it doesn't have an easily definable inverse. For this reason, we maintain an opposite mapping as part of the ledger state.
  • toImplIdsSpecToImplIds

    Mapping between abstract and concrete Ids

    We need to maintain this mapping so that we can use the abstract state generators and then elaborate to concrete values.

Instances

Instances details
Generic ByronSpecBridge Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Associated Types

type Rep ByronSpecBridgeTypeType #

Show ByronSpecBridge Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Eq ByronSpecBridge Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Serialise ByronSpecBridge Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

type Rep ByronSpecBridge Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

type Rep ByronSpecBridge = D1 ('MetaData "ByronSpecBridge" "Ouroboros.Consensus.ByronDual.Ledger" "ouroboros-consensus-cardano-0.20.0.0-inplace-unstable-byron-testlib" 'False) (C1 ('MetaCons "ByronSpecBridge" 'PrefixI 'True) (S1 ('MetaSel ('Just "toSpecKeys") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map (PBftVerKeyHash PBftByronCrypto) VKey)) :*: S1 ('MetaSel ('Just "toImplIds") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SpecToImplIds)))

newtype SpecToImplIds Source #

Instances

Instances details
Monoid SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Semigroup SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Generic SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Associated Types

type Rep SpecToImplIdsTypeType #

Show SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Eq SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

Serialise SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

type Rep SpecToImplIds Source # 
Instance details

Defined in Ouroboros.Consensus.ByronDual.Ledger

type Rep SpecToImplIds = D1 ('MetaData "SpecToImplIds" "Ouroboros.Consensus.ByronDual.Ledger" "ouroboros-consensus-cardano-0.20.0.0-inplace-unstable-byron-testlib" 'True) (C1 ('MetaCons "SpecToImplIds" 'PrefixI 'True) (S1 ('MetaSel ('Just "getSpecToImplIds") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 AbstractToConcreteIdMaps)))

bridgeToSpecKeyDualByronBridgePBftVerKeyHash PBftByronCryptoVKey Source #

Translate issuer key

We get a proof from PBFT that we are the leader, including a signing key (of type SigningKey). In order to produce the corresponding abstract block, we need a VKey.

initByronSpecBridge Source #

Arguments

ByronSpecGenesis 
Map TxId TxId

Mapping for the transaction in the initial UTxO

ByronSpecBridge 

specToImplTxTxATxAux ByteStringSpecToImplIds Source #

Construct singleton SpecToImplIds for a transaction

Block forging

forgeDualByronBlock Source #

Arguments

HasCallStack 
TopLevelConfig DualByronBlock 
BlockNo

Current block number

SlotNo

Current slot number

TickedLedgerState DualByronBlock

Ledger

→ [Validated (GenTx DualByronBlock)]

Txs to add in the block

PBftIsLeader PBftByronCrypto

Leader proof (IsLeader)

DualByronBlock 

Orphan instances