Lido DAO contributors are preparing for Simple DVT release on the mainnet (you can see details in Staking Router Module Proposal: Simple DVT).
This a post describing overall technical design and further on-chain steps to make it live.
The “Simple DVT” is a new module that will utilize Distributed Validator Technology (DVT) on mainnet through Obol Network and SSV Network implementations. This module will be referred to as the “Simple DVT” module, due to simplified reward management scheme, manual coordination and curation required to adopt this early-stage technology. Its overall design outlined in the last post and the audit reports can be found here (Simple DVT app (same implementation as Node Operators Registry), Easy Track factories, SSV module, Obol module).
DVT is an approach to validator security that spreads out key management and signing responsibilities across multiple parties, to reduce single points of failure, and increase validator resiliency. You can read more details about DVT technology here.
By accommodating a more extensive range of Node Operators, this technology significantly amplifies the network’s decentralization, distribution, and resilience. New module opens doors for solo stakers, community stakers, existing node operators, and other staking organizations.
New module code is absolutely the same that is used in the Curated Node Operators Registry module. New module will consist of clusters (operators), operated by Obol and SSV.
Obol Labs specializes in researching and developing software for public blockchain networks, with a particular emphasis on proof-of-stake infrastructure. Their team focuses on key areas such as Internet Bonds, Distributed Validator Technology, and Multi-Operator Validation.
SSV offers a completely decentralized, open-source Ethereum staking ssv.network, utilizing Secret Shared Validator (SSV) technology. SSV, also referred to as Distributed Validator Technology (DVT).
Obol audits: https://obol.tech/charon_quantstamp_audit.pdf
SSV audits: ssv-network/contracts/audits/2023-30-10_Quantstamp_v1.0.2.pdf at v1.0.2 · bloxapp/ssv-network · GitHub
Reward splitters audit (Obol): obol-splits/audit at main · ObolNetwork/obol-splits · GitHub
Management
Since the addition of a new module significantly increases the number of node operators, the question arose about the efficient solution to operational tasks such as adding, removing, activating, and deactivating node operators, changing node operator names, reward addresses, node operator managers, and adjusting limits. To address this, Lido contributors developed and deployed a set of new factories for Easy Track.
The Simple DVT Module Committee (SDVTMC) is a multi-sig that has the rights and is responsible for creating and executing Easy Track motions specifically for the Simple DVT Module that can create new clusters, activate and deactivate existing clusters, raise and lower cluster key limits, and change cluster manager and reward addresses.
SDVTMC multi-sig address is 0x08637515E85A4633E23dfc7861e2A9f53af640f7
Please refer to the Simple DVT committee post for more details.
Preliminary work
Some components of this update, like Simple DVT app proxy and related Easy Track factories have been deployed beforehand.
Components:
Simple DVT app proxy: 0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433
(The implementation (0x8538930c385C0438A357d2c25CB3eAD95Ab6D8ed) from Node Operators Registry is used)
Easy Track trusted caller: 0x08637515E85A4633E23dfc7861e2A9f53af640f7
(This is Multisig for a Simple DVT Committee, who has right to create Easy Track motions)
Easy Track EVM Script factories:
- AddNodeOperators: 0xcAa3AF7460E83E665EEFeC73a7a542E5005C9639
- Provides functionality to add Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- ActivateNodeOperators: 0xCBb418F6f9BFd3525CE6aADe8F74ECFEfe2DB5C8
- Factories provides functionality to activate Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- DeactivateNodeOperators: 0x8B82C1546D47330335a48406cc3a50Da732672E7
- Provides functionality to deactivate Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- SetVettedValidatorsLimits: 0xD75778b855886Fc5e1eA7D6bFADA9EB68b35C19D
- Provides functionality to set vetted validator keys limit for Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- SetNodeOperatorNames: 0x7d509BFF310d9460b1F613e4e40d342201a83Ae4
- Provides functionality to change node operator names for Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- SetNodeOperatorRewardAddresses: 0x589e298964b9181D9938B84bB034C3BB9024E2C0
- Provides functionality to set reward addresses for Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- ChangeNodeOperatorManagers: 0xE31A0599A6772BCf9b2bFc9e25cf941e793c9a7D
- Provides functionality to change manager address for Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
- UpdateTargetValidatorLimits: 0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C
- Provides functionality to change target validator limits for Simple DVT Clusters (Node Operators in terminology of Node Operators registry module) via Easy Track Motions
New Easy Track factories were audited by Statemind. Please read the audit report for more information.
Connection of new factories to Easy Track will be made as part of the next on-chain vote.
Description of the voting actions
Next step is to start an on-chain vote that adds a new Simple DVT module to the Staking Router and adds new Easy Track factories for operator’s management.
I. Create new Aragon DAO Application Repo for Simple DVT
- Create new Aragon DAO Application Repo for Simple DVT app
Name of the app =simple-dvt
Version =1.0.0
Implementation address: 0x8538930c385C0438A357d2c25CB3eAD95Ab6D8ed
Content URI = ipfs:QmaSSujHCGcnFuetAPGwVW5BegaMBvn5SCsgi3LSfvraSo (hex-encoded:0x697066733a516d615353756a484347636e4675657441504777565735426567614d42766e355343736769334c5366767261536f
)
Hex-encoded values can be checked with any hexadecimal to ASCII converter.
II. Setup and initialize Simple DVT module as new Aragon app
-
Setup Simple DVT as Aragon DAO app
This action installs the Simple DVT Aragon application with the same contract implementation as the NodeOperatorsRegistry. -
Initialize of Simple DVT module with the following parameters
Module Type =curated-onchain-v1
(hex-encoded:0x637572617465642d6f6e636861696e2d76310000000000000000000000000000
)
Stuck Penalty Delay =432000
(5 days - the same as in Curated Module)
III. Add Simple DVT module to StakingRouter
-
Create and grant permission
STAKING_ROUTER_ROLE
on Simple DVT module for StakingRouter
This is necessary for the Simple DVT module to function as a staking module -
Grant
REQUEST_BURN_SHARES_ROLE
on Burner for Simple DVT module
This role is required for ability to burn stETH tokens in case of operator’s penalties, you can read more here -
Add Simple DVT module to StakingRouter Lido: Staking Router | Address 0xFdDf38947aFB03C621C71b06C9C70bce73f12999 | Etherscan
This action finally sets up new Simple DVT module contract to the StakingRouter as the second module.
Simple DVT module parameters was announced in the initial Simple DVT proposal:
- Target share:
50
(0.5% of total stake) - Module fee:
800
(8%) - Treasury fee:
200
(2%)
IV. Grant permissions to EasyTrackEVMScriptExecutor to make operational changes to Simple DVT module
-
Create and grant permission
MANAGE_NODE_OPERATOR_ROLE
on Simple DVT module for EasyTrackEVMScriptExecutor
This one and next 3 actions are needed to setup permissions required for Easy Track to manage operational tasks on the Simple DVT module -
Create and grant permission
SET_NODE_OPERATOR_LIMIT_ROLE
on Simple DVT module for EasyTrackEVMScriptExecutor -
Create and grant permission
MANAGE_SIGNING_KEYS
on Simple DVT module for EasyTrackEVMScriptExecutor -
Grant
STAKING_ROUTER_ROLE
on Simple DVT module for EasyTrackEVMScriptExecutor
V. Add Easy Track EVM script factories for Simple DVT module to Easy Track registry
-
Add AddNodeOperators EVM script factory with address 0xcAa3AF7460E83E665EEFeC73a7a542E5005C9639
-
Add ActivateNodeOperators EVM script factory with address 0xCBb418F6f9BFd3525CE6aADe8F74ECFEfe2DB5C8
-
Add DeactivateNodeOperators EVM script factory with address 0x8B82C1546D47330335a48406cc3a50Da732672E7
-
Add SetVettedValidatorsLimits EVM script factory with address 0xD75778b855886Fc5e1eA7D6bFADA9EB68b35C19D
-
Add UpdateTargetValidatorLimits EVM script factory with address 0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C
-
Add SetNodeOperatorNames EVM script factory with address 0x7d509BFF310d9460b1F613e4e40d342201a83Ae4
-
Add SetNodeOperatorRewardAddresses EVM script factory with address 0x589e298964b9181D9938B84bB034C3BB9024E2C0
-
Add ChangeNodeOperatorManagers EVM script factory with address 0xE31A0599A6772BCf9b2bFc9e25cf941e793c9a7D
VI. Update Oracle Report Sanity Checker parameters
-
Grant
MAX_ACCOUNTING_EXTRA_DATA_LIST_ITEMS_COUNT_ROLE
to the Lido DAO Agent on OracleReportSanityChecker contract -
Grant
MAX_NODE_OPERATORS_PER_EXTRA_DATA_ITEM_COUNT_ROLE
to the Lido DAO Agent on OracleReportSanityChecker contract
This makes possible to set sanity checker parameter values (see next actions) -
Set
maxAccountingExtraDataListItemsCount
sanity checker parameter to 4
This will allow to report extra data for 2 modules in 3rd phase of the accounting oracle report simultaneously -
Set
maxNodeOperatorsPerExtraDataItemCount
sanity checker parameter to 50
Limiting the number of operators guarantees a successful oracle report within the block gas limit
Onchain vote to be announced soon, please stay tuned for updates.