Juvix imports
module arch.node.engines.wall_clock_environment;
import prelude open;
import arch.node.engines.wall_clock_messages open;
import arch.node.types.engine open;
import arch.node.types.messages open;
import arch.node.types.identities open;
import arch.node.types.anoma_message as Anoma open;
Wall Clock Environment¶
Overview¶
The Local Wall Clock Engine provides and keeps track of a local time.
Mailbox states¶
The wall clock engine does not require complex mailbox states. We define the mailbox state as Unit.
syntax alias WallClockMailboxState := Unit;
Local state¶
type WallClockLocalState :=
  mkWallClockLocalState@{
    currentTime : EpochTimestamp;
  };
Arguments
- currentTime
- The current epoch time value
Timer Handle¶
The wall clock engine does not require a timer handle type.
Therefore, we define the timer handle type as Unit.
syntax alias WallClockTimerHandle := Unit;
The Wall Clock Environment¶
Auxiliary abstraction Functions¶
axiom advanceTime : EpochTimestamp -> EpochTimestamp;
WallClockEnv¶
WallClockEnv : Type :=
  EngineEnv
    WallClockLocalState
    WallClockMailboxState
    WallClockTimerHandle
    Anoma.Msg;
Instantiation¶
wallClockEnv : WallClockEnv :=
  mkEngineEnv@{
    localState :=
      mkWallClockLocalState@{
        currentTime := 0;
      };
    mailboxCluster := Map.empty;
    acquaintances := Set.empty;
    timers := [];
  };