Skip to content

Commit 2a0bea5

Browse files
committed
refactor: proxy mocks simplification
1 parent c98a69d commit 2a0bea5

File tree

5 files changed

+86
-88
lines changed

5 files changed

+86
-88
lines changed

contracts/src/proxy/mock/MockImplementations.sol renamed to contracts/src/proxy/mock/UUPSUpgradeableMocks.sol

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -62,58 +62,3 @@ contract UUPSUnsupportedProxiableUUID is UUPSUpgradeableMock {
6262
return "UUPSUnsupportedProxiableUUID 1.0.0";
6363
}
6464
}
65-
66-
contract UUPSUpgradableInitializableInheritanceV1 is UUPSProxiable, Initializable {
67-
address public governor;
68-
uint256 public counter;
69-
uint256[50] __gap;
70-
71-
constructor() {
72-
_disableInitializers();
73-
}
74-
75-
function initialize(address _governor) external virtual reinitializer(1) {
76-
governor = _governor;
77-
counter = 1;
78-
}
79-
80-
function _authorizeUpgrade(address) internal view override {
81-
require(governor == msg.sender, "No privilege to upgrade");
82-
}
83-
84-
function increment() external {
85-
++counter;
86-
}
87-
88-
function version() external pure virtual returns (string memory) {
89-
return "V1";
90-
}
91-
}
92-
93-
contract UUPSUpgradableInitializableInheritanceV2 is UUPSUpgradableInitializableInheritanceV1 {
94-
string public newVariable;
95-
uint256[50] __gap2;
96-
97-
constructor() {
98-
_disableInitializers();
99-
}
100-
101-
function initializeV2(string memory _newVariable) external reinitializer(2) {
102-
newVariable = _newVariable;
103-
this.increment();
104-
}
105-
106-
function version() external pure virtual override returns (string memory) {
107-
return "V2";
108-
}
109-
}
110-
111-
contract UUPSUpgradableInitializableInheritanceV3Bad is UUPSUpgradableInitializableInheritanceV2 {
112-
constructor() {
113-
_disableInitializers();
114-
}
115-
116-
function initializeV3() external reinitializer(1) {
117-
// Wrong reinitializer version.
118-
}
119-
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//SPDX-License-Identifier: MIT
2+
// Adapted from <https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/mocks/proxy/UUPSUpgradeableMock.sol>
3+
4+
pragma solidity 0.8.18;
5+
6+
import "../../UUPSProxiable.sol";
7+
import "../../Initializable.sol";
8+
9+
contract UpgradedByInheritanceV1 is UUPSProxiable, Initializable {
10+
address public governor;
11+
uint256 public counter;
12+
uint256[50] __gap;
13+
14+
constructor() {
15+
_disableInitializers();
16+
}
17+
18+
function initialize(address _governor) external virtual reinitializer(1) {
19+
governor = _governor;
20+
counter = 1;
21+
}
22+
23+
function _authorizeUpgrade(address) internal view override {
24+
require(governor == msg.sender, "No privilege to upgrade");
25+
}
26+
27+
function increment() external {
28+
++counter;
29+
}
30+
31+
function version() external pure virtual returns (string memory) {
32+
return "V1";
33+
}
34+
}
35+
36+
contract UpgradedByInheritanceV2 is UpgradedByInheritanceV1 {
37+
string public newVariable;
38+
uint256[50] __gap2;
39+
40+
constructor() {
41+
_disableInitializers();
42+
}
43+
44+
function initializeV2(string memory _newVariable) external reinitializer(2) {
45+
newVariable = _newVariable;
46+
this.increment();
47+
}
48+
49+
function version() external pure virtual override returns (string memory) {
50+
return "V2";
51+
}
52+
}
53+
54+
contract UpgradedByInheritanceV3Bad is UpgradedByInheritanceV2 {
55+
constructor() {
56+
_disableInitializers();
57+
}
58+
59+
function initializeV3() external reinitializer(1) {
60+
// Wrong reinitializer version.
61+
}
62+
}

contracts/src/proxy/mock/UUPSUpgradableInitializable.sol renamed to contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
pragma solidity 0.8.18;
55

6-
import "../UUPSProxiable.sol";
7-
import "../Initializable.sol";
6+
import "../../UUPSProxiable.sol";
7+
import "../../Initializable.sol";
88

9-
contract UUPSUpgradableInitializable is UUPSProxiable, Initializable {
9+
contract UpgradedByRewrite is UUPSProxiable, Initializable {
1010
//------------------------
1111
// V1 State
1212
//------------------------

contracts/src/proxy/mock/UUPSUpgradableInitializableV2.sol renamed to contracts/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
pragma solidity 0.8.18;
55

6-
import "../UUPSProxiable.sol";
7-
import "../Initializable.sol";
6+
import "../../UUPSProxiable.sol";
7+
import "../../Initializable.sol";
88

9-
contract UUPSUpgradableInitializable is UUPSProxiable, Initializable {
9+
contract UpgradedByRewrite is UUPSProxiable, Initializable {
1010
//------------------------
1111
// V1 State
1212
//------------------------

contracts/test/proxy/index.ts

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ import { log } from "console";
33
import { ethers, deployments } from "hardhat";
44
import { DeployResult } from "hardhat-deploy/types";
55
import { deployUpgradable } from "../../deploy/utils/deployUpgradable";
6-
import {
7-
UUPSUpgradableInitializableInheritanceV1,
8-
UUPSUpgradableInitializableInheritanceV2,
9-
} from "../../typechain-types";
6+
import { UpgradedByInheritanceV1, UpgradedByInheritanceV2 } from "../../typechain-types";
7+
import { UpgradedByRewrite as UpgradedByRewriteV1 } from "../../typechain-types/src/proxy/mock/by-rewrite";
8+
import { UpgradedByRewrite as UpgradedByRewriteV2 } from "../../typechain-types/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol";
109

1110
let deployer;
1211
let user1;
@@ -119,8 +118,8 @@ describe("Upgradability", async () => {
119118
before("Setup Contracts", async () => {
120119
[deployer] = await ethers.getSigners();
121120

122-
proxyDeployment = await deployUpgradable(deployments, "UUPSUpgradableInitializable", {
123-
contract: "src/proxy/mock/UUPSUpgradableInitializable.sol:UUPSUpgradableInitializable",
121+
proxyDeployment = await deployUpgradable(deployments, "UpgradedByRewrite", {
122+
contract: "src/proxy/mock/by-rewrite/UpgradedByRewrite.sol:UpgradedByRewrite",
124123
from: deployer.address,
125124
args: [deployer.address],
126125
log: true,
@@ -131,11 +130,9 @@ describe("Upgradability", async () => {
131130
});
132131

133132
it("Initializes v1", async () => {
134-
proxy = (await ethers.getContract("UUPSUpgradableInitializable")) as UUPSUpgradableInitializableInheritanceV1;
133+
proxy = (await ethers.getContract("UpgradedByRewrite")) as UpgradedByRewriteV1;
135134

136-
implementation = (await ethers.getContract(
137-
"UUPSUpgradableInitializable_Implementation"
138-
)) as UUPSUpgradableInitializableInheritanceV1;
135+
implementation = (await ethers.getContract("UpgradedByRewrite_Implementation")) as UpgradedByRewriteV1;
139136

140137
expect(await proxy.governor()).to.equal(deployer.address);
141138

@@ -150,16 +147,16 @@ describe("Upgradability", async () => {
150147
});
151148

152149
it("Upgrades to v2 and initializes", async () => {
153-
proxyDeployment = await deployUpgradable(deployments, "UUPSUpgradableInitializable", {
154-
contract: "src/proxy/mock/UUPSUpgradableInitializableV2.sol:UUPSUpgradableInitializable",
150+
proxyDeployment = await deployUpgradable(deployments, "UpgradedByRewrite", {
151+
contract: "src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol:UpgradedByRewrite",
155152
from: deployer.address,
156153
args: ["Future of France"],
157154
log: true,
158155
});
159156
if (!proxyDeployment.implementation) {
160157
throw new Error("No implementation address");
161158
}
162-
proxy = (await ethers.getContract("UUPSUpgradableInitializable")) as UUPSUpgradableInitializableInheritanceV2;
159+
proxy = (await ethers.getContract("UpgradedByRewrite")) as UpgradedByRewriteV2;
163160
expect(await proxy.governor()).to.equal(deployer.address);
164161

165162
expect(await proxy.counter()).to.equal(3);
@@ -176,7 +173,7 @@ describe("Upgradability", async () => {
176173
before("Setup Contracts", async () => {
177174
[deployer] = await ethers.getSigners();
178175

179-
proxyDeployment = await deployUpgradable(deployments, "UUPSUpgradableInitializableInheritanceV1", {
176+
proxyDeployment = await deployUpgradable(deployments, "UpgradedByInheritanceV1", {
180177
from: deployer.address,
181178
args: [deployer.address],
182179
log: true,
@@ -187,13 +184,9 @@ describe("Upgradability", async () => {
187184
});
188185

189186
it("Initializes v1", async () => {
190-
proxy = (await ethers.getContract(
191-
"UUPSUpgradableInitializableInheritanceV1"
192-
)) as UUPSUpgradableInitializableInheritanceV1;
187+
proxy = (await ethers.getContract("UpgradedByInheritanceV1")) as UpgradedByInheritanceV1;
193188

194-
implementation = (await ethers.getContract(
195-
"UUPSUpgradableInitializableInheritanceV1_Implementation"
196-
)) as UUPSUpgradableInitializableInheritanceV1;
189+
implementation = (await ethers.getContract("UpgradedByInheritanceV1_Implementation")) as UpgradedByInheritanceV1;
197190

198191
expect(await proxy.governor()).to.equal(deployer.address);
199192

@@ -208,17 +201,15 @@ describe("Upgradability", async () => {
208201
});
209202

210203
it("Upgrades to v2 and initializes", async () => {
211-
proxyDeployment = await deployUpgradable(deployments, "UUPSUpgradableInitializableInheritanceV1", {
212-
newImplementation: "UUPSUpgradableInitializableInheritanceV2",
204+
proxyDeployment = await deployUpgradable(deployments, "UpgradedByInheritanceV1", {
205+
newImplementation: "UpgradedByInheritanceV2",
213206
initializer: "initializeV2",
214207
from: deployer.address,
215208
args: ["Future of France"],
216209
log: true,
217210
});
218211

219-
proxy = (await ethers.getContract(
220-
"UUPSUpgradableInitializableInheritanceV1"
221-
)) as UUPSUpgradableInitializableInheritanceV2;
212+
proxy = (await ethers.getContract("UpgradedByInheritanceV1")) as UpgradedByInheritanceV2;
222213

223214
expect(await proxy.governor()).to.equal(deployer.address);
224215

@@ -233,8 +224,8 @@ describe("Upgradability", async () => {
233224

234225
it("Cannot upgrade to v3 which has an invalid initializer", async () => {
235226
await expect(
236-
deployUpgradable(deployments, "UUPSUpgradableInitializableInheritanceV1", {
237-
newImplementation: "UUPSUpgradableInitializableInheritanceV3Bad",
227+
deployUpgradable(deployments, "UpgradedByInheritanceV1", {
228+
newImplementation: "UpgradedByInheritanceV3Bad",
238229
initializer: "initializeV3",
239230
from: deployer.address,
240231
args: [],

0 commit comments

Comments
 (0)