Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
HOODI_RPC_URL=
MAINNET_RPC_URL=
ETHERSCAN_API_KEY=
DEPLOYER_PRIVATE_KEY=
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,11 @@ These functions verify balances and authorize the caller to retrieve their accum

### How to Deploy

**1)** Run the deployment script `DeployProxy.s.sol` defined in `scripts/`:
**2)** Set the environment variables in the `.env` file.

__`❍ npm run deploy:holesky`__: verification is done automatically.
**1)** Run the deployment script `DeployAllHoodi.s.sol` defined in `script/`:

__`❍ npm run deploy:hoodi`__: verification needs to be done manually for now.
__`❍ npm run deploy:hoodi-stage`__: verification is done automatically.

### How to Update Module Contracts

Expand Down
9 changes: 9 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ optimizer = true
optimizer_runs = 10_000
gas_reports = ["*"]
gas_reports_ignore = ["ERC20Mock", "BasedAppMock", "BasedAppMock2", "BasedAppMock3", "ERC1967Proxy"]
fs_permissions = [{ access = "read", path = "./script/config/"}, { access = "write", path = "./artifacts/"}]

[rpc_endpoints]
hoodi = "${HOODI_RPC_URL}"
mainnet = "${MAINNET_RPC_URL}"

[etherscan]
hoodi = { key = "${ETHERSCAN_API_KEY}" }
mainnet = { key = "${ETHERSCAN_API_KEY}" }

