Merge pull request #1116 from filecoin-project/fix/v0.2.5
Correctly update proving set & sector set with amt2
This commit is contained in:
commit
f82ee0a2a7
@ -3,3 +3,5 @@ package build
|
|||||||
const ForkBlizzardHeight = 6288
|
const ForkBlizzardHeight = 6288
|
||||||
|
|
||||||
const ForkFrigidHeight = 7950
|
const ForkFrigidHeight = 7950
|
||||||
|
|
||||||
|
const ForkBootyBayHeight = 11000
|
||||||
|
@ -5,7 +5,7 @@ import "fmt"
|
|||||||
var CurrentCommit string
|
var CurrentCommit string
|
||||||
|
|
||||||
// BuildVersion is the local build version, set by build system
|
// BuildVersion is the local build version, set by build system
|
||||||
const BuildVersion = "0.2.4"
|
const BuildVersion = "0.2.5"
|
||||||
|
|
||||||
var UserVersion = BuildVersion + CurrentCommit
|
var UserVersion = BuildVersion + CurrentCommit
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ func (sma StorageMinerActor2) SubmitFallbackPoSt(act *types.Actor, vmctx types.V
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Post submission is successful!
|
// Post submission is successful!
|
||||||
if err := onSuccessfulPoSt(self, vmctx, activeFaults); err != nil {
|
if err := onSuccessfulPoSt2(self, vmctx, activeFaults); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -768,7 +768,7 @@ func (sma StorageMinerActor2) SubmitElectionPoSt(act *types.Actor, vmctx types.V
|
|||||||
activeFaults++
|
activeFaults++
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := onSuccessfulPoSt(self, vmctx, activeFaults); err != nil { // TODO
|
if err := onSuccessfulPoSt2(self, vmctx, activeFaults); err != nil { // TODO
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,3 +782,84 @@ func (sma StorageMinerActor2) SubmitElectionPoSt(act *types.Actor, vmctx types.V
|
|||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func onSuccessfulPoSt2(self *StorageMinerActorState, vmctx types.VMContext, activeFaults uint64) aerrors.ActorError {
|
||||||
|
// FORK
|
||||||
|
if vmctx.BlockHeight() < build.ForkBootyBayHeight {
|
||||||
|
return onSuccessfulPoSt(self, vmctx, activeFaults)
|
||||||
|
}
|
||||||
|
|
||||||
|
var mi MinerInfo
|
||||||
|
if err := vmctx.Storage().Get(self.Info, &mi); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
pss, nerr := amt2.LoadAMT(types.WrapStorage(vmctx.Storage()), self.ProvingSet)
|
||||||
|
if nerr != nil {
|
||||||
|
return aerrors.HandleExternalError(nerr, "failed to load proving set")
|
||||||
|
}
|
||||||
|
|
||||||
|
ss, nerr := amt2.LoadAMT(types.WrapStorage(vmctx.Storage()), self.Sectors)
|
||||||
|
if nerr != nil {
|
||||||
|
return aerrors.HandleExternalError(nerr, "failed to load sector set")
|
||||||
|
}
|
||||||
|
|
||||||
|
faults, nerr := self.FaultSet.All(2 * ss.Count)
|
||||||
|
if nerr != nil {
|
||||||
|
return aerrors.Absorb(nerr, 1, "invalid bitfield (fatal?)")
|
||||||
|
}
|
||||||
|
|
||||||
|
self.FaultSet = types.NewBitField()
|
||||||
|
|
||||||
|
oldPower := self.Power
|
||||||
|
newPower := types.BigMul(types.NewInt(pss.Count-activeFaults), types.NewInt(mi.SectorSize))
|
||||||
|
|
||||||
|
// If below the minimum size requirement, miners have zero power
|
||||||
|
if newPower.LessThan(types.NewInt(build.MinimumMinerPower)) {
|
||||||
|
newPower = types.NewInt(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
self.Power = newPower
|
||||||
|
|
||||||
|
delta := types.BigSub(self.Power, oldPower)
|
||||||
|
if self.SlashedAt != 0 {
|
||||||
|
self.SlashedAt = 0
|
||||||
|
delta = self.Power
|
||||||
|
}
|
||||||
|
|
||||||
|
prevSlashingDeadline := self.ElectionPeriodStart + build.SlashablePowerDelay
|
||||||
|
if !self.Active && newPower.GreaterThan(types.NewInt(0)) {
|
||||||
|
self.Active = true
|
||||||
|
prevSlashingDeadline = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(oldPower.IsZero() && newPower.IsZero()) {
|
||||||
|
enc, err := SerializeParams(&UpdateStorageParams{
|
||||||
|
Delta: delta,
|
||||||
|
NextSlashDeadline: vmctx.BlockHeight() + build.SlashablePowerDelay,
|
||||||
|
PreviousSlashDeadline: prevSlashingDeadline,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = vmctx.Send(StoragePowerAddress, SPAMethods.UpdateStorage, types.NewInt(0), enc)
|
||||||
|
if err != nil {
|
||||||
|
return aerrors.Wrap(err, "updating storage failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
self.ElectionPeriodStart = vmctx.BlockHeight()
|
||||||
|
}
|
||||||
|
|
||||||
|
var ncid cid.Cid
|
||||||
|
var err aerrors.ActorError
|
||||||
|
|
||||||
|
ncid, err = RemoveFromSectorSet2(vmctx.Context(), vmctx.Storage(), self.Sectors, faults)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
self.Sectors = ncid
|
||||||
|
self.ProvingSet = ncid
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -19,20 +19,22 @@ func (sm *StateManager) handleStateForks(ctx context.Context, pstate cid.Cid, he
|
|||||||
switch i {
|
switch i {
|
||||||
case build.ForkBlizzardHeight:
|
case build.ForkBlizzardHeight:
|
||||||
log.Warnw("Executing blizzard fork logic", "height", i)
|
log.Warnw("Executing blizzard fork logic", "height", i)
|
||||||
npstate, err := fixBlizzardAMTBug(ctx, sm, pstate)
|
pstate, err = fixBlizzardAMTBug(ctx, sm, pstate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cid.Undef, xerrors.Errorf("blizzard bug fix failed: %w", err)
|
return cid.Undef, xerrors.Errorf("blizzard bug fix failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return npstate, nil
|
|
||||||
case build.ForkFrigidHeight:
|
case build.ForkFrigidHeight:
|
||||||
log.Warnw("Executing frigid fork logic", "height", i)
|
log.Warnw("Executing frigid fork logic", "height", i)
|
||||||
npstate, err := fixBlizzardAMTBug(ctx, sm, pstate)
|
pstate, err = fixBlizzardAMTBug(ctx, sm, pstate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cid.Undef, xerrors.Errorf("frigid bug fix failed: %w", err)
|
return cid.Undef, xerrors.Errorf("frigid bug fix failed: %w", err)
|
||||||
}
|
}
|
||||||
|
case build.ForkBootyBayHeight:
|
||||||
return npstate, nil
|
log.Warnw("Executing booty bay fork logic", "height", i)
|
||||||
|
pstate, err = fixBlizzardAMTBug(ctx, sm, pstate)
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("booty bay bug fix failed: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user