OpenZeppelin has terrible examples covering Upgradable smart contracts

Hi everyone, I would like to point out my disappointment towards the documentation regards Upgradability of Smart Contracts.
I can't find a real good example of proxy and logic usage online that uses the OpenZeppelin SDKs.
The only one I find is this but it just uses some scripts in js! I was expecting a real tutorial on how to manage everything from start to end (so the deployment of a logic smart contract, then the deployment of the Proxy and so on...), instead I find a tutorial that just says "use this script e woila'". No, I don't like this and I think this is a really poor documentation over a very hard concept of Smart Contracts.
If you have any docs with an example written in a good manner please point that to me, thanks.
Thanks for reading.

Hi @Allennick, thank you for the feedback.

The OpenZeppelin Upgrades Plugins are plugins targeted to the Hardhat and Truffle development environments, both of which provide scripting environments (yes, js scripts) for interacting with contracts. This allows you to develop and test your contracts and program how they are deployed, and testing is particularly important to ensure that your contracts are properly upgradeable.

There are some more detailed step-by-step tutorials on the forum for each of these environments:

The OpenZeppelin Upgrades Plugins for these environments help with deploying and managing upgradeable contracts. As described here, the plugins handle many of the details for you, which include deploying the implementation contract, admin contract (if needed), and proxy contract. They also validate that your implementation is upgrade safe and compatible with the previous version.

It is also possible to manually deploy or upgrade the contracts separately, but using the Upgrades Plugins is recommended because they help to validate your implementation for upgrade safety.

Let me know if this helps or if you prefer to deploy and manage your contracts in a different way outside of Hardhat and Truffle.

1 Like

Hi! I'm using Remix to understand things better but as you can see from my question posted on stackoverflow (here: How can I call the "initialise" function when I deploy the MyProxy contract? What do I have to pass as the third parameter to call that function?

The _data parameter is the encoded function call for the initializer (and its arguments) in your implementation contract that you want to call. I've provided a more detailed answer in your StackOverflow post.