Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Conversation

@coriolinus
Copy link
Contributor

@coriolinus coriolinus commented Mar 3, 2021

Requires #8236 and #7910.

Adds an explicit challenge phase to the multi-phase election system. This helps ensure that all transactions satisfy PJR, which is an absolute quality floor.

Note that this currently puts the challenge phase currently falls after the signed phase, not after the unsigned phase. This is so that when a solution is successfully challenged, we can fall back to the next in the queue. However, that brings the obvious problem that unsigned solutions cannot be checked. Very willing to adjust that part of the design if necessary.

@coriolinus coriolinus marked this pull request as draft March 3, 2021 13:19
@github-actions github-actions bot added the A0-please_review Pull request needs code review. label Mar 3, 2021
@coriolinus coriolinus added A3-in_progress Pull request is in progress. No review needed at this stage. B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders. and removed A0-please_review Pull request needs code review. labels Mar 3, 2021
@coriolinus
Copy link
Contributor Author

After discusssion, it appears that the challenge phase should come after the unsigned phase. If the best current solution is successfully challenged, then we just have to fall back to on-chain elections.

Initially, I'd put the challenge phase before the unsigned phase.
The reasoning was that at the end of the signed phase, we had a
stack of potential solutions, and in the event of a successful
challenge to one of them, we could simply fall back to the next.

However, it turns out that for efficiency, we only perform the
transform which creates the input data for a PJR check after doing
the feasibility checks. In other words, a miner attempting to do
PJR checks on the input stack would need to do that transform
themselves, which is more work than we wish to require of them.

Also, putting the challenge phase after the unsigned phase is an
important protection against a malicious validator. An evil
validator could in theory simply ignore the goodness of the signed
solution and submit its own, unfair solution. Having the challenge
phase after the unsigned phase means that there is recourse in the
event that such a validator does so: if the validator submits
a solution that violates PJR, then miners have incentive to challenge
that solution, which would result in the validator being slashed.
This should result in a nash equilibrium which favors validators
remaining honest.
@coriolinus coriolinus force-pushed the prgn-challenge-phase branch from 1e30225 to ec9c1d6 Compare March 4, 2021 09:42
@kianenigma
Copy link
Contributor

@coriolinus I highly think that this PR will not come to action anytime within the next month or so, and it has already been stale for a month. I think if I don't close it for now, @gnunicorn will someday soon anyhow :D shall we close to keep both the PR list and project columns cleaner?

@coriolinus
Copy link
Contributor Author

coriolinus commented Apr 1, 2021 via email

@kianenigma kianenigma closed this Apr 1, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

A3-in_progress Pull request is in progress. No review needed at this stage. B0-silent Changes should not be mentioned in any release notes C1-low PR touches the given topic and has a low impact on builders.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants