Skip to content

Commit 887a61c

Browse files
authored
Merge pull request #434 from rsksmart/feature/FLY-2196
Feature/fly 2196
2 parents 6542ac1 + 630376c commit 887a61c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1179
-526
lines changed

script/ComputeStorageSlot.s.sol

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.25;
3+
4+
import "forge-std/Script.sol";
5+
6+
contract ComputeStorageSlot is Script {
7+
function run() external view {
8+
bytes32 slotPauseRegistry = bytes32(
9+
uint256(
10+
keccak256(
11+
abi.encode(
12+
uint256(keccak256("rsk.flyover.PauseRegistry")) - 1
13+
)
14+
)
15+
) & ~uint256(0xff)
16+
);
17+
bytes32 slotEmergencyPause = bytes32(
18+
uint256(
19+
keccak256(
20+
abi.encode(
21+
uint256(keccak256("rsk.flyover.EmergencyPause")) - 1
22+
)
23+
)
24+
) & ~uint256(0xff)
25+
);
26+
console.logBytes32(slotPauseRegistry);
27+
console.logBytes32(slotEmergencyPause);
28+
}
29+
}

script/deployment/DeployCollateralManagement.s.sol

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ pragma solidity 0.8.25;
44
import {Script, console} from "lib/forge-std/src/Script.sol";
55
import {HelperConfig} from "../HelperConfig.s.sol";
66
import {CollateralManagementContract} from "../../src/CollateralManagement.sol";
7+
import {PauseRegistry} from "../../src/PauseRegistry.sol";
78
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
89
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
910

