{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}

-- | Base Peras types used throughout the codebase.
module Ouroboros.Consensus.Peras.Types
  ( -- * Peras round numbers
    PerasRoundNo (..)
  , onPerasRoundNo

    -- * Peras boosted blocks
  , PerasBoostedBlock (..)
  , BoostedBlock
  , BoostedBlockCompatibleWithPoint (..)

    -- * Peras seat indices
  , PerasSeatIndex (..)

    -- * Peras vote parameters
  , PerasVoteTarget (..)
  , PerasVoteId (..)
  , VoteWeight (..) -- Re-exported from Committee.Types for convenience
  )
where

import Cardano.Binary
  ( FromCBOR (..)
  , ToCBOR (..)
  , decodeListLenOf
  , encodeListLen
  )
import Codec.Serialise.Class (Serialise (..))
import Control.DeepSeq (NFData)
import Data.Coerce (coerce)
import Data.Kind (Type)
import Data.Word (Word16, Word64)
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks)
import Ouroboros.Consensus.Block.Abstract
  ( ConvertRawHash (..)
  , Point
  , WithOrigin
  )
import Ouroboros.Consensus.Block.RealPoint
  ( Bytes32RealPoint
  , decodeBytes32RealPoint
  , encodeBytes32RealPoint
  , fromBytes32RealPoint
  , pointToWithOriginRealPoint
  , toBytes32RealPoint
  , withOriginRealPointToPoint
  )
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (WithArrivalTime)
import Ouroboros.Consensus.Committee.Types (VoteWeight (..))
import Ouroboros.Consensus.Util (ShowProxy (..))
import Ouroboros.Consensus.Util.CBOR (decodeWithOrigin, encodeWithOrigin)
import Ouroboros.Consensus.Util.Condense (Condense (..))
import Quiet (Quiet (..))

-- * Peras Round numbers

-- | Round number in a Peras election.
newtype PerasRoundNo
  = PerasRoundNo
  { PerasRoundNo -> Word64
unPerasRoundNo :: Word64
  }
  deriving Int -> PerasRoundNo -> ShowS
[PerasRoundNo] -> ShowS
PerasRoundNo -> String
(Int -> PerasRoundNo -> ShowS)
-> (PerasRoundNo -> String)
-> ([PerasRoundNo] -> ShowS)
-> Show PerasRoundNo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PerasRoundNo -> ShowS
showsPrec :: Int -> PerasRoundNo -> ShowS
$cshow :: PerasRoundNo -> String
show :: PerasRoundNo -> String
$cshowList :: [PerasRoundNo] -> ShowS
showList :: [PerasRoundNo] -> ShowS
Show via Quiet PerasRoundNo
  deriving stock (forall x. PerasRoundNo -> Rep PerasRoundNo x)
