Skip to content

Commit

Permalink
Merge branch 'main' into feature/holesky-et-builder
Browse files Browse the repository at this point in the history
zuzueeka authored Dec 20, 2023
2 parents 248ecdf + 020b99f commit dcff86a
Showing 38 changed files with 3,225 additions and 199 deletions.
630 changes: 620 additions & 10 deletions docs/contracts/accounting-oracle.md

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions docs/contracts/gate-seal.md
Original file line number Diff line number Diff line change
@@ -8,16 +8,16 @@

A one-time panic button for pausable contracts.


## What is a GateSeal?

A GateSeal is a contract that allows the designated account to instantly put a set of contracts on pause (i.e. seal) for a limited duration. GateSeals are meant to be used as a panic button for crucial contracts in case of an emergency. Each GateSeal is one-time use only and immediately becomes unusable once activated. If the seal is never triggered, the GateSeal will still eventually expire after a set period.

## Why use a GateSeal?

To put such crucial components of the Lido protocol as `WithdrawalQueue` and `ValidatorExitBus` on hold, the DAO must hold a vote which may take up to several days to pass. GateSeals provide a way to temporarily pause these contracts immediately if the emergency calls for a swifter response. This will give the Lido DAO the time to come up with a solution, hold a vote, implement changes, etc.
To put such crucial components of the Lido protocol as `WithdrawalQueue` and `ValidatorsExitBusOracle` on hold, the DAO must hold a vote which may take up to several days to pass. GateSeals provide a way to temporarily pause these contracts immediately if the emergency calls for a swifter response. This will give the Lido DAO the time to come up with a solution, hold a vote, implement changes, etc.

Each GateSeal is operated by a committee, essentially a multisig account responsible for pulling the break in case things go awry. However, authorizing a committee to pause/resume the protocol withdrawals would be utterly reckless which is why GateSeals have a number of safeguards in place:

- each GateSeal can only be activated only once and becomes unusable immediately after,
- each GateSeal can only be activated within its expiry period of 1 year maximum and becomes unusable past its expiry timestamp even if it was never triggered,
- the pause duration set at construction time is limited to 14 days.
@@ -28,9 +28,10 @@ With all that said, it still is undesirable for a decentralized protocol to rely

## How does it work?

The idea of GateSeals is heavily based around `PausableUntil` contracts which both `WithdrawalQueue` and `ValidatorExitBus` implement. These `PausableUntil` contracts are similar to [`Pausable`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.4/contracts/security/Pausable.sol) contracts with one important difference: the paused state is not merely a boolean value, but a timestamp from which the contract is resumed (or unpaused). This allows the user to pause the contract for a certain period, and after this period the contract will resume itself without an explicit call. Thus, the PausableUntil pattern in conjunction with a GateSeal provide a way to pull the break on the protocol in a critical situation.
The idea of GateSeals is heavily based around `PausableUntil` contracts which both `WithdrawalQueue` and `ValidatorsExitBusOracle` implement. These `PausableUntil` contracts are similar to [`Pausable`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.4/contracts/security/Pausable.sol) contracts with one important difference: the paused state is not merely a boolean value, but a timestamp from which the contract is resumed (or unpaused). This allows the user to pause the contract for a certain period, and after this period the contract will resume itself without an explicit call. Thus, the PausableUntil pattern in conjunction with a GateSeal provide a way to pull the break on the protocol in a critical situation.

A GateSeal is set up with an immutable configuration at the time of construction:

- the sealing committee, an account responsible for triggering the seal,
- the seal duration, a period for which the contracts will be sealed,
- the sealables, a list of contracts to be sealed,
486 changes: 481 additions & 5 deletions docs/contracts/hash-consensus.md

Large diffs are not rendered by default.

443 changes: 441 additions & 2 deletions docs/contracts/validators-exit-bus-oracle.md

Large diffs are not rendered by default.

43 changes: 36 additions & 7 deletions docs/deployed-contracts/goerli.md
Original file line number Diff line number Diff line change
@@ -13,9 +13,7 @@ Note that there will be no comprehensive Lido testnet environments available for

:::

## Görli+Prater testnet

### Lido V2 Core Protocol
## Core protocol

