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

Proposal: Slash concurrent activity on multiple branches #14

Open
fed-franz opened this issue Apr 25, 2024 · 0 comments
Open

Proposal: Slash concurrent activity on multiple branches #14

fed-franz opened this issue Apr 25, 2024 · 0 comments

Comments

@fed-franz
Copy link
Collaborator

Summary

This DIP proposes to punish provisioners that participate in multiple branches at the same time.
This is known as the Nothing at stake problem and consists in having provisioners work on all active forks to maximize the probability of gaining rewards. This behavior is detrimental for the consensus since it may result in multiple concurrent branches growing and reaching finality at the same time, which in turn enable double spending attacks.

To mitigate this risk, provisioners are compelled to work on a single branch at a time, namely the one with highest priority (according to their knowledge).
If a misbehavior is detected, the provisioner can be slashed.

Possible solution design or implementation

  • To slash a double vote, a check is done to see if a provisioner participates in a lower-priority branch AFTER having participated in a higher-priority one.
  • If such a case is detected, the block generator can include a proof in the candidate block, which will result in the misbehaving provisioner being slashed
  • The slashed amount is distributed among generator and voters using the standard reward distribution (e.g. 90% / 10%)

Additional context

Ordering of provisioner activities (candidate proposal and votes) is based on the consensus message timestamp introduced by #12 .

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