[fmt]
bracket_spacing = false
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@
"scripts": {
"compile": "forge compile",
"build": "npm run lint:fix && forge clean && forge build",
"deploy:holesky": "npm run build && forge script scripts/DeployProxy.s.sol --rpc-url $HOLESKY_RPC_URL --private-key $PRIVATE_KEY --verify -vvv --broadcast",
"deploy:hoodi": "npm run build && forge script scripts/DeployProxy.s.sol --rpc-url $HOODI_RPC_URL --private-key $PRIVATE_KEY --etherscan-api-key $ETHERSCAN_API_KEY --verify -vvv --broadcast",
"deploy:hoodi-stage": "source .env && forge script --chain hoodi script/DeployAllHoodi.s.sol false --sig 'run(bool)' --rpc-url $HOODI_RPC_URL --verify -vvv --broadcast",
"deploy:hoodi-testnet": "source .env && forge script --chain hoodi script/DeployAllHoodi.s.sol true --sig 'run(bool)' --rpc-url $HOODI_RPC_URL --verify -vvv --broadcast",
"deploy:mainnet": "source .env && forge script --chain mainnet script/DeployAllMainnet.s.sol --rpc-url $MAINNET_RPC_URL --verify -vvv --broadcast",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about the $PRIVATE_KEY here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's defined in the script

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

"verify:hoodi": "forge verify-contract --rpc-url https://hoodi.cloud.blockscout.com/api/eth-rpc --verifier blockscout --verifier-url 'https://hoodi.cloud.blockscout.com/api/' $IMPLEMENTATION_ADDRESS src/SSVBasedApps.sol:SSVBasedApps",
"gas-report": "forge test --gas-report",
"generate-docs": "solc --include-path node_modules --base-path . --combined-json userdoc,devdoc src/SSVBasedApps.sol --output-dir ./docs --overwrite",
Expand Down
3 changes: 1 addition & 2 deletions remappings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
@ssv/src/middleware=src/middleware
@ssv/lib/=lib/
@ssv/test/=test/
@ssv/scripts/=scripts/
@ssv/forge-std/=lib/forge-std/src/
@ssv/script/=script/
@ssv/src/core=src/core
@ssv/src/core/interfaces=src/core/interfaces
@ssv/src/core/libraries=src/core/libraries
Expand Down
117 changes: 117 additions & 0 deletions script/DeployAll.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.29;

import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import { Script, console } from "forge-std/Script.sol";
import { stdJson } from "forge-std/StdJson.sol";

import { StrategyManager } from "src/core/modules/StrategyManager.sol";
import { BasedAppsManager } from "src/core/modules/BasedAppsManager.sol";
import { ProtocolManager } from "src/core/modules/ProtocolManager.sol";
import { SSVBasedApps } from "src/core/SSVBasedApps.sol";
import { ProtocolStorageLib } from "src/core/libraries/ProtocolStorageLib.sol";

contract DeployAll is Script {
using stdJson for string;

function _deployAll(string memory raw) internal returns (string memory) {
vm.startBroadcast(vm.envUint("DEPLOYER_PRIVATE_KEY"));

SSVBasedApps impl = new SSVBasedApps();
StrategyManager strategyMod = new StrategyManager();
BasedAppsManager bAppsMod = new BasedAppsManager();
ProtocolManager protocolMod = new ProtocolManager();

/* COMMENTED to compile and draft the PR
ERC1967Proxy proxy = new ERC1967Proxy(
address(impl),
abi.encodeWithSelector(
impl.initialize.selector,
msg.sender,
address(bAppsMod),
address(strategyMod),
address(protocolMod),
ProtocolStorageLib.Data({
feeTimelockPeriod: uint32(
raw.readUint(".feeTimelockPeriod")
),
feeExpireTime: uint32(raw.readUint(".feeExpireTime")),
withdrawalTimelockPeriod: uint32(
raw.readUint(".withdrawalTimelockPeriod")
),
withdrawalExpireTime: uint32(
raw.readUint(".withdrawalExpireTime")
),
obligationTimelockPeriod: uint32(
raw.readUint(".obligationTimelockPeriod")
),
obligationExpireTime: uint32(
raw.readUint(".obligationExpireTime")
),
tokenUpdateTimelockPeriod: uint32(
raw.readUint(".tokenUpdateTimelockPeriod")
),
maxShares: raw.readUint(".maxShares"),
maxFeeIncrement: uint32(raw.readUint(".maxFeeIncrement")),
disabledFeatures: uint32(raw.readUint(".disabledFeatures"))
})
)
);

console.log("SSVBasedApps Proxy: ", address(proxy));
console.log("SSVBasedApps Impl: ", address(impl));
console.log("StrategyModule: ", address(strategyMod));
console.log("BAppsModule: ", address(bAppsMod));
console.log("ProtocolModule: ", address(protocolMod));

vm.stopBroadcast();

string memory parent = "parent";

string memory deployed_addresses = "addresses";
vm.serializeAddress(
deployed_addresses,
"SSVBasedAppsProxy",
address(proxy)
);
vm.serializeAddress(
deployed_addresses,
"SSVBasedAppsImpl",
address(impl)
);
vm.serializeAddress(
deployed_addresses,
"StrategyModule",
address(strategyMod)
);
vm.serializeAddress(
deployed_addresses,
"BAppsModule",
address(bAppsMod)
);

string memory deployed_addresses_output = vm.serializeAddress(
deployed_addresses,
"ProtocolModule",
address(protocolMod)
);

string memory chain_info = "chainInfo";
vm.serializeUint(chain_info, "deploymentBlock", block.number);
string memory chain_info_output = vm.serializeUint(
chain_info,
"chainId",
block.chainid
);

// serialize all the data
vm.serializeString(
parent,
deployed_addresses,
deployed_addresses_output
);

return vm.serializeString(parent, chain_info, chain_info_output);
*/
}
}
27 changes: 27 additions & 0 deletions script/DeployAllHoodi.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.29;

import { Script } from "forge-std/Script.sol";
import { DeployAll } from "./DeployAll.sol";

contract DeployAllHoodi is Script, DeployAll {
function run(bool isTestnet) external {
if (block.chainid != 560_048) {
revert("This script is only for the Hoodi testnet");
}

string memory cfgPath;
string memory outPath;
if (isTestnet) {
cfgPath = "script/config/hoodi_testnet.json";
outPath = "artifacts/deploy-hoodi-testnet.json";
} else {
cfgPath = "script/config/hoodi_stage.json";
outPath = "artifacts/deploy-hoodi-stage.json";
}

string memory finalJson = _deployAll(vm.readFile(cfgPath));

vm.writeJson(finalJson, outPath);
}
}
19 changes: 19 additions & 0 deletions script/DeployAllMainnet.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.29;

import { Script, console } from "forge-std/Script.sol";
import { DeployAll } from "./DeployAll.sol";

contract DeployAllHoodi is Script, DeployAll {
function run() external {
if (block.chainid != 1) {
revert("This script is only for Mainnet");
}

string memory finalJson = _deployAll(
vm.readFile("script/config/mainnet.json")
);

vm.writeJson(finalJson, "artifacts/deploy-mainnet.json");
}
}
12 changes: 12 additions & 0 deletions script/config/hoodi_stage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"feeTimelockPeriod": 86400,
"feeExpireTime": 3600,
"withdrawalTimelockPeriod": 172800,
"withdrawalExpireTime": 86400,
"obligationTimelockPeriod": 172800,
"obligationExpireTime": 86400,
"tokenUpdateTimelockPeriod": 3600,
"maxShares": "1e50",
"maxFeeIncrement": 500,
"disabledFeatures": 0
}
12 changes: 12 additions & 0 deletions script/config/hoodi_testnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"feeTimelockPeriod": 86400,
"feeExpireTime": 3600,
"withdrawalTimelockPeriod": 172800,
"withdrawalExpireTime": 86400,
"obligationTimelockPeriod": 172800,
"obligationExpireTime": 86400,
"tokenUpdateTimelockPeriod": 3600,
"maxShares": "1e50",
"maxFeeIncrement": 500,
"disabledFeatures": 0
}
12 changes: 12 additions & 0 deletions script/config/mainnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"feeTimelockPeriod": 604800,
"feeExpireTime": 86400,
"withdrawalTimelockPeriod": 1209600,
"withdrawalExpireTime": 259200,
"obligationTimelockPeriod": 1209600,
"obligationExpireTime": 259200,
"tokenUpdateTimelockPeriod": 1209600,
"maxShares": "1e50",
"maxFeeIncrement": 500,
"disabledFeatures": 3
}
89 changes: 0 additions & 89 deletions scripts/DeployProxy.s.sol

This file was deleted.

32 changes: 0 additions & 32 deletions scripts/UpgradeProxy.s.sol

This file was deleted.

Loading