|
1 | 1 | // SPDX-License-Identifier: MIT
|
2 | 2 | pragma solidity 0.8.15;
|
3 | 3 |
|
| 4 | +import {ResolvingProxyFactory} from "./ResolvingProxyFactory.sol"; |
4 | 5 | import {Portal} from "./Portal.sol";
|
5 | 6 | import {OutputOracle} from "./OutputOracle.sol";
|
6 | 7 | import {SystemConfigOwnable} from "./SystemConfigOwnable.sol";
|
@@ -101,13 +102,13 @@ contract DeployChain {
|
101 | 102 | function deployAddresses(uint256 chainID) external view returns (DeployAddresses memory) {
|
102 | 103 | bytes32 salt = keccak256(abi.encodePacked(chainID));
|
103 | 104 | return DeployAddresses({
|
104 |
| - l2OutputOracle: proxyAddress(l2OutputOracle, salt), |
105 |
| - systemConfig: proxyAddress(systemConfig, salt), |
106 |
| - optimismPortal: proxyAddress(optimismPortal, salt), |
107 |
| - l1CrossDomainMessenger: proxyAddress(l1CrossDomainMessenger, salt), |
108 |
| - l1StandardBridge: proxyAddress(l1StandardBridge, salt), |
109 |
| - l1ERC721Bridge: proxyAddress(l1ERC721Bridge, salt), |
110 |
| - optimismMintableERC20Factory: proxyAddress(optimismMintableERC20Factory, salt) |
| 105 | + l2OutputOracle: ResolvingProxyFactory.proxyAddress(l2OutputOracle, proxyAdmin, salt), |
| 106 | + systemConfig: ResolvingProxyFactory.proxyAddress(systemConfig, proxyAdmin, salt), |
| 107 | + optimismPortal: ResolvingProxyFactory.proxyAddress(optimismPortal, proxyAdmin, salt), |
| 108 | + l1CrossDomainMessenger: ResolvingProxyFactory.proxyAddress(l1CrossDomainMessenger, proxyAdmin, salt), |
| 109 | + l1StandardBridge: ResolvingProxyFactory.proxyAddress(l1StandardBridge, proxyAdmin, salt), |
| 110 | + l1ERC721Bridge: ResolvingProxyFactory.proxyAddress(l1ERC721Bridge, proxyAdmin, salt), |
| 111 | + optimismMintableERC20Factory: ResolvingProxyFactory.proxyAddress(optimismMintableERC20Factory, proxyAdmin, salt) |
111 | 112 | });
|
112 | 113 | }
|
113 | 114 |
|
@@ -149,13 +150,13 @@ contract DeployChain {
|
149 | 150 | function setupProxies(uint256 chainID) internal returns (DeployAddresses memory) {
|
150 | 151 | bytes32 salt = keccak256(abi.encodePacked(chainID));
|
151 | 152 | return DeployAddresses({
|
152 |
| - l2OutputOracle: setupProxy(l2OutputOracle, salt), |
153 |
| - systemConfig: setupProxy(systemConfig, salt), |
154 |
| - optimismPortal: setupProxy(optimismPortal, salt), |
155 |
| - l1CrossDomainMessenger: setupProxy(l1CrossDomainMessenger, salt), |
156 |
| - l1StandardBridge: setupProxy(l1StandardBridge, salt), |
157 |
| - l1ERC721Bridge: setupProxy(l1ERC721Bridge, salt), |
158 |
| - optimismMintableERC20Factory: setupProxy(optimismMintableERC20Factory, salt) |
| 153 | + l2OutputOracle: ResolvingProxyFactory.setupProxy(l2OutputOracle, proxyAdmin, salt), |
| 154 | + systemConfig: ResolvingProxyFactory.setupProxy(systemConfig, proxyAdmin, salt), |
| 155 | + optimismPortal: ResolvingProxyFactory.setupProxy(optimismPortal, proxyAdmin, salt), |
| 156 | + l1CrossDomainMessenger: ResolvingProxyFactory.setupProxy(l1CrossDomainMessenger, proxyAdmin, salt), |
| 157 | + l1StandardBridge: ResolvingProxyFactory.setupProxy(l1StandardBridge, proxyAdmin, salt), |
| 158 | + l1ERC721Bridge: ResolvingProxyFactory.setupProxy(l1ERC721Bridge, proxyAdmin, salt), |
| 159 | + optimismMintableERC20Factory: ResolvingProxyFactory.setupProxy(optimismMintableERC20Factory, proxyAdmin, salt) |
159 | 160 | });
|
160 | 161 | }
|
161 | 162 |
|
@@ -264,39 +265,4 @@ contract DeployChain {
|
264 | 265 | gasPayingToken: gasToken
|
265 | 266 | });
|
266 | 267 | }
|
267 |
| - |
268 |
| - function setupProxy(address proxy, bytes32 salt) internal returns (address instance) { |
269 |
| - address _proxyAdmin = proxyAdmin; |
270 |
| - /// @solidity memory-safe-assembly |
271 |
| - assembly { |
272 |
| - let ptr := mload(0x40) |
273 |
| - mstore(ptr, 0x60678060095f395ff363204e1c7a60e01b5f5273000000000000000000000000) |
274 |
| - mstore(add(ptr, 0x14), shl(0x60, proxy)) |
275 |
| - mstore(add(ptr, 0x28), 0x6004525f5f60245f730000000000000000000000000000000000000000000000) |
276 |
| - mstore(add(ptr, 0x31), shl(0x60, _proxyAdmin)) |
277 |
| - mstore(add(ptr, 0x45), 0x5afa3d5f5f3e3d60201416604d573d5ffd5b5f5f365f5f51365f5f375af43d5f) |
278 |
| - mstore(add(ptr, 0x65), 0x5f3e5f3d91606557fd5bf3000000000000000000000000000000000000000000) |
279 |
| - instance := create2(0, ptr, 0x70, salt) |
280 |
| - } |
281 |
| - require(instance != address(0), "Proxy: create2 failed"); |
282 |
| - } |
283 |
| - |
284 |
| - function proxyAddress(address proxy, bytes32 salt) internal view returns (address predicted) { |
285 |
| - address _proxyAdmin = proxyAdmin; |
286 |
| - address deployer = address(this); |
287 |
| - /// @solidity memory-safe-assembly |
288 |
| - assembly { |
289 |
| - let ptr := mload(0x40) |
290 |
| - mstore(ptr, 0x60678060095f395ff363204e1c7a60e01b5f5273000000000000000000000000) |
291 |
| - mstore(add(ptr, 0x14), shl(0x60, proxy)) |
292 |
| - mstore(add(ptr, 0x28), 0x6004525f5f60245f730000000000000000000000000000000000000000000000) |
293 |
| - mstore(add(ptr, 0x31), shl(0x60, _proxyAdmin)) |
294 |
| - mstore(add(ptr, 0x45), 0x5afa3d5f5f3e3d60201416604d573d5ffd5b5f5f365f5f51365f5f375af43d5f) |
295 |
| - mstore(add(ptr, 0x65), 0x5f3e5f3d91606557fd5bf3ff0000000000000000000000000000000000000000) |
296 |
| - mstore(add(ptr, 0x71), shl(0x60, deployer)) |
297 |
| - mstore(add(ptr, 0x85), salt) |
298 |
| - mstore(add(ptr, 0xa5), keccak256(ptr, 0x70)) |
299 |
| - predicted := keccak256(add(ptr, 0x70), 0x55) |
300 |
| - } |
301 |
| - } |
302 | 268 | }
|
0 commit comments