Meta-Properties#
Each sub-VM carries VM meta-properties. Some are part of the startup message; others are VM-internal. This page defines those fields; how they are derived when a sub-VM starts is specified in Sub-VM Creation.
Most permission meta-properties are granted by the node for the initial entry. The exception is can_use_balance_for_message_fees, which is owned by the contract: it is stored in the contract’s root slot and read before execution begins.
Execution Meta-Properties#
stack#
Startup-message field containing the view-call stack of contract addresses.
depth#
Internal field containing the nesting depth of the sub-VM.
permissions#
Internal field containing the permission meta-properties granted to the sub-VM.
state_mode#
Internal field selecting the storage view used by reads (a storage_type).
topmost_runner_id#
Internal field selecting the entry runner for this sub-VM.
det_subvm_hashes#
Internal accumulator for deterministic child sub-VM result hashes; see Sub-VM Result Hash.
granted_custom#
Internal field containing custom runners granted to this sub-VM at startup; see Custom-Runner Grants.
Custom runners are not permission meta-properties: they are tracked by the sub-VM’s loaded-runner set (Custom Runner Loading) and by this field.
Permission Meta-Properties#
deterministic#
When true, the sub-VM executes in Deterministic Mode. Storage writes, message sends, contract calls, event emission, and runner registration require this meta-property where specified below.
write_storage#
Allows writing contract storage slots. Requires deterministic.
This meta-property also gates EmitEvent: a sub-VM may emit events
iff it can write storage.
send_messages#
Allows sending messages to other addresses. Required by EthSend,
PostMessage, and DeployContract. Requires
deterministic.
call_others#
Allows calling other contracts. Required by EthCall and
CallContract Message.
Requires deterministic.
spawn_nondet#
Allows spawning Non-Deterministic Mode sub-VM instances via RunNondet Message.
register_runners#
Allows registering runner archives at runtime via RegisterRunner Message. Requires deterministic.
can_use_balance_for_message_fees#
Allows the contract to draw on its own balance to pay fees for outgoing
internal messages (PostMessage, DeployContract). The flag has no effect
on external EthSend messages.
Unlike the meta-properties above, this one is stored as a bit in the root slot’s
inline permissions bitfield and read before execution begins. The bit offset
is the corresponding member of permissions.