Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion .foundryref
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v1.5.1
v1.7.1
2 changes: 1 addition & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[profile.default]
evm_version = "osaka"
optimizer = true
optimizer_runs = 150
optimizer_runs = 25
bytecode_hash = "none" # The metadata hash removed from the bytecode (not the metadata itself).
# uncomment this to inspect storage layouts in build artifacts
# extra_output = ["storageLayout"]
Expand Down
47 changes: 46 additions & 1 deletion script/curated/DeployBase.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import { Verifier } from "../../src/Verifier.sol";
import { ParametersRegistry } from "../../src/ParametersRegistry.sol";
import { ExitPenalties } from "../../src/ExitPenalties.sol";
import { MetaRegistry } from "../../src/MetaRegistry.sol";
import { AdditionalBondRegistry } from "../../src/AdditionalBondRegistry.sol";
import { BoostStep } from "../../src/interfaces/IAdditionalBondRegistry.sol";
import { CuratedGate } from "../../src/CuratedGate.sol";
import { MerkleGateFactory } from "../../src/MerkleGateFactory.sol";

Expand All @@ -26,6 +28,8 @@ import { BaseOracle } from "../../src/lib/base-oracle/BaseOracle.sol";
import { IVerifier } from "../../src/interfaces/IVerifier.sol";
import { IParametersRegistry } from "../../src/interfaces/IParametersRegistry.sol";
import { IBondCurve } from "../../src/interfaces/IBondCurve.sol";
import { IMetaRegistry } from "../../src/interfaces/IMetaRegistry.sol";
import { IWeightBoostProvider } from "../../src/interfaces/IWeightBoostProvider.sol";

import { JsonObj, Json } from "../utils/Json.sol";
import { Dummy } from "../utils/Dummy.sol";
Expand Down Expand Up @@ -58,6 +62,12 @@ struct CuratedGateConfig {
GateCurveParams params;
}

struct AdditionalBondRegistryConfig {
uint256 curveMultiplierCooldown;
// Each entry is [minCurveMultiplier, weightMultiplier] (increments above MAX_BP).
uint256[2][] boostSteps;
}

