Virtual Machines on the Æternity blockchain

A smart contract is associated with a virtual machine for the execution of that
contract. The Æternity blockchain supports the virtual machine AEVM - A version
of the Ethereum VM. The AEVM can also use different ABIs, and it is versioned to
ensure that runs on earlier version can still be run to validate the chain in
the presence of consensus breaking VM changes.

A Create Contract transaction and the contract state tree contains a
'vm_version' field and an 'abi_version' field. These fields describes the type
and version of the virtual machine to use for the contract and the type and
version of the application binary interface (ABI) of the contract. (Note that
the serialization packs the version into one integer.)

Which VM versions are accepted are different based on consensus protocol versions.

Protocol version

Operation

Accepted VM values

Accepted ABI values

Roma

contract call/create

0x1

0x1

oracle register

(Not applicable.)

0x0, 0x1

Minerva

contract call

0x1, 0x3

0x1

contract create

0x3

0x1

oracle register

(Not applicable.)

0x0, 0x1

Fortuna

contract call

0x1, 0x3, 0x4

0x1

contract create

0x3, 0x4

0x1

oracle register

(Not applicable.)

0x0, 0x1

The number after the machine name designates the version of the machine.
In the future new versions of the machine can be implemented with new instructions,
contracts using these machines must use a new vm_version number corresponding
to the new machine version.

The ABI name correspond to the supported languages. All Ethereum VM languages
uses the same ABI (Solidity_1). The languages can in the future be extended
with new functionality and new ABIs reflected by the ABI version number.

For a description of each ABI see the corresponding language description:
Sophia, Solidity, Varna.