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

Integration Tests Refactoring #254

Merged
merged 50 commits into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 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
46d667e
Merge pull request #242 from lidofinance/develop
Psirex Dec 25, 2024
b717b6f
wip regression tests
bulbozaur Jan 20, 2025
89c9b6d
Merge branch 'feat/deploy-plan' into feature/regression-tests
Psirex Jan 20, 2025
9a89b8c
Draft ot possible ContractsDeployment and configs refactoring
Psirex Jan 22, 2025
fb6e41d
Initial phase of scenario tests refactoring
Psirex Jan 25, 2025
5e42ea9
Merge branch 'feat/deploy-plan' into feature/integration-tests-refactor
Psirex Jan 25, 2025
1087c9e
Ongoing regression & scenario tests rework
Psirex Jan 27, 2025
4775088
refactor scripts
bulbozaur Jan 28, 2025
06d28e0
Uncomment scenario tests
Psirex Jan 28, 2025
f73b383
Uncomment tiebreaker regression test
Psirex Jan 28, 2025
84961b1
Add Aragon Vote proposer regression test
Psirex Jan 28, 2025
c0324b2
Remove unused test utils files
Psirex Jan 28, 2025
e00a335
Add TimeConstraints.checkExecuteBeforeTimestamp() method
Psirex Jan 28, 2025
b4ecdb9
Fix emergency protection regression test
Psirex Jan 28, 2025
0191aae
Merge remote-tracking branch 'origin' into feature/integration-tests-…
Psirex Jan 29, 2025
c31b4f6
pre dry run fixes
bulbozaur Jan 29, 2025
0e7a496
Merge branch 'feature/integration-tests-refactor' into feature/script…
bulbozaur Jan 29, 2025
758ccfd
fix missing contract
bulbozaur Jan 29, 2025
7017c2a
fix Launch Acceptance
bulbozaur Jan 29, 2025
2dc4af5
fix LaunchAcceptance
bulbozaur Jan 29, 2025
0fc6396
Push dry-run #2 deploy artifacts
Psirex Jan 29, 2025
0a5a1de
Merge pull request #253 from lidofinance/feature/scripts-refactor
Psirex Feb 3, 2025
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ out/
.vscode/
deploy-config/*
!deploy-config/deploy-config-holesky-testnet.toml
!deploy-config/exmp-dg-setup-deploy-config-holesky.toml

# dev/testnet deployments
!deploy-config/deployment-*
7 changes: 0 additions & 7 deletions addresses/holesky-addresses.sol

This file was deleted.

12 changes: 0 additions & 12 deletions addresses/mainnet-addresses.sol

This file was deleted.

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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// 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 <info@lido.fi>
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

Expand Down
Loading