- Lido Locator: [`0x1eDf09b5023DC86737b59dE68a8130De878984f5`](https://goerli.etherscan.io/address/0x1eDf09b5023DC86737b59dE68a8130De878984f5) (proxy)
- Lido and stETH token: [`0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F`](https://goerli.etherscan.io/address/0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F) (proxy)
@@ -30,7 +28,7 @@ Note that there will be no comprehensive Lido testnet environments available for
- Burner: [`0x20c61C07C2E2FAb04BF5b4E12ce45a459a18f3B1`](https://goerli.etherscan.io/address/0x20c61C07C2E2FAb04BF5b4E12ce45a459a18f3B1)
- MEV Boost Relay Allowed List: [`0xeabE95AC5f3D64aE16AcBB668Ed0efcd81B721Bc`](https://goerli.etherscan.io/address/0xeabe95ac5f3d64ae16acbb668ed0efcd81b721bc)

### Lido V2 Oracle Contracts
## Oracle Contracts

- Accounting Oracle:
- AccountingOracle: [`0x76f358A842defa0E179a8970767CFf668Fc134d6`](https://goerli.etherscan.io/address/0x76f358A842defa0E179a8970767CFf668Fc134d6) (proxy)
@@ -42,7 +40,7 @@ Note that there will be no comprehensive Lido testnet environments available for
- OracleDaemonConfig: [`0xE9CC5bD91543cdc9788454EE5063E2CD76B5206d`](https://goerli.etherscan.io/address/0xE9CC5bD91543cdc9788454EE5063E2CD76B5206d)
- Legacy Oracle (Lido Oracle before V2, obsolete): [`0x24d8451BC07e7aF4Ba94F69aCDD9ad3c6579D9FB`](https://goerli.etherscan.io/address/0x24d8451BC07e7aF4Ba94F69aCDD9ad3c6579D9FB) (proxy)

### Lido V2 DAO contracts
## DAO contracts

- Lido DAO (Kernel): [`0x1dD91b354Ebd706aB3Ac7c727455C7BAA164945A`](https://goerli.etherscan.io/address/0x1dD91b354Ebd706aB3Ac7c727455C7BAA164945A) (proxy)
- LDO token: [`0x56340274fB5a72af1A3C6609061c451De7961Bd4`](https://goerli.etherscan.io/address/0x56340274fB5a72af1A3C6609061c451De7961Bd4)
@@ -59,13 +57,13 @@ Note that there will be no comprehensive Lido testnet environments available for
- Gate Seal Factory: [`0x248C4a34645921C70a591CCc200cb75D6a4C5091`](https://goerli.etherscan.io/address/0x248C4a34645921C70a591CCc200cb75D6a4C5091)
- Gate Seal: [`0xEE656d0C8e9f0646B505a13295C188164a3D8EaC`](https://goerli.etherscan.io/address/0xEE656d0C8e9f0646B505a13295C188164a3D8EaC)

### Reward Programs
## Reward Programs

- Curve Liquidity Farming:

- Pool Contract: [`0xCEB67769c63cfFc6C8a6c68e85aBE1Df396B7aDA`](https://goerli.etherscan.io/address/0xCEB67769c63cfFc6C8a6c68e85aBE1Df396B7aDA)

### Easy Track
## Easy Track

- EasyTrack: [`0xAf072C8D368E4DD4A9d4fF6A76693887d6ae92Af`](https://goerli.etherscan.io/address/0xAf072C8D368E4DD4A9d4fF6A76693887d6ae92Af)
- EVMScriptExecutor: [`0x3c9AcA237b838c59612d79198685e7f20C7fE783`](https://goerli.etherscan.io/address/0x3c9AcA237b838c59612d79198685e7f20C7fE783)
@@ -185,3 +183,34 @@ Note that there will be no comprehensive Lido testnet environments available for
- **proposed** ProxyAdmin: [`0xe7e7befca267e5967e20d135941535a2396ccdf4`](https://goerli.explorer.zksync.io/address/0xe7e7befca267e5967e20d135941535a2396ccdf4) for
- ZkSyncBridgeExecutor
- ERC20BridgedUpgradeable

### Mantle

#### Ethereum part

- **proposed** L1ERC20TokenBridge: [`0xBc6bbb98E73D15cc6a280e96b32Cc73b4f9068E1`](https://goerli.etherscan.io/address/0xBc6bbb98E73D15cc6a280e96b32Cc73b4f9068E1) (proxy)
- **proposed** L1ERC20TokenBridge: [`0x8bed2E40522E21119B8A78A4842767c9bCceC47b`](https://goerli.etherscan.io/address/0x8bed2E40522E21119B8A78A4842767c9bCceC47b) (impl)

#### Mantle part

- **proposed** WstETH ERC20BridgedPermit: [`0x2C402BE58E5849c5413a79aa3b8aF3136e6C017F`](https://explorer.testnet.mantle.xyz/address/0x2C402BE58E5849c5413a79aa3b8aF3136e6C017F) (proxy)
- **proposed** WstETH ERC20BridgedPermit: [`0x1008C85f796314c0985639b1a03083Be53eEf5aA`](https://explorer.testnet.mantle.xyz/address/0x1008C85f796314c0985639b1a03083Be53eEf5aA) (impl)
- **proposed** L2ERC20TokenBridge: [`0xFCCC4297be972bb2861Da6D78a6fad588dF03ab1`](https://explorer.testnet.mantle.xyz/address/0xFCCC4297be972bb2861Da6D78a6fad588dF03ab1) (proxy)
- **proposed** L2ERC20TokenBridge: [`0x7Aa9EEEcECD56Bd43Bb66ee1B42dBEB754792C84`](https://explorer.testnet.mantle.xyz/address/0x7Aa9EEEcECD56Bd43Bb66ee1B42dBEB754792C84) (impl)
- **proposed** Mantle Governance Bridge Executor (`OptimismBridgeExecutor` contract is used): [`0xa09BA6f7660C616D2B45218b3169c855A695328f`](https://explorer.testnet.mantle.xyz/address/0xa09BA6f7660C616D2B45218b3169c855A695328f)

### Linea

#### Ethereum part

- **proposed** L1 TokenBridge (Canonical Bridge): [`0xaa012d038e6440535ec66edf2da592f4f8398133`](https://goerli.etherscan.io/address/0xaa012d038e6440535ec66edf2da592f4f8398133) (proxy)
- **proposed** L1 TokenBridge (Canonical Bridge): [`0x6E4437828B4A7E7730e3D7efC676E22Ce905B705`](https://goerli.etherscan.io/address/0x6e4437828b4a7e7730e3d7efc676e22ce905b705) (impl)

#### Linea part

- **proposed** wstETH CustomBridgedToken: [`0x9ceed01e39279a529f44deb9d35e09a04b1e67c8`](https://goerli.lineascan.build/address/0x9ceed01e39279a529f44deb9d35e09a04b1e67c8) (proxy)
- **proposed** wstETH CustomBridgedToken: [`0x2bb4036e0cdd52c2134a95b6249eb89e5f6bc7f1`](https://goerli.lineascan.build/address/0x2bb4036e0cdd52c2134a95b6249eb89e5f6bc7f1) (impl)
- **proposed** ProxyAdmin for wstETH CustomBridgedToken: [`0x71062fbc3da2d792285c3d5dabba12a42339e85c`](https://goerli.lineascan.build/address/0x71062fbc3da2d792285c3d5dabba12a42339e85c)
- **proposed** L2 TokenBridge (Canonical Bridge): [`0xb191e3d98074f92584e5205b99c3f17fb2068927`](https://goerli.lineascan.build/address/0xb191e3d98074f92584e5205b99c3f17fb2068927) (proxy)
- **proposed** L2 TokenBridge (Canonical Bridge): [`0x6081c1392793e22da39871d4362c1e7045a5bace`](https://goerli.lineascan.build/address/0x6081c1392793e22da39871d4362c1e7045a5bace) (impl)
- **proposed** LineaBridgeExecutor: [`0x4b38d24e70079f2dd1d79b86e2b52f4b13872a3b`](https://goerli.lineascan.build/address/0x4b38d24e70079f2dd1d79b86e2b52f4b13872a3b)
43 changes: 29 additions & 14 deletions docs/deployed-contracts/holesky.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Holešky

## Holešky testnet

### Lido V2 Core Protocol
## Core protocol

- Lido Locator: [`0x28FAB2059C713A7F9D8c86Db49f9bb0e96Af1ef8`](https://holesky.etherscan.io/address/0x28FAB2059C713A7F9D8c86Db49f9bb0e96Af1ef8) (proxy)
- Lido and stETH token: [`0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034`](https://holesky.etherscan.io/address/0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034) (proxy)
@@ -18,7 +16,7 @@
- Burner: [`0x4E46BD7147ccf666E1d73A3A456fC7a68de82eCA`](https://holesky.etherscan.io/address/0x4E46BD7147ccf666E1d73A3A456fC7a68de82eCA)
- MEV Boost Relay Allowed List: [`0x2d86C5855581194a386941806E38cA119E50aEA3`](https://holesky.etherscan.io/address/0x2d86C5855581194a386941806E38cA119E50aEA3)

### Lido V2 Oracle Contracts
## Oracle Contracts

- Accounting Oracle:
- AccountingOracle: [`0x4E97A3972ce8511D87F334dA17a2C332542a5246`](https://holesky.etherscan.io/address/0x4E97A3972ce8511D87F334dA17a2C332542a5246) (proxy)
@@ -30,7 +28,7 @@
- OracleDaemonConfig: [`0xC01fC1F2787687Bc656EAc0356ba9Db6e6b7afb7`](https://holesky.etherscan.io/address/0xC01fC1F2787687Bc656EAc0356ba9Db6e6b7afb7)
- Legacy Oracle (Lido Oracle before V2, obsolete): [`0x072f72BE3AcFE2c52715829F2CD9061A6C8fF019`](https://holesky.etherscan.io/address/0x072f72BE3AcFE2c52715829F2CD9061A6C8fF019) (proxy)

### Lido V2 DAO contracts
## DAO contracts

- Lido DAO (Kernel): [`0x3b03f75Ec541Ca11a223bB58621A3146246E1644`](https://holesky.etherscan.io/address/0x3b03f75Ec541Ca11a223bB58621A3146246E1644) (proxy)
- LDO token: [`0x14ae7daeecdf57034f3E9db8564e46Dba8D97344`](https://holesky.etherscan.io/address/0x14ae7daeecdf57034f3E9db8564e46Dba8D97344)
@@ -55,12 +53,22 @@
- Gate Seal Factory: [`0x1134F7077055b0B3559BE52AfeF9aA22A0E1eEC2`](https://holesky.etherscan.io/address/0x1134F7077055b0B3559BE52AfeF9aA22A0E1eEC2)
- Gate Seal: [`0x7f6FA688d4C12a2d51936680b241f3B0F0F9ca60`](https://holesky.etherscan.io/address/0x7f6FA688d4C12a2d51936680b241f3B0F0F9ca60)

### Easy Track
## Staking modules

- Curated Node Operators: [`0x595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC`](https://holesky.etherscan.io/address/0x595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC)
- Simple DVT: [`0x11a93807078f8BB880c1BD0ee4C387537de4b4b6`](https://holesky.etherscan.io/address/0x11a93807078f8BB880c1BD0ee4C387537de4b4b6)
- Sandbox: [`0xD6C2ce3BB8bea2832496Ac8b5144819719f343AC`](https://holesky.etherscan.io/address/0xD6C2ce3BB8bea2832496Ac8b5144819719f343AC)

## Easy Track

- EasyTrack: [`0x1763b9ED3586B08AE796c7787811a2E1bc16163a`](https://holesky.etherscan.io/address/0x1763b9ED3586B08AE796c7787811a2E1bc16163a)
- EVMScriptExecutor: [`0x2819B65021E13CEEB9AC33E77DB32c7e64e7520D`](https://holesky.etherscan.io/address/0x2819B65021E13CEEB9AC33E77DB32c7e64e7520D)
- IncreaseNodeOperatorStakingLimit: [`0x18Ff3bD97739bf910cDCDb8d138976c6afDB4449`](https://holesky.etherscan.io/address/0x18Ff3bD97739bf910cDCDb8d138976c6afDB4449)
- **Simple DVT** (committee ms [`0xD76001b33b23452243E2FDa833B6e7B8E3D43198`](https://holesky.etherscan.io/address/0xD76001b33b23452243E2FDa833B6e7B8E3D43198))

### Easy Track factories for staking modules

- **Curated Node Operators staking module** (registry: [`0x595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC`](https://holesky.etherscan.io/address/0x595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC))
- IncreaseNodeOperatorStakingLimit: [`0x18Ff3bD97739bf910cDCDb8d138976c6afDB4449`](https://holesky.etherscan.io/address/0x18Ff3bD97739bf910cDCDb8d138976c6afDB4449)
- **Simple DVT staking module** (registry: [`0x11a93807078f8BB880c1BD0ee4C387537de4b4b6`](https://holesky.etherscan.io/address/0x11a93807078f8BB880c1BD0ee4C387537de4b4b6), committee ms [`0xD76001b33b23452243E2FDa833B6e7B8E3D43198`](https://holesky.etherscan.io/address/0xD76001b33b23452243E2FDa833B6e7B8E3D43198))
- AddNodeOperators: [`0xeF5233A5bbF243149E35B353A73FFa8931FDA02b`](https://holesky.etherscan.io/address/0xeF5233A5bbF243149E35B353A73FFa8931FDA02b)
- ActivateNodeOperators: [`0x5b4A9048176D5bA182ceec8e673D8aA6927A40D6`](https://holesky.etherscan.io/address/0x5b4A9048176D5bA182ceec8e673D8aA6927A40D6)
- DeactivateNodeOperators: [`0x88d247cdf4ff4A4AAA8B3DD9dd22D1b89219FB3B`](https://holesky.etherscan.io/address/0x88d247cdf4ff4A4AAA8B3DD9dd22D1b89219FB3B)
@@ -69,9 +77,16 @@
- SetNodeOperatorRewardAddresses: [`0x6Bfc576018C7f3D2a9180974E5c8e6CFa021f617`](https://holesky.etherscan.io/address/0x6Bfc576018C7f3D2a9180974E5c8e6CFa021f617)
- UpdateTargetValidatorLimits: [`0xC91a676A69Eb49be9ECa1954fE6fc861AE07A9A2`](https://holesky.etherscan.io/address/0xC91a676A69Eb49be9ECa1954fE6fc861AE07A9A2)
- ChangeNodeOperatorManager: [`0xb8C4728bc0826bA5864D02FA53148de7A44C2f7E`](https://holesky.etherscan.io/address/0xb8C4728bc0826bA5864D02FA53148de7A44C2f7E)
- **Tooling contracts:**
- AllowedRecipientsBuilder (single token): [`0xeC3785b13b21c226D66B5bC2E82BB2f4226f715e`](https://holesky.etherscan.io/address/0xeC3785b13b21c226D66B5bC2E82BB2f4226f715e)
- AllowedRecipientsFactory (single token): [`0x62a65b0eC11D74a00FcC445ef7A3374f02635Dd9`](https://holesky.etherscan.io/address/0x62a65b0eC11D74a00FcC445ef7A3374f02635Dd9)
- AllowedRecipientsBuilder (multi token): [`0x983dF2EA3A7Dce9D60bD06f5C5dCc44a138eBA89`](https://holesky.etherscan.io/address/0x983dF2EA3A7Dce9D60bD06f5C5dCc44a138eBA89)
- AllowedRecipientsFactory (multi token): [`0x9d156F7F5ed1fEbDc4996CAA835CD964A10bd650`](https://holesky.etherscan.io/address/0x9d156F7F5ed1fEbDc4996CAA835CD964A10bd650)
- BokkyPooBah's DateTime Library: [`0xd6237FecDF9C1D9b023A5205C17549E3037EeEec`](https://holesky.etherscan.io/address/0xd6237FecDF9C1D9b023A5205C17549E3037EeEec)
- **Sandbox staking module** (registry: [`0xD6C2ce3BB8bea2832496Ac8b5144819719f343AC`](https://holesky.etherscan.io/address/0xD6C2ce3BB8bea2832496Ac8b5144819719f343AC))
- IncreaseNodeOperatorStakingLimit: [`0xbD37e55748c6f4Ece637AeD3e278e7575346B587`](https://holesky.etherscan.io/address/0xbD37e55748c6f4Ece637AeD3e278e7575346B587)

### Easy Track factories for token transfers
- TBA

- **Tooling contracts:**
- AllowedRecipientsBuilder (single token): [`0xeC3785b13b21c226D66B5bC2E82BB2f4226f715e`](https://holesky.etherscan.io/address/0xeC3785b13b21c226D66B5bC2E82BB2f4226f715e)
- AllowedRecipientsFactory (single token): [`0x62a65b0eC11D74a00FcC445ef7A3374f02635Dd9`](https://holesky.etherscan.io/address/0x62a65b0eC11D74a00FcC445ef7A3374f02635Dd9)
- AllowedRecipientsBuilder (multi token): [`0x983dF2EA3A7Dce9D60bD06f5C5dCc44a138eBA89`](https://holesky.etherscan.io/address/0x983dF2EA3A7Dce9D60bD06f5C5dCc44a138eBA89)
- AllowedRecipientsFactory (multi token): [`0x9d156F7F5ed1fEbDc4996CAA835CD964A10bd650`](https://holesky.etherscan.io/address/0x9d156F7F5ed1fEbDc4996CAA835CD964A10bd650)
- BokkyPooBah's DateTime Library: [`0xd6237FecDF9C1D9b023A5205C17549E3037EeEec`](https://holesky.etherscan.io/address/0xd6237FecDF9C1D9b023A5205C17549E3037EeEec)

Loading

0 comments on commit dcff86a

Please sign in to comment.