-> (forall x. Rep PerasRoundNo x -> PerasRoundNo)
-> Generic PerasRoundNo
forall x. Rep PerasRoundNo x -> PerasRoundNo
forall x. PerasRoundNo -> Rep PerasRoundNo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PerasRoundNo -> Rep PerasRoundNo x
from :: forall x. PerasRoundNo -> Rep PerasRoundNo x
$cto :: forall x. Rep PerasRoundNo x -> PerasRoundNo
to :: forall x. Rep PerasRoundNo x -> PerasRoundNo
Generic
  deriving newtype
    ( Int -> PerasRoundNo
PerasRoundNo -> Int
PerasRoundNo -> [PerasRoundNo]
PerasRoundNo -> PerasRoundNo
PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
PerasRoundNo -> PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
(PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo)
-> (Int -> PerasRoundNo)
-> (PerasRoundNo -> Int)
-> (PerasRoundNo -> [PerasRoundNo])
-> (PerasRoundNo -> PerasRoundNo -> [PerasRoundNo])
-> (PerasRoundNo -> PerasRoundNo -> [PerasRoundNo])
-> (PerasRoundNo -> PerasRoundNo -> PerasRoundNo -> [PerasRoundNo])
-> Enum PerasRoundNo
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: PerasRoundNo -> PerasRoundNo
succ :: PerasRoundNo -> PerasRoundNo
$cpred :: PerasRoundNo -> PerasRoundNo
pred :: PerasRoundNo -> PerasRoundNo
$ctoEnum :: Int -> PerasRoundNo
toEnum :: Int -> PerasRoundNo
$cfromEnum :: PerasRoundNo -> Int
fromEnum :: PerasRoundNo -> Int
$cenumFrom :: PerasRoundNo -> [PerasRoundNo]
enumFrom :: PerasRoundNo -> [PerasRoundNo]
$cenumFromThen :: PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
enumFromThen :: PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
$cenumFromTo :: PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
enumFromTo :: PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
$cenumFromThenTo :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
enumFromThenTo :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo -> [PerasRoundNo]
Enum
    , PerasRoundNo -> PerasRoundNo -> Bool
(PerasRoundNo -> PerasRoundNo -> Bool)
-> (PerasRoundNo -> PerasRoundNo -> Bool) -> Eq PerasRoundNo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PerasRoundNo -> PerasRoundNo -> Bool
== :: PerasRoundNo -> PerasRoundNo -> Bool
$c/= :: PerasRoundNo -> PerasRoundNo -> Bool
/= :: PerasRoundNo -> PerasRoundNo -> Bool
Eq
    , Eq PerasRoundNo
Eq PerasRoundNo =>
(PerasRoundNo -> PerasRoundNo -> Ordering)
-> (PerasRoundNo -> PerasRoundNo -> Bool)
-> (PerasRoundNo -> PerasRoundNo -> Bool)
-> (PerasRoundNo -> PerasRoundNo -> Bool)
-> (PerasRoundNo -> PerasRoundNo -> Bool)
-> (PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
-> Ord PerasRoundNo
PerasRoundNo -> PerasRoundNo -> Bool
PerasRoundNo -> PerasRoundNo -> Ordering
PerasRoundNo -> PerasRoundNo -> PerasRoundNo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PerasRoundNo -> PerasRoundNo -> Ordering
compare :: PerasRoundNo -> PerasRoundNo -> Ordering
$c< :: PerasRoundNo -> PerasRoundNo -> Bool
< :: PerasRoundNo -> PerasRoundNo -> Bool
$c<= :: PerasRoundNo -> PerasRoundNo -> Bool
<= :: PerasRoundNo -> PerasRoundNo -> Bool
$c> :: PerasRoundNo -> PerasRoundNo -> Bool
> :: PerasRoundNo -> PerasRoundNo -> Bool
$c>= :: PerasRoundNo -> PerasRoundNo -> Bool
>= :: PerasRoundNo -> PerasRoundNo -> Bool
$cmax :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
max :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
$cmin :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
min :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
Ord
    , Integer -> PerasRoundNo
PerasRoundNo -> PerasRoundNo
PerasRoundNo -> PerasRoundNo -> PerasRoundNo
(PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo)
-> (PerasRoundNo -> PerasRoundNo)
-> (Integer -> PerasRoundNo)
-> Num PerasRoundNo
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
+ :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
$c- :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
- :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
$c* :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
* :: PerasRoundNo -> PerasRoundNo -> PerasRoundNo
$cnegate :: PerasRoundNo -> PerasRoundNo
negate :: PerasRoundNo -> PerasRoundNo
$cabs :: PerasRoundNo -> PerasRoundNo
abs :: PerasRoundNo -> PerasRoundNo
$csignum :: PerasRoundNo -> PerasRoundNo
signum :: PerasRoundNo -> PerasRoundNo
$cfromInteger :: Integer -> PerasRoundNo
fromInteger :: Integer -> PerasRoundNo
Num
    , PerasRoundNo
PerasRoundNo -> PerasRoundNo -> Bounded PerasRoundNo
forall a. a -> a -> Bounded a
$cminBound :: PerasRoundNo
minBound :: PerasRoundNo
$cmaxBound :: PerasRoundNo
maxBound :: PerasRoundNo
Bounded
    , Context -> PerasRoundNo -> IO (Maybe ThunkInfo)
Proxy PerasRoundNo -> String
(Context -> PerasRoundNo -> IO (Maybe ThunkInfo))
-> (Context -> PerasRoundNo -> IO (Maybe ThunkInfo))
-> (Proxy PerasRoundNo -> String)
-> NoThunks PerasRoundNo
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PerasRoundNo -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasRoundNo -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PerasRoundNo -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasRoundNo -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy PerasRoundNo -> String
showTypeOf :: Proxy PerasRoundNo -> String
NoThunks
    , PerasRoundNo -> ()
(PerasRoundNo -> ()) -> NFData PerasRoundNo
forall a. (a -> ()) -> NFData a
$crnf :: PerasRoundNo -> ()
rnf :: PerasRoundNo -> ()
NFData
    , [PerasRoundNo] -> Encoding
PerasRoundNo -> Encoding
(PerasRoundNo -> Encoding)
-> (forall s. Decoder s PerasRoundNo)
-> ([PerasRoundNo] -> Encoding)
-> (forall s. Decoder s [PerasRoundNo])
-> Serialise PerasRoundNo
forall s. Decoder s [PerasRoundNo]
forall s. Decoder s PerasRoundNo
forall a.
(a -> Encoding)
-> (forall s. Decoder s a)
-> ([a] -> Encoding)
-> (forall s. Decoder s [a])
-> Serialise a
$cencode :: PerasRoundNo -> Encoding
encode :: PerasRoundNo -> Encoding
$cdecode :: forall s. Decoder s PerasRoundNo
decode :: forall s. Decoder s PerasRoundNo
$cencodeList :: [PerasRoundNo] -> Encoding
encodeList :: [PerasRoundNo] -> Encoding
$cdecodeList :: forall s. Decoder s [PerasRoundNo]
decodeList :: forall s. Decoder s [PerasRoundNo]
Serialise
    , Typeable PerasRoundNo
Typeable PerasRoundNo =>
(PerasRoundNo -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy PerasRoundNo -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy [PerasRoundNo] -> Size)
-> ToCBOR PerasRoundNo
PerasRoundNo -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasRoundNo] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasRoundNo -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
$ctoCBOR :: PerasRoundNo -> Encoding
toCBOR :: PerasRoundNo -> Encoding
$cencodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasRoundNo -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasRoundNo -> Size
$cencodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasRoundNo] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasRoundNo] -> Size
ToCBOR
    , Typeable PerasRoundNo
