@rocketh/proxy 0.19.5 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -9,7 +9,16 @@ export type ProxyDeployOptions = Omit<DeployOptions, 'skipIfAlreadyDeployed' | '
9
9
  owner?: EIP1193Account;
10
10
  execute?: string | {
11
11
  methodName: string;
12
- args: unknown[];
12
+ args?: any[];
13
+ } | {
14
+ init: string | {
15
+ methodName: string;
16
+ args?: any[];
17
+ };
18
+ onUpgrade?: string | {
19
+ methodName: string;
20
+ args?: any[];
21
+ };
13
22
  };
14
23
  upgradeIndex?: number;
15
24
  checkProxyAdmin?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAC,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAS,aAAa,EAAC,MAAM,iBAAiB,CAAC;AActD,YAAY,EAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAC,CAAC;AAE1F,MAAM,MAAM,uBAAuB,GAChC,aAAa,GACb,wBAAwB,GACxB,MAAM,GACN,yCAAyC,GACzC,sCAAsC,CAAC;AAE1C,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,uBAAuB,GAAG,gBAAgB,CAAC,GAAG;IAClG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EACL,MAAM,GACN;QACA,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO,EAAE,CAAC;KACf,CAAC;IACL,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,aAAa,CAAC,EACX,uBAAuB,GACvB,CAAC;QAAC,IAAI,EAAE,uBAAuB,CAAA;KAAC,GAAG;QACnC,IAAI,EAAE,yCAAyC,GAAG,sCAAsC,CAAC;QACzF,cAAc,CAAC,EAAE,MAAM,CAAC;KAEvB,CAAC,GACF;QACA,IAAI,EAAE,QAAQ,CAAC;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;KAepD,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,IAAI,SAAS,GAAG,IAAI,CACtD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,EACpD,OAAO,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAG/B,MAAM,MAAM,mCAAmC,CAAC,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IACpH,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,kDAAkD,CAAC,IAAI,SAAS,GAAG,IAAI,IAAI,CACtF,sBAAsB,CAAC,IAAI,CAAC,EAC5B,UAAU,CACV,GAAG;IACH,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,SAAS,GAAG,EACrD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mCAAmC,CAAC,IAAI,CAAC,EACjD,OAAO,CAAC,EAAE,kBAAkB,KACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAE/B,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,GACd,CAAC,IAAI,SAAS,GAAG,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mCAAmC,CAAC,IAAI,CAAC,EACjD,OAAO,CAAC,EAAE,kBAAkB,KACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAqY7B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -161,20 +161,63 @@ export function deployViaProxy(env) {
161
161
  }
162
162
  let postUpgradeCalldata;
