@@ -34,6 +34,8 @@ import {VersionedBlobParams} from "src/interfaces/IEigenDAStructs.sol";
34
34
import {MockStakeRegistry} from "./mocks/MockStakeRegistry.sol " ;
35
35
import {MockRegistryCoordinator} from "./mocks/MockRegistryCoordinator.sol " ;
36
36
37
+ import {BeforeVerifiableDeploymentInitialization} from "./test/BeforeVerifiableDeploymentInitialization.s.sol " ;
38
+
37
39
import {
38
40
DeploymentInitializer,
39
41
ImmutableInitParams,
@@ -44,15 +46,16 @@ import {
44
46
CalldataInitParams,
45
47
CalldataRegistryCoordinatorParams,
46
48
CalldataThresholdRegistryParams,
47
- CalldataServiceManagerParams
49
+ CalldataServiceManagerParams,
50
+ InitParamsLib
48
51
} from "./DeploymentInitializer.sol " ;
49
52
50
53
import "forge-std/Script.sol " ;
51
54
import "forge-std/StdJson.sol " ;
55
+ import {console2} from "forge-std/console2.sol " ;
52
56
53
57
contract DeployVerifiable is Script {
54
- // The intended owner of all the contracts after the full deployment process is completed.
55
- address initialOwner;
58
+ using InitParamsLib for string ;
56
59
57
60
// All proxies and implementations to upgrade them to, namespaced in structs.
58
61
ProxyAdmin proxyAdmin;
@@ -62,15 +65,6 @@ contract DeployVerifiable is Script {
62
65
// Contracts deployed without a proxy
63
66
IPauserRegistry pauserRegistry;
64
67
65
- // Configuration parameters for construction of implementations
66
- address rewardsCoordinator;
67
- address avsDirectory;
68
- address delegationManager;
69
- address churnApprover;
70
- address ejector;
71
-
72
- uint256 initialPausedStatus;
73
-
74
68
// Inert implementation contracts used as initial implementations before the proxies are initialized
75
69
address emptyContract;
76
70
address mockStakeRegistry;
@@ -80,32 +74,17 @@ contract DeployVerifiable is Script {
80
74
DeploymentInitializer deploymentInitializer;
81
75
82
76
// Script config
83
- string configData;
84
-
85
- /// @dev override this if you don't want to use the environment to get the config path
86
- function _configPath () internal view virtual returns (string memory ) {
87
- return vm.envString ("DEPLOY_CONFIG_PATH " );
88
- }
77
+ string cfg;
89
78
90
79
function run () public {
91
80
// Read JSON config
92
- configData = vm.readFile (_configPath ());
93
- initialOwner = stdJson.readAddress (configData, ".initialOwner " );
94
- rewardsCoordinator = stdJson.readAddress (configData, ".initParams.shared.rewardsCoordinator " );
95
- avsDirectory = stdJson.readAddress (configData, ".initParams.shared.avsDirectory " );
96
- delegationManager = stdJson.readAddress (configData, ".initParams.shared.delegationManager " );
97
- initialPausedStatus = stdJson.readUint (configData, ".initParams.shared.initialPausedStatus " );
81
+ _initConfig ();
98
82
99
83
vm.startBroadcast ();
100
84
proxyAdmin = new ProxyAdmin ();
101
85
emptyContract = address (new EmptyContract ());
102
- mockStakeRegistry = address (new MockStakeRegistry (IDelegationManager (delegationManager)));
103
- pauserRegistry = IPauserRegistry (
104
- new PauserRegistry (
105
- stdJson.readAddressArray (configData, ".initParams.core.pauserRegistry.pausers " ),
106
- stdJson.readAddress (configData, ".initParams.core.pauserRegistry.unpauser " )
107
- )
108
- );
86
+ mockStakeRegistry = address (new MockStakeRegistry (IDelegationManager (cfg.delegationManager ())));
87
+ pauserRegistry = IPauserRegistry (new PauserRegistry (cfg.pausers (), cfg.unpauser ()));
109
88
110
89
_deployInertProxies ();
111
90
_deployImplementations ();
@@ -116,24 +95,50 @@ contract DeployVerifiable is Script {
116
95
// Transfer ownership of proxy admin to deployment initializer
117
96
proxyAdmin.transferOwnership (address (deploymentInitializer));
118
97
98
+ _logs ();
99
+
119
100
vm.stopBroadcast ();
120
101
121
- _doTests (configData);
102
+ _doTests ();
103
+ }
104
+
105
+ /// @dev override this if you don't want to use the environment to get the config path
106
+ function _initConfig () internal virtual {
107
+ cfg = vm.readFile (vm.envString ("DEPLOY_CONFIG_PATH " ));
122
108
}
123
109
124
- function _doTests (string memory cfg ) internal {
125
- vm.startPrank (initialOwner);
126
- CalldataInitParams memory params = CalldataInitParamsLib.getCalldataInitParams (cfg);
110
+ function _logs () internal virtual {
111
+ console2.log ("Deployment addresses: " );
112
+ console2.log ("Deployment Initializer: " , address (deploymentInitializer));
113
+ console2.log ("Empty Contract Implementation " , emptyContract);
114
+ console2.log ("Mock Stake Registry Implementation " , mockStakeRegistry);
115
+ console2.log ("Mock Registry Coordinator Implementation " , mockRegistryCoordinator);
116
+
117
+ console2.log (
118
+ "\n\nAll other relevant deployment addresses should be queried from the DeploymentInitializer contract. "
119
+ );
120
+ }
121
+
122
+ /// @dev This function does the same tests that a verifier of the deployment should be doing after the deployment.
123
+ function _doTests () internal {
124
+ BeforeVerifiableDeploymentInitialization beforeTest = new BeforeVerifiableDeploymentInitialization ();
125
+ beforeTest.doBeforeInitializationTests (
126
+ cfg, deploymentInitializer, emptyContract, mockStakeRegistry, mockRegistryCoordinator
127
+ );
128
+
129
+ vm.startPrank (cfg.initialOwner ());
130
+ CalldataInitParams memory params = InitParamsLib.calldataInitParams (cfg);
127
131
deploymentInitializer.initializeDeployment (params);
128
132
129
133
// TODO: Add more tests
130
134
131
135
vm.stopPrank ();
132
136
}
137
+
133
138
function _deployInertProxies () internal virtual {
134
139
proxyAdmin = new ProxyAdmin ();
135
140
emptyContract = address (new EmptyContract ());
136
- mockStakeRegistry = address (new MockStakeRegistry (IDelegationManager (delegationManager)));
141
+ mockStakeRegistry = address (new MockStakeRegistry (IDelegationManager (cfg. delegationManager () )));
137
142
138
143
// Deploy empty contracts to get addresses
139
144
proxies.indexRegistry = address (new TransparentUpgradeableProxy (emptyContract, address (proxyAdmin), "" ));
@@ -158,7 +163,9 @@ contract DeployVerifiable is Script {
158
163
function _deployImplementations () internal virtual {
159
164
implementations.indexRegistry = address (new IndexRegistry (IRegistryCoordinator (proxies.registryCoordinator)));
160
165
implementations.stakeRegistry = address (
161
- new StakeRegistry (IRegistryCoordinator (proxies.registryCoordinator), IDelegationManager (delegationManager))
166
+ new StakeRegistry (
167
+ IRegistryCoordinator (proxies.registryCoordinator), IDelegationManager (cfg.delegationManager ())
168
+ )
162
169
);
163
170
implementations.socketRegistry = address (new SocketRegistry (IRegistryCoordinator (proxies.registryCoordinator)));
164
171
implementations.blsApkRegistry = address (new BLSApkRegistry (IRegistryCoordinator (proxies.registryCoordinator)));
@@ -177,8 +184,8 @@ contract DeployVerifiable is Script {
177
184
implementations.disperserRegistry = address (new EigenDADisperserRegistry ());
178
185
implementations.serviceManager = address (
179
186
new EigenDAServiceManager (
180
- IAVSDirectory (avsDirectory),
181
- IRewardsCoordinator (rewardsCoordinator),
187
+ IAVSDirectory (cfg. avsDirectory () ),
188
+ IRewardsCoordinator (cfg. rewardsCoordinator () ),
182
189
IRegistryCoordinator (proxies.registryCoordinator),
183
190
IStakeRegistry (proxies.stakeRegistry),
184
191
IEigenDAThresholdRegistry (proxies.thresholdRegistry),
@@ -190,110 +197,16 @@ contract DeployVerifiable is Script {
190
197
}
191
198
192
199
function _immutableInitParams () internal view returns (ImmutableInitParams memory ) {
193
- ImmutableRegistryCoordinatorParams memory registryCoordinatorParams = ImmutableRegistryCoordinatorParams ({
194
- churnApprover: stdJson.readAddress (configData, ".initParams.middleware.registryCoordinator.churnApprover " ),
195
- ejector: stdJson.readAddress (configData, ".initParams.middleware.registryCoordinator.ejector " )
196
- });
197
- ImmutablePaymentVaultParams memory paymentVaultParams = ImmutablePaymentVaultParams ({
198
- minNumSymbols: uint64 (stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.minNumSymbols " )),
199
- pricePerSymbol: uint64 (stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.pricePerSymbol " )),
200
- priceUpdateCooldown: uint64 (
201
- stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.priceUpdateCooldown " )
202
- ),
203
- globalSymbolsPerPeriod: uint64 (
204
- stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.globalSymbolsPerPeriod " )
205
- ),
206
- reservationPeriodInterval: uint64 (
207
- stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.reservationPeriodInterval " )
208
- ),
209
- globalRatePeriodInterval: uint64 (
210
- stdJson.readUint (configData, ".initParams.eigenDA.paymentVault.globalRatePeriodInterval " )
211
- )
212
- });
213
- ImmutableServiceManagerParams memory serviceManagerParams = ImmutableServiceManagerParams ({
214
- rewardsInitiator: stdJson.readAddress (configData, ".initParams.eigenDA.serviceManager.rewardsInitiator " )
215
- });
216
-
217
200
return ImmutableInitParams ({
218
201
proxyAdmin: proxyAdmin,
219
- initialOwner: initialOwner,
202
+ initialOwner: cfg. initialOwner () ,
220
203
pauserRegistry: pauserRegistry,
221
- initialPausedStatus: initialPausedStatus,
204
+ initialPausedStatus: cfg. initialPausedStatus () ,
222
205
proxies: proxies,
223
206
implementations: implementations,
224
- registryCoordinatorParams: registryCoordinatorParams,
225
- paymentVaultParams: paymentVaultParams,
226
- serviceManagerParams: serviceManagerParams
227
- });
228
- }
229
- }
230
-
231
- library CalldataInitParamsLib {
232
- function operatorSetParams (string memory configData )
233
- internal
234
- pure
235
- returns (IRegistryCoordinator.OperatorSetParam[] memory )
236
- {
237
- bytes memory operatorConfigsRaw =
238
- stdJson.parseRaw (configData, ".initParams.middleware.registryCoordinator.operatorSetParams " );
239
- return abi.decode (operatorConfigsRaw, (IRegistryCoordinator.OperatorSetParam[]));
240
- }
241
-
242
- function minimumStakes (string memory configData ) internal pure returns (uint96 [] memory ) {
243
- bytes memory stakesConfigsRaw =
244
- stdJson.parseRaw (configData, ".initParams.middleware.registryCoordinator.minimumStakes " );
245
- return abi.decode (stakesConfigsRaw, (uint96 []));
246
- }
247
-
248
- function strategyParams (string memory configData )
249
- internal
250
- pure
251
- returns (IStakeRegistry.StrategyParams[][] memory )
252
- {
253
- bytes memory strategyConfigsRaw =
254
- stdJson.parseRaw (configData, ".initParams.middleware.registryCoordinator.strategyParams " );
255
- return abi.decode (strategyConfigsRaw, (IStakeRegistry.StrategyParams[][]));
256
- }
257
-
258
- function quorumAdversaryThresholdPercentages (string memory configData ) internal pure returns (bytes memory ) {
259
- return
260
- stdJson.readBytes (configData, ".initParams.eigenDA.thresholdRegistry.quorumAdversaryThresholdPercentages " );
261
- }
262
-
263
- function quorumConfirmationThresholdPercentages (string memory configData ) internal pure returns (bytes memory ) {
264
- return stdJson.readBytes (
265
- configData, ".initParams.eigenDA.thresholdRegistry.quorumConfirmationThresholdPercentages "
266
- );
267
- }
268
-
269
- function quorumNumbersRequired (string memory configData ) internal pure returns (bytes memory ) {
270
- return stdJson.readBytes (configData, ".initParams.eigenDA.thresholdRegistry.quorumNumbersRequired " );
271
- }
272
-
273
- function versionedBlobParams (string memory configData ) internal pure returns (VersionedBlobParams[] memory ) {
274
- bytes memory versionedBlobParamsRaw =
275
- stdJson.parseRaw (configData, ".initParams.eigenDA.thresholdRegistry.versionedBlobParams " );
276
- return abi.decode (versionedBlobParamsRaw, (VersionedBlobParams[]));
277
- }
278
-
279
- function batchConfirmers (string memory configData ) internal pure returns (address [] memory ) {
280
- return stdJson.readAddressArray (configData, ".initParams.eigenDA.serviceManager.batchConfirmers " );
281
- }
282
-
283
- function getCalldataInitParams (string memory configData ) internal pure returns (CalldataInitParams memory ) {
284
- return CalldataInitParams ({
285
- registryCoordinatorParams: CalldataRegistryCoordinatorParams ({
286
- operatorSetParams: operatorSetParams (configData),
287
- minimumStakes: minimumStakes (configData),
288
- strategyParams: strategyParams (configData)
289
- }),
290
- thresholdRegistryParams: CalldataThresholdRegistryParams ({
291
- quorumAdversaryThresholdPercentages: quorumAdversaryThresholdPercentages (configData),
292
- quorumConfirmationThresholdPercentages: quorumConfirmationThresholdPercentages (configData),
293
- quorumNumbersRequired: quorumNumbersRequired (configData),
294
- versionedBlobParams: versionedBlobParams (configData)
295
- }),
296
- serviceManagerParams: CalldataServiceManagerParams ({batchConfirmers: batchConfirmers (configData)})
207
+ registryCoordinatorParams: cfg.registryCoordinatorParams (),
208
+ paymentVaultParams: cfg.paymentVaultParams (),
209
+ serviceManagerParams: cfg.serviceManagerParams ()
297
210
});
298
211
}
299
212
}
0 commit comments