PoRep Security Policy & Replacement Sealing Enforcement (FIP-0067) #727
Replies: 3 comments 1 reply
-
Hey @Kubuxu thanks for this. How quickly are you hoping this can be shipped and included as part of a network upgrade? I am asking so I know if this can make it in time for nv21. Are other teams aware and part of the spec design for this new FIP? |
Beta Was this translation helpful? Give feedback.
-
Thank @Kubuxu. I think it is worth highlighting the distinction of this proposal from FIP-0047. Note that FIP-0047 is already accepted by governance, but (thankfully) not yet implemented. Proposing penalties sounds harsh, but in my view this new proposal is much more friendly to SPs while still achieving the goals of an orderly turnover of potentially-compromised sectors. FIP-0047
This proposal
This is all thanks to an error in FIP-0047, which states "it would be generally infeasible to schedule an orderly iteration over all sectors after the fact". We found a way to do just that. |
Beta Was this translation helpful? Give feedback.
-
A discussion for core devs: if we accept this as a policy, how much of the mechanism, if any, should we implement now, ahead of possibly discovering a flaw that would use it? We could implement this entire mechanism (but set But it's most likely the mechanism will never be used. So we could also do nothing now. Then in case of emergency we will have to do more complex implementation work in a hurry. |
Beta Was this translation helpful? Give feedback.
-
Simple Summary
Describes a policy to be adopted in case a flaw is discovered in the theory or implementation of proof-of-replication.
Link: FIP-0067
This proposal builds on and supersedes FIP-0047.
Discussion of FIP-0047: #415
Abstract
We are not aware of any PoRep issues at this time, but it is crucial to have a plan to deal with any possibility.
This proposal introduces a concrete mechanism for enforcing replacement sealing for sectors with a commitment longer than 1.5 years and describes (but does not implement) a policy that uses the mechanism.
InitialOldSectors
) for each Storage Provider when introducing the replacement sealing mechanism. Escalating penalties are applied to Storage Providers when the number of active old sectors exceeds thePermittedOldSectors(InitialOldSectors, epoch)
.PermittedOldSectors
function decreases over time, reaching zero 1.5 years after introducing replacement sealing.In order to maintain power and continue producing blocks, a Storage Provider must seal a new replacement sector, thus deactivating an old sector. Alternatively, a Storage Provider can terminate old sectors such that the number of active old sectors is less or equal to the
PermittedOldSectors
.Mechanism
IntialOldSectors
- the number of sectors that must be deactivated. Sectors with expiration before theDeactivationTarget
will not be counted towardsInitialOldSectors
.DeactivatedOldSectors
- the number of old sectors with expiration beyondDeactivationTarget
which have been deactivated.GracePeriod
- duration in epochs during which the replacement sealing is active, but no enforcement actions are taken. Initial proposal 60 days.DeactivationTarget
- duration in epochs after which all old sectors should have been deactivated. Initial proposal 1.5yr.StartEpoch
- upgrade epoch when the replacement sealing is enabled, and the deactivation timeline starts.DeactivationProgress
of the Miner state is introduced:DeactivationProgress(InitialOldSectors, DeactivatedOldSectors)
takes the value of the progress of a given Miner actor instance along the deactivation timeline. It values from 0 toDeactivationTarget
.InitialOldSectors
is zero,DeacivationProgress
takes the value ofDeactivationTarget
.DeactivationProgress(...) == DeactivationTarget
.StartEpoch + DeactivationProgress(...) >= CurrentEpoch()
DeactivationProgress
is as follows:DeactivationProgress(InitialOldSectors, DeactivatedOldSectors) := GracePeriod + (DeactivationTarget - GracePeriod) * DeactivatedOldSectors // InitialOldSectors
Expiration > StartEpoch + DeactivationTarget
is deactivated, either through replacement sealing or explicit termination, theDeactivatedOldSector
is incremented.StartEpoch + DeactivationProgress(...) < CurrentEpoch()
This has a drawback of power table inflation which is resolved by the following enforcement policy.
DeactivationProgerss
is detected to be more than 24h (discuss) behind schedule, the deadline is marked as faulty. The deadline can be recovered when the deactivation is back on track. As inStartEpoch + DeactivationProgress(...) >= CurrentEpoch()
. Fault fees are charged until the deadline is recovered.DeactivationProgress
is detected to be more than 7d behind schedule (discuss), the deadline is terminated. The deadline cannot be recovered, and the Miner instance is charged termination fees.Parameters
Two new protocol parameters are defined:
GracePeriod
- duration in epochs during which the replacement sealing is active, but no enforcement actions are taken. Initial proposal 60 days.DeactivationTarget
- duration in epochs after which all old sectors should have been deactivated. Initial proposal 1.5yr.Given this change, a new, larger value for
MaxSectorExpirationExtension
may be considered.If
MaxSectorExpirationExtension
is increased, then the built-in storage market'smaximum deal duration is increased to match. This could permit deals up to 5 years in duration.
Beta Was this translation helpful? Give feedback.
All reactions