Hey everyone! Exactly 4 weeks after releasing version 2.3.0, we are happy to announce the 2.4.0 release of ZeppelinOS! As usual, congrats to @jcarpanelli and @ylv-io for their efforts on this new milestone, as well as to @tsudmi for his contributions.

This version is a continuation of 2.3 in terms of major improvements to developer experience. We rethought and rebuilt all outputs presented by the CLI, so only the info that actually matters is presented. We also added four new commands for interacting with your contracts directly from the command line, and added direct integration with the solidity compiler (both native and js versions), so you don’t have to go through truffle if you don’t want to. And as the cherry on top, you can also create EIP1167 minimal proxies with this version!

Nicer outputs to focus on what really matters

While in 2.3 we focused on improving the ZeppelinOS inputs, by implementing friendlier interacting commands, in 2.4 we focused on improving its outputs. We removed much of the verbosity that plagued the CLI, and show you only what actually matters. We also integrated the awesome spinnies library for presenting long-running operations.

If you miss having the CLI filling your terminal with lots of output, you can bring back the old mode (with even more info!) by using the --verbose flag in any command.

Standalone CLI for a simpler setup

You can now run ZeppelinOS without depending on truffle. Version 2.4 ships with a new zos compile command that will install and run solcjs on your behalf, and compile your Solidity contracts when needed. As a bonus feature, zos will check if there is a solc on your PATH that matches the requested version, and use it instead of the javascript port - this yields a 6x speed improvement in compile times (you may have noticed the difference in the gif above!). It’s worth mentioning that the artifacts generated by zos compile follow the same format as truffle’s.

Also, zos init will now create a framework-independent networks.js file with the description of the network connections for your project. The format is similar to that of truffle-config.js , with an additional protocol key that allows you to specify whether you want to connect to your node via http(s) , ws(s) , ipc , etc.

Of course, ZeppelinOS remains fully compatible with truffle. If the CLI detects a truffle(-config).js on your project root, it will still rely on truffle for compiling your contracts, and will load the networks configuration from truffle as usual.

Interacting with your contracts directly from the command line

We have added new commands for interacting with your contract instances easily. You can now send a transaction or move funds directly from the terminal, without having to spawn a javascript console.

You can try out the following commands:

zos balance queries the balance of an account, either in ETH or in an ERC20

zos transfer sends funds from one of your accounts to another

zos call executes a constant method in one of your contracts, and returns the value

zos send-tx sends a transaction to one of your contracts, and returns the events

Cheap EIP1167 minimal proxies

We have added experimental support for EIP1167 minimal proxies. These proxies rely on the same delegatecall pattern as the usual ZeppelinOS proxies, but have two main differences:

They cannot be upgraded to a different version of the code

They are incredibly cheap to deploy: about 1/10th of the standard proxy!

These features make minimal proxies an ideal choice when you want to spawn many copies of the same contract, without worrying about maintaining them in the future. They also play nicely with EVM packages: since the package developer pays the deployment cost of the logic contracts, you only need to pay for the minimal proxies.

You can try deploying one of these proxies by adding the --minimal flag when running zos create . Remember that these proxies will not be upgradeable to a different version of the code: the reduced deployment gas fee comes at a cost!