163
163
  if (options?.execute) {
164
- const methodName = typeof options.execute === 'string' ? options.execute : options.execute.methodName;
165
- const argsToExecute = typeof options.execute === 'string' ? args : options.execute.args;
166
- const method = artifactToUse.abi.find((v) => v.type === 'function' && v.name === methodName);
167
- if (method) {
168
- postUpgradeCalldata = encodeFunctionData({
169
- ...viemArgs,
170
- args: argsToExecute,
171
- account: address,
172
- abi: [method],
173
- functionName: method.name,
174
- });
164
+ let execution;
165
+ if (typeof options.execute == 'string') {
166
+ execution = {
167
+ methodName: options.execute,
168
+ args: args,
169
+ };
170
+ }
171
+ else if ('methodName' in options.execute) {
172
+ execution = {
173
+ methodName: options.execute.methodName,
174
+ args: options.execute.args || args,
175
+ };
175
176
  }
176
177
  else {
177
- throw new Error(`Method ${methodName} not found in artifact provided for ${name}`);
178
+ if (existingDeployment) {
179
+ if (typeof options.execute.onUpgrade === 'string') {
180
+ execution = {
181
+ methodName: options.execute.onUpgrade,
182
+ args: args,
183
+ };
184
+ }
185
+ else if (typeof options.execute.onUpgrade === 'object') {
186
+ execution = {
187
+ methodName: options.execute.onUpgrade.methodName,
188
+ args: options.execute.onUpgrade.args || args,
189
+ };
190
+ }
191
+ }
192
+ else {
193
+ if (typeof options.execute.init === 'string') {
194
+ execution = {
195
+ methodName: options.execute.init,
196
+ args: args,
197
+ };
198
+ }
199
+ else if (typeof options.execute.init === 'object') {
200
+ execution = {
201
+ methodName: options.execute.init.methodName,
202
+ args: options.execute.init.args || args,
203
+ };
204
+ }
205
+ }
206
+ }
207
+ if (execution) {
208
+ const method = artifactToUse.abi.find((v) => v.type === 'function' && v.name === execution.methodName);
209
+ if (method) {
210
+ postUpgradeCalldata = encodeFunctionData({
211
+ ...viemArgs,
212
+ args: execution.args,
213
+ account: address,
214
+ abi: [method],
215
+ functionName: method.name,
216
+ });
217
+ }
218
+ else {
219
+ throw new Error(`Method ${execution.methodName} not found in artifact provided for ${name}`);
220
+ }
178
221
  }
179
222
  }
180
223
  // let preUpgradeCalldata: `0x${string}` | undefined;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocketh/proxy",
3
- "version": "0.19.5",
3
+ "version": "0.19.6",
4
4
  "description": "provide proxy-enabled deploy function for rocketh",
5
5
  "keywords": [
6
6
  "rocketh",
@@ -51,8 +51,8 @@
51
51
  "eip-1193": "^0.6.5",
52
52
  "named-logs": "^0.4.1",
53
53
  "viem": "^2.45.1",
54
- "@rocketh/deploy": "0.19.1",
55
54
  "@rocketh/core": "0.19.0",
55
+ "@rocketh/deploy": "0.19.1",
56
56
  "@rocketh/read-execute": "0.19.0"
57
57
  },
58
58
  "devDependencies": {
@@ -1,42 +1,134 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity ^0.6.0;
3
3
 
4
+ /// @title Proxied
5
+ /// @notice Abstract contract providing proxy-aware initialization and access control utilities
6
+ /// @dev This contract is designed to be inherited by implementation contracts used behind ERC1967 proxies.
7
+ /// It provides modifiers for proxy-only execution and initialization patterns.
8
+ /// Storage slots follow the ERC1967 standard where applicable.
4
9
  abstract contract Proxied {
5
- /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them
6
- /// It also allows these functions to be called inside a contructor
7
- /// even if the contract is meant to be used without proxy
8
- modifier proxied() {
9
- address proxyAdminAddress = _proxyAdmin();
10
- // With hardhat-deploy proxies
11
- // the proxyAdminAddress is zero only for the implementation contract
12
- // if the implementation contract want to be used as a standalone/immutable contract
13
- // it simply has to execute the `proxied` function
14
- // This ensure the proxyAdminAddress is never zero post deployment
15
- // And allow you to keep the same code for both proxied contract and immutable contract
16
- if (proxyAdminAddress == address(0)) {
17
- // ensure can not be called twice when used outside of proxy : no admin
18
- // solhint-disable-next-line security/no-inline-assembly
19
- assembly {
20
- sstore(
21
- 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,
22
- 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23
- )
24
- }
25
- } else {
26
- require(msg.sender == proxyAdminAddress);
27
- }
28
- _;
29
- }
30
-
31
- modifier onlyProxyAdmin() {
32
- require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED");
33
- _;
34
- }
35
-
36
- function _proxyAdmin() internal view returns (address ownerAddress) {
37
- // solhint-disable-next-line security/no-inline-assembly
38
- assembly {
39
- ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
40
- }
41
- }
10
+ /// @notice Restricts function access to the proxy admin only
11
+ /// @dev Uses the ERC1967 admin slot to determine the admin address
12
+ modifier onlyProxyAdmin() {
13
+ require(msg.sender == _proxyAdmin(), "PROXY_ONLY_ADMIN");
14
+ _;
15
+ }
16
+
17
+ /// @notice Modifier for functions that should only be called once during proxy initialization
18
+ /// @dev This modifier ensures the function can only be called once and only through a proxy.
19
+ ///
20
+ /// =====================================================================================
21
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
22
+ /// =====================================================================================
23
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
24
+ /// (typically via the proxy constructor's initialization calldata).
25
+ ///
26
+ /// If the initializer function is NOT called at deployment time, the contract will be
27
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
28
+ /// take control of the contract. This could lead to:
29
+ /// - Unauthorized ownership of the contract
30
+ /// - Theft of funds
31
+ /// - Manipulation of contract state
32
+ ///
33
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
34
+ /// =====================================================================================
35
+ modifier asProxyOneTimeInitialiser() {
36
+ bool initialised = _ensureProxyOnly();
37
+
38
+ // only allowed to be called once
39
+ require(!initialised, "PROXY_ALREADY_INITIALISED");
40
+
41
+ _markAsInitialised();
42
+
43
+ _;
44
+ }
45
+
46
+ /// @notice Modifier for functions that can be re-initialized by the proxy admin after first initialization
47
+ /// @dev On first call, marks the contract as initialized. On subsequent calls, requires proxy admin.
48
+ ///
49
+ /// =====================================================================================
50
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
51
+ /// =====================================================================================
52
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
53
+ /// (typically via the proxy constructor's initialization calldata).
54
+ ///
55
+ /// If the initializer function is NOT called at deployment time, the contract will be
56
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
57
+ /// take control of the contract. This could lead to:
58
+ /// - Unauthorized ownership of the contract
59
+ /// - Theft of funds
60
+ /// - Manipulation of contract state
61
+ ///
62
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
63
+ ///
64
+ /// After initialization, only the proxy admin can call functions with this modifier,
65
+ /// which is useful for upgrade scenarios where re-initialization may be needed.
66
+ /// =====================================================================================
67
+ modifier asProxyInitialiser() {
68
+ bool initialised = _ensureProxyOnly();
69
+
70
+ if (initialised) {
71
+ // if initialised, can be called only by proxy admin
72
+ require(msg.sender == _proxyAdmin(), "PROXY_INIT_ONLY_ADMIN");
73
+ } else {
74
+ _markAsInitialised();
75
+ }
76
+
77
+ _;
78
+ }
79
+
80
+ /// @notice Ensures the function is being called through a proxy and returns initialization status
81
+ /// @dev Reverts if not called through a proxy (i.e., if implementation address is zero)
82
+ /// @return initialised Whether the proxy has already been initialized
83
+ function _ensureProxyOnly() internal view returns (bool initialised) {
84
+ address implementationAddress = _proxyImplementation();
85
+
86
+ // only allowed if proxy
87
+ require(implementationAddress != address(0), "PROXY_ONLY");
88
+
89
+ initialised = _proxyInitialised();
90
+ }
91
+
92
+ /// @notice Marks the proxy as initialized
93
+ /// @dev Writes `true` to the custom initialization storage slot.
94
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
95
+ function _markAsInitialised() internal {
96
+ // solhint-disable-next-line security/no-inline-assembly
97
+ assembly {
98
+ sstore(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4, true)
99
+ }
100
+ }
101
+
102
+ /// @notice Returns the current proxy admin address
103
+ /// @dev Reads from the ERC1967 admin slot.
104
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
105
+ /// @return ownerAddress The address of the proxy admin
106
+ function _proxyAdmin() internal view returns (address ownerAddress) {
107
+ // solhint-disable-next-line security/no-inline-assembly
108
+ assembly {
109
+ ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
110
+ }
111
+ }
112
+
113
+ /// @notice Returns the current implementation address
114
+ /// @dev Reads from the ERC1967 implementation slot.
115
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
116
+ /// @return implementationAddress The address of the current implementation contract
117
+ function _proxyImplementation() internal view returns (address implementationAddress) {
118
+ // solhint-disable-next-line security/no-inline-assembly
119
+ assembly {
120
+ implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)
121
+ }
122
+ }
123
+
124
+ /// @notice Checks whether the proxy has been initialized
125
+ /// @dev Reads from the custom initialization storage slot.
126
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
127
+ /// @return initialised Whether the proxy has been initialized
128
+ function _proxyInitialised() internal view returns (bool initialised) {
129
+ // solhint-disable-next-line security/no-inline-assembly
130
+ assembly {
131
+ initialised := sload(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4)
132
+ }
133
+ }
42
134
  }
@@ -1,42 +1,134 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity ^0.7.0;
3
3
 
4
+ /// @title Proxied
5
+ /// @notice Abstract contract providing proxy-aware initialization and access control utilities
6
+ /// @dev This contract is designed to be inherited by implementation contracts used behind ERC1967 proxies.
7
+ /// It provides modifiers for proxy-only execution and initialization patterns.
8
+ /// Storage slots follow the ERC1967 standard where applicable.
4
9
  abstract contract Proxied {
5
- /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them
6
- /// It also allows these functions to be called inside a contructor
7
- /// even if the contract is meant to be used without proxy
8
- modifier proxied() {
9
- address proxyAdminAddress = _proxyAdmin();
10
- // With hardhat-deploy proxies
11
- // the proxyAdminAddress is zero only for the implementation contract
12
- // if the implementation contract want to be used as a standalone/immutable contract
13
- // it simply has to execute the `proxied` function
14
- // This ensure the proxyAdminAddress is never zero post deployment
15
- // And allow you to keep the same code for both proxied contract and immutable contract
16
- if (proxyAdminAddress == address(0)) {
17
- // ensure can not be called twice when used outside of proxy : no admin
18
- // solhint-disable-next-line security/no-inline-assembly
19
- assembly {
20
- sstore(
21
- 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,
22
- 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23
- )
24
- }
25
- } else {
26
- require(msg.sender == proxyAdminAddress);
27
- }
28
- _;
29
- }
30
-
31
- modifier onlyProxyAdmin() {
32
- require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED");
33
- _;
34
- }
35
-
36
- function _proxyAdmin() internal view returns (address ownerAddress) {
37
- // solhint-disable-next-line security/no-inline-assembly
38
- assembly {
39
- ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
40
- }
41
- }
10
+ /// @notice Restricts function access to the proxy admin only
11
+ /// @dev Uses the ERC1967 admin slot to determine the admin address
12
+ modifier onlyProxyAdmin() {
13
+ require(msg.sender == _proxyAdmin(), "PROXY_ONLY_ADMIN");
14
+ _;
15
+ }
16
+
17
+ /// @notice Modifier for functions that should only be called once during proxy initialization
18
+ /// @dev This modifier ensures the function can only be called once and only through a proxy.
19
+ ///
20
+ /// =====================================================================================
21
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
22
+ /// =====================================================================================
23
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
24
+ /// (typically via the proxy constructor's initialization calldata).
25
+ ///
26
+ /// If the initializer function is NOT called at deployment time, the contract will be
27
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
28
+ /// take control of the contract. This could lead to:
29
+ /// - Unauthorized ownership of the contract
30
+ /// - Theft of funds
31
+ /// - Manipulation of contract state
32
+ ///
33
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
34
+ /// =====================================================================================
35
+ modifier asProxyOneTimeInitialiser() {
36
+ bool initialised = _ensureProxyOnly();
37
+
38
+ // only allowed to be called once
39
+ require(!initialised, "PROXY_ALREADY_INITIALISED");
40
+
41
+ _markAsInitialised();
42
+
43
+ _;
44
+ }
45
+
46
+ /// @notice Modifier for functions that can be re-initialized by the proxy admin after first initialization
47
+ /// @dev On first call, marks the contract as initialized. On subsequent calls, requires proxy admin.
48
+ ///
49
+ /// =====================================================================================
50
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
51
+ /// =====================================================================================
52
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
53
+ /// (typically via the proxy constructor's initialization calldata).
54
+ ///
55
+ /// If the initializer function is NOT called at deployment time, the contract will be
56
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
57
+ /// take control of the contract. This could lead to:
58
+ /// - Unauthorized ownership of the contract
59
+ /// - Theft of funds
60
+ /// - Manipulation of contract state
61
+ ///
62
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
63
+ ///
64
+ /// After initialization, only the proxy admin can call functions with this modifier,
65
+ /// which is useful for upgrade scenarios where re-initialization may be needed.
66
+ /// =====================================================================================
67
+ modifier asProxyInitialiser() {
68
+ bool initialised = _ensureProxyOnly();
69
+
70
+ if (initialised) {
71
+ // if initialised, can be called only by proxy admin
72
+ require(msg.sender == _proxyAdmin(), "PROXY_INIT_ONLY_ADMIN");
73
+ } else {
74
+ _markAsInitialised();
75
+ }
76
+
77
+ _;
78
+ }
79
+
80
+ /// @notice Ensures the function is being called through a proxy and returns initialization status
81
+ /// @dev Reverts if not called through a proxy (i.e., if implementation address is zero)
82
+ /// @return initialised Whether the proxy has already been initialized
83
+ function _ensureProxyOnly() internal view returns (bool initialised) {
84
+ address implementationAddress = _proxyImplementation();
85
+
86
+ // only allowed if proxy
87
+ require(implementationAddress != address(0), "PROXY_ONLY");
88
+
89
+ initialised = _proxyInitialised();
90
+ }
91
+
92
+ /// @notice Marks the proxy as initialized
93
+ /// @dev Writes `true` to the custom initialization storage slot.
94
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
95
+ function _markAsInitialised() internal {
96
+ // solhint-disable-next-line security/no-inline-assembly
97
+ assembly {
98
+ sstore(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4, true)
99
+ }
100
+ }
101
+
102
+ /// @notice Returns the current proxy admin address
103
+ /// @dev Reads from the ERC1967 admin slot.
104
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
105
+ /// @return ownerAddress The address of the proxy admin
106
+ function _proxyAdmin() internal view returns (address ownerAddress) {
107
+ // solhint-disable-next-line security/no-inline-assembly
108
+ assembly {
109
+ ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
110
+ }
111
+ }
112
+
113
+ /// @notice Returns the current implementation address
114
+ /// @dev Reads from the ERC1967 implementation slot.
115
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
116
+ /// @return implementationAddress The address of the current implementation contract
117
+ function _proxyImplementation() internal view returns (address implementationAddress) {
118
+ // solhint-disable-next-line security/no-inline-assembly
119
+ assembly {
120
+ implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)
121
+ }
122
+ }
123
+
124
+ /// @notice Checks whether the proxy has been initialized
125
+ /// @dev Reads from the custom initialization storage slot.
126
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
127
+ /// @return initialised Whether the proxy has been initialized
128
+ function _proxyInitialised() internal view returns (bool initialised) {
129
+ // solhint-disable-next-line security/no-inline-assembly
130
+ assembly {
131
+ initialised := sload(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4)
132
+ }
133
+ }
42
134
  }
