The first quarter of 2020 has flown by, and April finds most of us sheltering at our homes to fight back the ongoing pandemic by flattening the curve. Nonetheless, we wanted to share with you what we have been working on during this first part of the year at OpenZeppelin. Hope you enjoyed what we shipped as much as we enjoyed building it!

Contracts 2.5 & 3.0

New data structures and utils, plus Solidity 0.6 support with a revamped access control solution

We released @openzeppelin/contracts@2.5 early in the year, with the new EnumerableSet data structure, easy create2 usage, and cheaper ERC721 metadata URIs. We also recently released the @openzeppelin/contracts-ethereum-package fork of 2.5, so you can use these new features in your upgradeable projects.

Version 2.5 was our latest minor release of the 2.x major. We have been working hard on Contracts 3.0, which includes not only the migration to Solidity 0.6, but also a full revamp of our access control contracts, a new hooks-based extensibility pattern, and other major changes. The release candidate is out, so test it and tell us what you think before the final 3.0 version is released!

SDK 2.7, 2.8 & beyond

Typechain and Solidity 0.6 support, plus deployment of contracts without upgrades

The SDK version 2.7, which includes the command-line tool and the upgrades javascript library, was released during February. This small release included typechain support for typescript-based projects, faster response times, and support for Solidity 0.6 projects.

Yet more significant was the 2.8 release that came shortly afterwards. This release added a new command, oz deploy , that allows you to deploy a contract directly, without upgrades support. This allows you to set up deployments where a set of core contracts remains immutable, while satellite or modular contracts are made upgradeable. But regardless of your architecture, the point is that now the OpenZeppelin CLI can be used for any kind of project, upgradeable or not.

We have also been exploring how to simplify the process of writing upgradeable contracts, with the goal of removing the upgradeable fork of the contracts package. The result so far is a contracts transpiler that automatically turns any contract into an upgradeable one, by rewriting its constructor as initializer, moving inline variable initializations to initializers, and other changes. We are currently working on designing the best way to integrate this transpiler into the development workflow!

Learning site

Brand new documentation site with learning guides for every step of smart contract development

A major undertaking during Q1 was a full redesign of our documentation site, with a new structure, a more clear placing of all our different projects, and a set of brand new learn guides that cover all steps in smart contract development - from your first contract to going to production.

We are very happy with the result, and have seen increased traffic to the learn guides, which have become a valuable resource for not just OpenZeppelin users but for anyone new to the space!

We are now working towards defining our goals for Q2. In the spirit of increased transparency around our open source development efforts, we will be sharing soon the roadmaps for our projects for the next few weeks, as we did with contracts and the SDK during February-March. Let us know if you have any feedback or requests to help us guide these roadmaps! And happy coding!