2.5 KiB
AquaVM update guide
AquaVM repo components
Here is the list of main components crucial from the update point of view:
AquaVM core - the main part of AquaVM interpreter, e.g., it contains instruction implementation
AVM client - an AquaVM launcher for browser and Node.js targets
AVM server - an AquaVM launcher for server-side targets
AIR parser - a parser of AIR code
Interpreter data - contains definition of data that is passed between different AquaVM in so called particle
Interpreter interface - contains definition of AquaVM interface which is used by AVM server
and test runners
Interpreter signature - utility crate for signatures, e.g. contains methods for se/de
Trace Handler - crate intended to handle all interpreter data related stuff
AquaVM core updating policy
There are three main variables in the code intended to set and check versions of the main AquaVM core components:
MINIMAL_INTERPRETER_VERSION
This variable sets the minimal supported version of AquaVM core
. This variable should be updated after every breaking change in AquaVM core
, AIR parser
, Interpreter data
, Interpreter signature
, Trace Handler
, and maybe other crates that break an AIR script execution. Particle'll be rejected if it comes from a network containing a version less than the specified MINIMAL_INTERPRETER_VERSION
with an error propagated to a host running this AquaVM (so, an error message won't be sent to a peer initiated this communication).
INTERPRETER_VERSION
It represents the version of the current AquaVM instance, this variable is passed in interpreter data and compared with MINIMAL_INTERPRETER_VERSION
at the preparation stage. It is updated automatically by AquaVM core
version.
INTERPRETER_DATA_VERSION
This variable represents the current version of an interpreter data format, it aims to create a more clear error message when a particle is rejected or is failed to deserialize after a breaking change.
AVM updating policy
Both AVM client
and AVM server
versions should be updated simultaneously in case of breaking change in AquaVM core
interface, e.g., when arguments are changes. Often they must be updated if Interpreter interface
crate was changed, but they don't need to be updated if Interpreter data
or AquaVM core
itself was changed.