The AVM is a JVM-compliant blockchain execution environment that unlocks the entire Java ecosystem and enables you to write smart contracts in Java.
The web3j Aion project
It was great working with a group of like-minded engineers. Like the
Aion team, we are passionate technologists who strive to keep blockchain technology simple and share the common belief about the
future of Java and the JVM for the blockchain.
When we started the
web3j-aion project our intentions were clear. We wanted to make it easier for Java/JVM developers who work with Ethereum to use the Aion blockchain network in a way that complemented the Aion stack. Also, we wanted to help unblock developers building dApps, whilst promoting open-source.
The
web3j-aion project adds to the existing Aion Java development stack: a Maven plugin and
IntelliJ Idea plugin. By integrating with the familiar web3j API, the Aion network becomes accessible for developers who already use web3j to work with Ethereum. This brings similar capabilities of the JavaScript web3-aion and Ethers.js libraries to the Java ecosystem.
It also grows the number of
web3j integrations available for a diverse array of blockchain clients and platforms, which already includes Parity, Geth and
Pantheon, and
Quorum.
Getting started
To get up and running quickly, we created the web3j Aion samples repository. It allows you to understand the entire lifecycle of your blockchain code and Aion smart contracts, from development to deployment. Running the following commands will enable you to get a Java Aion smart contract up and running in a few steps:
Clone the samples repository
Compile the HelloWorld contract
To simplify the starting process, in the samples project we have included a test module. This contains a simple Java contract that you can modify and run so that you can get familiar with the web3j for Aion development environment:
public class HelloAvm {
private static String myStr = “Hello AVM”; @Callable
public static void sayHello() {
Blockchain.println(“Hello Avm”);
} @Callable
public static String greet(String name) {
return “Hello “ + name;
} ...
}
This contract, generated with the
aion4j Maven archetype, demonstrates a very basic interaction with a contract by printing some logs, greeting with a given name and getting/setting a text stored as the contract state. To compile it, from the samples project run the commands:
Generate the HelloWorld contract wrapper
Once the contract compilation is complete, the created artefacts will be in the target folder of the Maven project. Use them as the input for the contract wrapper generation task, which you can run with the command:
// Create an Aion instance with a node URL
Aion aion = Aion.build(new HttpService("..."));
// Create a manager for local transaction signing with a private key
TransactionManager manager = new AionTransactionManager(
aion, new Ed25519KeyPair("..."), VirtualMachine.AVM
);
// Deploy the HelloAvm contract
HelloAvm contract = HelloAvm.deploy(
aion, manager, AionGasProvider.INSTANCE
).send();
// Call greet and receive "Hello John"
String result = contract.call_greet("John").send();
For more details on running an end-to-end test using this contract wrapper on an Aion network, check the project documentation and the web3j Aion tutorial. Check also the official
Aion blog post on the project announcement.
What’s next?
We’re really excited with this support for Aion in web3j, and keen to hear from you, the community on how you’re finding it. If you have any suggestions for the project, please create a
new issue, or even better submit a pull request!. We will be happy to integrate improvements and new features to the library.