Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.0.0-rc2 #242

Merged
merged 28 commits into from
Dec 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bc7dcdd
fix external library usage
bulbozaur Dec 19, 2024
a6ca6c8
Update deployment readme
sandstone-ag Dec 11, 2024
db96973
Remove yarn.lock
sandstone-ag Dec 20, 2024
e2e3ada
Remove unused NPM dev dependencies
sandstone-ag Dec 20, 2024
1690009
Fix SealableCalls unit tests
sandstone-ag Dec 20, 2024
8be8440
npm audit fix
sandstone-ag Dec 20, 2024
05deaad
Add "Known risks and limitations" section
Psirex Dec 22, 2024
91247f8
Add missing methods, improve formatting and wording in specification.
Psirex Dec 22, 2024
0878896
Contract natspec tweaks to match spec
Psirex Dec 22, 2024
0d7ecad
Merge pull request #245 from lidofinance/fix/deploy-readme-changes
sandstone-ag Dec 23, 2024
dbf0639
Improve Escrow unit tests
sandstone-ag Dec 6, 2024
4ac6af1
Tune ST_ETH rebase factor in Escrow tests. Improve logging.
sandstone-ag Dec 23, 2024
1c6a8c2
Move known risks and limitations into standalone doc
Psirex Dec 23, 2024
5720ccc
Update plan-b doc
Psirex Dec 23, 2024
92ce3bf
Remove Working draft annotation from mechanism doc
Psirex Dec 23, 2024
d95f3fe
Tweak known-risks-and-limitations.md markup
Psirex Dec 23, 2024
b72cf87
Update plan-b.md links and markup
Psirex Dec 23, 2024
0daf99b
Update docs markup
Psirex Dec 23, 2024
33a586c
Add NatSpec graphs for state transitions and proposal lifecycle
Psirex Dec 24, 2024
bee0c34
Add SPDX-FileCopyrightText comment to contracts
Psirex Dec 24, 2024
8e3c627
Soften delays requirement in the Natspec comment
Psirex Dec 24, 2024
af9970e
Merge pull request #247 from lidofinance/feature/spdx-copyright
bulbozaur Dec 24, 2024
1781a4f
Limit gas consumption for SealableCalls unit tests
Psirex Dec 24, 2024
00f9800
Fix typos in the known-risks-and-limitations doc
Psirex Dec 24, 2024
04a82d7
Merge pull request #244 from lidofinance/fix/fix-sealable-calls-unit-…
Psirex Dec 25, 2024
16e12c9
Fix NatSpec for getters/setters using interface arg types
Psirex Dec 25, 2024
833e083
Merge pull request #246 from lidofinance/docs/specification
Psirex Dec 25, 2024
adf77b2
Merge pull request #241 from lidofinance/feature/escrow-contract-unit…
Psirex Dec 25, 2024
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
27 changes: 14 additions & 13 deletions contracts/DualGovernance.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down Expand Up @@ -299,8 +300,8 @@ contract DualGovernance is IDualGovernance {
_stateMachine.activateNextState();
}

