Skip to content

Commit 92089b4

Browse files
committed
add helper script for gnosis set transition
1 parent 7e53b15 commit 92089b4

3 files changed

Lines changed: 117 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ out/
66
broadcast/
77
.tool-versions
88
.env
9+
.idea

helper/add_keyper_set.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/opt/homebrew/bin/bash
2+
set -e
3+
4+
# Mainnet Gnosis Set Transition Nov 10
5+
private_key=<KEYPERSETMANAGER_DEPLOYER_PRIVATE_KEY>
6+
rpc_url=https://rpc.gnosischain.com
7+
keypers=0x4ba8E8e0061EA7CE9353e7B641A116F1d48d9d46,0xcB43AEAA8c029Da18A499dC684FdD250ab3FCd13,0x46c24A9B4C92Aeb416d732801208ADD353635EC4,0x772213aaD4c6B37d2cc0Fa3B74F9ace5a028B8C8,0x2711d53B3dF060D08AC30C6517D4B8EED50A54B3,0xe03472CCb8e011b7Dfb3343837D75Bf6C9c3324C,0x4B5E2356b666898e101627BdDc518956bcd90a03,0x48A0e1789C82084aE28c179bd5742454f8CD4ed6
8+
threshold=5
9+
activation_block_number=<>
10+
keyper_set_manager_address=0x7C2337f9bFce19d8970661DA50dE8DD7d3D34abb
11+
key_broadcast_address=0x626dB87f9a9aC47070016A50e802dd5974341301
12+
13+
export PRIVATE_KEY=$private_key
14+
export KEYPER_ADDRESSES=$keypers
15+
export THRESHOLD=$threshold
16+
export ACTIVATION_BLOCK_NUMBER=$activation_block_number
17+
export KEYPERSETMANAGER_ADDRESS=$keyper_set_manager_address
18+
export KEYBROADCAST_ADDRESS=$key_broadcast_address
19+
20+
echo "Running AddKeyperSet Forge script..."
21+
22+
contracts_root_dir=../
23+
cd $contracts_root_dir
24+
25+
forge script script/AddKeyperSetWithActivationBlock.s.sol \
26+
--rpc-url "$rpc_url" \
27+
--broadcast \
28+
-vvvv
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.22;
3+
4+
import "forge-std/Script.sol";
5+
import {KeyperSet} from "../src/common/KeyperSet.sol";
6+
import {KeyperSetManager} from "../src/common/KeyperSetManager.sol";
7+
import {KeyBroadcastContract} from "../src/common/KeyBroadcastContract.sol";
8+
import {EonKeyPublish} from "../src/common/EonKeyPublish.sol";
9+
10+
error ActivationDeltaTooLow();
11+
error ActivationBlockNumberTooLow();
12+
error ActivationBlockSmallerThanCurrentBlock();
13+
error ThresholdExceedsKeyperSetSize(uint256 threshold, uint256 keyperSetSize);
14+
error UnexpectedKeyperSet(
15+
uint256 index,
16+
address expectedKeyperSet,
17+
address actualKeyperSet
18+
);
19+
20+
contract AddKeyperSetWithActivationBlock is Script {
21+
function run() public {
22+
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
23+
address deployerAddress = vm.addr(deployerPrivateKey);
24+
console.log("deployer:", deployerAddress);
25+
vm.startBroadcast(deployerPrivateKey);
26+
27+
uint256 activationBlockNumber = vm.envOr("ACTIVATION_BLOCK_NUMBER", uint256(1));
28+
if (activationBlockNumber <= 1) {
29+
revert ActivationBlockNumberTooLow();
30+
}
31+
32+
if (activationBlockNumber < block.number) {
33+
revert ActivationBlockSmallerThanCurrentBlock();
34+
}
35+
36+
37+
address keyperSetManagerAddress = vm.envAddress(
38+
"KEYPERSETMANAGER_ADDRESS"
39+
);
40+
KeyperSetManager keyperSetManager = KeyperSetManager(
41+
keyperSetManagerAddress
42+
);
43+
44+
address keyBroadcastContractAddress = vm.envAddress(
45+
"KEYBROADCAST_ADDRESS"
46+
);
47+
KeyBroadcastContract keyBroadcastContract = KeyBroadcastContract(
48+
keyBroadcastContractAddress
49+
);
50+
51+
address[] memory keypers = vm.envAddress("KEYPER_ADDRESSES", ",");
52+
uint256 threshold = vm.envUint("THRESHOLD");
53+
if (threshold > keypers.length) {
54+
revert ThresholdExceedsKeyperSetSize(threshold, keypers.length);
55+
}
56+
57+
uint64 keyperSetIndex = keyperSetManager.getNumKeyperSets();
58+
KeyperSet keyperSet = new KeyperSet();
59+
EonKeyPublish eonKeyPublish = new EonKeyPublish(
60+
address(keyperSet),
61+
address(keyBroadcastContract),
62+
keyperSetIndex
63+
);
64+
keyperSet.addMembers(keypers);
65+
keyperSet.setThreshold(uint64(threshold));
66+
keyperSet.setPublisher(address(eonKeyPublish));
67+
keyperSet.setFinalized();
68+
console.log("keyperSet:", address(keyperSet));
69+
console.log("eonKeyPublish:", address(eonKeyPublish));
70+
71+
keyperSetManager.addKeyperSet(uint64(activationBlockNumber), address(keyperSet));
72+
console.log("activationBlock:", activationBlockNumber);
73+
console.log("keyperSetIndex:", keyperSetIndex);
74+
75+
address actualKeyperSet = keyperSetManager.getKeyperSetAddress(
76+
keyperSetIndex
77+
);
78+
if (actualKeyperSet != address(keyperSet)) {
79+
revert UnexpectedKeyperSet(
80+
keyperSetIndex,
81+
address(keyperSet),
82+
actualKeyperSet
83+
);
84+
}
85+
86+
vm.stopBroadcast();
87+
}
88+
}

0 commit comments

Comments
 (0)