Skip to content

Commit

Permalink
feat: add clProofVerifier to lido locator
Browse files Browse the repository at this point in the history
  • Loading branch information
mkurayan committed Feb 24, 2025
1 parent 50f8045 commit 5d646fa
Show file tree
Hide file tree
Showing 11 changed files with 85 additions and 76 deletions.
35 changes: 10 additions & 25 deletions contracts/0.8.9/LidoLocator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ contract LidoLocator is ILidoLocator {
address withdrawalQueue;
address withdrawalVault;
address oracleDaemonConfig;
address clProofVerifier;
}

error ZeroAddress();
Expand All @@ -46,6 +47,7 @@ contract LidoLocator is ILidoLocator {
address public immutable withdrawalQueue;
address public immutable withdrawalVault;
address public immutable oracleDaemonConfig;
address public immutable clProofVerifier;

/**
* @notice declare service locations
Expand All @@ -67,35 +69,18 @@ contract LidoLocator is ILidoLocator {
withdrawalQueue = _assertNonZero(_config.withdrawalQueue);
withdrawalVault = _assertNonZero(_config.withdrawalVault);
oracleDaemonConfig = _assertNonZero(_config.oracleDaemonConfig);
clProofVerifier = _assertNonZero(_config.clProofVerifier);
}

function coreComponents() external view returns(
address,
address,
address,
address,
address,
address
) {
return (
elRewardsVault,
oracleReportSanityChecker,
stakingRouter,
treasury,
withdrawalQueue,
withdrawalVault
);
function coreComponents() external view returns (address, address, address, address, address, address) {
return (elRewardsVault, oracleReportSanityChecker, stakingRouter, treasury, withdrawalQueue, withdrawalVault);
}

function oracleReportComponentsForLido() external view returns(
address,
address,
address,
address,
address,
address,
address
) {
function oracleReportComponentsForLido()
external
view
returns (address, address, address, address, address, address, address)
{
return (
accountingOracle,
elRewardsVault,
Expand Down
69 changes: 38 additions & 31 deletions contracts/common/interfaces/ILidoLocator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,42 @@
pragma solidity >=0.4.24 <0.9.0;

interface ILidoLocator {
function accountingOracle() external view returns(address);
function depositSecurityModule() external view returns(address);
function elRewardsVault() external view returns(address);
function legacyOracle() external view returns(address);
function lido() external view returns(address);
function oracleReportSanityChecker() external view returns(address);
function burner() external view returns(address);
function stakingRouter() external view returns(address);
function treasury() external view returns(address);
function validatorsExitBusOracle() external view returns(address);
function withdrawalQueue() external view returns(address);
function withdrawalVault() external view returns(address);
function postTokenRebaseReceiver() external view returns(address);
function oracleDaemonConfig() external view returns(address);
function coreComponents() external view returns(
address elRewardsVault,
address oracleReportSanityChecker,
address stakingRouter,
address treasury,
address withdrawalQueue,
address withdrawalVault
);
function oracleReportComponentsForLido() external view returns(
address accountingOracle,
address elRewardsVault,
address oracleReportSanityChecker,
address burner,
address withdrawalQueue,
address withdrawalVault,
address postTokenRebaseReceiver
);
function accountingOracle() external view returns (address);
function depositSecurityModule() external view returns (address);
function elRewardsVault() external view returns (address);
function legacyOracle() external view returns (address);
function lido() external view returns (address);
function oracleReportSanityChecker() external view returns (address);
function burner() external view returns (address);
function stakingRouter() external view returns (address);
function treasury() external view returns (address);
function validatorsExitBusOracle() external view returns (address);
function withdrawalQueue() external view returns (address);
function withdrawalVault() external view returns (address);
function postTokenRebaseReceiver() external view returns (address);
function oracleDaemonConfig() external view returns (address);
function clProofVerifier() external view returns (address);
function coreComponents()
external
view
returns (
address elRewardsVault,
address oracleReportSanityChecker,
address stakingRouter,
address treasury,
address withdrawalQueue,
address withdrawalVault
);
function oracleReportComponentsForLido()
external
view
returns (
address accountingOracle,
address elRewardsVault,
address oracleReportSanityChecker,
address burner,
address withdrawalQueue,
address withdrawalVault,
address postTokenRebaseReceiver
);
}
1 change: 1 addition & 0 deletions lib/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ async function getLocatorConfig(locatorAddress: string) {
"withdrawalQueue",
"withdrawalVault",
"oracleDaemonConfig",
"clProofVerifier",
] as (keyof LidoLocator.ConfigStruct)[];

const configPromises = addresses.map((name) => locator[name]());
Expand Down
1 change: 1 addition & 0 deletions lib/state-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export enum Sk {
chainSpec = "chainSpec",
scratchDeployGasUsed = "scratchDeployGasUsed",
minFirstAllocationStrategy = "minFirstAllocationStrategy",
clProofVerifier = "clProofVerifier",
}

export function getAddress(contractKey: Sk, state: DeploymentState): string {
Expand Down
10 changes: 10 additions & 0 deletions scripts/scratch/deployed-testnet-defaults.json
Original file line number Diff line number Diff line change
Expand Up @@ -147,5 +147,15 @@
"symbol": "unstETH",
"baseUri": null
}
},
"clProofVerifier": {
"deployParameters": {
"gIFirstValidatorPrev": "0x0000000000000000000000000000000000000000000000000096000000000028",
"gIFirstValidatorCurr": "0x0000000000000000000000000000000000000000000000000096000000000028",
"gIHistoricalSummariesPrev": "0x0000000000000000000000000000000000000000000000000000000000005b00",
"gIHistoricalSummariesCurr": "0x0000000000000000000000000000000000000000000000000000000000005b00",
"firstSupportedSlot": 1,
"pivotSlot": 1
}
}
}
11 changes: 11 additions & 0 deletions scripts/scratch/steps/0090-deploy-non-aragon-contracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export async function main() {
const hashConsensusForExitBusParams = state[Sk.hashConsensusForValidatorsExitBusOracle].deployParameters;
const withdrawalQueueERC721Params = state[Sk.withdrawalQueueERC721].deployParameters;
const minFirstAllocationStrategyAddress = state[Sk.minFirstAllocationStrategy].address;
const clProofVerifierParams = state[Sk.clProofVerifier].deployParameters;

const proxyContractsOwner = deployer;
const admin = deployer;
Expand Down Expand Up @@ -191,6 +192,15 @@ export async function main() {
burnerParams.totalNonCoverSharesBurnt,
]);

const clProofVerifier = await deployWithoutProxy(Sk.clProofVerifier, "CLProofVerifier", deployer, [
clProofVerifierParams.gIFirstValidatorPrev,
clProofVerifierParams.gIFirstValidatorCurr,
clProofVerifierParams.gIHistoricalSummariesPrev,
clProofVerifierParams.gIHistoricalSummariesCurr,
clProofVerifierParams.firstSupportedSlot,
clProofVerifierParams.pivotSlot,
]);

// Update LidoLocator with valid implementation
const locatorConfig: string[] = [
accountingOracle.address,
Expand All @@ -207,6 +217,7 @@ export async function main() {
withdrawalQueueERC721.address,
withdrawalVaultAddress,
oracleDaemonConfig.address,
clProofVerifier.address,
];
await updateProxyImplementation(Sk.lidoLocator, "LidoLocator", locator.address, proxyContractsOwner, [locatorConfig]);
}
30 changes: 10 additions & 20 deletions test/0.8.9/contracts/LidoLocator__MockForSanityChecker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ contract LidoLocator__MockForSanityChecker is ILidoLocator {
address withdrawalVault;
address postTokenRebaseReceiver;
address oracleDaemonConfig;
address clProofVerifier;
}

address public immutable lido;
Expand All @@ -38,10 +39,9 @@ contract LidoLocator__MockForSanityChecker is ILidoLocator {
address public immutable withdrawalVault;
address public immutable postTokenRebaseReceiver;
address public immutable oracleDaemonConfig;
address public immutable clProofVerifier;

constructor (
ContractAddresses memory addresses
) {
constructor(ContractAddresses memory addresses) {
lido = addresses.lido;
depositSecurityModule = addresses.depositSecurityModule;
elRewardsVault = addresses.elRewardsVault;
Expand All @@ -56,28 +56,18 @@ contract LidoLocator__MockForSanityChecker is ILidoLocator {
withdrawalVault = addresses.withdrawalVault;
postTokenRebaseReceiver = addresses.postTokenRebaseReceiver;
oracleDaemonConfig = addresses.oracleDaemonConfig;
clProofVerifier = addresses.clProofVerifier;
}

function coreComponents() external view returns (address, address, address, address, address, address) {
return (
elRewardsVault,
oracleReportSanityChecker,
stakingRouter,
treasury,
withdrawalQueue,
withdrawalVault
);
return (elRewardsVault, oracleReportSanityChecker, stakingRouter, treasury, withdrawalQueue, withdrawalVault);
}

function oracleReportComponentsForLido() external view returns (
address,
address,
address,
address,
address,
address,
address
) {
function oracleReportComponentsForLido()
external
view
returns (address, address, address, address, address, address, address)
{
return (
accountingOracle,
elRewardsVault,
Expand Down
1 change: 1 addition & 0 deletions test/0.8.9/lidoLocator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const services = [
"withdrawalQueue",
"withdrawalVault",
"oracleDaemonConfig",
"clProofVerifier",
] as const;

type ArrayToUnion<A extends readonly unknown[]> = A[number];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ describe("OracleReportSanityChecker.sol:misc", () => {
withdrawalVault: withdrawalVault,
postTokenRebaseReceiver: deployer.address,
oracleDaemonConfig: deployer.address,
clProofVerifier: deployer.address,
},
]);
managersRoster = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ describe("OracleReportSanityChecker.sol:negative-rebase", () => {
withdrawalVault: deployer.address,
postTokenRebaseReceiver: deployer.address,
oracleDaemonConfig: deployer.address,
clProofVerifier: deployer.address,
},
]);

Expand Down
1 change: 1 addition & 0 deletions test/deploy/locator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ async function deployDummyLocator(config?: Partial<LidoLocator.ConfigStruct>, de
validatorsExitBusOracle: certainAddress("dummy-locator:validatorsExitBusOracle"),
withdrawalQueue: certainAddress("dummy-locator:withdrawalQueue"),
withdrawalVault: certainAddress("dummy-locator:withdrawalVault"),
clProofVerifier: certainAddress("dummy-locator:clProofVerifier"),
...config,
});

Expand Down

0 comments on commit 5d646fa

Please sign in to comment.