Typeable PerasRoundNo =>
(forall s. Decoder s PerasRoundNo)
-> (Proxy PerasRoundNo -> Text) -> FromCBOR PerasRoundNo
Proxy PerasRoundNo -> Text
forall s. Decoder s PerasRoundNo
forall a.
Typeable a =>
(forall s. Decoder s a) -> (Proxy a -> Text) -> FromCBOR a
$cfromCBOR :: forall s. Decoder s PerasRoundNo
fromCBOR :: forall s. Decoder s PerasRoundNo
$clabel :: Proxy PerasRoundNo -> Text
label :: Proxy PerasRoundNo -> Text
FromCBOR
    )

instance Condense PerasRoundNo where
  condense :: PerasRoundNo -> String
condense = Word64 -> String
forall a. Show a => a -> String
show (Word64 -> String)
-> (PerasRoundNo -> Word64) -> PerasRoundNo -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PerasRoundNo -> Word64
unPerasRoundNo

instance ShowProxy PerasRoundNo where
  showProxy :: Proxy PerasRoundNo -> String
showProxy Proxy PerasRoundNo
_ = String
"PerasRoundNo"

-- | Lift a binary operation on 'Word64' to 'PerasRoundNo'
onPerasRoundNo ::
  (Word64 -> Word64 -> Word64) ->
  (PerasRoundNo -> PerasRoundNo -> PerasRoundNo)
onPerasRoundNo :: (Word64 -> Word64 -> Word64)
-> PerasRoundNo -> PerasRoundNo -> PerasRoundNo
onPerasRoundNo = (Word64 -> Word64 -> Word64)
-> PerasRoundNo -> PerasRoundNo -> PerasRoundNo
forall a b. Coercible a b => a -> b
coerce

-- ** Peras boosted blocks

-- | Conversion back and forth between boosted blocks and abstract points.
class BoostedBlockCompatibleWithPoint boostedBlock blk where
  boostedBlockToPoint :: boostedBlock -> Point blk
  pointToBoostedBlock :: Point blk -> boostedBlock

type family BoostedBlock voteOrCert :: Type

instance BoostedBlockCompatibleWithPoint (Point blk) blk where
  boostedBlockToPoint :: Point blk -> Point blk
boostedBlockToPoint = Point blk -> Point blk
forall a. a -> a
id
  pointToBoostedBlock :: Point blk -> Point blk
pointToBoostedBlock = Point blk -> Point blk
forall a. a -> a
id

type instance BoostedBlock (WithArrivalTime voteOrCert) = BoostedBlock voteOrCert

