@@ -63,7 +63,7 @@ abstract contract HyperdriveDeployerCoordinator is
6363 address public immutable target4Deployer;
6464
6565 /// @notice A mapping from deployer to deployment ID to deployment.
66- mapping (address => mapping (bytes32 => Deployment)) public deployments ;
66+ mapping (address => mapping (bytes32 => Deployment)) internal _deployments ;
6767
6868 /// @notice Instantiates the deployer coordinator.
6969 /// @param _coreDeployer The core deployer.
@@ -100,7 +100,7 @@ abstract contract HyperdriveDeployerCoordinator is
100100 bytes32 _salt
101101 ) external returns (address ) {
102102 // Ensure that the Hyperdrive entrypoint has not already been deployed.
103- Deployment memory deployment = deployments [msg .sender ][_deploymentId];
103+ Deployment memory deployment = _deployments [msg .sender ][_deploymentId];
104104 if (deployment.hyperdrive != address (0 )) {
105105 revert IHyperdriveDeployerCoordinator.HyperdriveAlreadyDeployed ();
106106 }
@@ -132,23 +132,31 @@ abstract contract HyperdriveDeployerCoordinator is
132132 revert IHyperdriveDeployerCoordinator.MismatchedExtraData ();
133133 }
134134
135+ // Check the pool configuration to ensure that it's a valid
136+ // configuration for this instance. This was already done when deploying
137+ // target0, but we check again as a precaution in case the check relies
138+ // on state that can change.
139+ _checkPoolConfig (_deployConfig);
140+
135141 // Convert the deploy config into the pool config and set the initial
136142 // vault share price.
137143 IHyperdrive.PoolConfig memory config = _copyPoolConfig (_deployConfig);
138144 config.initialVaultSharePrice = deployment.initialSharePrice;
139145
140- // Deploy the Hyperdrive instance.
141- return
142- IHyperdriveCoreDeployer (coreDeployer).deploy (
143- config,
144- _extraData,
145- deployment.target0,
146- deployment.target1,
147- deployment.target2,
148- deployment.target3,
149- deployment.target4,
150- _salt
151- );
146+ // Deploy the Hyperdrive instance and add it to the deployment struct.
147+ address hyperdrive = IHyperdriveCoreDeployer (coreDeployer).deploy (
148+ config,
149+ _extraData,
150+ deployment.target0,
151+ deployment.target1,
152+ deployment.target2,
153+ deployment.target3,
154+ deployment.target4,
155+ _salt
156+ );
157+ _deployments[msg .sender ][_deploymentId].hyperdrive = hyperdrive;
158+
159+ return hyperdrive;
152160 }
153161
154162 /// @notice Deploys a Hyperdrive target instance with the given parameters.
@@ -174,7 +182,7 @@ abstract contract HyperdriveDeployerCoordinator is
174182 // Ensure that the deployment is a fresh deployment. We can check this
175183 // by ensuring that the config hash is not set.
176184 if (
177- deployments [msg .sender ][_deploymentId].configHash != bytes32 (0 )
185+ _deployments [msg .sender ][_deploymentId].configHash != bytes32 (0 )
178186 ) {
179187 revert IHyperdriveDeployerCoordinator.DeploymentAlreadyExists ();
180188 }
@@ -204,96 +212,113 @@ abstract contract HyperdriveDeployerCoordinator is
204212 );
205213
206214 // Store the deployment.
207- deployments [msg .sender ][_deploymentId].configHash = configHash;
208- deployments [msg .sender ][_deploymentId]
215+ _deployments [msg .sender ][_deploymentId].configHash = configHash;
216+ _deployments [msg .sender ][_deploymentId]
209217 .extraDataHash = extraDataHash;
210- deployments [msg .sender ][_deploymentId]
218+ _deployments [msg .sender ][_deploymentId]
211219 .initialSharePrice = initialSharePrice;
212- deployments [msg .sender ][_deploymentId].target0 = target;
220+ _deployments [msg .sender ][_deploymentId].target0 = target;
213221
214222 return target;
215223 }
216224
217225 // Ensure that the deployment is not a fresh deployment. We can check
218226 // this by ensuring that the config hash is set.
219- if (deployments [msg .sender ][_deploymentId].configHash == bytes32 (0 )) {
227+ if (_deployments [msg .sender ][_deploymentId].configHash == bytes32 (0 )) {
220228 revert IHyperdriveDeployerCoordinator.DeploymentDoesNotExist ();
221229 }
222230
223231 // Ensure that the provided config matches the config hash.
224232 if (
225233 keccak256 (abi.encode (_deployConfig)) !=
226- deployments [msg .sender ][_deploymentId].configHash
234+ _deployments [msg .sender ][_deploymentId].configHash
227235 ) {
228236 revert IHyperdriveDeployerCoordinator.MismatchedConfig ();
229237 }
230238
231239 // Ensure that the provided extra data matches the extra data hash.
232240 if (
233241 keccak256 (_extraData) !=
234- deployments [msg .sender ][_deploymentId].extraDataHash
242+ _deployments [msg .sender ][_deploymentId].extraDataHash
235243 ) {
236244 revert IHyperdriveDeployerCoordinator.MismatchedExtraData ();
237245 }
238246
247+ // Check the pool configuration to ensure that it's a valid
248+ // configuration for this instance. This was already done when deploying
249+ // target0, but we check again as a precaution in case the check relies
250+ // on state that can change.
251+ _checkPoolConfig (_deployConfig);
252+
239253 // Convert the deploy config into the pool config and set the initial
240254 // vault share price.
241255 IHyperdrive.PoolConfig memory config = _copyPoolConfig (_deployConfig);
242- config.initialVaultSharePrice = deployments [msg .sender ][_deploymentId]
256+ config.initialVaultSharePrice = _deployments [msg .sender ][_deploymentId]
243257 .initialSharePrice;
244258
245259 // If the target index is greater than 0, then we're deploying one of
246260 // the other target instances. We don't allow targets to be deployed
247261 // more than once, and their addresses are stored in the deployment
248262 // state.
249263 if (_targetIndex == 1 ) {
250- if (deployments [msg .sender ][_deploymentId].target1 != address (0 )) {
264+ if (_deployments [msg .sender ][_deploymentId].target1 != address (0 )) {
251265 revert IHyperdriveDeployerCoordinator.TargetAlreadyDeployed ();
252266 }
253267 target = IHyperdriveTargetDeployer (target1Deployer).deploy (
254268 config,
255269 _extraData,
256270 _salt
257271 );
258- deployments [msg .sender ][_deploymentId].target1 = target;
272+ _deployments [msg .sender ][_deploymentId].target1 = target;
259273 } else if (_targetIndex == 2 ) {
260- if (deployments [msg .sender ][_deploymentId].target2 != address (0 )) {
274+ if (_deployments [msg .sender ][_deploymentId].target2 != address (0 )) {
261275 revert IHyperdriveDeployerCoordinator.TargetAlreadyDeployed ();
262276 }
263277 target = IHyperdriveTargetDeployer (target2Deployer).deploy (
264278 config,
265279 _extraData,
266280 _salt
267281 );
268- deployments [msg .sender ][_deploymentId].target2 = target;
282+ _deployments [msg .sender ][_deploymentId].target2 = target;
269283 } else if (_targetIndex == 3 ) {
270- if (deployments [msg .sender ][_deploymentId].target3 != address (0 )) {
284+ if (_deployments [msg .sender ][_deploymentId].target3 != address (0 )) {
271285 revert IHyperdriveDeployerCoordinator.TargetAlreadyDeployed ();
272286 }
273287 target = IHyperdriveTargetDeployer (target3Deployer).deploy (
274288 config,
275289 _extraData,
276290 _salt
277291 );
278- deployments [msg .sender ][_deploymentId].target3 = target;
292+ _deployments [msg .sender ][_deploymentId].target3 = target;
279293 } else if (_targetIndex == 4 ) {
280- if (deployments [msg .sender ][_deploymentId].target4 != address (0 )) {
294+ if (_deployments [msg .sender ][_deploymentId].target4 != address (0 )) {
281295 revert IHyperdriveDeployerCoordinator.TargetAlreadyDeployed ();
282296 }
283297 target = IHyperdriveTargetDeployer (target4Deployer).deploy (
284298 config,
285299 _extraData,
286300 _salt
287301 );
288- deployments [msg .sender ][_deploymentId].target4 = target;
302+ _deployments [msg .sender ][_deploymentId].target4 = target;
289303 } else {
290304 revert IHyperdriveDeployerCoordinator.InvalidTargetIndex ();
291305 }
292306
293307 return target;
294308 }
295309
296- /// @notice Checks the pool configuration to ensure that it is valid.
310+ /// @notice Gets the deployment specified by the deployer and deployment ID.
311+ /// @param _deployer The deployer.
312+ /// @param _deploymentId The deployment ID.
313+ /// @return The deployment.
314+ function deployments (
315+ address _deployer ,
316+ bytes32 _deploymentId
317+ ) external view returns (Deployment memory ) {
318+ return _deployments[_deployer][_deploymentId];
319+ }
320+
321+ /// @dev Checks the pool configuration to ensure that it is valid.
297322 /// @param _deployConfig The deploy configuration of the Hyperdrive pool.
298323 function _checkPoolConfig (
299324 IHyperdrive.PoolDeployConfig memory _deployConfig
0 commit comments