eth-educators / ethstaker-deposit-cli

Secure key generation for deposits
https://eth-educators.github.io/ethstaker-deposit-cli/
Creative Commons Zero v1.0 Universal
3 stars 5 forks source link

Add command to sign a withdrawal credentials update message using a validator keystore #88

Closed valefar-on-discord closed 3 weeks ago

valefar-on-discord commented 1 month ago

There is a cohort of users who have lost or are missing their mnemonic and are unable to update their withdrawal credentials. As of now, these funds are locked permanently and indefinitely. We have a potential solution that can allow these users to regain their funds though we have no approval or proper implementation. One of the necessary components of this solution is a signature from the validator keystore that can be used as a proof of ownership of the validator. This adds the ability for a user to generate said signature.

The users runs generate-bls-to-execution-change-keystore with the provided keystore, password, validator index, and designed execution address to update their withdrawal credentials with. This command outputs and signature json file where the message will contain the provided execution address and validator index.

valefar-on-discord commented 1 month ago

I'm thinking about changing the logic to be a more generic "sign message with validator keystore"...

remyroy commented 1 month ago

It would be nice if you could link the related proposals if they exist in a draft or a working document somewhere else.

valefar-on-discord commented 1 month ago

It would be nice if you could link the related proposals if they exist in a draft or a working document somewhere else.

The only location for the proposal right now is https://github.com/eth-educators/update-credentials-without-mnemonic

If we are in agreement, my plan would be to get this landed (when ready) and create a new release. I'll then update the other repo with the new instructions and then we can broadcast to determine interest.

yorickdowne commented 1 month ago

Do you want the logic as-is in here, or do you prefer the more generic "sign message" logic?

valefar-on-discord commented 1 month ago

After some thought I'd prefer to keep it as is.

The generic signing came as an idea with the Stakers Union project where you have to turn off your validator to prove ownership. My thought was signing the Stakers Union's Oath with the validator keystore would do just as well.

But I am also of the opinion that any form of generic signing is dangerous. This needs to be a highly secure project based on the operations. I would rather build out a separate command for that use case if the need arises.

yorickdowne commented 1 month ago

OK, I agree. I am interested in seeing this in. Even if we end up backing it out again, if there’s just not appetite to actually do this, from the Ethereum devs.

Let’s see what Remy says when he’s back next week.

github-actions[bot] commented 1 month ago

Test Coverage: Download HTML Report

Name                                                                 Stmts   Miss  Cover
----------------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                            0      0   100%
ethstaker_deposit/bls_to_execution_change_keystore.py                   33      2    94%
ethstaker_deposit/cli/__init__.py                                        0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                              28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py                      40      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py                      62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py               64     14    78%
ethstaker_deposit/cli/generate_bls_to_execution_change_keystore.py      42      2    95%
ethstaker_deposit/cli/generate_keys.py                                  41      2    95%
ethstaker_deposit/cli/new_mnemonic.py                                   26      0   100%
ethstaker_deposit/cli/partial_deposit.py                                61      5    92%
ethstaker_deposit/credentials.py                                       197     68    65%
ethstaker_deposit/deposit.py                                            55     10    82%
ethstaker_deposit/exceptions.py                                          2      0   100%
ethstaker_deposit/key_handling/__init__.py                               0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py                0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py               90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py                   17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py                   36      0   100%
ethstaker_deposit/key_handling/keystore.py                             100      0   100%
ethstaker_deposit/settings.py                                           22      1    95%
ethstaker_deposit/utils/__init__.py                                      0      0   100%
ethstaker_deposit/utils/ascii_art.py                                     2      0   100%
ethstaker_deposit/utils/click.py                                        70      3    96%
ethstaker_deposit/utils/config.py                                        3      0   100%
ethstaker_deposit/utils/constants.py                                    29      0   100%
ethstaker_deposit/utils/crypto.py                                       29      1    97%
ethstaker_deposit/utils/deposit.py                                       9      0   100%
ethstaker_deposit/utils/exit_transaction.py                             24      0   100%
ethstaker_deposit/utils/file_handling.py                                 8      0   100%
ethstaker_deposit/utils/intl.py                                         54      3    94%
ethstaker_deposit/utils/ssz.py                                          60      7    88%
ethstaker_deposit/utils/validation.py                                  217     51    76%
----------------------------------------------------------------------------------------
TOTAL                                                                 1421    187    87%
remyroy commented 1 month ago

I wish there was more efforts into bringing this as an official EIP and gathering more comments and more reviews from peers in the ecosystem. I'm happy to review this PR and include it in the project but I fear it will not be used if the principles and the specs behind this feature are not accepted at the protocol level.

yorickdowne commented 1 month ago

We’d include this to gauge interest and see how many people are impacted. That’s how we get the protocol on board. Chicken and egg.

At some point it’ll be removed again.

github-actions[bot] commented 4 weeks ago

Test Coverage: Download HTML Report

Name                                                                 Stmts   Miss  Cover
----------------------------------------------------------------------------------------
ethstaker_deposit/__init__.py                                            1      0   100%
ethstaker_deposit/bls_to_execution_change_keystore.py                   33      2    94%
ethstaker_deposit/cli/__init__.py                                        0      0   100%
ethstaker_deposit/cli/existing_mnemonic.py                              28      0   100%
ethstaker_deposit/cli/exit_transaction_keystore.py                      40      2    95%
ethstaker_deposit/cli/exit_transaction_mnemonic.py                      62      8    87%
ethstaker_deposit/cli/generate_bls_to_execution_change.py               64     14    78%
ethstaker_deposit/cli/generate_bls_to_execution_change_keystore.py      42      2    95%
ethstaker_deposit/cli/generate_keys.py                                  41      2    95%
ethstaker_deposit/cli/new_mnemonic.py                                   26      0   100%
ethstaker_deposit/cli/partial_deposit.py                                61      5    92%
ethstaker_deposit/credentials.py                                       197     68    65%
ethstaker_deposit/deposit.py                                            57     10    82%
ethstaker_deposit/exceptions.py                                          2      0   100%
ethstaker_deposit/key_handling/__init__.py                               0      0   100%
ethstaker_deposit/key_handling/key_derivation/__init__.py                0      0   100%
ethstaker_deposit/key_handling/key_derivation/mnemonic.py               90      7    92%
ethstaker_deposit/key_handling/key_derivation/path.py                   17      1    94%
ethstaker_deposit/key_handling/key_derivation/tree.py                   36      0   100%
ethstaker_deposit/key_handling/keystore.py                             100      0   100%
ethstaker_deposit/settings.py                                           23      1    96%
ethstaker_deposit/utils/__init__.py                                      0      0   100%
ethstaker_deposit/utils/ascii_art.py                                     2      0   100%
ethstaker_deposit/utils/click.py                                        70      3    96%
ethstaker_deposit/utils/config.py                                        3      0   100%
ethstaker_deposit/utils/constants.py                                    29      0   100%
ethstaker_deposit/utils/crypto.py                                       29      1    97%
ethstaker_deposit/utils/deposit.py                                       9      0   100%
ethstaker_deposit/utils/exit_transaction.py                             24      0   100%
ethstaker_deposit/utils/file_handling.py                                 8      0   100%
ethstaker_deposit/utils/intl.py                                         54      3    94%
ethstaker_deposit/utils/ssz.py                                          60      7    88%
ethstaker_deposit/utils/validation.py                                  217     51    76%
----------------------------------------------------------------------------------------
TOTAL                                                                 1425    187    87%