-- | The slot number and 32-byte hash of the block being voted for.
--
-- NOTE: this type is mostly used in production votes and certificates, while
-- mocked votes and certificates generally use the more abstract 'Point blk'.
newtype PerasBoostedBlock
  = PerasBoostedBlock
  { PerasBoostedBlock -> WithOrigin Bytes32RealPoint
unPerasBoostedBlock :: WithOrigin Bytes32RealPoint
  }
  deriving stock (Int -> PerasBoostedBlock -> ShowS
[PerasBoostedBlock] -> ShowS
PerasBoostedBlock -> String
(Int -> PerasBoostedBlock -> ShowS)
-> (PerasBoostedBlock -> String)
-> ([PerasBoostedBlock] -> ShowS)
-> Show PerasBoostedBlock
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PerasBoostedBlock -> ShowS
showsPrec :: Int -> PerasBoostedBlock -> ShowS
$cshow :: PerasBoostedBlock -> String
show :: PerasBoostedBlock -> String
$cshowList :: [PerasBoostedBlock] -> ShowS
showList :: [PerasBoostedBlock] -> ShowS
Show, PerasBoostedBlock -> PerasBoostedBlock -> Bool
(PerasBoostedBlock -> PerasBoostedBlock -> Bool)
-> (PerasBoostedBlock -> PerasBoostedBlock -> Bool)
-> Eq PerasBoostedBlock
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PerasBoostedBlock -> PerasBoostedBlock -> Bool
== :: PerasBoostedBlock -> PerasBoostedBlock -> Bool
$c/= :: PerasBoostedBlock -> PerasBoostedBlock -> Bool
/= :: PerasBoostedBlock -> PerasBoostedBlock -> Bool
Eq, (forall x. PerasBoostedBlock -> Rep PerasBoostedBlock x)
-> (forall x. Rep PerasBoostedBlock x -> PerasBoostedBlock)
-> Generic PerasBoostedBlock
forall x. Rep PerasBoostedBlock x -> PerasBoostedBlock
forall x. PerasBoostedBlock -> Rep PerasBoostedBlock x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PerasBoostedBlock -> Rep PerasBoostedBlock x
from :: forall x. PerasBoostedBlock -> Rep PerasBoostedBlock x
$cto :: forall x. Rep PerasBoostedBlock x -> PerasBoostedBlock
to :: forall x. Rep PerasBoostedBlock x -> PerasBoostedBlock
Generic)
  deriving anyclass Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo)
Proxy PerasBoostedBlock -> String
(Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo))
-> (Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo))
-> (Proxy PerasBoostedBlock -> String)
-> NoThunks PerasBoostedBlock
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasBoostedBlock -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy PerasBoostedBlock -> String
showTypeOf :: Proxy PerasBoostedBlock -> String
NoThunks

instance
  ( ConvertRawHash blk
  , HashSize blk ~ 32
  ) =>
  BoostedBlockCompatibleWithPoint PerasBoostedBlock blk
  where
  boostedBlockToPoint :: PerasBoostedBlock -> Point blk
boostedBlockToPoint =
    WithOrigin (RealPoint blk) -> Point blk
forall blk. WithOrigin (RealPoint blk) -> Point blk
withOriginRealPointToPoint
      (WithOrigin (RealPoint blk) -> Point blk)
-> (PerasBoostedBlock -> WithOrigin (RealPoint blk))
-> PerasBoostedBlock
-> Point blk
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bytes32RealPoint -> RealPoint blk)
-> WithOrigin Bytes32RealPoint -> WithOrigin (RealPoint blk)
forall a b. (a -> b) -> WithOrigin a -> WithOrigin b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Bytes32RealPoint -> RealPoint blk
forall blk.
(ConvertRawHash blk, HashSize blk ~ 32) =>
Bytes32RealPoint -> RealPoint blk
fromBytes32RealPoint
      (WithOrigin Bytes32RealPoint -> WithOrigin (RealPoint blk))
-> (PerasBoostedBlock -> WithOrigin Bytes32RealPoint)
-> PerasBoostedBlock
-> WithOrigin (RealPoint blk)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PerasBoostedBlock -> WithOrigin Bytes32RealPoint
unPerasBoostedBlock
  pointToBoostedBlock :: Point blk -> PerasBoostedBlock
pointToBoostedBlock =
    WithOrigin Bytes32RealPoint -> PerasBoostedBlock
PerasBoostedBlock
      (WithOrigin Bytes32RealPoint -> PerasBoostedBlock)
-> (Point blk -> WithOrigin Bytes32RealPoint)
-> Point blk
-> PerasBoostedBlock
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (RealPoint blk -> Bytes32RealPoint)
-> WithOrigin (RealPoint blk) -> WithOrigin Bytes32RealPoint
forall a b. (a -> b) -> WithOrigin a -> WithOrigin b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap RealPoint blk -> Bytes32RealPoint
forall blk.
(ConvertRawHash blk, HashSize blk ~ 32) =>
RealPoint blk -> Bytes32RealPoint
toBytes32RealPoint
      (WithOrigin (RealPoint blk) -> WithOrigin Bytes32RealPoint)
-> (Point blk -> WithOrigin (RealPoint blk))
-> Point blk
-> WithOrigin Bytes32RealPoint
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Point blk -> WithOrigin (RealPoint blk)
forall blk. Point blk -> WithOrigin (RealPoint blk)
pointToWithOriginRealPoint

instance FromCBOR PerasBoostedBlock where
  fromCBOR :: forall s. Decoder s PerasBoostedBlock
fromCBOR = WithOrigin Bytes32RealPoint -> PerasBoostedBlock
PerasBoostedBlock (WithOrigin Bytes32RealPoint -> PerasBoostedBlock)
-> Decoder s (WithOrigin Bytes32RealPoint)
-> Decoder s PerasBoostedBlock
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s Bytes32RealPoint
-> Decoder s (WithOrigin Bytes32RealPoint)
forall s a. Decoder s a -> Decoder s (WithOrigin a)
decodeWithOrigin Decoder s Bytes32RealPoint
forall s. Decoder s Bytes32RealPoint
decodeBytes32RealPoint

