Skip to content


In this lab you learned to use all available methods to upgrade Smart Contracts. From an audit perspective, it's always better to use a simpler method. I am personally a big fan of KISS (keep it simple stupid), although it sometimes means that it doesn't look elegant.

I think the Diamond Storage is a very interesting way to "deconstruct" a Smart Contract into smaller parts and plug them back together in a Proxy contract. At this point I would not choose the architecture, because it adds a new layer of complexity to an ecosystem that often manages large amounts of money.

Knowing what's happening under the hood, if I'd start a new larger project from scratch, I'd use OpenZepplin Plugins now, if upgradeability is necessary to keep an address constant.

If I don't need a constant address, I'd probably go with either the Eternal Storage pattern or something even simpler. It's easier to audit, easier to grasp, and less error prone.

I hope this lab helped you to choose the right pattern for your project.

Last update: April 17, 2021