No Buffer PoRep: Removing 10 layers storage between PreCommit and ProveCommit #603
Replies: 5 comments 5 replies
-
Hi @lucaniz thanks for pushing this out. I am a Project Manager with the Governance team at Filecoin Foundation. Are you hoping to land this as a FIP anytime soon? |
Beta Was this translation helpful? Give feedback.
-
Dear readers who are storage providers: please tell us which of these you think would be most beneficial for your operation, and why.
|
Beta Was this translation helpful? Give feedback.
-
NI-Porep+snarkpack sounds like a bad direction. Precommit and Commit require very different hardware configuration, in order to maintain the same level of sealing capacity, 8.5x proving effort means 8.5 extra investment on commit rigs, imo the clearance precoomit rigs just can't compensate that extra costs. |
Beta Was this translation helpful? Give feedback.
-
As an SP, I'm for keeping the current PoRep process to keep our network stable while the FVM and L2 is being developed, so we can isolate issues and bugs, as these are rolled out. I'm for more research and testing at scale on NI-PoRep with Testudo for this reason. |
Beta Was this translation helpful? Give feedback.
-
I would be more inclined to vote for the synthetic PoRep. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
@Kubuxu @lucaniz @irenegia @nicola @rosariogennaro
Problem
The current interactive PoRep protocol (PreCommit + ProveCommit) requires to seal and keep a buffer of 12 layers (11 SDR layers + 1 data layer) between PreCommit and ProveCommit. This is a cost that we are targeting to reduce.
We present the solution space looking for feedbacks on the more impactful solution for the network.
Solution Space
We have two different approaches, resulting in three possible solutions:
Make PoRep non-interactive: NI-PoRep would remove the need to submit PreCommit and would allow to have a unique message for proving new sectors (only ProveCommit would be needed). Challenge generation happens locally and thus there is no need of getting into PreCommit step. Notably, the removal of PreCommit would also remove the need for keeping around 10 layers for the time from PreCommit to ProveCommit (note that during sealing the 10 layers are still produced and are still required to produce the proof)
In the context of Non Interactive PoRep we identify two different paths forward
Make PoRep Synthetic: Achieve reduction in used up space by reducing the set of challenges that might be chosen during the interactive Commit step from all possible challenges to some predetermined number that is feasible to precompute.
Summary
In what follows we give more details for each possibility
Approach 1: Non Interactive PoRep
The real change with respect to now is that challenges are created locally without on-chain interaction.
Due to this, on one hand we can merge PreCommit and ProveCommit in a unique step, but on the other hand this flexibility would allow a malicious prover to grind challenges. To mitigate and ensure this it is sufficient to increase the number of challenges (see below)
High Level Protocol Flow
Using the Fiat-Shamir heuristic, the protocol can be summarized as follows:
CommD
.seed = H(CommR,...,)
.Fiat-Shamir Heuristic needs 80 bits of security (instead of the current 10), which means that we need 8x current number of challenges compared with today. The increased number of challenges brings over an additional proving overhead, which can be different in the two scenarios
(1.i) NI-PoRep with Groth16 + SnarkPack
We can use current proof system getting NI-PoRep with 8x challenges and at 8x proving cost (ie, we need 80 snark proofs instead of the current 10). In order to reduce this overhead (on chain footprint and verification), we can use SnarkPack. From the paper, we estimated that SnarkPack proof size amortization will kick in when sealing at least 2 sectors but terms of the verification even one NI-PoRep already benefits from SnarkPack (note that the more sector you seal at a time, the better the amortization becomes).
In this case, the cost overview will be:
Let’s recap the new costs:
Proving cost:
⇒ Total proving overhead: 8.7x
Verification cost: it is the SnarkPack cost (counting each NI-PoRep sector as 8 sectors with the current proof system).
Proof size: comparable to today.
Notes
(1.ii) NI-PoRep with Testudo
We could have proving cost comparable to today (or even better) upon the launch of [Testudo ](https://www.notion.so/Testudo-1201ca34e72d44c899e8242bb6202a25), which is in early research stage and is not expected to ship in 2023.
Approach 2: Synthetic PoRep
This part is taken from a former discussion (See #245)
We propose a Synthetic PoRep protocol where
High Level Protocol Flow
Differences between currently deployed PoRep and Synthetic PoRep are limited to challenge generation and additional capabilities for the miner.
Based on the CommR, the miner generates a list of
SynthChallengesNumber
(currently ~270k) challenges Ch.all
Knowing all the challenges, the miner computes responses for them which take the form of
SynthChallengesNumber
vanilla proofs and saves them for future use.Miner waits PreCommitChallengeDelay (~150 epochs).
The randomness revealed at PreCommitEpoch+PreCommitChallengeDelay selects
VerifiedChallengesNumber
(176) challenges to be verified on-chain from Ch.all
Miner takes the
VerifiedChallengesNumber
vanilla proofs which were generated earlier corresponding to selected challenges and computes SNARK proofs of these challenges.Miner publishes the ProveCommit either in individual or aggregated form.
VerifiedChallengesNumber
challenges by selectingVerifiedChallengesNumber
indices out ofSynthChallengesNumber
and computing them.Parameter Selection
Based on the current analysis following parameters are under consideration:
Beta Was this translation helpful? Give feedback.
All reactions