instance ToCBOR PerasBoostedBlock where
  toCBOR :: PerasBoostedBlock -> Encoding
toCBOR = (Bytes32RealPoint -> Encoding)
-> WithOrigin Bytes32RealPoint -> Encoding
forall a. (a -> Encoding) -> WithOrigin a -> Encoding
encodeWithOrigin Bytes32RealPoint -> Encoding
encodeBytes32RealPoint (WithOrigin Bytes32RealPoint -> Encoding)
-> (PerasBoostedBlock -> WithOrigin Bytes32RealPoint)
-> PerasBoostedBlock
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PerasBoostedBlock -> WithOrigin Bytes32RealPoint
unPerasBoostedBlock

-- * Peras seat indices

-- | Seat index in the voting committee used for Peras
newtype PerasSeatIndex
  = PerasSeatIndex
  { PerasSeatIndex -> Word16
unPerasSeatIndex :: Word16
  }
  deriving stock (Int -> PerasSeatIndex -> ShowS
[PerasSeatIndex] -> ShowS
PerasSeatIndex -> String
(Int -> PerasSeatIndex -> ShowS)
-> (PerasSeatIndex -> String)
-> ([PerasSeatIndex] -> ShowS)
-> Show PerasSeatIndex
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PerasSeatIndex -> ShowS
showsPrec :: Int -> PerasSeatIndex -> ShowS
$cshow :: PerasSeatIndex -> String
show :: PerasSeatIndex -> String
$cshowList :: [PerasSeatIndex] -> ShowS
showList :: [PerasSeatIndex] -> ShowS
Show, PerasSeatIndex -> PerasSeatIndex -> Bool
(PerasSeatIndex -> PerasSeatIndex -> Bool)
-> (PerasSeatIndex -> PerasSeatIndex -> Bool) -> Eq PerasSeatIndex
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PerasSeatIndex -> PerasSeatIndex -> Bool
== :: PerasSeatIndex -> PerasSeatIndex -> Bool
$c/= :: PerasSeatIndex -> PerasSeatIndex -> Bool
/= :: PerasSeatIndex -> PerasSeatIndex -> Bool
Eq, Eq PerasSeatIndex
Eq PerasSeatIndex =>
(PerasSeatIndex -> PerasSeatIndex -> Ordering)
-> (PerasSeatIndex -> PerasSeatIndex -> Bool)
-> (PerasSeatIndex -> PerasSeatIndex -> Bool)
-> (PerasSeatIndex -> PerasSeatIndex -> Bool)
-> (PerasSeatIndex -> PerasSeatIndex -> Bool)
-> (PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex)
-> (PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex)
-> Ord PerasSeatIndex
PerasSeatIndex -> PerasSeatIndex -> Bool
PerasSeatIndex -> PerasSeatIndex -> Ordering
PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PerasSeatIndex -> PerasSeatIndex -> Ordering
compare :: PerasSeatIndex -> PerasSeatIndex -> Ordering
$c< :: PerasSeatIndex -> PerasSeatIndex -> Bool
< :: PerasSeatIndex -> PerasSeatIndex -> Bool
$c<= :: PerasSeatIndex -> PerasSeatIndex -> Bool
<= :: PerasSeatIndex -> PerasSeatIndex -> Bool
$c> :: PerasSeatIndex -> PerasSeatIndex -> Bool
> :: PerasSeatIndex -> PerasSeatIndex -> Bool
$c>= :: PerasSeatIndex -> PerasSeatIndex -> Bool
>= :: PerasSeatIndex -> PerasSeatIndex -> Bool
$cmax :: PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex
max :: PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex
$cmin :: PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex
min :: PerasSeatIndex -> PerasSeatIndex -> PerasSeatIndex
Ord, (forall x. PerasSeatIndex -> Rep PerasSeatIndex x)
-> (forall x. Rep PerasSeatIndex x -> PerasSeatIndex)
-> Generic PerasSeatIndex
forall x. Rep PerasSeatIndex x -> PerasSeatIndex
forall x. PerasSeatIndex -> Rep PerasSeatIndex x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PerasSeatIndex -> Rep PerasSeatIndex x
from :: forall x. PerasSeatIndex -> Rep PerasSeatIndex x
$cto :: forall x. Rep PerasSeatIndex x -> PerasSeatIndex
to :: forall x. Rep PerasSeatIndex x -> PerasSeatIndex
Generic)
  deriving newtype (Typeable PerasSeatIndex
Typeable PerasSeatIndex =>
(forall s. Decoder s PerasSeatIndex)
-> (Proxy PerasSeatIndex -> Text) -> FromCBOR PerasSeatIndex
Proxy PerasSeatIndex -> Text
forall s. Decoder s PerasSeatIndex
forall a.
Typeable a =>
(forall s. Decoder s a) -> (Proxy a -> Text) -> FromCBOR a
$cfromCBOR :: forall s. Decoder s PerasSeatIndex
fromCBOR :: forall s. Decoder s PerasSeatIndex
$clabel :: Proxy PerasSeatIndex -> Text
label :: Proxy PerasSeatIndex -> Text
FromCBOR, Typeable PerasSeatIndex
Typeable PerasSeatIndex =>
(PerasSeatIndex -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy PerasSeatIndex -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy [PerasSeatIndex] -> Size)
-> ToCBOR PerasSeatIndex
PerasSeatIndex -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasSeatIndex] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasSeatIndex -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
$ctoCBOR :: PerasSeatIndex -> Encoding
toCBOR :: PerasSeatIndex -> Encoding
$cencodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasSeatIndex -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy PerasSeatIndex -> Size
$cencodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasSeatIndex] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [PerasSeatIndex] -> Size
ToCBOR, Int -> PerasSeatIndex
PerasSeatIndex -> Int
PerasSeatIndex -> [PerasSeatIndex]
PerasSeatIndex -> PerasSeatIndex
PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
PerasSeatIndex
-> PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
(PerasSeatIndex -> PerasSeatIndex)
-> (PerasSeatIndex -> PerasSeatIndex)
-> (Int -> PerasSeatIndex)
-> (PerasSeatIndex -> Int)
-> (PerasSeatIndex -> [PerasSeatIndex])
-> (PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex])
-> (PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex])
-> (PerasSeatIndex
    -> PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex])
