Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Improve BLS performance: cache parsed keys, add batch verification, add benchmarks

Abierto
#635 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 4 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
rust

Línea de trabajo

Comienza con crates/crypto/src/blst_impl.rs y sigue las rutas de verificación a través de crates/eth2util/src/signing.rs, dkg/src/aggregate.rs y cluster/src/lock.rs. Usa crates/k1util/benches como plantilla para los benchmarks y revisa crates/frost/src/curve.rs en busca de wrappers existentes. Se considerará terminado cuando el caching propuesto, la verificación por lotes, la agregación segura, el scalar-hoisting y los benchmarks de criterion estén implementados y sean medibles.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement rust

Summary

All BLS operations take raw byte arrays (types.rs#L17-L21), so every call re-deserializes (verify does a G1 decompression per call) and re-runs subgroup checks — verify passes pk_validate = true and sig_groupcheck = true on every invocation. For a DV node the public shares are cluster-constant; nothing is memoized.

There is also no batch verification: blst's verify_multiple_aggregate_signatures is unused, and the hot paths verify one signature at a time — every incoming peer partial signature (parsigex → verify_eth2_signed_data → signing.rs#L148), a nested validators×partials loop in dkg/src/aggregate.rs#L146, and one builder registration per validator in cluster/src/lock.rs#L427.

Additionally, aggregate_public_keys hand-rolls point addition through unsafe FFI and skips per-key subgroup validation — blst's safe AggregatePublicKey::aggregate(..., validate) covers it. A second independent blst wrapper with safe constructors already exists in pluto-frost (crates/frost/src/curve.rs); the ad-hoc scalar helpers in blst_impl.rs duplicate it.

There are no benchmarks: the only criterion setup in the workspace is crates/k1util/benches, while Charon benchmarks its BLS backend (tbls_test.go BenchmarkHerumiImplementation).

Proposed change

  • Introduce parsed key/signature types (wrapping blst types) validated once at construction; keep raw bytes only at serialization boundaries.
  • Add a batch-verification entry point and use it on the partial-signature paths.
  • Replace the unsafe aggregation with the blst safe API; consolidate scalar helpers with pluto-frost's wrappers.
  • Hoist the O(n²) scalar_from_u64 recomputation out of the interpolation loops — evaluate_polynomial rebuilds the same scalar every iteration and compute_lagrange_coefficients reconstructs per-index scalars inside the inner loop; build them once per index.
  • Add criterion benches (sign/verify/aggregate/threshold_aggregate) using the k1util bench as a template, so wins are measurable.
Lenguaje dominante
Rust
Estrellas
8
Forks
6
Merge medio
4 d 3 h
PR fusionados (30 d)
18

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de NethermindEth/pluto

Todos los issues de NethermindEth/pluto

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.