Skip to content

Commit 4256b0d

Browse files
committed
Clean up deploy script
Don't add a keyper set in the deploy script. Provide a separate script for this instead. Also, add a separate script to deploy the sequencer only.
1 parent 8a96990 commit 4256b0d

File tree

3 files changed

+132
-34
lines changed

3 files changed

+132
-34
lines changed

script/addKeyperSet.s.sol

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import "forge-std/Test.sol";
5+
import "forge-std/Script.sol";
6+
import "../src/KeyperSet.sol";
7+
import "../src/KeyperSetManager.sol";
8+
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);
14+
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");
21+
22+
uint32 size;
23+
assembly {
24+
size := extcodesize(ksmAddress)
25+
}
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"
31+
);
32+
require(
33+
activationBlockNumber > 0 || activationBlockDelta > 0,
34+
"neither activation block number nor delta is given"
35+
);
36+
require(
37+
activationBlockNumber == 0 || activationBlockDelta == 0,
38+
"both activation block number and delta is given"
39+
);
40+
require(
41+
key_broadcaster != address(0),
42+
"key broadcaster is zero address"
43+
);
44+
45+
if (activationBlockDelta > 0) {
46+
activationBlockNumber = block.number + activationBlockDelta;
47+
}
48+
49+
vm.startBroadcast(deployKey);
50+
KeyperSet ks = new KeyperSet();
51+
ks.addMembers(keypers);
52+
ks.setThreshold(uint64(threshold));
53+
ks.setKeyBroadcaster(key_broadcaster);
54+
ks.setFinalized();
55+
56+
KeyperSetManager ksm = KeyperSetManager(ksmAddress);
57+
ksm.addKeyperSet(uint64(activationBlockNumber), address(ks));
58+
uint256 index = ksm.getNumKeyperSets() - 1;
59+
vm.stopBroadcast();
60+
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);
66+
}
67+
}

script/deploy.s.sol

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,50 @@ import "../src/KeyperSetManager.sol";
88
import "../src/Sequencer.sol";
99
import "../src/ValidatorRegistry.sol";
1010

11-
contract DeployAll is Script {
12-
KeyBroadcastContract public keyBroadcastContract;
13-
KeyperSet public keyperSet;
14-
KeyperSetManager public keyperSetManager;
15-
Sequencer public sequencer;
16-
ValidatorRegistry public validatorRegistry;
17-
18-
function deployKeyperSet() public {
19-
address broadcaster = vm.envAddress("BROADCASTER");
20-
keyperSet = new KeyperSet();
21-
address[] memory members = new address[](3);
22-
members[0] = address(1);
23-
members[1] = address(2);
24-
members[2] = address(3);
25-
keyperSet.addMembers(members);
26-
keyperSet.setKeyBroadcaster(broadcaster);
27-
keyperSet.setFinalized();
28-
}
11+
contract Deploy is Script {
12+
function deployKeyperSetManager() public returns (KeyperSetManager) {
13+
KeyperSetManager ksm = new KeyperSetManager();
14+
15+
// add bootstrap keyper set
16+
KeyperSet fakeKeyperset = new KeyperSet();
17+
fakeKeyperset.setFinalized();
18+
ksm.addKeyperSet(0, address(fakeKeyperset));
2919

30-
function deployKeyperSetManager() public {
31-
keyperSetManager = new KeyperSetManager();
32-
keyperSetManager.addKeyperSet(0, address(keyperSet));
20+
console.log("KeyperSetManager:", address(ksm));
21+
return ksm;
3322
}
3423

35-
function deployKeyBroadcastContract() public {
36-
keyBroadcastContract = new KeyBroadcastContract(
37-
address(keyperSetManager)
38-
);
24+
function deployKeyBroadcastContract(
25+
KeyperSetManager ksm
26+
) public returns (KeyBroadcastContract) {
27+
KeyBroadcastContract kbc = new KeyBroadcastContract(address(ksm));
28+
console.log("KeyBroadcastContract:", address(kbc));
29+
return kbc;
3930
}
4031

41-
function deploySequencer() public {
42-
sequencer = new Sequencer();
32+
function deploySequencer() public returns (Sequencer) {
33+
Sequencer s = new Sequencer();
34+
console.log("Sequencer:", address(s));
35+
return s;
4336
}
4437

45-
function deployValidatorRegistry() public {
46-
validatorRegistry = new ValidatorRegistry();
38+
function deployValidatorRegistry() public returns (ValidatorRegistry) {
39+
ValidatorRegistry vr = new ValidatorRegistry();
40+
console.log("ValidatorRegistry:", address(vr));
41+
return vr;
4742
}
4843

4944
function run() external {
50-
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
51-
vm.startBroadcast(deployerPrivateKey);
52-
deployKeyperSet();
53-
deployKeyperSetManager();
54-
deployKeyBroadcastContract();
45+
uint256 deployKey = vm.envUint("DEPLOY_KEY");
46+
address deployerAddress = vm.addr(deployKey);
47+
console.log("Deployer:", deployerAddress);
48+
vm.startBroadcast(deployKey);
49+
50+
KeyperSetManager ksm = deployKeyperSetManager();
51+
deployKeyBroadcastContract(ksm);
5552
deploySequencer();
5653
deployValidatorRegistry();
54+
5755
vm.stopBroadcast();
5856
}
5957
}

script/deploySequencer.s.sol

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import "forge-std/Script.sol";
5+
import "../src/KeyBroadcastContract.sol";
6+
import "../src/KeyperSet.sol";
7+
import "../src/KeyperSetManager.sol";
8+
import "../src/Sequencer.sol";
9+
import "../src/ValidatorRegistry.sol";
10+
11+
contract Deploy is Script {
12+
function run() external {
13+
uint256 deployKey = vm.envUint("DEPLOY_KEY");
14+
address deployerAddress = vm.addr(deployKey);
15+
console.log("Deployer:", deployerAddress);
16+
vm.startBroadcast(deployKey);
17+
deploySequencer();
18+
deployValidatorRegistry();
19+
vm.stopBroadcast();
20+
}
21+
22+
function deploySequencer() public returns (Sequencer) {
23+
Sequencer s = new Sequencer();
24+
console.log("Sequencer:", address(s));
25+
return s;
26+
}
27+
28+
function deployValidatorRegistry() public returns (ValidatorRegistry) {
29+
ValidatorRegistry vr = new ValidatorRegistry();
30+
console.log("ValidatorRegistry:", address(vr));
31+
return vr;
32+
}
33+
}

0 commit comments

Comments
 (0)