Releases: aionnetwork/AVM
AVM 2.0 release
This marks the first AVM 2 release. NOTE: AVM 2.x is not consensus-compatible with AVM 1.x! Contracts deployed on AVM 1.x will be retransformed for AVM 2, upon first transaction invocation.
Noteworthy changes:
- Removed inappropriate methods from
StringBuffer
(buffer size changes) andString
(regex uses) - Changed JCL billing mechanism to avoid double-billing and align costs more closely with real expense of these operations (in the majority of cases, this reduced the JCL energy cost)
- Added restrictions to what is considered a valid contract:
- no more than
4095
constant pool entries per class - no more than
511
methods per class - no more than
63
local variables in a method - no more than
63
operand stack slots per method - no more than
15
exception handlers per method - no more than
4095
bytes of code per method
- no more than
- Added diagnostic utilities to collect data around deployed contracts
- Fixed double-increment of nonce in some cases
- Fixed the energy cost of heap usage: this is now directly associated with the instance variables in an object
- Fixed a bug where a reverted transaction would over-charge the sender
- Added meta-transaction support via
Blockchain.invokeTransaction
- Added ability API to get the hash of the current external transaction via
Blockchain.getTransactionHash
AVM 1.5 release
Note that this is the final planned release of the AVM 1.x versions before consensus-breaking changes are introduced in AVM 2.0.
Changes since 1.4.2
- Simplify concurrent abort handling
- (tooling) Add
BigInteger
andBigInteger[]
as API types - (tooling) Improved JAR optimizer
- (userlib) New
AionMap
design and implementation - Removed SLF4J dependency
- Silence all tests, by default
- (tooling) Improved capabilities and documentation around
AvmRule
Latest Tooling Jars
This release contains the latest version of the AVM jars required to setup a development environment in which one can write and test Java contracts.
Breaking Changes
AvmTransactionResult
was replaced withTransactionResult
.ResultCode
was replaced withTransactionStatus
.IExecutionLog
was replaced withLog
.- The tooling module was split into two modules: embed and tooling. This allows a distinction between components which require embedding the AVM (such as
AvmRule
andAvmCLI
in embed) and those that exist purely outside of it (such asABICompiler
andJarOptimizer
in tooling). - Removed the dependency on
vm_api
and added a dependency onaion-types
.
New Features
- Added ABI support for
BigInteger
andBigInteger[]
. This feature is enabled from ABI version 1. Hence, in order to useBigInteger
as an ABI type, version number should be passed as an argument to theABICompiler
orAvmRule
. - Added two new optimization steps to reduce energy consumption:
Renamer
: renames class, method, and field names to shorter Strings.ConstantRemover
: removesABIException
messages from userlib classes.
- Added
OptimizedJarBuilder
to select which optimization steps to perform on an input jar. Note thatAvmRule
uses all the optimization steps. - Updated
AvmRule
to automatically generate a new block after each transaction. This feature can be disabled.
Bug Fixes
- Fixed
MethodReachabilityDetector
to considerINVOKESTATIC
method inheritance. - Fixed an issue which would cause deployment of a user defined interface to fail in debug mode.
Improvements
- Changed
AionMap
implementation from a B+ Tree data structure to a hash table that uses Separate Chaining for collision resolution. - Added a utility method for padding log topics shorter than 32 bytes on the left (found in
AionUtilities
). - Added an additional unused class removal optimization step after unreachable methods have been removed.
Avm 1.1
Avm 1.0
Avm-integrated Kernel For Testnet (April 17, 2019)
A build of an Avm-integrated Java Kernel that is configured specifically to connect to the Avm Testnet.
This binary provides you with a basic Hello World dapp (provided as dapp.jar), a basic script to interact with the Testnet via rpc (provided as rpc.sh), and a script to compile Java source code into jar files (provided as compile.sh).
Avm-integrated Kernel For Testnet (April 10, 2019)
A build of an Avm-integrated Java Kernel that is configured specifically to connect to the Avm Testnet.
This binary provides you with a basic Hello World dapp (provided as dapp.jar), a basic script to interact with the Testnet via rpc (provided as rpc.sh), and a script to compile Java source code into jar files (provided as compile.sh).
Avm-integrated Kernel For Testnet (March 26, 2019)
A build of an Avm-integrated Java Kernel that is configured specifically to connect to the Avm Testnet.
This binary provides you with a basic Hello World dapp (provided as dapp.jar), a basic script to interact with the Testnet via rpc (provided as rpc.sh), and a script to compile Java source code into jar files (provided as compile.sh).
Avm-integrated Kernel For Testnet (March 5, 2019)
A build of an Avm-integrated Java Kernel that is configured specifically to connect to the Avm Testnet.
This binary provides you with a basic Hello World dapp (provided as dapp.jar), a basic script to interact with the Testnet via rpc (provided as rpc.sh), and a script to compile Java source code into jar files (provided as compile.sh).
Avm-integrated Kernel For Testnet (Feb 8, 2019)
A build of an Avm-integrated Java Kernel that is configured specifically to connect to the Avm Testnet.
This binary provides you with a basic Hello World dapp (provided as dapp.jar), a basic script to interact with the Testnet via rpc (provided as rpc.sh), and a script to compile Java source code into jar files (provided as compile.sh).