-> Enum PerasSeatIndex
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: PerasSeatIndex -> PerasSeatIndex
succ :: PerasSeatIndex -> PerasSeatIndex
$cpred :: PerasSeatIndex -> PerasSeatIndex
pred :: PerasSeatIndex -> PerasSeatIndex
$ctoEnum :: Int -> PerasSeatIndex
toEnum :: Int -> PerasSeatIndex
$cfromEnum :: PerasSeatIndex -> Int
fromEnum :: PerasSeatIndex -> Int
$cenumFrom :: PerasSeatIndex -> [PerasSeatIndex]
enumFrom :: PerasSeatIndex -> [PerasSeatIndex]
$cenumFromThen :: PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
enumFromThen :: PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
$cenumFromTo :: PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
enumFromTo :: PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
$cenumFromThenTo :: PerasSeatIndex
-> PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
enumFromThenTo :: PerasSeatIndex
-> PerasSeatIndex -> PerasSeatIndex -> [PerasSeatIndex]
Enum, PerasSeatIndex
PerasSeatIndex -> PerasSeatIndex -> Bounded PerasSeatIndex
forall a. a -> a -> Bounded a
$cminBound :: PerasSeatIndex
minBound :: PerasSeatIndex
$cmaxBound :: PerasSeatIndex
maxBound :: PerasSeatIndex
Bounded, PerasSeatIndex -> ()
(PerasSeatIndex -> ()) -> NFData PerasSeatIndex
forall a. (a -> ()) -> NFData a
$crnf :: PerasSeatIndex -> ()
rnf :: PerasSeatIndex -> ()
NFData)
  deriving anyclass Context -> PerasSeatIndex -> IO (Maybe ThunkInfo)
Proxy PerasSeatIndex -> String
(Context -> PerasSeatIndex -> IO (Maybe ThunkInfo))
-> (Context -> PerasSeatIndex -> IO (Maybe ThunkInfo))
-> (Proxy PerasSeatIndex -> String)
-> NoThunks PerasSeatIndex
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PerasSeatIndex -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasSeatIndex -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PerasSeatIndex -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasSeatIndex -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy PerasSeatIndex -> String
showTypeOf :: Proxy PerasSeatIndex -> String
NoThunks

-- * Peras vote parameters