@@ -1,42 +1,134 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity ^0.8.0;
3
3
 
4
+ /// @title Proxied
5
+ /// @notice Abstract contract providing proxy-aware initialization and access control utilities
6
+ /// @dev This contract is designed to be inherited by implementation contracts used behind ERC1967 proxies.
7
+ /// It provides modifiers for proxy-only execution and initialization patterns.
8
+ /// Storage slots follow the ERC1967 standard where applicable.
4
9
  abstract contract Proxied {
5
- /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them
6
- /// It also allows these functions to be called inside a contructor
7
- /// even if the contract is meant to be used without proxy
8
- modifier proxied() {
9
- address proxyAdminAddress = _proxyAdmin();
10
- // With hardhat-deploy proxies
11
- // the proxyAdminAddress is zero only for the implementation contract
12
- // if the implementation contract want to be used as a standalone/immutable contract
13
- // it simply has to execute the `proxied` function
14
- // This ensure the proxyAdminAddress is never zero post deployment
15
- // And allow you to keep the same code for both proxied contract and immutable contract
16
- if (proxyAdminAddress == address(0)) {
17
- // ensure can not be called twice when used outside of proxy : no admin
18
- // solhint-disable-next-line security/no-inline-assembly
19
- assembly {
20
- sstore(
21
- 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,
22
- 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23
- )
24
- }
25
- } else {
26
- require(msg.sender == proxyAdminAddress);
27
- }
28
- _;
29
- }
30
-
31
- modifier onlyProxyAdmin() {
32
- require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED");
33
- _;
34
- }
35
-
36
- function _proxyAdmin() internal view returns (address ownerAddress) {
37
- // solhint-disable-next-line security/no-inline-assembly
38
- assembly {
39
- ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
40
- }
41
- }
10
+ /// @notice Restricts function access to the proxy admin only
11
+ /// @dev Uses the ERC1967 admin slot to determine the admin address
12
+ modifier onlyProxyAdmin() {
13
+ require(msg.sender == _proxyAdmin(), "PROXY_ONLY_ADMIN");
14
+ _;
15
+ }
16
+
17
+ /// @notice Modifier for functions that should only be called once during proxy initialization
18
+ /// @dev This modifier ensures the function can only be called once and only through a proxy.
19
+ ///
20
+ /// =====================================================================================
21
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
22
+ /// =====================================================================================
23
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
24
+ /// (typically via the proxy constructor's initialization calldata).
25
+ ///
26
+ /// If the initializer function is NOT called at deployment time, the contract will be
27
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
28
+ /// take control of the contract. This could lead to:
29
+ /// - Unauthorized ownership of the contract
30
+ /// - Theft of funds
31
+ /// - Manipulation of contract state
32
+ ///
33
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
34
+ /// =====================================================================================
35
+ modifier asProxyOneTimeInitialiser() {
36
+ bool initialised = _ensureProxyOnly();
37
+
38
+ // only allowed to be called once
39
+ require(!initialised, "PROXY_ALREADY_INITIALISED");
40
+
41
+ _markAsInitialised();
42
+
43
+ _;
44
+ }
45
+
46
+ /// @notice Modifier for functions that can be re-initialized by the proxy admin after first initialization
47
+ /// @dev On first call, marks the contract as initialized. On subsequent calls, requires proxy admin.
48
+ ///
49
+ /// =====================================================================================
50
+ /// ⚠️ CRITICAL SECURITY WARNING ⚠️
51
+ /// =====================================================================================
52
+ /// Functions using this modifier MUST be called during the proxy deployment transaction
53
+ /// (typically via the proxy constructor's initialization calldata).
54
+ ///
55
+ /// If the initializer function is NOT called at deployment time, the contract will be
56
+ /// left in an uninitialized state, and ANYONE can call the initializer function to
57
+ /// take control of the contract. This could lead to:
58
+ /// - Unauthorized ownership of the contract
59
+ /// - Theft of funds
60
+ /// - Manipulation of contract state
61
+ ///
62
+ /// NEVER deploy a proxy without immediately calling such initializer in the same transaction.
63
+ ///
64
+ /// After initialization, only the proxy admin can call functions with this modifier,
65
+ /// which is useful for upgrade scenarios where re-initialization may be needed.
66
+ /// =====================================================================================
67
+ modifier asProxyInitialiser() {
68
+ bool initialised = _ensureProxyOnly();
69
+
70
+ if (initialised) {
71
+ // if initialised, can be called only by proxy admin
72
+ require(msg.sender == _proxyAdmin(), "PROXY_INIT_ONLY_ADMIN");
73
+ } else {
74
+ _markAsInitialised();
75
+ }
76
+
77
+ _;
78
+ }
79
+
80
+ /// @notice Ensures the function is being called through a proxy and returns initialization status
81
+ /// @dev Reverts if not called through a proxy (i.e., if implementation address is zero)
82
+ /// @return initialised Whether the proxy has already been initialized
83
+ function _ensureProxyOnly() internal view returns (bool initialised) {
84
+ address implementationAddress = _proxyImplementation();
85
+
86
+ // only allowed if proxy
87
+ require(implementationAddress != address(0), "PROXY_ONLY");
88
+
89
+ initialised = _proxyInitialised();
90
+ }
91
+
92
+ /// @notice Marks the proxy as initialized
93
+ /// @dev Writes `true` to the custom initialization storage slot.
94
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
95
+ function _markAsInitialised() internal {
96
+ // solhint-disable-next-line security/no-inline-assembly
97
+ assembly {
98
+ sstore(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4, true)
99
+ }
100
+ }
101
+
102
+ /// @notice Returns the current proxy admin address
103
+ /// @dev Reads from the ERC1967 admin slot.
104
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
105
+ /// @return ownerAddress The address of the proxy admin
106
+ function _proxyAdmin() internal view returns (address ownerAddress) {
107
+ // solhint-disable-next-line security/no-inline-assembly
108
+ assembly {
109
+ ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)
110
+ }
111
+ }
112
+
113
+ /// @notice Returns the current implementation address
114
+ /// @dev Reads from the ERC1967 implementation slot.
115
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
116
+ /// @return implementationAddress The address of the current implementation contract
117
+ function _proxyImplementation() internal view returns (address implementationAddress) {
118
+ // solhint-disable-next-line security/no-inline-assembly
119
+ assembly {
120
+ implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)
121
+ }
122
+ }
123
+
124
+ /// @notice Checks whether the proxy has been initialized
125
+ /// @dev Reads from the custom initialization storage slot.
126
+ /// Slot: bytes32(uint256(keccak256('eip1967.proxy.initialised')) - 1)
127
+ /// @return initialised Whether the proxy has been initialized
128
+ function _proxyInitialised() internal view returns (bool initialised) {
129
+ // solhint-disable-next-line security/no-inline-assembly
130
+ assembly {
131
+ initialised := sload(0x0037d21023b0b946d199d157363fe66c4e723e916e3bab3dac56c11d3acca3b4)
132
+ }
133
+ }
42
134
  }
