refactor: moving signature logic from ethlambda-types to ethlambda-crypto - #541
refactor: moving signature logic from ethlambda-types to ethlambda-crypto#541Sahilgill24 wants to merge 4 commits into
Conversation
MegaRedHand
left a comment
There was a problem hiding this comment.
Looks good. Left a suggestion
| /// Leansig-backed public-key access for [`Validator`]. | ||
| /// | ||
| /// `Validator` lives in `ethlambda-types`, which stays leansig-free, so these | ||
| /// helpers can't be inherent methods there. Import this trait to call | ||
| /// `validator.get_attestation_pubkey()` / `get_proposal_pubkey()` as before. | ||
| pub trait ValidatorPubkeys { | ||
| fn get_attestation_pubkey(&self) -> Result<ValidatorPublicKey, SignatureParseError>; | ||
| fn get_proposal_pubkey(&self) -> Result<ValidatorPublicKey, SignatureParseError>; | ||
| } | ||
|
|
||
| impl ValidatorPubkeys for Validator { | ||
| fn get_attestation_pubkey(&self) -> Result<ValidatorPublicKey, SignatureParseError> { | ||
| ValidatorPublicKey::from_bytes(&self.attestation_pubkey) | ||
| } | ||
|
|
||
| fn get_proposal_pubkey(&self) -> Result<ValidatorPublicKey, SignatureParseError> { | ||
| ValidatorPublicKey::from_bytes(&self.proposal_pubkey) | ||
| } | ||
| } |
There was a problem hiding this comment.
We should inline these instead. Having a new trait for this doesn't seem like a good trade
There was a problem hiding this comment.
I added it just so the call sites remain unchanged, if we inline them we would have to replace them with ValidatorPublicKey::from_bytes() instead of get_attestation_key respectively.
Will inline them instead :)
Greptile SummaryThis PR relocates validator XMSS signature primitives from
Confidence Score: 5/5The PR appears safe to merge, with the signature relocation preserving existing decoding, signing, verification, and SSZ wire behavior. All affected workspace consumers use the relocated crypto module and declare the required dependency, while the shared types crate retains only the fixed wire representation and no accepted functional or security failure remains.
|
| Filename | Overview |
|---|---|
| crates/common/crypto/src/signature.rs | Relocates the existing leansig-backed validator key and signature implementation into the crypto crate without changing its behavior. |
| crates/common/types/src/attestation.rs | Keeps the fixed XMSS wire-size constant beside the SSZ XmssSignature type, preserving its encoding. |
| crates/common/types/src/state.rs | Removes crypto-returning validator pubkey helpers, with affected callers replaced by equivalent direct decoding. |
| crates/blockchain/src/store.rs | Updates signature imports and public-key decoding to the relocated crypto API without changing validation behavior. |
| crates/storage/src/store.rs | Imports buffered validator signatures from the crypto crate while retaining the existing storage representation and behavior. |
| crates/storage/Cargo.toml | Adds the direct crypto dependency required by storage's signature buffer implementation. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
Types["ethlambda-types<br/>SSZ/domain types"]
Crypto["ethlambda-crypto<br/>XMSS keys and signatures"]
Storage["ethlambda-storage"]
Blockchain["ethlambda-blockchain"]
Binary["ethlambda binary"]
Crypto --> Types
Storage --> Types
Storage --> Crypto
Blockchain --> Types
Blockchain --> Crypto
Blockchain --> Storage
Binary --> Crypto
Binary --> Blockchain
Reviews (1): Last reviewed commit: "refactor: inline validator public key ca..." | Re-trigger Greptile
Description / Motivation
porting the lean-sig based signature logic from types crate to crypto crate as mentioned here
It is first of all a cleaner and more idiomatic approach and secondly ethlambda-types crate builds/compiles for the prover crate(zkVM prover), which also leads to dependency conflicts between leansig dependencies and the zkVM sdk dependencies being used. This port removes all leansig dependencies from the ethlambda-types
What Changed
signature.rsfile to the crypto crate along with a extension traitValidatorPublicKeyswith the same methods as before, it helps in avoiding cyclic dependencies and the call sites remain the same.signature.rsfrom the types crate and moved theSIGNATURE_SIZEdirectly to theattestation.rsVerification Checklist
make fmtmake lint(clippy with-D warnings)cargo test --workspace --release— all passing