Hey folks! After several weeks of hard work, we have released version 2.3 of ZeppelinOS. Kudos to

@jcarpanelli and @ylv-io of the core team for their great efforts, as well as to @paulinablaszk, @siromivel, @hardlydifficult, @k06a, and @perseverance for their contributions to this release!

This new version marks a huge improvement in terms of developer experience, adding interactive prompts to most commands in the CLI. We have also overhauled the set-admin command, and added a new create2 command for easily using this opcode directly from the command-line.

Interactive commands

The ZeppelinOS CLI will now guide you through the process of creating a new upgradeable contract and updating it as needed. We have reworked most commands on the CLI to be interactive, and handle any necessary work for you. Now, instead of typing the following 3 commands…

$ zos add MyContract $ zos push --network mainnet $ zos create MyContract --network mainnet --init initialize --args 42 > Instance created at 0x123456

… you can just run zos create and let the CLI walk you through it.

All previous arguments and flags still work. However, if you are writing a script to run in an automated environment, you can also add a --no-interactive flag to any command to make sure it will never prompt, or set a global ZOS_NON_INTERACTIVE environment variable. The CLI will also honor the DEBIAN_FRONTEND=noninteractive variable.

Zepkit packs

You can now use zos unpack zepkit directly from the CLI to kickstart a new Dapp, already preconfigured with OpenZeppelin contracts, ZeppelinOS, Truffle, React, and Infura. This will generate a barebones application ready to start hacking.

We are also providing zos unpack tutorial , which unpacks a similar pack but with a step-by-step tutorial on how to use ZeppelinOS for deploying and upgrading your contracts.

Set-admin command

In previous versions, zos set-admin would allow you to change the upgradeability admin (ie the Ethereum account, contract or externally owned, that had the rights to upgrade an instance) of each individual proxy in your application. However, on version 2.2, we introduced the ProxyAdmin component, which is a small contract that acts as a the owner of all your instances for your project (which you own in turn).

We have updated the zos set-admin command to take advantage of this new contract. It now allows you to change ownership of your entire project to a different account in a single transaction, by just changing the owner of the root ProxyAdmin . The functionality from previous versions is maintained, meaning that you can still change ownership of any individual instances if needed.

CREATE2 command

CREATE2 is an EVM opcode that allows you to deploy a contract at a predictable address, by providing a salt that is used to compute the deployment address. It is used in generalized state channels implementations, as well as in improved user onboarding flows.

With this new release, you can leverage CREATE2 directly from the command line, deploying an upgradeable contract at a predictable address with a one-liner. The CLI will take care of setting up the necessary contracts for you, so you don’t to implement everything from scratch.

We have also added early meta-transaction support for this command. Instead of having the deployment address determined by the salt and the sender of the transaction, now a user can sign a CREATE2 request for a specific contract with a salt, and have the transaction submitted by anyone.

$ zos create2 MyContract --query --salt 42 --signature 0xabcdef --init initialize > Instance of MyContract initialized with 'initialize()' with salt 42 and signature 0xabcdef will be deployed at 0x654321 ... $ zos create2 MyContract --salt 42 --signature 0xabcdef --init initialize > Instance of MyContract deployed at 0x654321

Check out the changelog for detailed information on this new release, and the smart contracts audit report by @alcuadrado from Nomic Labs.