aquavm/docs/update-guide.md
2023-09-25 13:19:27 +03:00

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.