|
1 | 1 | // SPDX-License-Identifier: MIT
|
2 |
| -pragma solidity ^0.8.20; |
| 2 | +pragma solidity ^0.8.22; |
3 | 3 |
|
4 |
| -import "forge-std/Test.sol"; |
5 | 4 | import "forge-std/Script.sol";
|
6 |
| -import "../src/common/KeyperSet.sol"; |
7 |
| -import "../src/common/KeyperSetManager.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"; |
8 | 9 |
|
9 |
| -contract AddKeyperSet is Script, Test { |
10 |
| - function run() external { |
11 |
| - uint256 deployKey = vm.envUint("DEPLOY_KEY"); |
12 |
| - address deployerAddress = vm.addr(deployKey); |
13 |
| - console.log("Deployer:", deployerAddress); |
| 10 | +error ActivationDeltaTooLow(); |
| 11 | +error ThresholdExceedsKeyperSetSize(uint256 threshold, uint256 keyperSetSize); |
| 12 | +error UnexpectedKeyperSet( |
| 13 | + uint256 index, |
| 14 | + address expectedKeyperSet, |
| 15 | + address actualKeyperSet |
| 16 | +); |
14 | 17 |
|
15 |
| - address ksmAddress = vm.envAddress("KEYPER_SET_MANAGER"); |
16 |
| - address[] memory keypers = vm.envAddress("KEYPER_ADDRESSES", ","); |
17 |
| - uint256 threshold = vm.envUint("THRESHOLD"); |
18 |
| - uint256 activationBlockNumber = vm.envUint("ACTIVATION_BLOCK_NUMBER"); |
19 |
| - uint256 activationBlockDelta = vm.envUint("ACTIVATION_BLOCK_DELTA"); |
20 |
| - address key_broadcaster = vm.envAddress("KEY_BROADCASTER"); |
| 18 | +contract AddKeyperSet is Script { |
| 19 | + function run() public { |
| 20 | + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); |
| 21 | + address deployerAddress = vm.addr(deployerPrivateKey); |
| 22 | + console.log("deployer:", deployerAddress); |
| 23 | + vm.startBroadcast(deployerPrivateKey); |
21 | 24 |
|
22 |
| - uint32 size; |
23 |
| - assembly { |
24 |
| - size := extcodesize(ksmAddress) |
| 25 | + uint256 activationDelta = vm.envOr("ACTIVATION_DELTA", uint256(1)); |
| 26 | + if (activationDelta < 1) { |
| 27 | + revert ActivationDeltaTooLow(); |
25 | 28 | }
|
26 |
| - require(size > 0, "no contract deployed at given keyper set address"); |
27 |
| - require(keypers.length > 0, "given keyper set is empty"); |
28 |
| - require( |
29 |
| - threshold <= keypers.length, |
30 |
| - "threshold exceeds keyper set size" |
| 29 | + |
| 30 | + address keyperSetManagerAddress = vm.envAddress( |
| 31 | + "KEYPERSETMANAGER_ADDRESS" |
31 | 32 | );
|
32 |
| - require( |
33 |
| - activationBlockNumber > 0 || activationBlockDelta > 0, |
34 |
| - "neither activation block number nor delta is given" |
| 33 | + KeyperSetManager keyperSetManager = KeyperSetManager( |
| 34 | + keyperSetManagerAddress |
35 | 35 | );
|
36 |
| - require( |
37 |
| - activationBlockNumber == 0 || activationBlockDelta == 0, |
38 |
| - "both activation block number and delta is given" |
| 36 | + |
| 37 | + address keyBroadcastContractAddress = vm.envAddress( |
| 38 | + "KEYBROADCAST_ADDRESS" |
39 | 39 | );
|
40 |
| - require( |
41 |
| - key_broadcaster != address(0), |
42 |
| - "key broadcaster is zero address" |
| 40 | + KeyBroadcastContract keyBroadcastContract = KeyBroadcastContract( |
| 41 | + keyBroadcastContractAddress |
43 | 42 | );
|
44 | 43 |
|
45 |
| - if (activationBlockDelta > 0) { |
46 |
| - activationBlockNumber = block.number + activationBlockDelta; |
| 44 | + address[] memory keypers = vm.envAddress("KEYPER_ADDRESSES", ","); |
| 45 | + uint256 threshold = vm.envUint("THRESHOLD"); |
| 46 | + if (threshold > keypers.length) { |
| 47 | + revert ThresholdExceedsKeyperSetSize(threshold, keypers.length); |
47 | 48 | }
|
48 | 49 |
|
49 |
| - vm.startBroadcast(deployKey); |
50 |
| - KeyperSet ks = new KeyperSet(); |
51 |
| - ks.addMembers(keypers); |
52 |
| - ks.setThreshold(uint64(threshold)); |
53 |
| - ks.setPublisher(key_broadcaster); |
54 |
| - ks.setFinalized(); |
| 50 | + uint64 keyperSetIndex = keyperSetManager.getNumKeyperSets(); |
| 51 | + KeyperSet keyperSet = new KeyperSet(); |
| 52 | + EonKeyPublish eonKeyPublish = new EonKeyPublish( |
| 53 | + address(keyperSet), |
| 54 | + address(keyBroadcastContract), |
| 55 | + keyperSetIndex |
| 56 | + ); |
| 57 | + keyperSet.addMembers(keypers); |
| 58 | + keyperSet.setThreshold(uint64(threshold)); |
| 59 | + keyperSet.setPublisher(address(eonKeyPublish)); |
| 60 | + keyperSet.setFinalized(); |
| 61 | + console.log("keyperSet:", address(keyperSet)); |
| 62 | + console.log("eonKeyPublish:", address(eonKeyPublish)); |
55 | 63 |
|
56 |
| - KeyperSetManager ksm = KeyperSetManager(ksmAddress); |
57 |
| - ksm.addKeyperSet(uint64(activationBlockNumber), address(ks)); |
58 |
| - uint256 index = ksm.getNumKeyperSets() - 1; |
59 |
| - vm.stopBroadcast(); |
| 64 | + uint64 activationBlock = uint64(block.number + activationDelta); |
| 65 | + keyperSetManager.addKeyperSet(activationBlock, address(keyperSet)); |
| 66 | + console.log("activationBlock:", activationBlock); |
| 67 | + console.log("keyperSetIndex:", keyperSetIndex); |
| 68 | + |
| 69 | + address actualKeyperSet = keyperSetManager.getKeyperSetAddress( |
| 70 | + keyperSetIndex |
| 71 | + ); |
| 72 | + if (actualKeyperSet != address(keyperSet)) { |
| 73 | + revert UnexpectedKeyperSet( |
| 74 | + keyperSetIndex, |
| 75 | + address(keyperSet), |
| 76 | + actualKeyperSet |
| 77 | + ); |
| 78 | + } |
60 | 79 |
|
61 |
| - console.log("Keyper set added at index", index); |
62 |
| - console.log("Index:", index); |
63 |
| - console.log("Num members:", keypers.length); |
64 |
| - console.log("Threshold:", threshold); |
65 |
| - console.log("Activation block number:", activationBlockNumber); |
| 80 | + vm.stopBroadcast(); |
66 | 81 | }
|
67 | 82 | }
|
0 commit comments