Skip to content
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

Key delegation prototype feedback #360

Closed
danwt opened this issue Sep 21, 2022 · 1 comment
Closed

Key delegation prototype feedback #360

danwt opened this issue Sep 21, 2022 · 1 comment

Comments

@danwt
Copy link
Contributor

danwt commented Sep 21, 2022

Problem

I'm working on the Key Delegation feature (issue) which will allow validators to submit a signed transaction TX to the provider with data [chainID, pubKey] which will ultimately cause them to need to start validating consumer chain with id chainID with the priv key associated to pubKey from when the consumer chain receives the next update via IBC.

I have prototyped the business logic of the algorithm for this at this branch.

The problem is: I want to get feedback on the design and decide if this is the best path forward.

Closing criteria

Gathered some feedback and I know the decided path forward.

Detail

I will flesh this section out tomorrow. Short story is:

The design enables validators to submit TX(chainID, pubKey) at any time and as often as they like. They must sign with their provider key and also with the priv key for pubKey. The design is implemented entirely on the provider, the consumer code will not need to change at all. The consumer does not 'know' anything special is going on.
The Validator Set Replication propert is maintained (but keys are mapped accordingly).

It's ensured that consumer initiated slashing will be possible for vscids vscid with greatestMaturedVscid < vscid where greatestMaturedVscid is the greatest one received on the provider for the consumer. (I've implemented but not tested this yet).

It's also ensured that old keys are eventually garbage collected (it's done at a latest maturity time).

The thing is: covering the corner cases results in a non trivial bit of code. I think a good approach might be to take a larger step back and change the overal CCV protocol to send entire active valsets to consumers instead of just diffs. This would make things a lot simpler.

@danwt
Copy link
Contributor Author

danwt commented Sep 22, 2022

After discussing I think will go with the working solution that requires least changes to established parts of the codebase/protocol

@danwt danwt closed this as completed Sep 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant