From d63f7ca743cdab21e2629783a3fa683936849cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Thu, 27 Apr 2023 11:11:30 +0200 Subject: [PATCH] Add reinitializer for upgrades to Contributor In order to be able to re-initialize the upgraded contract with the profile manager address, we need a new re-initializer function that is automatically allowed to only be executed once per contract implementation version. Co-authored-by: Michael Bumann --- contracts/Contributor.sol | 4 ++++ package-lock.json | 14 +++++++------- package.json | 2 +- scripts/upgrade-example.js | 14 ++++++++++++-- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/contracts/Contributor.sol b/contracts/Contributor.sol index 1877700..1681412 100644 --- a/contracts/Contributor.sol +++ b/contracts/Contributor.sol @@ -50,6 +50,10 @@ contract Contributor is Initializable { profileManager = profileManagerAddress; } + function reinitialize(address profileManagerAddress) public reinitializer(2) { + profileManager = profileManagerAddress; + } + function setContributionContract(address contribution) public onlyCore { require(address(contributionContract) == address(0) || addressIsCore(msg.sender), "Core only"); contributionContract = IContributionBalance(contribution); diff --git a/package-lock.json b/package-lock.json index 24552c6..c4cddf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", - "@openzeppelin/contracts-upgradeable": "^4.3.2", + "@openzeppelin/contracts-upgradeable": "^4.8.3", "@openzeppelin/hardhat-upgrades": "^1.10.0", "async-each-series": "^1.1.0", "chai": "^4.3.6", @@ -1225,9 +1225,9 @@ } }, "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", "dev": true }, "node_modules/@openzeppelin/hardhat-upgrades": { @@ -20951,9 +20951,9 @@ } }, "@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", "dev": true }, "@openzeppelin/hardhat-upgrades": { diff --git a/package.json b/package.json index bf6c9f6..bb07899 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", - "@openzeppelin/contracts-upgradeable": "^4.3.2", + "@openzeppelin/contracts-upgradeable": "^4.8.3", "@openzeppelin/hardhat-upgrades": "^1.10.0", "async-each-series": "^1.1.0", "chai": "^4.3.6", diff --git a/scripts/upgrade-example.js b/scripts/upgrade-example.js index c2cad6d..77be9db 100644 --- a/scripts/upgrade-example.js +++ b/scripts/upgrade-example.js @@ -7,7 +7,17 @@ async function main() { await kredits.init(); const ContributorV2 = await ethers.getContractFactory("Contributor"); - const contributor = await upgrades.upgradeProxy(kredits.Contributor.address, ContributorV2); + const contributor = await upgrades.upgradeProxy( + kredits.Contributor.address, + ContributorV2, + { + call: { + fn: "reinitialize", + args: [ + "0xc80d2513277FA04B10403E2D1d7dAa86F931f4d1" + ] + } + }); console.log("Contributor upgraded"); console.log(`Contributor address: ${contributor.address}`); @@ -16,4 +26,4 @@ async function main() { console.log("DONE!"); } -main(); +main()