ergoplatform/ergo

Add proof that interlink vector corresponds to its header

开放

#1,384 创建于 2021年6月4日

 (3 条评论) (0 个反应) (1 位负责人)Scala (201 个派生)github user discovery
B-1000 SigUSDbountyhelp wanted

仓库指标

星标
 (519 个星标)
PR 合并指标
 (平均合并 12天 5小时) (30 天内合并 13 个 PR)

描述

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 :)

贡献者指南