Looking for Someone to Champion the Diamond Standard for OpenZeppelin

I am looking for someone familiar with OpenZeppelin who would be interested in creating OpenZeppelin-based contracts and tools for the Diamond Standard and championing it forward in the OpenZeppelin ecosystem.

Here is a little info about the Diamond Standard:

A diamond is a set of contracts that can access the same storage variables and share the same Ethereum address.

Why use a diamond on Ethereum? Multiple small contracts calling each other increases complexity. A diamond handling its storage and functionality is simpler.

It provides a cohesive way to organize and structure complex contract interaction.

By cohesive I mean that code that is associated with each other should be easy to use together. At the same time the Diamond Standard provides a degree of modularity. It provides this balance that is very useful.

The Diamond Standard also solves a huge technical problem which is the 24KB maximum contract size limit. This limit becomes a problem when you need contract code to access the same storage variables but can't anymore because the contract size has gotten too big. The Diamond Standard enables multiple contracts to access the same storage variables in the same/similar way one large contract could.

A contract architecture that makes upgradeable contracts flexible, unlimited in size, and transparent.

The Diamond Standard is here: https://github.com/ethereum/EIPs/issues/2535

To be clear, this is not a paid role, as there is currently no financial backing for the Diamond Standard. It is for someone who sees the value of the Diamond Standard and has the time, vision, interest and technical expertise to make it more accessible to others via OpenZeppelin.

1 Like

For EIPs to be added to OpenZeppelin Contracts the preference is for the EIP to be final.

So for any non-final EIP, it may be best to focus on getting the EIP finalized and community adoption. Having a champion for the EIP could really help with this process. An example of this was ERC721.


Looking specifically at upgrades, on the roadmap is to move the OpenZeppelin upgrade proxies to OpenZeppelin Contracts.
https://github.com/OpenZeppelin/openzeppelin-sdk/issues/1528

1 Like

Hi @Nick_Mudge! Can you tell us if there’s already projects interested in using the Diamond Standard in production?

1 Like

@frangio Yes, there are projects interested in using the Diamond Standard in production.

Here is a blog post about the Diamond Standard from someone who is using the Diamond Standard in production: Upgradeable smart contracts using the Diamond Standard

The Diamond Standard is hot on Reddit and there are some people in the comments expressing intent to use it: A diamond is a set of contracts that can access the same storage variables and share the same Ethereum address.

I know a couple other companies/people that are using it in production or are planning to.

Also, I know someone who is working on a new Python framework for creating Ethereum contracts using the Diamond Standard. I’m told it will be released this week or next week.

1 Like

As promised, here is the new tool to automate contract upgrades using the Diamond Standard: http://joeyzacherl.com/2020/06/diamond-setter-ethereum-smart-contract-manager/

1 Like

Has this been implemented yet? If no, I might be interested in providing an implementation

Hey @Amxx I’d be happy for whatever you would like to do.

There are currently three different implementations of EIP-2535 Diamond Standard. Information about them are here: https://github.com/mudgen/diamond I would like there to be an implementation for OpenZeppelin.

Some projects are using EIP-2535 Diamond Standard, so more tools, documentation, tutorials, implementations are very welcome and will likely get used.

Various other info about diamonds can be found on my blog: https://dev.to/mudgen

1 Like

Please keep in mind that we won’t merge an EIP while it’s in Draft status.

1 Like

@Nick_Mudge I am interested in helping with this as well. @Amxx have you already started working on it?

@Daniel_I We're currently not planning to support Diamond proxies as I explained in #2793:

Our current position on this is that the work required to support diamond proxies is too much for us to take on. It is not only about the initial work to build the Solidity contracts and become confident about their security, but also documentation and other materials, support for the pattern in our Upgrades Plugins and OpenZeppelin Defender, and continued maintenance of all of that going forward. At the moment we're not interested in commiting to all or part of this work.

Hello Frangio. Given the fact that Diamonds are already an ERC and OZ team has embraced some of its concepts for the 5.0.0 upgrade. Are there any other implementations of diamonds features in the future?

I would like to know particularly regarding ERC1967 Proxies since it could make use of the dynamic storage layout diamonds bring to the table to avoid having only one implementation.

Currently there have been some simple implementations such as this one which showcases my point.