Skip to content

Commit f4f40f1

Browse files
authored
Trace verifier (#256)
1 parent 6b02529 commit f4f40f1

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

flake.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
url = "github:input-output-hk/iogx";
88
};
99

10-
leios-spec.url = "github:input-output-hk/ouroboros-leios-formal-spec?ref=ee654a42c81f1a2e6290ee13c9c6abcd03b30079";
10+
leios-spec.url = "github:input-output-hk/ouroboros-leios-formal-spec?ref=1bea2eaedf3cc38448a11819f3e2a7ab75b24735";
1111
};
1212

1313

leios-trace-verifier/Parser.agda

+33-17
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ module Parser where
66
{-# LANGUAGE OverloadedStrings #-}
77
#-}
88

9-
open import Leios.Foreign.Defaults 2 fzero
10-
open import Leios.Foreign.Types hiding (EndorserBlock)
11-
129
{-# FOREIGN GHC
1310
import Data.Word
1411
import Data.Fixed
@@ -56,33 +53,52 @@ record Endorsement : Type where
5653

5754
data Event : Type where
5855
Cpu : String Time String Event
59-
60-
IBSent EBSent VTBundleSent RBSent IBReceived EBReceived VTBundleReceived RBReceived :
61-
Maybe Node Node Maybe Bytes Maybe Time Maybe String Maybe (List String) Event
62-
56+
IBSent EBSent VTBundleSent RBSent IBReceived EBReceived VTBundleReceived RBReceived : Maybe Node Node Maybe Bytes Maybe Time Maybe String Maybe (List String) Event
6357
IBEnteredState EBEnteredState VTBundleEnteredState RBEnteredState : String String Word64 Event
64-
6558
IBGenerated : String String SlotNo Maybe Bytes Maybe Bytes Maybe String Event
66-
6759
EBGenerated : String String Word64 Word64 List BlockRef Event
68-
6960
RBGenerated : String Maybe String Maybe Int Word64 Maybe Word64 Maybe Endorsement Maybe (List Endorsement) Maybe Word64 Event
70-
7161
VTBundleGenerated : String String Word64 Word64 Map String Word64 Event
7262

7363
{-# COMPILE GHC Event = data Event (Cpu | IBSent | EBSent | VTBundleSent | RBSent | IBReceived | EBReceived | VTBundleReceived | RBReceived
74-
| IBEnteredState | EBEnteredState | VTBundleEnteredState | RBEnteredState
75-
| IBGenerated | EBGenerated | RBGenerated | VTBundleGenerated) #-}
64+
| IBEnteredState | EBEnteredState | VTBundleEnteredState | RBEnteredState | IBGenerated | EBGenerated | RBGenerated | VTBundleGenerated) #-}
7665

7766
record TraceEvent : Type where
7867
field time_s : Time
7968
message : Event
8069

8170
{-# COMPILE GHC TraceEvent = data TraceEvent (TraceEvent) #-}
8271

83-
-- FIXME: Implementation
84-
verifyTrace : List TraceEvent Bool
85-
verifyTrace [] = false
86-
verifyTrace (_ ∷ _) = true
72+
open import Leios.SpecStructure using (SpecStructure)
73+
open import Leios.Trace.Verifier
74+
75+
open import Leios.Defaults 2 fzero using (st)
76+
open import Leios.Short st
77+
78+
EventLog = List TraceEvent
79+
80+
traceEvent→action : TraceEvent Maybe (Action × LeiosInput)
81+
traceEvent→action record { message = Cpu x x₁ x₂ } = nothing
82+
traceEvent→action record { message = IBSent x x₁ x₂ x₃ x₄ x₅ } = nothing
83+
traceEvent→action record { message = EBSent x x₁ x₂ x₃ x₄ x₅ } = nothing
84+
traceEvent→action record { message = VTBundleSent x x₁ x₂ x₃ x₄ x₅ } = nothing
85+
traceEvent→action record { message = RBSent x x₁ x₂ x₃ x₄ x₅ } = nothing
86+
traceEvent→action record { message = IBReceived x x₁ x₂ x₃ x₄ x₅ } = nothing
87+
traceEvent→action record { message = EBReceived x x₁ x₂ x₃ x₄ x₅ } = nothing
88+
traceEvent→action record { message = VTBundleReceived x x₁ x₂ x₃ x₄ x₅ } = nothing
89+
traceEvent→action record { message = RBReceived x x₁ x₂ x₃ x₄ x₅ } = nothing
90+
traceEvent→action record { message = IBEnteredState x x₁ x₂ } = nothing
91+
traceEvent→action record { message = EBEnteredState x x₁ x₂ } = nothing
92+
traceEvent→action record { message = VTBundleEnteredState x x₁ x₂ } = nothing
93+
traceEvent→action record { message = RBEnteredState x x₁ x₂ } = nothing
94+
traceEvent→action record { message = IBGenerated p _ s _ _ _ } = just (IB-Role-Action , SLOT)
95+
traceEvent→action record { message = EBGenerated p _ s _ ibs } = just (EB-Role-Action , SLOT)
96+
traceEvent→action record { message = RBGenerated x x₁ x₂ x₃ x₄ x₅ x₆ x₇ } = nothing
97+
traceEvent→action record { message = VTBundleGenerated x x₁ x₂ x₃ x₄ } = just (V-Role-Action , SLOT)
98+
99+
verifyTrace : EventLog Bool
100+
verifyTrace l =
101+
let αs = L.catMaybes $ L.map traceEvent→action l
102+
in ¿ ValidTrace αs ¿ᵇ
87103

88104
{-# COMPILE GHC verifyTrace as verifyTrace #-}

0 commit comments

Comments
 (0)