package/src/index.ts CHANGED
@@ -33,7 +33,21 @@ export type ProxyDeployOptions = Omit<DeployOptions, 'skipIfAlreadyDeployed' | '
33
33
  | string
34
34
  | {
35
35
  methodName: string;
36
- args: unknown[]; // TODO types
36
+ args?: any[];
37
+ }
38
+ | {
39
+ init:
40
+ | string
41
+ | {
42
+ methodName: string;
43
+ args?: any[];
44
+ };
45
+ onUpgrade?:
46
+ | string
47
+ | {
48
+ methodName: string;
49
+ args?: any[];
50
+ };
37
51
  };
38
52
  upgradeIndex?: number;
39
53
  checkProxyAdmin?: boolean;
@@ -306,21 +320,65 @@ export function deployViaProxy(
306
320
 
307
321
  let postUpgradeCalldata: `0x${string}` | undefined;
308
322
  if (options?.execute) {
309
- const methodName = typeof options.execute === 'string' ? options.execute : options.execute.methodName;
310
- const argsToExecute = typeof options.execute === 'string' ? (args as unknown[]) : options.execute.args;
311
- const method: AbiFunction | undefined = artifactToUse.abi.find(
312
- (v) => v.type === 'function' && v.name === methodName,
313
- ) as AbiFunction;
314
- if (method) {
315
- postUpgradeCalldata = encodeFunctionData({
316
- ...viemArgs,
317
- args: argsToExecute,
318
- account: address,
319
- abi: [method],
320
- functionName: method.name,
321
- });
323
+ let execution:
324
+ | {
325
+ methodName: string;
326
+ args: any[];
327
+ }
328
+ | undefined;
329
+ if (typeof options.execute == 'string') {
330
+ execution = {
331
+ methodName: options.execute,
332
+ args: args as any[],
333
+ };
334
+ } else if ('methodName' in options.execute) {
335
+ execution = {
336
+ methodName: options.execute.methodName,
337
+ args: options.execute.args || (args as any[]),
338
+ };
322
339
  } else {
323
- throw new Error(`Method ${methodName} not found in artifact provided for ${name}`);
340
+ if (existingDeployment) {
341
+ if (typeof options.execute.onUpgrade === 'string') {
342
+ execution = {
343
+ methodName: options.execute.onUpgrade,
344
+ args: args as any[],
345
+ };
346
+ } else if (typeof options.execute.onUpgrade === 'object') {
347
+ execution = {
348
+ methodName: options.execute.onUpgrade.methodName,
349
+ args: options.execute.onUpgrade.args || (args as any[]),
350
+ };
351
+ }
352
+ } else {
353
+ if (typeof options.execute.init === 'string') {
354
+ execution = {
355
+ methodName: options.execute.init,
356
+ args: args as any[],
357
+ };
358
+ } else if (typeof options.execute.init === 'object') {
359
+ execution = {
360
+ methodName: options.execute.init.methodName,
361
+ args: options.execute.init.args || (args as any[]),
362
+ };
363
+ }
364
+ }
365
+ }
366
+
367
+ if (execution) {
368
+ const method: AbiFunction | undefined = artifactToUse.abi.find(
369
+ (v) => v.type === 'function' && v.name === execution.methodName,
370
+ ) as AbiFunction;
371
+ if (method) {
372
+ postUpgradeCalldata = encodeFunctionData({
373
+ ...viemArgs,
374
+ args: execution.args,
375
+ account: address,
376
+ abi: [method],
377
+ functionName: method.name,
378
+ });
379
+ } else {
380
+ throw new Error(`Method ${execution.methodName} not found in artifact provided for ${name}`);
381
+ }
324
382
  }
325
383
  }
326
384
  // let preUpgradeCalldata: `0x${string}` | undefined;