Skip to content

Commit 08ae01f

Browse files
authored
Merge pull request #638 from superform-xyz/fixRescuerLineaBlast
fix: rescuer on scripts
2 parents fc4b4a0 + 0fbb7ea commit 08ae01f

4 files changed

+159
-11
lines changed

script/forge-scripts/Abstract.Deploy.Single.s.sol

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -963,8 +963,7 @@ abstract contract AbstractDeploySingle is BatchScript {
963963
}
964964

965965
/// @dev 16 setup setup srcChain keepers
966-
vars.ids = new bytes32[](10);
967-
966+
vars.ids = new bytes32[](11);
968967
vars.ids[0] = vars.superRegistryC.PAYMENT_ADMIN();
969968
vars.ids[1] = vars.superRegistryC.CORE_REGISTRY_PROCESSOR();
970969
vars.ids[2] = vars.superRegistryC.BROADCAST_REGISTRY_PROCESSOR();
@@ -975,8 +974,9 @@ abstract contract AbstractDeploySingle is BatchScript {
975974
vars.ids[7] = vars.superRegistryC.DST_SWAPPER_PROCESSOR();
976975
vars.ids[8] = vars.superRegistryC.SUPERFORM_RECEIVER();
977976
vars.ids[9] = vars.superRegistryC.BROADCAST_REGISTRY();
977+
vars.ids[10] = keccak256("CORE_STATE_REGISTRY_RESCUER_ROLE"); // due to debridge validator check
978978

979-
vars.newAddresses = new address[](10);
979+
vars.newAddresses = new address[](11);
980980
vars.newAddresses[0] = PAYMENT_ADMIN;
981981
vars.newAddresses[1] = CSR_PROCESSOR;
982982
vars.newAddresses[2] = BROADCAST_REGISTRY_PROCESSOR;
@@ -987,8 +987,9 @@ abstract contract AbstractDeploySingle is BatchScript {
987987
vars.newAddresses[7] = DST_SWAPPER;
988988
vars.newAddresses[8] = SUPERFORM_RECEIVER;
989989
vars.newAddresses[9] = vars.broadcastRegistry;
990+
vars.newAddresses[10] = CSR_RESCUER; // due to debridge validator check
990991

991-
vars.chainIdsSetAddresses = new uint64[](10);
992+
vars.chainIdsSetAddresses = new uint64[](11);
992993
vars.chainIdsSetAddresses[0] = vars.chainId;
993994
vars.chainIdsSetAddresses[1] = vars.chainId;
994995
vars.chainIdsSetAddresses[2] = vars.chainId;
@@ -999,6 +1000,7 @@ abstract contract AbstractDeploySingle is BatchScript {
9991000
vars.chainIdsSetAddresses[7] = vars.chainId;
10001001
vars.chainIdsSetAddresses[8] = vars.chainId;
10011002
vars.chainIdsSetAddresses[9] = vars.chainId;
1003+
vars.chainIdsSetAddresses[10] = vars.chainId; // due to debridge validator check
10021004

10031005
vars.superRegistryC.batchSetAddress(vars.ids, vars.newAddresses, vars.chainIdsSetAddresses);
10041006

@@ -1479,7 +1481,7 @@ abstract contract AbstractDeploySingle is BatchScript {
14791481
);
14801482

14811483
/// @dev FIXME not setting BROADCAST_REGISTRY yet, which will result in all broadcast tentatives to fail
1482-
bytes32[] memory ids = new bytes32[](18);
1484+
bytes32[] memory ids = new bytes32[](19);
14831485
ids[0] = vars.superRegistryC.SUPERFORM_ROUTER();
14841486
ids[1] = vars.superRegistryC.SUPERFORM_FACTORY();
14851487
ids[2] = vars.superRegistryC.PAYMASTER();
@@ -1498,9 +1500,10 @@ abstract contract AbstractDeploySingle is BatchScript {
14981500
ids[15] = vars.superRegistryC.CORE_REGISTRY_DISPUTER();
14991501
ids[16] = vars.superRegistryC.DST_SWAPPER_PROCESSOR();
15001502
ids[17] = vars.superRegistryC.SUPERFORM_RECEIVER();
1501-
//ids[18] = rewardsDistributorId;
1503+
ids[18] = keccak256("CORE_STATE_REGISTRY_RESCUER_ROLE");
1504+
/// we need this address to be chain aware due to debridge validator
15021505

1503-
address[] memory newAddresses = new address[](18);
1506+
address[] memory newAddresses = new address[](19);
15041507
newAddresses[0] = _readContractsV1(env, chainNames[vars.dstTrueIndex], vars.dstChainId, "SuperformRouter");
15051508
newAddresses[1] = _readContractsV1(env, chainNames[vars.dstTrueIndex], vars.dstChainId, "SuperformFactory");
15061509
newAddresses[2] = _readContractsV1(env, chainNames[vars.dstTrueIndex], vars.dstChainId, "PayMaster");
@@ -1519,10 +1522,9 @@ abstract contract AbstractDeploySingle is BatchScript {
15191522
newAddresses[15] = CSR_DISPUTER;
15201523
newAddresses[16] = DST_SWAPPER;
15211524
newAddresses[17] = SUPERFORM_RECEIVER;
1522-
//newAddresses[18] = _readContractsV1(env, chainNames[vars.dstTrueIndex], vars.dstChainId,
1523-
// "RewardsDistributor");
1525+
newAddresses[18] = CSR_RESCUER;
15241526

1525-
uint64[] memory chainIdsSetAddresses = new uint64[](18);
1527+
uint64[] memory chainIdsSetAddresses = new uint64[](19);
15261528
chainIdsSetAddresses[0] = vars.dstChainId;
15271529
chainIdsSetAddresses[1] = vars.dstChainId;
15281530
chainIdsSetAddresses[2] = vars.dstChainId;
@@ -1541,7 +1543,7 @@ abstract contract AbstractDeploySingle is BatchScript {
15411543
chainIdsSetAddresses[15] = vars.dstChainId;
15421544
chainIdsSetAddresses[16] = vars.dstChainId;
15431545
chainIdsSetAddresses[17] = vars.dstChainId;
1544-
//chainIdsSetAddresses[18] = vars.dstChainId;
1546+
chainIdsSetAddresses[18] = vars.dstChainId;
15451547

15461548
if (!safeExecution) {
15471549
LayerzeroV2Implementation(payable(vars.lzImplementation)).setPeer(
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.23;
3+
4+
import "../EnvironmentUtils.s.sol";
5+
6+
struct UpdateVars {
7+
uint64 chainId;
8+
uint64 dstChainId;
9+
uint256 dstTrueIndex;
10+
SuperRegistry superRegistryC;
11+
LayerzeroV2Implementation lzImpl;
12+
HyperlaneImplementation hypImpl;
13+
WormholeARImplementation wormholeImpl;
14+
AxelarImplementation axelarImpl;
15+
uint8[] bridgeIds;
16+
address[] bridgeAddress;
17+
}
18+
19+
abstract contract AbstractRescuerMissedConfig is EnvironmentUtils {
20+
function _configureRescuerLinea(
21+
uint256 env,
22+
uint256 i,
23+
uint256 trueIndex,
24+
Cycle cycle,
25+
uint64[] memory s_superFormChainIds
26+
)
27+
internal
28+
{
29+
assert(env == 0);
30+
assert(salt.length > 0);
31+
cycle == Cycle.Dev ? vm.startBroadcast(deployerPrivateKey) : vm.startBroadcast();
32+
UpdateVars memory vars;
33+
vars.chainId = s_superFormChainIds[i];
34+
vars.superRegistryC =
35+
SuperRegistry(payable(_readContractsV1(env, chainNames[trueIndex], vars.chainId, "SuperRegistry")));
36+
address expectedSr = vars.chainId == 250
37+
? 0x7feB31d18E43E2faeC718EEd2D7f34402c3e27b4
38+
: 0x17A332dC7B40aE701485023b219E9D6f493a2514;
39+
assert(address(vars.superRegistryC) == expectedSr);
40+
41+
assert(trueIndex < PROTOCOL_ADMINS.length);
42+
address protocolAdmin = PROTOCOL_ADMINS[trueIndex];
43+
assert(protocolAdmin != address(0));
44+
45+
address[] memory rescuerAddress = new address[](TARGET_CHAINS.length);
46+
bytes32[] memory ids = new bytes32[](TARGET_CHAINS.length);
47+
48+
for (uint256 i; i < rescuerAddress.length; i++) {
49+
ids[i] = keccak256("CORE_STATE_REGISTRY_RESCUER_ROLE");
50+
rescuerAddress[i] = CSR_RESCUER;
51+
}
52+
vars.superRegistryC.batchSetAddress(ids, rescuerAddress, TARGET_CHAINS);
53+
54+
vm.stopBroadcast();
55+
}
56+
57+
function _configureRescuerBlast(
58+
uint256 env,
59+
uint256 i,
60+
uint256 trueIndex,
61+
Cycle cycle,
62+
uint64[] memory s_superFormChainIds
63+
)
64+
internal
65+
{
66+
assert(env == 0);
67+
assert(salt.length > 0);
68+
UpdateVars memory vars;
69+
vars.chainId = s_superFormChainIds[i];
70+
vars.superRegistryC =
71+
SuperRegistry(payable(_readContractsV1(env, chainNames[trueIndex], vars.chainId, "SuperRegistry")));
72+
address expectedSr = vars.chainId == 250
73+
? 0x7feB31d18E43E2faeC718EEd2D7f34402c3e27b4
74+
: 0x17A332dC7B40aE701485023b219E9D6f493a2514;
75+
assert(address(vars.superRegistryC) == expectedSr);
76+
77+
assert(trueIndex < PROTOCOL_ADMINS.length);
78+
address protocolAdmin = PROTOCOL_ADMINS[trueIndex];
79+
assert(protocolAdmin != address(0));
80+
81+
address[] memory rescuerAddress = new address[](TARGET_CHAINS.length);
82+
bytes32[] memory ids = new bytes32[](TARGET_CHAINS.length);
83+
84+
for (uint256 i; i < rescuerAddress.length; i++) {
85+
ids[i] = keccak256("CORE_STATE_REGISTRY_RESCUER_ROLE");
86+
rescuerAddress[i] = CSR_RESCUER;
87+
}
88+
89+
bytes memory txn =
90+
abi.encodeWithSelector(SuperRegistry.batchSetAddress.selector, ids, rescuerAddress, TARGET_CHAINS);
91+
addToBatch(address(vars.superRegistryC), 0, txn);
92+
93+
/// Send to Safe to sign
94+
executeBatch(vars.chainId, protocolAdmin, 0, false);
95+
}
96+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.23;
3+
4+
import { AbstractRescuerMissedConfig } from "./Abstract.Deploy.RescuerMissedConfig.s.sol";
5+
6+
contract MainnetDeployRescuerMissedConfig is AbstractRescuerMissedConfig {
7+
function configureRescuer(uint256 env, uint256 selectedChainIndex, uint256 useNewSalt) external {
8+
_setEnvironment(env, useNewSalt == 1 ? true : false);
9+
10+
uint256 trueIndex;
11+
for (uint256 i = 0; i < chainIds.length; i++) {
12+
if (TARGET_CHAINS[selectedChainIndex] == chainIds[i]) {
13+
trueIndex = i;
14+
break;
15+
}
16+
}
17+
18+
if (TARGET_CHAINS[selectedChainIndex] == LINEA) {
19+
_configureRescuerLinea(env, selectedChainIndex, trueIndex, Cycle.Prod, TARGET_CHAINS);
20+
} else if (TARGET_CHAINS[selectedChainIndex] == BLAST) {
21+
_configureRescuerBlast(env, selectedChainIndex, trueIndex, Cycle.Prod, TARGET_CHAINS);
22+
}
23+
}
24+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env bash
2+
# Note: How to set default - https://www.youtube.com/watch?v=VQe7cIpaE54
3+
4+
export ETHEREUM_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/ETHEREUM_RPC_URL/credential)
5+
export BSC_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/BSC_RPC_URL/credential)
6+
export AVALANCHE_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/AVALANCHE_RPC_URL/credential)
7+
export POLYGON_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/POLYGON_RPC_URL/credential)
8+
export ARBITRUM_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/ARBITRUM_RPC_URL/credential)
9+
export OPTIMISM_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/OPTIMISM_RPC_URL/credential)
10+
export BASE_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/BASE_RPC_URL/credential)
11+
export FANTOM_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/FANTOM_RPC_URL/credential)
12+
export LINEA_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/LINEA_RPC_URL/credential)
13+
export BLAST_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/BLAST_RPC_URL/credential)
14+
15+
echo Configuring bridge rescuer: ...
16+
17+
FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.DeployRescuerMissedConfig.s.sol:MainnetDeployRescuerMissedConfig --sig "configureRescuer(uint256,uint256, uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92
18+
wait
19+
20+
<<c
21+
WARNING PAY ATTENTION TO NONCEs
22+
echo Configuring bridge rescuer: ...
23+
24+
FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.DeployRescuerMissedConfig.s.sol:MainnetDeployRescuerMissedConfig --sig "configureRescuer(uint256,uint256, uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --broadcast --sender 0x1985df46791bebb1e3ed9ec60417f38cecc1d349
25+
wait
26+
c

0 commit comments

Comments
 (0)