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

feat(sidecar): Signature checks (user, proposer) + refactor #42

Merged
merged 12 commits into from
May 31, 2024

Conversation

merklefruit
Copy link
Collaborator

@merklefruit merklefruit commented May 29, 2024

Signatures in Bolt

In Bolt, various parties must provide signed values to securely exchange information.
The key types of signatures required are:

User Signature

Commitment requests from users must be signed using the sender's private key, the same secp256k1 private key used for signing Ethereum transactions. The structure of these messages is as follows:

pub struct InclusionRequestMessage {
    pub slot: Slot,
    pub tx: String,
}

To request an inclusion commitment, users sign this struct. The sidecar verifies that the sender, recovered via ecrecover from the message and signature, matches the sender of the transaction requested 1.

Proposer Signature

Proposers (entities operating the Bolt sidecar) must sign any SignedCommitment:

pub struct SignedCommitment<M, S> {
    pub message: M,
    pub signature: S,
}

Commitments signed by the proposer's private key are essential for attributing faults and enforcing slashing.


Discussion on Signature Types

There has been extensive debate over which signature types to use: ECDSA, Schnorr, BLS, etc. Our current requirements do not mandate a specific cryptographic signature "at runtime" (i.e., during the operation of the Bolt protocol and signing commitments).

However, the opt-in procedure must be linked to the beacon chain validator identity. Proposers need to bind a private key to their validator pubkey, allowing them to use this new private key to authenticate commitments.

For now, the specific way to perform this binding is out of scope of the sidecar and will not be important for the devnet.

Footnotes

  1. Note: This constraint can be relaxed in the future; for V0.1, we will continue to enforce this check.

@merklefruit merklefruit changed the title feat(sidecar): BLS proposer signature feat(sidecar): proposer signature + refactor May 29, 2024
@merklefruit merklefruit marked this pull request as ready for review May 29, 2024 14:06
@merklefruit merklefruit changed the title feat(sidecar): proposer signature + refactor feat(sidecar): Signature checks (user, proposer) + refactor May 29, 2024
@merklefruit merklefruit merged commit bd57954 into feat/sidecar/fallback-block May 31, 2024
@merklefruit merklefruit deleted the feat/sidecar/bls branch May 31, 2024 07:57
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.

2 participants