Messages

Messages

-- r-cur, current QC_high , when QC-high.r = r-cur - 1 then TC = nothing else TC.r = r-1
TimeoutMessage = TimeoutEvidence × Maybe TC
Proposal       = Signed Block
VoteShare      = SignedShare (BlockId × Round)
TCMessage      = {- Signed -} TC

instance
  HasRound-VS = HasRound VoteShare       λ where ._∙round   proj₂   datum
  HasRound-TM = HasRound TimeoutMessage  λ where ._∙round  _∙round  proj₁

  HasBlockId-VS = HasBlockId VoteShare  λ where ._∙blockId  proj₁  datum

data Message : Type where
  Propose  : Proposal        Message
  Vote     : VoteShare       Message
  TCFormed : TCMessage       Message
  Timeout  : TimeoutMessage  Message

Messages   = List Message
VoteShares = List VoteShare
data _qc∈-Message_ (qc : QC) : Message  Type where
  qc∈-Propose :
    qc  sb ∙qc
    ─────────────────────────
    qc qc∈-Message Propose sb

  qc∈-ProposeTC :
     sb ∙tc?  just tc
     qc ∈₁ qcs⁺ tc
      ─────────────────────────
      qc qc∈-Message Propose sb

  qc∈-TCFormed :
    qc ∈₁ qcs⁺ tc
    ──────────────────────────
    qc qc∈-Message TCFormed tc

  qc∈-Timeout : ∀{tm} 
    qc  (tm .proj₁) ∙qcTE
    ─────────────────────────
    qc qc∈-Message Timeout tm

  qc∈-TimeoutTC : ∀{tm} 
     tm .proj₂  just tc
     qc ∈₁ qcs⁺ tc
      ─────────────────────────
      qc qc∈-Message Timeout tm

data _tc∈-Message_ (tc : TC) : Message  Type where
  tc∈-Propose :
    sb ∙tc?  just tc
    ─────────────────────────
    tc tc∈-Message Propose sb

  tc∈-TCFormed :
    ──────────────────────────
    tc tc∈-Message TCFormed tc

  tc∈-Timeout : ∀{tm} 
    tm .proj₂  just tc
    ─────────────────────────
    tc tc∈-Message Timeout tm
IsTimeoutForRound : Round  Message  Type
IsTimeoutForRound r (Timeout (te , _)) = te ∙round  r
IsTimeoutForRound r _ = 

VotesFor : Block  Message  Type
VotesFor b = λ where
  (Vote vs)  vs ∙blockId  b ∙blockId
  _  

Envelopes

Envelopes add a recipient to a message (recipient = just p), or are a broadcast message (recipient = nothing).

record Envelope : Type where
   constructor [_?∣_⟩
   field recipient : Maybe Pid
         content   : Message