-- | The target of a vote in a Peras election
data PerasVoteTarget blk
  = PerasVoteTarget
  { forall blk. PerasVoteTarget blk -> PerasRoundNo
pvtRoundNo :: !PerasRoundNo
  , forall blk. PerasVoteTarget blk -> Point blk
pvtBlock :: !(Point blk)
  }
  deriving stock (Int -> PerasVoteTarget blk -> ShowS
[PerasVoteTarget blk] -> ShowS
PerasVoteTarget blk -> String
(Int -> PerasVoteTarget blk -> ShowS)
-> (PerasVoteTarget blk -> String)
-> ([PerasVoteTarget blk] -> ShowS)
-> Show (PerasVoteTarget blk)
forall blk. StandardHash blk => Int -> PerasVoteTarget blk -> ShowS
forall blk. StandardHash blk => [PerasVoteTarget blk] -> ShowS
forall blk. StandardHash blk => PerasVoteTarget blk -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall blk. StandardHash blk => Int -> PerasVoteTarget blk -> ShowS
showsPrec :: Int -> PerasVoteTarget blk -> ShowS
$cshow :: forall blk. StandardHash blk => PerasVoteTarget blk -> String
show :: PerasVoteTarget blk -> String
$cshowList :: forall blk. StandardHash blk => [PerasVoteTarget blk] -> ShowS
showList :: [PerasVoteTarget blk] -> ShowS
Show, PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
(PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> (PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> Eq (PerasVoteTarget blk)
forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
== :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
$c/= :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
/= :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
Eq, Eq (PerasVoteTarget blk)
Eq (PerasVoteTarget blk) =>
(PerasVoteTarget blk -> PerasVoteTarget blk -> Ordering)
-> (PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> (PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> (PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> (PerasVoteTarget blk -> PerasVoteTarget blk -> Bool)
-> (PerasVoteTarget blk
    -> PerasVoteTarget blk -> PerasVoteTarget blk)
-> (PerasVoteTarget blk
    -> PerasVoteTarget blk -> PerasVoteTarget blk)
-> Ord (PerasVoteTarget blk)
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
PerasVoteTarget blk -> PerasVoteTarget blk -> Ordering
PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall blk. StandardHash blk => Eq (PerasVoteTarget blk)
forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Ordering
forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
$ccompare :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Ordering
compare :: PerasVoteTarget blk -> PerasVoteTarget blk -> Ordering
$c< :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
< :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
$c<= :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
<= :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
$c> :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
> :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
$c>= :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
>= :: PerasVoteTarget blk -> PerasVoteTarget blk -> Bool
$cmax :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
max :: PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
$cmin :: forall blk.
StandardHash blk =>
PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
min :: PerasVoteTarget blk -> PerasVoteTarget blk -> PerasVoteTarget blk
Ord, (forall x. PerasVoteTarget blk -> Rep (PerasVoteTarget blk) x)
-> (forall x. Rep (PerasVoteTarget blk) x -> PerasVoteTarget blk)
-> Generic (PerasVoteTarget blk)
forall x. Rep (PerasVoteTarget blk) x -> PerasVoteTarget blk
forall x. PerasVoteTarget blk -> Rep (PerasVoteTarget blk) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall blk x. Rep (PerasVoteTarget blk) x -> PerasVoteTarget blk
forall blk x. PerasVoteTarget blk -> Rep (PerasVoteTarget blk) x
$cfrom :: forall blk x. PerasVoteTarget blk -> Rep (PerasVoteTarget blk) x
from :: forall x. PerasVoteTarget blk -> Rep (PerasVoteTarget blk) x
$cto :: forall blk x. Rep (PerasVoteTarget blk) x -> PerasVoteTarget blk
to :: forall x. Rep (PerasVoteTarget blk) x -> PerasVoteTarget blk
Generic)
  deriving anyclass Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
Proxy (PerasVoteTarget blk) -> String
(Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo))
-> (Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo))
-> (Proxy (PerasVoteTarget blk) -> String)
-> NoThunks (PerasVoteTarget blk)
forall blk.
StandardHash blk =>
Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
forall blk.
StandardHash blk =>
Proxy (PerasVoteTarget blk) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall blk.
StandardHash blk =>
Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall blk.
StandardHash blk =>
Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasVoteTarget blk -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall blk.
StandardHash blk =>
Proxy (PerasVoteTarget blk) -> String
showTypeOf :: Proxy (PerasVoteTarget blk) -> String
NoThunks

-- | The identifier of a vote in a Peras election
data PerasVoteId
  = PerasVoteId
  { PerasVoteId -> PerasRoundNo
pviRoundNo :: !PerasRoundNo
  , PerasVoteId -> PerasSeatIndex
pviSeatIndex :: !PerasSeatIndex
  }
  deriving stock (Int -> PerasVoteId -> ShowS
[PerasVoteId] -> ShowS
PerasVoteId -> String
(Int -> PerasVoteId -> ShowS)
-> (PerasVoteId -> String)
-> ([PerasVoteId] -> ShowS)
-> Show PerasVoteId
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PerasVoteId -> ShowS
showsPrec :: Int -> PerasVoteId -> ShowS
$cshow :: PerasVoteId -> String
show :: PerasVoteId -> String
$cshowList :: [PerasVoteId] -> ShowS
showList :: [PerasVoteId] -> ShowS
Show, PerasVoteId -> PerasVoteId -> Bool
(PerasVoteId -> PerasVoteId -> Bool)
-> (PerasVoteId -> PerasVoteId -> Bool) -> Eq PerasVoteId
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PerasVoteId -> PerasVoteId -> Bool
== :: PerasVoteId -> PerasVoteId -> Bool
$c/= :: PerasVoteId -> PerasVoteId -> Bool
/= :: PerasVoteId -> PerasVoteId -> Bool
Eq, Eq PerasVoteId
Eq PerasVoteId =>
(PerasVoteId -> PerasVoteId -> Ordering)
-> (PerasVoteId -> PerasVoteId -> Bool)
-> (PerasVoteId -> PerasVoteId -> Bool)
-> (PerasVoteId -> PerasVoteId -> Bool)
-> (PerasVoteId -> PerasVoteId -> Bool)
-> (PerasVoteId -> PerasVoteId -> PerasVoteId)
-> (PerasVoteId -> PerasVoteId -> PerasVoteId)
-> Ord PerasVoteId
PerasVoteId -> PerasVoteId -> Bool
PerasVoteId -> PerasVoteId -> Ordering
PerasVoteId -> PerasVoteId -> PerasVoteId
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PerasVoteId -> PerasVoteId -> Ordering
compare :: PerasVoteId -> PerasVoteId -> Ordering
$c< :: PerasVoteId -> PerasVoteId -> Bool
< :: PerasVoteId -> PerasVoteId -> Bool
$c<= :: PerasVoteId -> PerasVoteId -> Bool
<= :: PerasVoteId -> PerasVoteId -> Bool
$c> :: PerasVoteId -> PerasVoteId -> Bool
> :: PerasVoteId -> PerasVoteId -> Bool
$c>= :: PerasVoteId -> PerasVoteId -> Bool
>= :: PerasVoteId -> PerasVoteId -> Bool
$cmax :: PerasVoteId -> PerasVoteId -> PerasVoteId
max :: PerasVoteId -> PerasVoteId -> PerasVoteId
$cmin :: PerasVoteId -> PerasVoteId -> PerasVoteId
min :: PerasVoteId -> PerasVoteId -> PerasVoteId
Ord, (forall x. PerasVoteId -> Rep PerasVoteId x)
-> (forall x. Rep PerasVoteId x -> PerasVoteId)
-> Generic PerasVoteId
forall x. Rep PerasVoteId x -> PerasVoteId
forall x. PerasVoteId -> Rep PerasVoteId x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PerasVoteId -> Rep PerasVoteId x
from :: forall x. PerasVoteId -> Rep PerasVoteId x
$cto :: forall x. Rep PerasVoteId x -> PerasVoteId
to :: forall x. Rep PerasVoteId x -> PerasVoteId
Generic)
  deriving anyclass Context -> PerasVoteId -> IO (Maybe ThunkInfo)
Proxy PerasVoteId -> String
(Context -> PerasVoteId -> IO (Maybe ThunkInfo))
-> (Context -> PerasVoteId -> IO (Maybe ThunkInfo))
-> (Proxy PerasVoteId -> String)
-> NoThunks PerasVoteId
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PerasVoteId -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasVoteId -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PerasVoteId -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasVoteId -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy PerasVoteId -> String
showTypeOf :: Proxy PerasVoteId -> String
NoThunks

instance ShowProxy PerasVoteId where
  showProxy :: Proxy PerasVoteId -> String
showProxy Proxy PerasVoteId
_ = String
"PerasVoteId"

instance FromCBOR PerasVoteId where
  fromCBOR :: forall s. Decoder s PerasVoteId
fromCBOR = do
    Int -> Decoder s ()
forall s. Int -> Decoder s ()
decodeListLenOf Int
2
    pviRoundNo <- Decoder s PerasRoundNo
forall s. Decoder s PerasRoundNo
forall a s. FromCBOR a => Decoder s a
fromCBOR
    pviSeatIndex <- fromCBOR
    pure
      PerasVoteId
        { pviRoundNo
        , pviSeatIndex
        }

instance ToCBOR PerasVoteId where
  toCBOR :: PerasVoteId -> Encoding
toCBOR
    PerasVoteId
      { PerasRoundNo
pviRoundNo :: PerasVoteId -> PerasRoundNo
pviRoundNo :: PerasRoundNo
pviRoundNo
      , PerasSeatIndex
pviSeatIndex :: PerasVoteId -> PerasSeatIndex
pviSeatIndex :: PerasSeatIndex
pviSeatIndex
      } =
      Word -> Encoding
encodeListLen Word
2
        Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> PerasRoundNo -> Encoding
forall a. ToCBOR a => a -> Encoding
toCBOR PerasRoundNo
pviRoundNo
        Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> PerasSeatIndex -> Encoding
forall a. ToCBOR a => a -> Encoding
toCBOR PerasSeatIndex
pviSeatIndex