Replies: 1 comment
-
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
The Bolt registry is a canonical registry that keeps track of registered validators (among other things). In this document we explore the why, what and how of such a registry in the context of proposer commitments. Note that this registry doesn't have to be specific to Bolt. We don't concern ourselves with collateral and slashing too much in this discussion, we just assume that the registered keypair has the power to slash the associated validator(s) collateral.
Core Functionality
Requirements
Design 1: Beacon Chain Ether
TLDR: Natively restaked Eth for collateral provisioning. Explicit authorization from withdrawal credentials a.k.a. the collateral holders for their validators to participate in these protocols. Tailored for non-custodial staking pools where there is a separation between capital owners and validators.
Entities & Relations
We define 3 main entities:
Registration & Authorization
Registering will be a 2-step process:
Step 1: Collateral Registration
Note: for now we assume collateral to be staked ETH controlled by
0x01
withdrawal credentials.The first step of registration consists of collateral providers authorizing access to their staked ETH through their withdrawal credentials. The reason for this is that collateral providers and validators might not be the same entity, as is the case with non-custodial staking pools. Since collateral providers are taking on the slashing risk, they need to explicitly authorize that their allocated blockspace (through associated validators) can be used for commitments.
Withdrawal credentials can either be an EOA or a smart contract (in the case of an EigenPod for example). Only when they are set to a smart contract that adheres to an interface and can extend slashing rights to the registry, can that collateral be used to secure the commitments. This check is done in the registration step.
registerCollateral(address owner, address collateralProvider)
collateralProvider
adheres to some slashing interface (EigenPod, Symbiotic Vault)owner
as the address that can later set & modify terms & conditions for this collateral (alternatively, could be read from thecollateralProvider
contract)setCollateralTerms(address collateralProvider, Terms terms)
msg.sender
is the owner for thiscollateralProvider
terms
Step 2: Validator Registration
Once collateral has been added, the associated validators can register themselves as well. We define a method that takes as inputs the
validatorIndexes
, state about those validators (effective balance, associated withdrawal credentials), proofs for verification of that state against the beacon block root (EIP-4788), and an aggregated BLS signature to authenticate the provided validators.An example of the proof logic in EigenLayer can be found here. Since the proof verification of validator fields is already implemented in EigenLayer / Symbiotic, we could also just reuse that and only implement the BLS signature verification. We can use the
view
methods likevalidatorStatus
on EigenLayer to verify this.Note
The BLS signature verification precompile will only ship with Pectra in EIP-2537. Can we use ZK proofs in the meanwhile? Or should we just optimistically provide the signatures and have off-chain components do the verification before considering a validator as registered?
registerValidators(uint256 oracleTimestamp, uint40[] validatorIndeces, ValidatorFields[] validatorFields, Proof[] proofs, bytes[] signatures)
oracleTimestamp
is used to get the beacon block root from the EIP-4788 contract [Should this be a finalized timestamp?]Tracking State
Registered entities' state needs to be tracked to have a consistent view of the status of different validators. State is stored as a mapping from
pubkey => status
. [Should status be on a per-entity (keypair) basis or per-validator?] Currently proposed states:REGISTERED
: the keypair is registered, but not active yetACTIVE
: the keypair has been activated, i.e. associated collateral has been registered and the keypair has access to itFROZEN
: the keypair has been frozen and should not be relied upon for commitments (could be because of a fault)EXITING
: the keypair is exiting either due to manual deregistration, full slashing of underlying collateral, or unstaking of the underlying collateralEXITED
: default for non-existing validator indexesDiscovery
The registry exposes some
view
methods that allow off-chain actors to get info about registered validators. They can consult the smart contract with avalidatorIndex
&pubkey
read from the beacon chain lookahead (the EVM does not provide direct read access to the beacon chain lookahead). This method will return information like the commitment keypair, RPC endpoint, collateral at stake & other optional metadata.Questions
validatorIndex
a good enough unique ID of validators or should we use their pubkeys?References
Beta Was this translation helpful? Give feedback.
All reactions