Skip to content

Decouple the block proposer from the authenticated owner#6590

Draft
ma2bd wants to merge 4 commits into
ma2bd/456-retain-owner-signaturefrom
ma2bd/decouple-proposer-from-owner
Draft

Decouple the block proposer from the authenticated owner#6590
ma2bd wants to merge 4 commits into
ma2bd/456-retain-owner-signaturefrom
ma2bd/decouple-proposer-from-owner

Conversation

@ma2bd

@ma2bd ma2bd commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Motivation

Stacked on #6589, which made the owner's signature over the whole block a first-class, self-verifying object carried in proposals and certificates. One restriction remains from before: a fresh proposal must be signed by the block's authenticated_owner themselves. This conflates two roles — authorizing the block's operations (and fee liability) and participating in a consensus round — and forces the client to re-sign pending blocks as the owner that staged them, track whether it still holds that key, and hard-error on pending fast blocks whose key was lost.

The block is the unit of authorization — a "transaction": the owner signs the entire proposed block, never operation subsets, so whoever carries that block to a round cannot alter what was authorized. Retries already work this way; this PR extends it to fresh proposals.

Proposal

  • Drop the worker rule restricting explicit owner authorizations to retries: a proposal may now be signed by any owner eligible for the round, as long as the block's authenticated_owner (if any) has signed the block — exactly the check Retain the block owner's proposal signature alongside certificates (#456) #6589 already performs. The super-owner requirement for authorizations claiming the fast round is unchanged.
  • Client: the staging owner signs the OwnerAuthorization at staging time — when their key is by construction available — and it persists in PendingProposal. Pending blocks are then always proposed under the current identity: the "re-sign as the staged owner" logic and the key-availability dance are gone from the main path (a fallback remains for pending proposals from older wallets), and the previously unrecoverable pending-fast-block error becomes reachable only for legacy data.

Test Plan

  • test_pending_block_discarded_when_signer_key_missing is inverted into test_pending_block_proposed_by_other_owner_after_key_loss: the pending block staged by owner a now commits, proposed by owner b after a's key is withdrawn, and the resulting certificate retains a's authorization, which verifies against the block.
  • cargo test -p linera-chain -p linera-core -p linera-rpc pass; clippy clean including --all-features.

Release Plan

  • Backporting is not possible but we may want to deploy a new devnet and release a new SDK soon.

Links

ma2bd added 3 commits July 6, 2026 15:50
…' into ma2bd/decouple-proposer-from-owner

# Conflicts:
#	linera-chain/src/data_types/mod.rs
#	linera-chain/src/manager.rs
#	linera-core/src/client/chain_client/mod.rs
#	linera-core/src/client/mod.rs
…' into ma2bd/decouple-proposer-from-owner

# Conflicts:
#	linera-core/src/chain_worker/state.rs
#	linera-core/src/client/chain_client/mod.rs
#	linera-core/src/client/mod.rs
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

Successfully merging this pull request may close these issues.

1 participant