/// @notice Updates the address of the configuration provider for the Dual Governance system.
/// @param newConfigProvider The address of the new configuration provider contract.
/// @notice Sets the configuration provider for the Dual Governance system.
/// @param newConfigProvider The contract implementing the `IDualGovernanceConfigProvider` interface.
function setConfigProvider(IDualGovernanceConfigProvider newConfigProvider) external {
_checkCallerIsAdminExecutor();
_stateMachine.setConfigProvider(newConfigProvider);
Expand All @@ -319,14 +320,14 @@ contract DualGovernance is IDualGovernance {
emit ProposalsCancellerSet(newProposalsCanceller);
}

/// @notice Retrieves the current proposals canceller address.
/// @notice Returns the current proposals canceller address.
/// @return address The address of the current proposals canceller.
function getProposalsCanceller() external view returns (address) {
return _proposalsCanceller;
}

/// @notice Returns the current configuration provider address for the Dual Governance system.
/// @return configProvider The address of the current configuration provider contract.
/// @notice Returns the current configuration provider for the Dual Governance system.
/// @return configProvider The contract implementing the `IDualGovernanceConfigProvider` interface.
function getConfigProvider() external view returns (IDualGovernanceConfigProvider) {
return _stateMachine.configProvider;
}
Expand Down Expand Up @@ -412,7 +413,7 @@ contract DualGovernance is IDualGovernance {
}

/// @notice Returns the proposer data if the given `proposerAccount` is a registered proposer.
/// @param proposerAccount The address of the proposer to retrieve information for.
/// @param proposerAccount The address of the proposer to return information for.
/// @return proposer A Proposer struct containing the data of the registered proposer, including:
/// - `account`: The address of the registered proposer.
/// - `executor`: The address of the executor associated with the proposer.
Expand All @@ -426,15 +427,15 @@ contract DualGovernance is IDualGovernance {
proposers = _proposers.getAllProposers();
}

/// @notice Checks whether the given `proposerAccount` is a registered proposer.
/// @notice Returns whether the given `proposerAccount` is a registered proposer.
/// @param proposerAccount The address to check.
/// @return isProposer A boolean value indicating whether the `proposerAccount` is a registered
/// proposer (`true`) or not (`false`).
function isProposer(address proposerAccount) external view returns (bool) {
return _proposers.isRegisteredProposer(proposerAccount);
}

/// @notice Checks whether the given `executor` address is associated with an executor contract in the system.
/// @notice Returns whether the given `executor` address is associated with an executor contract in the system.
/// @param executor The address to check.
/// @return isExecutor A boolean value indicating whether the `executor` is a registered
/// executor (`true`) or not (`false`).
Expand Down Expand Up @@ -536,20 +537,20 @@ contract DualGovernance is IDualGovernance {
_resealer.setResealCommittee(newResealCommittee);
}

/// @notice Sets the address of the Reseal Manager.
/// @param newResealManager The address of the new Reseal Manager.
/// @notice Sets the address of the Reseal Manager contract.
/// @param newResealManager The contract implementing the `IResealManager` interface.
function setResealManager(IResealManager newResealManager) external {
_checkCallerIsAdminExecutor();
_resealer.setResealManager(newResealManager);
}

/// @notice Gets the address of the Reseal Manager.
/// @return resealManager The address of the Reseal Manager.
/// @notice Returns the address of the Reseal Manager contract.
/// @return resealManager The contract implementing the `IResealManager` interface.
function getResealManager() external view returns (IResealManager) {
return _resealer.resealManager;
}

/// @notice Gets the address of the reseal committee.
/// @notice Returns the address of the reseal committee.
/// @return resealCommittee The address of the reseal committee.
function getResealCommittee() external view returns (address) {
return _resealer.resealCommittee;
Expand Down
39 changes: 27 additions & 12 deletions contracts/EmergencyProtectedTimelock.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand All @@ -12,10 +13,25 @@ import {TimelockState} from "./libraries/TimelockState.sol";
import {ExecutableProposals} from "./libraries/ExecutableProposals.sol";
import {EmergencyProtection} from "./libraries/EmergencyProtection.sol";

/// @title EmergencyProtectedTimelock
/// @dev A timelock contract with emergency protection functionality. The contract allows for submitting, scheduling,
/// and executing proposals, while providing emergency protection features to prevent unauthorized execution during
/// emergency situations.
/// @notice Timelock contract facilitating the submission, scheduling, and execution of governance proposals.
/// It provides time-limited Emergency Protection to prevent the execution of proposals submitted by
/// a compromised or misbehaving (including those caused by code vulnerabilities) governance entity.
/// @dev The proposal lifecycle:
///
/// afterSubmitDelay afterScheduleDelay
/// passed passed
/// ┌──────────┐ ┌───────────┐ ┌───────────┐ ╔══════════╗
/// │ NotExist ├ submit() ─>│ Submitted ├ schedule() ─>│ Scheduled ├ execute() ─>║ Executed ║
/// └──────────┘ └────────┬──┘ └──┬────────┘ ╚══════════╝
/// cancelAllNonExecutedProposals()
/// │ ╔═══════════╗ │
/// └──>║ Cancelled ║<───┘
/// ╚═══════════╝
///
/// The afterSubmit and afterSchedule delays should be configured appropriately to provide the Emergency Activation
/// Committee sufficient time to activate Emergency Mode if a malicious proposal has been submitted or was
/// unexpectedly scheduled for execution due to governance capture or a vulnerability in the governance contract.
/// While Emergency Mode is active, the execution of proposals is restricted to the Emergency Execution Committee.
contract EmergencyProtectedTimelock is IEmergencyProtectedTimelock {
using TimelockState for TimelockState.Context;
using ExecutableProposals for ExecutableProposals.Context;
Expand Down Expand Up @@ -134,7 +150,7 @@ contract EmergencyProtectedTimelock is IEmergencyProtectedTimelock {
// Timelock Management
// ---

/// @notice Updates the address of the governance contract.
/// @notice Updates the address of the governance contract and cancels all non-executed proposals.
/// @param newGovernance The address of the new governance contract to be set.
function setGovernance(address newGovernance) external {
_timelockState.checkCallerIsAdminExecutor();
Expand Down Expand Up @@ -308,7 +324,7 @@ contract EmergencyProtectedTimelock is IEmergencyProtectedTimelock {
return _timelockState.getAfterScheduleDelay();
}

/// @notice Retrieves the details of a proposal.
/// @notice Returns the details of a proposal.
/// @param proposalId The id of the proposal.
/// @return proposalDetails The Proposal struct containing the details of the proposal.
/// @return calls An array of ExternalCall structs representing the sequence of calls to be executed for the proposal.
Expand All @@ -321,12 +337,11 @@ contract EmergencyProtectedTimelock is IEmergencyProtectedTimelock {
calls = _proposals.getProposalCalls(proposalId);
}

/// @notice Retrieves information about a proposal, excluding the external calls associated with it.
/// @param proposalId The id of the proposal to retrieve information for.
/// @notice Returns information about a proposal, excluding the external calls associated with it.
/// @param proposalId The id of the proposal to return information for.
/// @return proposalDetails A ProposalDetails struct containing the details of the proposal, with the following data:
/// - `id`: The id of the proposal.
/// - `status`: The current status of the proposal. Possible values are:
/// 0 - The proposal does not exist.
/// 1 - The proposal was submitted but not scheduled.
/// 2 - The proposal was submitted and scheduled but not yet executed.
/// 3 - The proposal was submitted, scheduled, and executed. This is the final state of the proposal lifecycle.
Expand All @@ -340,14 +355,14 @@ contract EmergencyProtectedTimelock is IEmergencyProtectedTimelock {
return _proposals.getProposalDetails(proposalId);
}

/// @notice Retrieves the external calls associated with the specified proposal.
/// @param proposalId The id of the proposal to retrieve external calls for.
/// @notice Returns the external calls associated with the specified proposal.
/// @param proposalId The id of the proposal to return external calls for.
/// @return calls An array of ExternalCall structs representing the sequence of calls to be executed for the proposal.
function getProposalCalls(uint256 proposalId) external view returns (ExternalCall[] memory calls) {
calls = _proposals.getProposalCalls(proposalId);
}

/// @notice Retrieves the total number of proposals.
/// @notice Returns the total number of proposals.
/// @return count The total number of proposals.
function getProposalsCount() external view returns (uint256 count) {
count = _proposals.getProposalsCount();
Expand Down
15 changes: 8 additions & 7 deletions contracts/Escrow.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down Expand Up @@ -145,7 +146,7 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
ST_ETH.approve(address(WITHDRAWAL_QUEUE), type(uint256).max);
}

/// @notice Retrieves the current state of the Escrow.
/// @notice Returns the current state of the Escrow.
/// @return State The current state of the Escrow.
function getEscrowState() external view returns (State) {
return _escrowState.state;
Expand Down Expand Up @@ -305,7 +306,7 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
// ---

/// @notice Sets the minimum duration that must elapse after the last stETH, wstETH, or unstETH lock
/// by a vetoer before they are permitted to unlock their assets from the Escrow.
/// by a vetoer before they are permitted to unlock their assets from the Signalling Escrow.
/// @param newMinAssetsLockDuration The new minimum lock duration to be set.
function setMinAssetsLockDuration(Duration newMinAssetsLockDuration) external {
_checkCallerIsDualGovernance();
Expand Down Expand Up @@ -353,7 +354,7 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
details.lastAssetsLockTimestamp = assets.lastAssetsLockTimestamp;
}

// @notice Retrieves the unstETH NFT ids of the specified vetoer.
/// @notice Returns the unstETH NFT ids of the specified vetoer.
/// @param vetoer The address of the vetoer whose unstETH NFTs are being queried.
/// @return unstETHIds An array of unstETH NFT ids locked by the vetoer.
function getVetoerUnstETHIds(address vetoer) external view returns (uint256[] memory unstETHIds) {
Expand All @@ -376,8 +377,8 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
details.totalUnstETHFinalizedETH = unstETHTotals.finalizedETH;
}

/// @notice Retrieves details of locked unstETH records for the given ids.
/// @param unstETHIds The array of ids for the unstETH records to retrieve.
/// @notice Returns details of locked unstETH records for the given ids.
/// @param unstETHIds The array of ids for the unstETH records to return.
/// @return unstETHDetails An array of `LockedUnstETHDetails` containing the details for each provided unstETH id.
///
/// The details include:
Expand Down Expand Up @@ -568,7 +569,7 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
// Rage Quit Escrow: Getters
// ---

/// @notice Retrieves the unstETH NFT ids of the next batch available for claiming.
/// @notice Returns the unstETH NFT ids of the next batch available for claiming.
/// @param limit The maximum number of unstETH NFTs to return in the batch.
/// @return unstETHIds An array of unstETH NFT ids available for the next withdrawal batch.
function getNextWithdrawalBatch(uint256 limit) external view returns (uint256[] memory unstETHIds) {
Expand Down Expand Up @@ -598,7 +599,7 @@ contract Escrow is ISignallingEscrow, IRageQuitEscrow {
return _escrowState.isRageQuitExtensionPeriodPassed();
}

/// @notice Retrieves details about the current state of the rage quit escrow.
/// @notice Returns details about the current state of the rage quit escrow.
/// @return details A `RageQuitEscrowDetails` struct containing the following fields:
/// - `isRageQuitExtensionPeriodStarted`: Indicates whether the rage quit extension period has started.
/// - `rageQuitEthWithdrawalsDelay`: The delay period for ETH withdrawals during rage quit.
Expand Down
1 change: 1 addition & 0 deletions contracts/Executor.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
5 changes: 3 additions & 2 deletions contracts/ImmutableDualGovernanceConfigProvider.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand All @@ -18,11 +19,11 @@ contract ImmutableDualGovernanceConfigProvider is IDualGovernanceConfigProvider
// Immutable Variables
// ---

/// @notice The percentage of the total stETH supply that must be exceeded in the Signalling Escrow to transition
/// @notice The percentage of the total stETH supply that must be reached in the Signalling Escrow to transition
/// Dual Governance from the Normal state to the VetoSignalling state.
PercentD16 public immutable FIRST_SEAL_RAGE_QUIT_SUPPORT;

/// @notice The percentage of the total stETH supply that must be exceeded in the Signalling Escrow to transition
/// @notice The percentage of the total stETH supply that must be reached in the Signalling Escrow to transition
/// Dual Governance into the RageQuit state.
PercentD16 public immutable SECOND_SEAL_RAGE_QUIT_SUPPORT;

Expand Down
5 changes: 3 additions & 2 deletions contracts/ResealManager.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down Expand Up @@ -29,7 +30,7 @@ contract ResealManager is IResealManager {
// ---

/// @notice Initializes the ResealManager contract.
/// @param emergencyProtectedTimelock The address of the EmergencyProtectedTimelock contract.
/// @param emergencyProtectedTimelock The address of the Timelock contract.
constructor(ITimelock emergencyProtectedTimelock) {
EMERGENCY_PROTECTED_TIMELOCK = emergencyProtectedTimelock;
}
Expand All @@ -40,7 +41,7 @@ contract ResealManager is IResealManager {

/// @notice Extends the pause of the specified sealable contract.
/// @dev Works only if conditions are met:
/// - ResealManager has PAUSE_ROLE for target contract;
/// - ResealManager has PAUSE_ROLE and RESUME_ROLE for target contract;
/// - Contract are paused until timestamp after current timestamp and not for infinite time;
/// - The DAO governance is blocked by DualGovernance;
/// - Function is called by the governance contract.
Expand Down
1 change: 1 addition & 0 deletions contracts/TimelockedGovernance.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/committees/HashConsensus.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/committees/ProposalsList.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/committees/TiebreakerCoreCommittee.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/committees/TiebreakerSubCommittee.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IDualGovernance.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IDualGovernanceConfigProvider.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IEmergencyProtectedTimelock.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IEscrowBase.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IExternalExecutor.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IGovernance.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IOwnable.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IRageQuitEscrow.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IResealManager.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ISealable.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ISignallingEscrow.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IStETH.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ITiebreaker.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ITiebreakerCoreCommittee.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ITimelock.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IWithdrawalQueue.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/IWstETH.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
1 change: 1 addition & 0 deletions contracts/libraries/AssetsAccounting.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// SPDX-FileCopyrightText: 2024 Lido <[email protected]>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
Loading
Loading