Juvix imports
module arch.node.engines.executor_environment;
import prelude open;
import arch.node.types.messages open;
import arch.node.types.identities open;
import arch.node.types.engine_environment open;
import arch.node.engines.executor_messages open;
import arch.node.types.anoma_message as Anoma open;
Executor Environment¶
Overview¶
The executor environment maintains state needed during transaction execution including completed reads/writes and program state.
Auxiliary Juvix code
axiom executeStep : Executable
-> ProgramState
-> Pair KVSKey KVSDatum
-> Result
String
(Pair ProgramState (List (Either KVSKey (Pair KVSKey KVSDatum))));
executeStep
:- Takes the executable code, current program state, and read key-value pair and returns either: - Error string on failure - New program state and list of either: - Left key for read requests - Right (key, value) for write requests
Mailbox states¶
The executor engine does not require complex mailbox states.
ExecutorMailboxState
¶
syntax alias ExecutorMailboxState := Unit;
Local state¶
ExecutorLocalState
¶
type ExecutorLocalState :=
mkExecutorLocalState@{
program_state : ProgramState;
completed_reads : Map KVSKey KVSDatum;
completed_writes : Map KVSKey KVSDatum;
};
Arguments
program_state
- Current state of the executing program
completed_reads
- Map of keys to values that have been successfully read
completed_writes
- Map of keys to values that have been successfully written
Timer Handle¶
The executor engine does not require timer handles.
ExecutorTimerHandle
¶
syntax alias ExecutorTimerHandle := Unit;
The Executor Environment¶
ExecutorEnv
¶
ExecutorEnv : Type :=
EngineEnv
ExecutorLocalState
ExecutorMailboxState
ExecutorTimerHandle
Anoma.Msg;
Instantiation¶
executorEnv : ExecutorEnv :=
mkEngineEnv@{
localState :=
mkExecutorLocalState@{
program_state :=
mkProgramState@{
data := "";
halted := false;
};
completed_reads := Map.empty;
completed_writes := Map.empty;
};
mailboxCluster := Map.empty;
acquaintances := Set.empty;
timers := [];
};