Skip to content

Super batch verify same-subnet attestations #5148

Open
@dapplion

Description

@dapplion

Description

Lighthouse batch verifies attestations and other messages into collections of signature sets, by combining different messages into a linear combination.

$$ S⋆ = r_1 S_1 + ⋯ r_n S_n $$

This saves at the limit 50% of pairings. The optimization is explained in detailed here https://ethresear.ch/t/security-of-bls-batch-verification/10748

However, we can do better. When a node is an aggregator, it receives ~439 individual attestations that sign over the same message. Since its the same message, there's no need to multiply each signature / message tuple by a random integer just perform your classic 'old FastAggregateVerify and pay a single pairing for those 439 messages.

Epic savings

How to

Some layer of the stack must group to-verify messages by signing root.

  1. The network processor queues or groups attestations by AttestationData, then sends collections of the same data to the super batch verify function
  2. Some intermediary layer in the BLS verifier that buffers messages and groups then by signing root, independent of the message represents. It's a more generic approach, but only subnet attestations are worth grouping this way. Buffering also adds latency.

Metadata

Metadata

Assignees

No one assigned

    Labels

    cryptoAn issue/PR that touches cryptography code.optimizationSomething to make Lighthouse run more efficiently.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions