-
Notifications
You must be signed in to change notification settings - Fork 1k
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
Add operation for withdrawal_credentials change operation #2213
Comments
Regarding your points about not allowing a different set of withdrawal credentials with BLS:
If the withdrawal key is compromised I think we have to accept that the funds protected by that withdrawal key are likely to be lost. This is especially the case given that in the vast majority of cases compromise of the withdrawal key implies compromise of the validator key as well.
As soon as we have the ability to assign an Ethereum 1 address to a validator it creates a market, as it is trivial to target a smart contract that can disburse funds as it sees fit.
I think that this is the critical item, and the reason why changing withdrawal credentials should be a one-time operation. Regarding the state of the validator to allow this operation, I think that it should only apply while the validator is active. Otherwise we move in to areas of race conditions / potential impact of censorship of the operation and the like. And, as you mention, it potentially restricts the exit process with this additional complexity. |
Thanks for the comment
I mean the case when it was probably compromised, or some hackable keystore gone, and your validator is still under control, but it's under the risk in the near future. |
+1 on designing withdrawal-credential changes as a one-time operation scoped only to those with |
That's a great way to introduce key rotation for staking pools that want to reduce their reliance on custodial or semi-custodial solutions. I think that withdrawal credential compromise scenario shouldn't be a factor when evaluating the proposed solution. If it helps, it's a good side effect, but the setting where it matters is pretty convoluted IMO. Re: allow change of credentials for exited validators, I think that if it's not too much work it should be implemented (mainly to the benefit of slashed validators owners), but it's a low-value feature. Only working with active validators is good enough. |
Note that this proposal does not allow a change of validator key, so wouldn't help much in this situation. |
Validators are not custodians though. |
What?
New operation and signed message is proposed for Eth2,
BLSSetWithdrawal
, which could permanently changewithdrawal_credentials
:BLSSetWithdrawal
And
SignedBLSSetWithdrawal
message:SignedBLSSetWithdrawal
Why?
It's already confirmed that at least one extra withdrawal target option will be supported with merge of PR #2149. While new validators could submit deposits using this option, there were already tons of deposits before this PR was merged and some of their owners could be interested in Eth1 withdrawal. Moreover, for some parties it could be a best flow of withdrawal control during validator lifecycle to start with BLS key
0x00
withdrawal credentials and change it's target to Eth1 address later with0x01
or another options introduced in future.How?
withdrawal_credentials
is started withBLS_WITHDRAWAL_PREFIX (0x00)
BLS_WITHDRAWAL_PREFIX (0x00)
There are several assessments when choosing such behavior of this operation:
0x00
to another0x00
swaps:Deposit
,Attestation
and other more important network message types.withdrawal_credentials
is in the currently supported range. The answer should be “no”, as the deposit contract already doesn’t check it. It’s a kind of risk for the minutest number of user errors, but by changing this we could open a way to a number of bugs that could affect all users.Draft implementation:
Some concerns
We have two options here, and I'm not sure, which way should we go:
Second option requires extra processing of withdrawals after
withdrawal_credentials
are changed for already exited validators. It’s not straightforward and requires thoughtful implementation to avoid bugs. For example, when we have 2 active withdrawal options, we should verify that one was not processed beforewithdrawal_credentials
change, though Eth1 withdrawal is planned to be automatically on validator exit without extra messages on Beacon Chain, while BLS key withdrawal will require new message with processing.Some important notes
withdrawal_credentials
are changed fromBLS_WITHDRAWAL_PREFIX (0x00)
to any other, withdrawal target could not be changed anymore. But this is already concreted by PR Eth1 withdrawal credentials (0x01) #2149BLSSetWithdrawal
could be added already, as nothing prevents to submitwithdrawal_credentials
to Deposit Contract today with a prefix other thanBLS_WITHDRAWAL_PREFIX (0x00)
Links
Simple eth1 withdrawals (beacon-chain centric) with
BLSSetWithdrawalAddress
proposal by @djrtwo inspiring this issueEth1 withdrawal credentials (0x01) #2149 by @djrtwo - PR merged in specs
Withdrawal credential rotation from BLS to Eth1 - some alternative approaches of withdrawal credentials change
Allow withdrawal_credentials to point to an eth1 address #2040 by @dapplion - Issue to add eth1 withdrawal prefix
The text was updated successfully, but these errors were encountered: