Description
Description
Lighthouse batch verifies attestations and other messages into collections of signature sets, by combining different messages into a linear combination.
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.
- The network processor queues or groups attestations by AttestationData, then sends collections of the same data to the super batch verify function
- 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.