1011
/// @title DeployCollateralManagement
1112
/// @notice Deploys the CollateralManagement contract with proxy pattern
13+
/// @dev Requires PAUSE_REGISTRY_PROXY env var
1214
contract DeployCollateralManagement is Script {
1315
struct DeploymentResult {
1416
address implementation;
@@ -22,16 +24,23 @@ contract DeployCollateralManagement is Script {
2224
uint256 deployerKey = helper.getDeployerPrivateKey();
2325
address deployer = vm.rememberKey(deployerKey);
2426

27+
address pauseRegistryProxy = vm.envAddress("PAUSE_REGISTRY_PROXY");
28+
require(
29+
pauseRegistryProxy != address(0),
30+
"PAUSE_REGISTRY_PROXY required"
31+
);
32+
2533
vm.startBroadcast(deployerKey);
26-
result = _deploy(deployer, cfg);
34+
result = _deploy(deployer, cfg, pauseRegistryProxy);
2735
vm.stopBroadcast();
2836

2937
_log(result);
3038
}
3139

3240
function _deploy(
3341
address defaultAdmin,
34-
HelperConfig.FlyoverConfig memory cfg
42+
HelperConfig.FlyoverConfig memory cfg,
43+
address pauseRegistryProxy
3544
) private returns (DeploymentResult memory result) {
3645
result.implementation = address(new CollateralManagementContract());
3746
result.admin = address(new ProxyAdmin(defaultAdmin));
@@ -46,7 +55,8 @@ contract DeployCollateralManagement is Script {
4655
cfg.adminDelay,
4756
cfg.minimumCollateral,
4857
cfg.resignDelayBlocks,
49-
cfg.rewardPercentage
58+
cfg.rewardPercentage,
59+
PauseRegistry(pauseRegistryProxy)
5060
)
5161
)
5262
)

script/deployment/DeployFlyover.s.sol

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {HelperConfig} from "../HelperConfig.s.sol";
77

88
import {CollateralManagementContract} from "../../src/CollateralManagement.sol";
99
import {FlyoverDiscovery} from "../../src/FlyoverDiscovery.sol";
10+
import {PauseRegistry} from "../../src/PauseRegistry.sol";
1011
import {PegInContract} from "../../src/PegInContract.sol";
1112
import {PegOutContract} from "../../src/PegOutContract.sol";
1213

@@ -18,6 +19,7 @@ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.s
1819
/// @dev Gas optimized: single ProxyAdmin, inlined deployment logic, linked libraries
1920
contract DeployFlyover is Script {
2021
struct FlyoverDeployment {
22+
address pauseRegistryProxy;
2123
address collateralManagementImpl;
2224
address collateralManagementProxy;
2325
address flyoverDiscoveryImpl;
@@ -54,6 +56,16 @@ contract DeployFlyover is Script {
5456
// Single ProxyAdmin for all contracts
5557
d.proxyAdmin = address(new ProxyAdmin(defaultAdmin));
5658

59+
// 0) PauseRegistry (shared by all)
60+
PauseRegistry prImpl = new PauseRegistry();
61+
d.pauseRegistryProxy = address(
62+
new TransparentUpgradeableProxy(
63+
address(prImpl),
64+
d.proxyAdmin,
65+
abi.encodeCall(prImpl.initialize, (0, defaultAdmin))
66+
)
67+
);
68+
5769
// 1) CollateralManagement
5870
d.collateralManagementImpl = address(
5971
new CollateralManagementContract()
@@ -69,7 +81,8 @@ contract DeployFlyover is Script {
6981
cfg.adminDelay,
7082
cfg.minimumCollateral,
7183
cfg.resignDelayBlocks,
72-
cfg.rewardPercentage
84+
cfg.rewardPercentage,
85+
PauseRegistry(d.pauseRegistryProxy)
7386
)
7487
)
7588
)
@@ -83,7 +96,12 @@ contract DeployFlyover is Script {
8396
d.proxyAdmin,
8497
abi.encodeCall(
8598
FlyoverDiscovery.initialize,
86-
(defaultAdmin, cfg.adminDelay, d.collateralManagementProxy)
99+
(
100+
defaultAdmin,
101+
cfg.adminDelay,
102+
d.collateralManagementProxy,
103+
PauseRegistry(d.pauseRegistryProxy)
104+
)
87105
)
88106
)
89107
);
@@ -102,7 +120,8 @@ contract DeployFlyover is Script {
102120
cfg.dustThreshold,
103121
cfg.minimumPegIn,
104122
d.collateralManagementProxy,
105-
cfg.mainnet
123+
cfg.mainnet,
124+
PauseRegistry(d.pauseRegistryProxy)
106125
)
107126
)
108127
)
@@ -122,7 +141,8 @@ contract DeployFlyover is Script {
122141
cfg.dustThreshold,
123142
d.collateralManagementProxy,
124143
cfg.mainnet,
125-
cfg.btcBlockTime
144+
cfg.btcBlockTime,
145+
PauseRegistry(d.pauseRegistryProxy)
126146
)
127147
)
128148
)
@@ -144,6 +164,7 @@ contract DeployFlyover is Script {
144164
function _log(FlyoverDeployment memory d) private pure {
145165
console.log("=== FLYOVER DEPLOYMENT ===");
146166
console.log("ProxyAdmin:", d.proxyAdmin);
167+
console.log("PauseRegistry proxy:", d.pauseRegistryProxy);
147168
console.log("CollateralManagement impl:", d.collateralManagementImpl);
148169
console.log("CollateralManagement proxy:", d.collateralManagementProxy);
149170
console.log("FlyoverDiscovery impl:", d.flyoverDiscoveryImpl);

script/deployment/DeployFlyoverDiscovery.s.sol

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ pragma solidity 0.8.25;
44
import {Script, console} from "lib/forge-std/src/Script.sol";
55
import {HelperConfig} from "../HelperConfig.s.sol";
66
import {FlyoverDiscovery} from "../../src/FlyoverDiscovery.sol";
7+
import {PauseRegistry} from "../../src/PauseRegistry.sol";
78
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
89
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
910

1011
/// @title DeployFlyoverDiscovery
1112
/// @notice Deploys the FlyoverDiscovery contract with proxy pattern
12-
/// @dev Requires COLLATERAL_MANAGEMENT_PROXY env var
13+
/// @dev Requires COLLATERAL_MANAGEMENT_PROXY and PAUSE_REGISTRY_PROXY env vars
1314
contract DeployFlyoverDiscovery is Script {
1415
struct DeploymentResult {
1516
address implementation;
@@ -26,13 +27,23 @@ contract DeployFlyoverDiscovery is Script {
2627
address collateralManagementProxy = vm.envAddress(
2728
"COLLATERAL_MANAGEMENT_PROXY"
2829
);
30+
address pauseRegistryProxy = vm.envAddress("PAUSE_REGISTRY_PROXY");
2931
require(
3032
collateralManagementProxy != address(0),
3133
"COLLATERAL_MANAGEMENT_PROXY required"
3234
);
35+
require(
36+
pauseRegistryProxy != address(0),
37+
"PAUSE_REGISTRY_PROXY required"
38+
);
3339

3440
vm.startBroadcast(deployerKey);
35-
result = _deploy(deployer, cfg, collateralManagementProxy);
41+
result = _deploy(
42+
deployer,
43+
cfg,
44+
collateralManagementProxy,
45+
pauseRegistryProxy
46+
);
3647
vm.stopBroadcast();
3748

3849
_log(result);
@@ -41,7 +52,8 @@ contract DeployFlyoverDiscovery is Script {
4152
function _deploy(
4253
address defaultAdmin,
4354
HelperConfig.FlyoverConfig memory cfg,
44-
address collateralManagementProxy
55+
address collateralManagementProxy,
56+
address pauseRegistryProxy
4557
) private returns (DeploymentResult memory result) {
4658
result.implementation = address(new FlyoverDiscovery());
4759
result.admin = address(new ProxyAdmin(defaultAdmin));
@@ -51,7 +63,12 @@ contract DeployFlyoverDiscovery is Script {
5163
result.admin,
5264
abi.encodeCall(
5365
FlyoverDiscovery.initialize,
54-
(defaultAdmin, cfg.adminDelay, collateralManagementProxy)
66+
(
67+
defaultAdmin,
68+
cfg.adminDelay,
69+
collateralManagementProxy,
70+
PauseRegistry(pauseRegistryProxy)
71+
)
5572
)
5673
)
5774
);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.25;
3+
4+
import {Script, console} from "lib/forge-std/src/Script.sol";
5+
import {HelperConfig} from "../HelperConfig.s.sol";
6+
import {PauseRegistry} from "../../src/PauseRegistry.sol";
7+
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
8+
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
9+
10+
/// @title DeployPauseRegistry
11+
/// @notice Deploys the PauseRegistry with proxy pattern (no dependencies)
12+
contract DeployPauseRegistry is Script {
13+
struct DeploymentResult {
14+
address implementation;
15+
address proxy;
16+
address admin;
17+
}
18+
19+
function run() external returns (DeploymentResult memory result) {
20+
HelperConfig helper = new HelperConfig();
21+
uint256 deployerKey = helper.getDeployerPrivateKey();
22+
address deployer = vm.rememberKey(deployerKey);
23+
24+
vm.startBroadcast(deployerKey);
25+
result = _deploy(deployer);
26+
vm.stopBroadcast();
27+
28+
_log(result);
29+
}
30+
31+
function _deploy(
32+
address defaultAdmin
33+
) private returns (DeploymentResult memory result) {
34+
result.implementation = address(new PauseRegistry());
35+
result.admin = address(new ProxyAdmin(defaultAdmin));
36+
result.proxy = address(
37+
new TransparentUpgradeableProxy(
38+
result.implementation,
39+
result.admin,
40+
abi.encodeCall(PauseRegistry.initialize, (0, defaultAdmin))
41+
)
42+
);
43+
}
44+
45+
function _log(DeploymentResult memory r) private pure {
46+
console.log("=== PauseRegistry Deployed ===");
47+
console.log("Implementation:", r.implementation);
48+
console.log("Proxy:", r.proxy);
49+
console.log("ProxyAdmin:", r.admin);
50+
}
51+
}

script/deployment/DeployPegIn.s.sol

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ pragma solidity 0.8.25;
44
import {Script, console} from "lib/forge-std/src/Script.sol";
55
import {HelperConfig} from "../HelperConfig.s.sol";
66
import {PegInContract} from "../../src/PegInContract.sol";
7+
import {PauseRegistry} from "../../src/PauseRegistry.sol";
78
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
89
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
910

1011
/// @title DeployPegIn
1112
/// @notice Deploys the PegInContract with proxy pattern
12-
/// @dev Requires COLLATERAL_MANAGEMENT_PROXY env var
13+
/// @dev Requires COLLATERAL_MANAGEMENT_PROXY and PAUSE_REGISTRY_PROXY env vars
1314
contract DeployPegIn is Script {
1415
struct DeploymentResult {
1516
address implementation;
@@ -26,13 +27,23 @@ contract DeployPegIn is Script {
2627
address collateralManagementProxy = vm.envAddress(
2728
"COLLATERAL_MANAGEMENT_PROXY"
2829
);
30+
address pauseRegistryProxy = vm.envAddress("PAUSE_REGISTRY_PROXY");
2931
require(
3032
collateralManagementProxy != address(0),
3133
"COLLATERAL_MANAGEMENT_PROXY required"
3234
);
35+
require(
36+
pauseRegistryProxy != address(0),
37+
"PAUSE_REGISTRY_PROXY required"
38+
);
3339

3440
vm.startBroadcast(deployerKey);
35-
result = _deploy(deployer, cfg, collateralManagementProxy);
41+
result = _deploy(
42+
deployer,
43+
cfg,
44+
collateralManagementProxy,
45+
pauseRegistryProxy
46+
);
3647
vm.stopBroadcast();
3748

3849
_log(result);
@@ -41,7 +52,8 @@ contract DeployPegIn is Script {
4152
function _deploy(
4253
address defaultAdmin,
4354
HelperConfig.FlyoverConfig memory cfg,
44-
address collateralManagementProxy
55+
address collateralManagementProxy,
56+
address pauseRegistryProxy
4557
) private returns (DeploymentResult memory result) {
4658
result.implementation = address(new PegInContract());
4759
result.admin = address(new ProxyAdmin(defaultAdmin));
@@ -57,7 +69,8 @@ contract DeployPegIn is Script {
5769
cfg.dustThreshold,
5870
cfg.minimumPegIn,
5971
collateralManagementProxy,
60-
cfg.mainnet
72+
cfg.mainnet,
73+
PauseRegistry(pauseRegistryProxy)
6174
)
6275
)
6376
)

0 commit comments

Comments
 (0)