You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix authenticated signer when re-proposing a fast block. (#3920)
## Motivation
When re-proposing a validated block from an earlier round there is a
validated block certificate, signed by a quorum of validators, attesting
the correctness of the outcome and the validity of the oracle
responses—_and_ that the `authenticated_signer` is actually the one who
originally submitted the block proposal to the validators!
This last part I missed in the special case where we re-propose an
earlier proposal by a super owner from the fast round! In that case,
there is no validated block certificate, which is why we disallow
oracles. But we erroneously compare the `authenticated_signer` to the
owner _re-proposing_ the block, rather than the original super owner.
Of course comparing it to the super owner is not enough: The regular
owner must not be able to do something in the super owner's name without
permission. So we need to also verify the super owner's signature (and
super ownership!) again.
Super owners by design take greater responsibility for a chain's
liveness than regular owners, and in the case of re-proposing a _fast_
block, the super owner's signature needs to play a similar role to the
validators' signatures when re-proposing a _regular_ block.
## Proposal
Properly distinguish the _three_ cases of a block proposal:
* The current proposer is the one who originally created this block.
They are the authenticated signer.
* This is a retry of an earlier proposal by a super owner in the _fast_
round: The super owner is the authenticated signer, but their signature
must be included in the proposal and verified again.
* This is a retry of an earlier proposal in regular round: The original
proposer is the authenticated signer, but we don't need to verify their
signature again; the validators' signatures of the earlier round's
certificate already proves that the proposal is valid (in addition to
proving that the included oracle responses are, too).
## Test Plan
`test_re_propose_fast_block` was added.
## Release Plan
- Nothing to do / These changes follow the usual release cycle.
## Links
- [reviewer
checklist](https://github.com/linera-io/linera-protocol/blob/main/CONTRIBUTING.md#reviewer-checklist)
0 commit comments