ZeppelinOS February 2019 development update

Hey everyone! Following our January development update, we want to make this a tradition and share a monthly update with you. We hacked a lot of things during the first month of the year, so part of our work during February has been testing, polishing up and releasing. This is what this past month looked like for us:

Version 2.2 released with new ProxyAdmin component

We released version 2.2, which not only includes a full migration of the codebase to Typescript, and the update from web3.js 0.x to 1.0-beta.37, but also a new ProxyAdmin component developed by @jcarpanelli. This is a very small contract that is deployed behind the scenes by zos on every project, and acts as the central admin of all your proxies.

This allows you to interact with any proxy from any address you own. Since zOS uses transparent proxies for implementing upgradeability, this means that you can only interact with them from an address that is not the admin. By moving the admin to a separate contract address, this frees up your own accounts to easily work with your own proxy. You can read more about this here.

Note that if you are upgrading from 2.1, then zos will automatically prompt for upgrading from that version to 2.2, by deploying a new ProxyAdmin and transferring the ownership of all your proxies to it.

This release is also accompanied by several improvements to our documentation guides, work of @ajsantander. Make sure to check them out!

ZepKit released

Developed by @rrecuero, we released ZepKit, a starter box for DApps, that bundles together Truffle, preconfigured Infura connections, OpenZeppelin, ZeppelinOS, and a React app with some helpful initial components - everything wired so you can start hacking right away.

The kit was released just in time for EthDenver, and we were happy to see several teams using it for bootstrapping their projects during the hackathon. Check out this post from @Dennison to learn more about our recap of the event! We were also happy to host a live-coding workshop on ZepKit a few days ago in NYC, run by @Dennison, @frangio, and @martriay.

We are adding new goodies to the kit as well, including a contracts hot-code reloader by @ylv-io, which uses zOS behind the scenes to automatically recompile, redeploy, and update your contracts in your ganache network while on development!

Interactive commands

@jcarpanelli has been working hard on making the commands from the zos CLI interactive, so you don't need to specify every single option when running the command. Instead, the CLI now guides you through each command, asking for any missing input to execute. This makes the developer experience much smoother now.

We will keep working on this feature, which we plan to release as part of 2.3.

Example project on creating instances from Solidity

@ajsantander added a new example project to our repository that showcases how to create upgradeable instances directly from Solidity. If you are initializing new contracts from Factory contracts, you will want to check this one out!

Reserved addresses for contracts deployment

We are experimenting with the new CREATE2 opcode to allow you to deploy an upgradeable instance of any contract to a reserved address. This allows you to implement user onboarding flows that require knowing in advance where a user's contract will be deployed, without needing to actually deploy it until it is absolutely necessary. As @chris.whinfrey pointed out:

A good example use case is that you could create a contract based account/Universal Login EVM package. New users could get a “reserved address” (the language we used for an address of an undeployed contract) where they can deposit funds. Then, a third party (“relayer”) can deploy the contract for them and receive a gas refund. This creates a single step user experience to onboard new users onto a contract based account.

The alternative three step experience is:

  • obtain ETH held in a key based account
  • deploy contract based account with key based account
  • send remaining ETH to contract based account

As part of this task, we have also updated all of our ZeppelinOS contracts to Solidity 0.5, to have CREATE2 support in the compiler. You can read more about this feature here.

What's next

We have plenty on our hands to keep up the work on interactive commands, as well as improving the commands' output information, as well as wrapping up the new CREATE2 feature. We will also be announcing soon a partnership with an awesome team for working together on better user onboarding flows via the use of gas station networks, so stay tuned!

Happy coding!