Miden assembly supports the concept of events. Events are a simple data structure with a single
event_id field. When an event is emitted by a program, it is communicated to the host. Events can be emitted at specific points of program execution with the intent of triggering some action on the host. This is useful as the program has contextual information that would be challenging for the host to infer. The emission of events allows the program to communicate this contextual information to the host. The host contains an event handler that is responsible for handling events and taking appropriate actions. The emission of events does not change the state of the VM but it can change the state of the host.
An event can be emitted via the
emit.<event_id> assembly instruction where
<event_id> can be any 32-bit value specified either directly or via a named constant. For example:
Miden assembly also supports code tracing, which works similar to the event emitting.
A trace can be emitted via the
trace.<trace_id> assembly instruction where
<trace_id> can be any 32-bit value specified either directly or via a named constant. For example:
To make use of the
trace instruction, programs should be ran with tracing flag (
--tracing), otherwise these instructions will be ignored.