I went trough the OpenZeppelin docs for the hardhat-upgrade plugin, for the upgradeable contracts, for the Minimum proxy pattern and for the Clones library.
I have a contract using the Clones library, as I don't need any upgrades. But I don't understand how the deployment script has to look like.
-
Do I have to deploy it using
upgrades.deployProxy
ordeploy
? -
Should I have this call inside the ERC20 token from this example:
address clone = Clones.clone(tokenImplementation);
-
Assuming I will have just one contract, how can I verify it ? The issue is the call to the Clones.clone function.
Is there a tutorial for using the new Clones library ?
Many thanks !!
=====================================
EDIT: I made it work. I deployed two different contracts:
- The main contract, which is equivalent to the ERC20 token in this example.
- The factory contract, which has only one function called
createToken
that calls the Clones library and hence deploys the minimal proxy contract.
My question now is if I can have state variables for each proxy, not declared in the main contract. I need to be able to pause each proxy. I was using OpenZeppelin's Pausable contract, but I didn't have a proxy.