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

Externalize verification of checkpoint to dedicated module #402

Open
ranchalp opened this issue Apr 12, 2023 · 1 comment
Open

Externalize verification of checkpoint to dedicated module #402

ranchalp opened this issue Apr 12, 2023 · 1 comment
Assignees
Labels
backlog To address eventually, not necessarily now bug Something isn't working cleanup Trantor

Comments

@ranchalp
Copy link
Contributor

ranchalp commented Apr 12, 2023

The existing ISS implementation verifies the signatures of a stable checkpoint received and that the signers are members from the previous membership (as the checkpoint of an epoch $e$ is signed by members of epoch $e-1$).

The ISS module contains a struct field iss.Memberships that stores the memberships of the current epoch and the following iss.Params.ConfigOffset epochs. This means that if a checkpoint for epoch e > iss.epoch + iss.Params.ConfigOffset + 1 is received, the ISS module has not way to verify the validity of the signers (in that they may not be part of the membership responsible to sign the epoch).

At the moment, the code logs a huge warning for this case and continues executing 'believing the validity of the membership contained in the checkpoint', but the correct behavior would instead be verifying in some other way. Many options are possible, for example:

1- Buffer and sort checkpoints to verify them in order (should one receive an earlier checkpoint after a later checkpoint).
2- Check in a parent subnet (in the IPC hierarchy) the membership
3- Catch-up in any other way

As there are many application-specific ways to resolve this edge case, in the case where the ISS module cannot verify the validity of the signers, the validity should be externalize to a dedicated module that handles this.

@matejpavlovic
Copy link
Contributor

Putting this in the backlog, since it involves a non-trivial implementation effort if we want to make it actually work (which would mean implementing the fetching of new membership from the external source). Nothing too complex in principle, but it requires interacting with external systems.

@matejpavlovic matejpavlovic added the backlog To address eventually, not necessarily now label May 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backlog To address eventually, not necessarily now bug Something isn't working cleanup Trantor
Projects
None yet
Development

No branches or pull requests

2 participants