struct CuratedDeployParams {
// Lido addresses
address lidoLocatorAddress;
Expand Down Expand Up @@ -121,6 +131,8 @@ struct CuratedDeployParams {
address resealManager;
// Testnet stuff
address secondAdminAddress;
// AdditionalBondRegistry
AdditionalBondRegistryConfig additionalBondRegistryConfig;
}

abstract contract DeployBase is Script {
Expand All @@ -143,6 +155,7 @@ abstract contract DeployBase is Script {
HashConsensus public hashConsensus;
ParametersRegistry public parametersRegistry;
MetaRegistry public metaRegistry;
AdditionalBondRegistry public additionalBondRegistry;
MerkleGateFactory public curatedGateFactory;
address[] public curatedGateInstances;
address internal curatedGateImpl;
Expand Down Expand Up @@ -231,6 +244,7 @@ abstract contract DeployBase is Script {
accounting = Accounting(_deployProxy(deployer, address(dummyImpl)));
oracle = FeeOracle(_deployProxy(deployer, address(dummyImpl)));
metaRegistry = MetaRegistry(_deployProxy(deployer, address(dummyImpl)));
additionalBondRegistry = AdditionalBondRegistry(_deployProxy(deployer, address(dummyImpl)));

FeeDistributor feeDistributorImpl = new FeeDistributor({
stETH: locator.lido(),
Expand Down Expand Up @@ -309,7 +323,10 @@ abstract contract DeployBase is Script {
moduleProxy.proxy__changeAdmin(config.proxyAdmin);
}

MetaRegistry metaRegistryImpl = new MetaRegistry(address(curatedModule));
MetaRegistry metaRegistryImpl = new MetaRegistry({
module: address(curatedModule),
additionalBondRegistry: address(additionalBondRegistry)
});

{
OssifiableProxy metaRegistryProxy = OssifiableProxy(payable(address(metaRegistry)));
Expand All @@ -320,7 +337,29 @@ abstract contract DeployBase is Script {
metaRegistryProxy.proxy__changeAdmin(config.proxyAdmin);
}

AdditionalBondRegistry additionalBondRegistryImpl = new AdditionalBondRegistry({
module: address(curatedModule),
curveMultiplierCooldown: config.additionalBondRegistryConfig.curveMultiplierCooldown
});

{
OssifiableProxy additionalBondRegistryProxy = OssifiableProxy(payable(address(additionalBondRegistry)));
BoostStep[] memory initialBoostSteps = CommonScriptUtils.arraysToBoostSteps(
config.additionalBondRegistryConfig.boostSteps
);
additionalBondRegistryProxy.proxy__upgradeToAndCall(
address(additionalBondRegistryImpl),
abi.encodeCall(AdditionalBondRegistry.initialize, (deployer, initialBoostSteps))
);
additionalBondRegistryProxy.proxy__changeAdmin(config.proxyAdmin);
}

accounting.grantRole(accounting.MANAGE_BOND_CURVES_ROLE(), address(deployer));
accounting.grantRole(accounting.SET_BOND_CURVE_MULTIPLIER_ROLE(), address(additionalBondRegistry));
metaRegistry.addWeightBoostProvider(
IWeightBoostProvider(address(additionalBondRegistry)),
IMetaRegistry.WeightBoostProviderMode.NodeOperator
);
metaRegistry.grantRole(metaRegistry.SET_BOND_CURVE_WEIGHT_ROLE(), deployer);

for (uint256 i = 0; i < gatesCount; i++) {
Expand Down Expand Up @@ -518,6 +557,9 @@ abstract contract DeployBase is Script {
metaRegistry.grantRole(metaRegistry.DEFAULT_ADMIN_ROLE(), config.aragonAgent);
metaRegistry.revokeRole(metaRegistry.DEFAULT_ADMIN_ROLE(), deployer);

additionalBondRegistry.grantRole(additionalBondRegistry.DEFAULT_ADMIN_ROLE(), config.aragonAgent);
additionalBondRegistry.revokeRole(additionalBondRegistry.DEFAULT_ADMIN_ROLE(), deployer);

verifier.grantRole(verifier.DEFAULT_ADMIN_ROLE(), config.aragonAgent);
verifier.revokeRole(verifier.DEFAULT_ADMIN_ROLE(), deployer);

Expand All @@ -542,6 +584,8 @@ abstract contract DeployBase is Script {
deployJson.set("CuratedModuleImpl", address(curatedModuleImpl));
deployJson.set("MetaRegistry", address(metaRegistry));
deployJson.set("MetaRegistryImpl", address(metaRegistryImpl));
deployJson.set("AdditionalBondRegistry", address(additionalBondRegistry));
deployJson.set("AdditionalBondRegistryImpl", address(additionalBondRegistryImpl));
deployJson.set("ParametersRegistry", address(parametersRegistry));
deployJson.set("ParametersRegistryImpl", address(parametersRegistryImpl));
deployJson.set("Accounting", address(accounting));
Expand Down Expand Up @@ -637,6 +681,7 @@ abstract contract DeployBase is Script {
hashConsensus.grantRole(hashConsensus.DEFAULT_ADMIN_ROLE(), config.secondAdminAddress);
parametersRegistry.grantRole(parametersRegistry.DEFAULT_ADMIN_ROLE(), config.secondAdminAddress);
metaRegistry.grantRole(metaRegistry.DEFAULT_ADMIN_ROLE(), config.secondAdminAddress);
additionalBondRegistry.grantRole(additionalBondRegistry.DEFAULT_ADMIN_ROLE(), config.secondAdminAddress);
for (uint256 i = 0; i < curatedGateInstances.length; i++) {
CuratedGate gate = CuratedGate(curatedGateInstances[i]);
gate.grantRole(gate.DEFAULT_ADMIN_ROLE(), config.secondAdminAddress);
Expand Down
9 changes: 8 additions & 1 deletion script/curated/DeployHoodi.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

pragma solidity 0.8.33;

import { DeployBase, CuratedGateConfig } from "./DeployBase.s.sol";
import { DeployBase, CuratedGateConfig, AdditionalBondRegistryConfig } from "./DeployBase.s.sol";
import { GIndices } from "../constants/GIndices.sol";

contract DeployHoodi is DeployBase {
Expand Down Expand Up @@ -198,6 +198,13 @@ contract DeployHoodi is DeployBase {
config.resealManager = 0x05172CbCDb7307228F781436b327679e4DAE166B;

config.secondAdminAddress = 0x4AF43Ee34a6fcD1fEcA1e1F832124C763561dA53; // Dev team EOA

// CurveMultiplier
config.additionalBondRegistryConfig.curveMultiplierCooldown = 7 days;
// TODO: reconsider — placeholder initial boost steps.
config.additionalBondRegistryConfig.boostSteps.push([uint256(5_000), 2_000]);
config.additionalBondRegistryConfig.boostSteps.push([uint256(10_000), 8_000]);

_setUp();
}
}
9 changes: 8 additions & 1 deletion script/curated/DeployLocalDevNet.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

pragma solidity 0.8.33;

import { DeployBase, CuratedGateConfig } from "./DeployBase.s.sol";
import { DeployBase, CuratedGateConfig, AdditionalBondRegistryConfig } from "./DeployBase.s.sol";
import { GIndices } from "../constants/GIndices.sol";
import { BaseOracle } from "../../src/lib/base-oracle/BaseOracle.sol";
import { HashConsensus } from "../../src/lib/base-oracle/HashConsensus.sol";
Expand All @@ -30,6 +30,7 @@ contract DeployLocalDevNet is DeployBase {
config.gIFirstWithdrawal = GIndices.FIRST_WITHDRAWAL_ELECTRA;
config.gIFirstValidator = GIndices.FIRST_VALIDATOR_ELECTRA;
config.gIFirstHistoricalSummary = GIndices.FIRST_HISTORICAL_SUMMARY_ELECTRA; // prettier-ignore
config.gIFirstBalanceNode = GIndices.FIRST_BALANCE_NODE_ELECTRA;
config.verifierFirstSupportedSlot = vm.envUint("DEVNET_ELECTRA_EPOCH") * config.slotsPerEpoch;
config.capellaSlot = vm.envUint("DEVNET_CAPELLA_EPOCH") * config.slotsPerEpoch;
config.minWithdrawalRatio = 9950;
Expand Down Expand Up @@ -186,6 +187,12 @@ contract DeployLocalDevNet is DeployBase {

config.secondAdminAddress = vm.envOr("CSM_SECOND_ADMIN_ADDRESS", address(0));

// CurveMultiplier
config.additionalBondRegistryConfig.curveMultiplierCooldown = 1 days;
// TODO: reconsider — placeholder initial boost steps.
config.additionalBondRegistryConfig.boostSteps.push([uint256(5_000), 2_000]);
config.additionalBondRegistryConfig.boostSteps.push([uint256(10_000), 8_000]);

_setUp();
}

Expand Down
9 changes: 8 additions & 1 deletion script/curated/DeployMainnet.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

pragma solidity 0.8.33;

import { DeployBase, CuratedGateConfig } from "./DeployBase.s.sol";
import { DeployBase, CuratedGateConfig, AdditionalBondRegistryConfig } from "./DeployBase.s.sol";
import { GIndices } from "../constants/GIndices.sol";

contract DeployMainnet is DeployBase {
Expand Down Expand Up @@ -197,6 +197,13 @@ contract DeployMainnet is DeployBase {

// DG
config.resealManager = 0x7914b5a1539b97Bd0bbd155757F25FD79A522d24;

// CurveMultiplier
config.additionalBondRegistryConfig.curveMultiplierCooldown = 7 days;
// TODO: reconsider — placeholder initial boost steps.
config.additionalBondRegistryConfig.boostSteps.push([uint256(5_000), 2_000]);
config.additionalBondRegistryConfig.boostSteps.push([uint256(10_000), 8_000]);

_setUp();
}
}
12 changes: 12 additions & 0 deletions script/utils/Common.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pragma solidity 0.8.33;

import { IParametersRegistry } from "../../src/interfaces/IParametersRegistry.sol";
import { IBondCurve } from "../../src/interfaces/IBondCurve.sol";
import { BoostStep } from "../../src/interfaces/IAdditionalBondRegistry.sol";

library CommonScriptUtils {
function arraysToKeyIndexValueIntervals(
Expand Down Expand Up @@ -32,4 +33,15 @@ library CommonScriptUtils {
}
return bondCurveInputs;
}

function arraysToBoostSteps(uint256[2][] memory data) internal pure returns (BoostStep[] memory) {
BoostStep[] memory boostSteps = new BoostStep[](data.length);
for (uint256 i = 0; i < data.length; i++) {
boostSteps[i] = BoostStep({
minCurveMultiplier: uint128(data[i][0]),
weightMultiplier: uint128(data[i][1])
});
}
return boostSteps;
}
}
Loading
Loading