From 42b8af302fa18092f90e82adec6c080392d4b9af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 19 Sep 2019 20:31:25 +0200 Subject: [PATCH] get sector set size from AMT --- chain/actors/actor_miner.go | 21 +++++++++++---------- chain/actors/cbor_gen.go | 34 ++-------------------------------- 2 files changed, 13 insertions(+), 42 deletions(-) diff --git a/chain/actors/actor_miner.go b/chain/actors/actor_miner.go index c624e47a7..c433404fd 100644 --- a/chain/actors/actor_miner.go +++ b/chain/actors/actor_miner.go @@ -34,13 +34,11 @@ type StorageMinerActorState struct { DePledgeTime types.BigInt // All sectors this miner has committed. - Sectors cid.Cid // TODO: Using a HAMT for now, needs to be an AMT once we implement it - SectorSetSize uint64 // TODO: the AMT should be able to tell us how many items are in it. This field won't be needed at that point + Sectors cid.Cid // TODO: Using a HAMT for now, needs to be an AMT once we implement it // Sectors this miner is currently mining. It is only updated // when a PoSt is submitted (not as each new sector commitment is added). - ProvingSet cid.Cid - ProvingSetSize uint64 + ProvingSet cid.Cid // Faulty sectors reported since last SubmitPost, // up to the current proving period's challenge time. @@ -269,9 +267,13 @@ func (sma StorageMinerActor) CommitSector(act *types.Actor, vmctx types.VMContex // // Note: Proving period is a function of sector size; small sectors take less // time to prove than large sectors do. Sector size is selected when pledging. - if self.ProvingSetSize == 0 { + pss, lerr := amt.LoadAMT(types.WrapStorage(vmctx.Storage()), self.ProvingSet) + if lerr != nil { + return nil, aerrors.Escalate(lerr, "could not load proving set node") + } + + if pss.Count == 0 { self.ProvingSet = self.Sectors - self.ProvingSetSize = self.SectorSetSize self.ProvingPeriodEnd = vmctx.BlockHeight() + build.ProvingPeriodDuration } @@ -367,7 +369,7 @@ func (sma StorageMinerActor) SubmitPoSt(act *types.Actor, vmctx types.VMContext, pss, lerr := amt.LoadAMT(types.WrapStorage(vmctx.Storage()), self.ProvingSet) if lerr != nil { - return nil, aerrors.Escalate(lerr, "could not load sector set node") + return nil, aerrors.Escalate(lerr, "could not load proving set node") } var sectorInfos []sectorbuilder.SectorInfo @@ -413,7 +415,7 @@ func (sma StorageMinerActor) SubmitPoSt(act *types.Actor, vmctx types.VMContext, ss, lerr := amt.LoadAMT(types.WrapStorage(vmctx.Storage()), self.ProvingSet) if lerr != nil { - return nil, aerrors.Escalate(lerr, "could not load sector set node") + return nil, aerrors.Escalate(lerr, "could not load proving set node") } if err := ss.BatchDelete(params.DoneSet.All()); err != nil { @@ -429,7 +431,7 @@ func (sma StorageMinerActor) SubmitPoSt(act *types.Actor, vmctx types.VMContext, } oldPower := self.Power - self.Power = types.BigMul(types.NewInt(self.ProvingSetSize-uint64(len(faults))), + self.Power = types.BigMul(types.NewInt(pss.Count-uint64(len(faults))), mi.SectorSize) enc, err := SerializeParams(&UpdateStorageParams{Delta: types.BigSub(self.Power, oldPower)}) @@ -443,7 +445,6 @@ func (sma StorageMinerActor) SubmitPoSt(act *types.Actor, vmctx types.VMContext, } self.ProvingSet = self.Sectors - self.ProvingSetSize = self.SectorSetSize self.NextDoneSet = params.DoneSet c, err := vmctx.Storage().Put(self) diff --git a/chain/actors/cbor_gen.go b/chain/actors/cbor_gen.go index 04d9fd163..388ae29c8 100644 --- a/chain/actors/cbor_gen.go +++ b/chain/actors/cbor_gen.go @@ -197,7 +197,7 @@ func (t *StorageMinerActorState) MarshalCBOR(w io.Writer) error { _, err := w.Write(cbg.CborNull) return err } - if _, err := w.Write([]byte{142}); err != nil { + if _, err := w.Write([]byte{140}); err != nil { return err } @@ -223,22 +223,12 @@ func (t *StorageMinerActorState) MarshalCBOR(w io.Writer) error { return xerrors.Errorf("failed to write cid field t.Sectors: %w", err) } - // t.t.SectorSetSize (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, t.SectorSetSize)); err != nil { - return err - } - // t.t.ProvingSet (cid.Cid) if err := cbg.WriteCid(w, t.ProvingSet); err != nil { return xerrors.Errorf("failed to write cid field t.ProvingSet: %w", err) } - // t.t.ProvingSetSize (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, t.ProvingSetSize)); err != nil { - return err - } - // t.t.CurrentFaultSet (types.BitField) if err := t.CurrentFaultSet.MarshalCBOR(w); err != nil { return err @@ -287,7 +277,7 @@ func (t *StorageMinerActorState) UnmarshalCBOR(r io.Reader) error { return fmt.Errorf("cbor input should be of type array") } - if extra != 14 { + if extra != 12 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -333,16 +323,6 @@ func (t *StorageMinerActorState) UnmarshalCBOR(r io.Reader) error { t.Sectors = c } - // t.t.SectorSetSize (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.SectorSetSize = extra // t.t.ProvingSet (cid.Cid) { @@ -355,16 +335,6 @@ func (t *StorageMinerActorState) UnmarshalCBOR(r io.Reader) error { t.ProvingSet = c } - // t.t.ProvingSetSize (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.ProvingSetSize = extra // t.t.CurrentFaultSet (types.BitField) {