ergoplatform/ergo

Add proof that interlink vector corresponds to its header

Open

#1,384 opened on Jun 4, 2021

 (3 comments) (0 reactions) (1 assignee)Scala (201 forks)github user discovery
B-1000 SigUSDbountyhelp wanted

Repository metrics

Stars
 (519 stars)
PR merge metrics
 (Avg merge 12d 5h) (13 merged PRs in 30d)

Description

Implement batch Merkle proof for multiple keys (in scrypto), and use it to prove that interlink vector is indeed corresponding to its header (add it to json/binary representation of PoPoW header, add checks to the verifier).

Interlink vector (links to super-blocks of different levels in the past) is stored in extension section of a block in packed form,

So the proof generation and verification would be as following:

  • add batchProofFor(keys: Array[Byte])* to ExtensionCandidate to get batch proof for possibly many keys

  • in NipopowAlgos, instead of proofForInterlink (which can be removed), make proofForInterlinkVector(ext: ExtensionCandidate) to get batch Merkle proof for all the interlinks in the extension (so keys starting with InterlinksVectorPrefix)

  • add batch proof to PoPowHeader, and make there method to check it (note: pack the vector before the check), fix serialization accordingly

  • implement hasValidProofs which is checking proofs for all the PoPoWHeader instances

  • do tests on the way :)

Contributor guide