diff --git a/api/api_full.go b/api/api_full.go index 21fadbaa6..2bca25b38 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -290,11 +290,11 @@ type FullNode interface { // StateMinerPartitions loads miner partitions for the specified miner/deadline StateMinerPartitions(context.Context, address.Address, uint64, types.TipSetKey) ([]*miner.Partition, error) // StateMinerFaults returns a bitfield indicating the faulty sectors of the given miner - StateMinerFaults(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) + StateMinerFaults(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) // StateAllMinerFaults returns all non-expired Faults that occur within lookback epochs of the given tipset StateAllMinerFaults(ctx context.Context, lookback abi.ChainEpoch, ts types.TipSetKey) ([]*Fault, error) // StateMinerRecoveries returns a bitfield indicating the recovering sectors of the given miner - StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) + StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) // StateMinerInitialPledgeCollateral returns the precommit deposit for the specified miner's sector StateMinerPreCommitDepositForPower(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) // StateMinerInitialPledgeCollateral returns the initial pledge collateral for the specified miner's sector diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 8fa5c69af..2cc7471cc 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -147,9 +147,9 @@ type FullNodeStruct struct { StateMinerInfo func(context.Context, address.Address, types.TipSetKey) (api.MinerInfo, error) `perm:"read"` StateMinerDeadlines func(context.Context, address.Address, types.TipSetKey) ([]*miner.Deadline, error) `perm:"read"` StateMinerPartitions func(context.Context, address.Address, uint64, types.TipSetKey) ([]*miner.Partition, error) `perm:"read"` - StateMinerFaults func(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) `perm:"read"` + StateMinerFaults func(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) `perm:"read"` StateAllMinerFaults func(context.Context, abi.ChainEpoch, types.TipSetKey) ([]*api.Fault, error) `perm:"read"` - StateMinerRecoveries func(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) `perm:"read"` + StateMinerRecoveries func(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) `perm:"read"` StateMinerPreCommitDepositForPower func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) `perm:"read"` StateMinerInitialPledgeCollateral func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) `perm:"read"` StateMinerAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"` @@ -670,7 +670,7 @@ func (c *FullNodeStruct) StateMinerPartitions(ctx context.Context, m address.Add return c.Internal.StateMinerPartitions(ctx, m, dlIdx, tsk) } -func (c *FullNodeStruct) StateMinerFaults(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*abi.BitField, error) { +func (c *FullNodeStruct) StateMinerFaults(ctx context.Context, actor address.Address, tsk types.TipSetKey) (abi.BitField, error) { return c.Internal.StateMinerFaults(ctx, actor, tsk) } @@ -678,7 +678,7 @@ func (c *FullNodeStruct) StateAllMinerFaults(ctx context.Context, cutoff abi.Cha return c.Internal.StateAllMinerFaults(ctx, cutoff, endTsk) } -func (c *FullNodeStruct) StateMinerRecoveries(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*abi.BitField, error) { +func (c *FullNodeStruct) StateMinerRecoveries(ctx context.Context, actor address.Address, tsk types.TipSetKey) (abi.BitField, error) { return c.Internal.StateMinerRecoveries(ctx, actor, tsk) } diff --git a/chain/events/state/predicates_test.go b/chain/events/state/predicates_test.go index 1c08703fa..bdb323e71 100644 --- a/chain/events/state/predicates_test.go +++ b/chain/events/state/predicates_test.go @@ -540,8 +540,8 @@ func createEmptyMinerState(ctx context.Context, t *testing.T, store adt.Store, o emptyDeadline, err := store.Put(context.TODO(), &miner.Deadline{ Partitions: emptyArrayCid, ExpirationsEpochs: emptyArrayCid, - PostSubmissions: abi.NewBitField(), - EarlyTerminations: abi.NewBitField(), + PostSubmissions: bitfield.New(), + EarlyTerminations: bitfield.New(), LiveSectors: 0, }) require.NoError(t, err) diff --git a/chain/stmgr/utils.go b/chain/stmgr/utils.go index 6806ae021..63dedfd14 100644 --- a/chain/stmgr/utils.go +++ b/chain/stmgr/utils.go @@ -175,7 +175,7 @@ func GetMinerSectorSet(ctx context.Context, sm *StateManager, ts *types.TipSet, } func GetSectorsForWinningPoSt(ctx context.Context, pv ffiwrapper.Verifier, sm *StateManager, st cid.Cid, maddr address.Address, rand abi.PoStRandomness) ([]abi.SectorInfo, error) { - var partsProving []*abi.BitField + var partsProving []abi.BitField var mas *miner.State var info *miner.MinerInfo diff --git a/cmd/lotus-chainwatch/processor/miner.go b/cmd/lotus-chainwatch/processor/miner.go index 882d7eed7..a5f18a6a6 100644 --- a/cmd/lotus-chainwatch/processor/miner.go +++ b/cmd/lotus-chainwatch/processor/miner.go @@ -166,11 +166,11 @@ type SectorDealEvent struct { } type PartitionStatus struct { - Terminated *abi.BitField - Expired *abi.BitField - Faulted *abi.BitField - InRecovery *abi.BitField - Recovered *abi.BitField + Terminated abi.BitField + Expired abi.BitField + Faulted abi.BitField + InRecovery abi.BitField + Recovered abi.BitField } type minerActorInfo struct { @@ -794,11 +794,11 @@ func (p *Processor) diffPartition(prevPart, curPart miner.Partition) (*Partition return nil, err } - expired := abi.NewBitField() + expired := bitfield.New() var bf abi.BitField if err := terminatedEarlyArr.ForEach(&bf, func(i int64) error { // expired = all removals - termination - expirations, err := bitfield.SubtractBitField(allRemovedSectors, &bf) + expirations, err := bitfield.SubtractBitField(allRemovedSectors, bf) if err != nil { return err } diff --git a/extern/sector-storage/mock/mock.go b/extern/sector-storage/mock/mock.go index 6eb71cd6b..07256f2ec 100644 --- a/extern/sector-storage/mock/mock.go +++ b/extern/sector-storage/mock/mock.go @@ -8,6 +8,7 @@ import ( "math/rand" "sync" + "github.com/filecoin-project/go-bitfield" commcid "github.com/filecoin-project/go-fil-commcid" "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/specs-storage/storage" @@ -291,7 +292,7 @@ func (mgr *SectorMgr) GenerateWindowPoSt(ctx context.Context, minerID abi.ActorI } func generateFakePoSt(sectorInfo []abi.SectorInfo, rpt func(abi.RegisteredSealProof) (abi.RegisteredPoStProof, error), randomness abi.PoStRandomness) []abi.PoStProof { - sectors := abi.NewBitField() + sectors := bitfield.New() for _, info := range sectorInfo { sectors.Set(uint64(info.SectorNumber)) } @@ -415,12 +416,12 @@ func (m mockVerif) VerifyWindowPoSt(ctx context.Context, info abi.WindowPoStVeri return false, xerrors.Errorf("bad randomness") } - sectors := abi.NewBitField() + sectors := bitfield.New() if err := sectors.UnmarshalCBOR(bytes.NewReader(proof.ProofBytes[len(info.Randomness):])); err != nil { return false, xerrors.Errorf("unmarshaling sectors bitfield from \"proof\": %w", err) } - challenged := abi.NewBitField() + challenged := bitfield.New() for _, sector := range info.ChallengedSectors { challenged.Set(uint64(sector.SectorNumber)) } diff --git a/go.mod b/go.mod index 89460674e..06ad51e5d 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/filecoin-project/filecoin-ffi v0.30.4-0.20200716204036-cddc56607e1d github.com/filecoin-project/go-address v0.0.2-0.20200504173055-8b6f2fb2b3ef github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20200731171407-e559a0579161 // indirect - github.com/filecoin-project/go-bitfield v0.1.2 + github.com/filecoin-project/go-bitfield v0.2.0 github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 github.com/filecoin-project/go-data-transfer v0.5.3 @@ -115,7 +115,7 @@ require ( github.com/syndtr/goleveldb v1.0.0 github.com/urfave/cli/v2 v2.2.0 github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba - github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b + github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 github.com/whyrusleeping/pubsub v0.0.0-20131020042734-02de8aa2db3d github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 diff --git a/go.sum b/go.sum index 887010d29..fb8351e05 100644 --- a/go.sum +++ b/go.sum @@ -231,6 +231,8 @@ github.com/filecoin-project/go-bitfield v0.0.1/go.mod h1:Ry9/iUlWSyjPUzlAvdnfy4G github.com/filecoin-project/go-bitfield v0.0.3/go.mod h1:Ry9/iUlWSyjPUzlAvdnfy4Gtvrq4kWmWDztCU1yEgJY= github.com/filecoin-project/go-bitfield v0.1.2 h1:TjLregCoyP1/5lm7WCM0axyV1myIHwbjGa21skuu5tk= github.com/filecoin-project/go-bitfield v0.1.2/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.0 h1:gCtLcjskIPtdg4NfN7gQZSQF9yrBQ7mkT0qCJxzGI2Q= +github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 h1:av5fw6wmm58FYMgJeoB/lK9XXrgdugYiTqkdxjTy9k8= github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= @@ -1375,6 +1377,8 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20200710004633-5379fc63235d/go.mod h1:f github.com/whyrusleeping/cbor-gen v0.0.0-20200715143311-227fab5a2377/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b h1:Tju61pLCTYt5KZ9Y4wJKNR+IXB1k29M+0w3eW48Xqy0= github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c h1:BMg3YUwLEUIYBJoYZVhA4ZDTciXRj6r7ffOCshWrsoE= +github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-ctrlnet v0.0.0-20180313164037-f564fbbdaa95/go.mod h1:SJqKCCPXRfBFCwXjfNT/skfsceF7+MBFLI2OrvuRA7g= diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 73bd4a398..34e84e92b 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -74,7 +74,7 @@ func (a *StateAPI) StateMinerActiveSectors(ctx context.Context, maddr address.Ad err := a.StateManager.WithParentStateTsk(tsk, a.StateManager.WithActor(maddr, a.StateManager.WithActorState(ctx, func(store adt.Store, mas *miner.State) error { - var allActive []*abi.BitField + var allActive []abi.BitField err := a.StateManager.WithDeadlines( a.StateManager.WithEachDeadline( @@ -96,7 +96,7 @@ func (a *StateAPI) StateMinerActiveSectors(ctx context.Context, maddr address.Ad return xerrors.Errorf("merging active sector bitfields: %w", err) } - out, err = stmgr.LoadSectorsFromSet(ctx, a.Chain.Blockstore(), mas.Sectors, active, false) + out, err = stmgr.LoadSectorsFromSet(ctx, a.Chain.Blockstore(), mas.Sectors, &active, false) return err }))) if err != nil { @@ -160,8 +160,8 @@ func (a *StateAPI) StateMinerProvingDeadline(ctx context.Context, addr address.A return mas.DeadlineInfo(ts.Height()).NextNotElapsed(), nil } -func (a *StateAPI) StateMinerFaults(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.BitField, error) { - out := abi.NewBitField() +func (a *StateAPI) StateMinerFaults(ctx context.Context, addr address.Address, tsk types.TipSetKey) (abi.BitField, error) { + out := bitfield.New() err := a.StateManager.WithParentStateTsk(tsk, a.StateManager.WithActor(addr, @@ -173,7 +173,7 @@ func (a *StateAPI) StateMinerFaults(ctx context.Context, addr address.Address, t return err })))))) if err != nil { - return nil, err + return bitfield.BitField{}, err } return out, err @@ -203,7 +203,7 @@ func (a *StateAPI) StateAllMinerFaults(ctx context.Context, lookback abi.ChainEp return nil, xerrors.Errorf("failed to load miner actor state %s: %w", m, err) } - err = mas.ForEachFaultEpoch(a.Chain.Store(ctx), func(faultStart abi.ChainEpoch, faults *abi.BitField) error { + err = mas.ForEachFaultEpoch(a.Chain.Store(ctx), func(faultStart abi.ChainEpoch, faults abi.BitField) error { if faultStart >= cutoff { allFaults = append(allFaults, &api.Fault{ Miner: m, @@ -222,8 +222,8 @@ func (a *StateAPI) StateAllMinerFaults(ctx context.Context, lookback abi.ChainEp return allFaults, nil*/ } -func (a *StateAPI) StateMinerRecoveries(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.BitField, error) { - out := abi.NewBitField() +func (a *StateAPI) StateMinerRecoveries(ctx context.Context, addr address.Address, tsk types.TipSetKey) (abi.BitField, error) { + out := bitfield.New() err := a.StateManager.WithParentStateTsk(tsk, a.StateManager.WithActor(addr, @@ -235,7 +235,7 @@ func (a *StateAPI) StateMinerRecoveries(ctx context.Context, addr address.Addres return err })))))) if err != nil { - return nil, err + return bitfield.BitField{}, err } return out, err @@ -668,7 +668,7 @@ func (a *StateAPI) StateMinerSectorCount(ctx context.Context, addr address.Addre err := a.StateManager.WithParentStateTsk(tsk, a.StateManager.WithActor(addr, a.StateManager.WithActorState(ctx, func(store adt.Store, mas *miner.State) error { - var allActive []*abi.BitField + var allActive []abi.BitField err := a.StateManager.WithDeadlines( a.StateManager.WithEachDeadline( diff --git a/storage/miner.go b/storage/miner.go index 13227ddaf..676d79c20 100644 --- a/storage/miner.go +++ b/storage/miner.go @@ -62,8 +62,8 @@ type storageMinerApi interface { StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) - StateMinerFaults(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) - StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (*abi.BitField, error) + StateMinerFaults(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) + StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (abi.BitField, error) MpoolPushMessage(context.Context, *types.Message) (*types.SignedMessage, error) diff --git a/storage/wdpost_run.go b/storage/wdpost_run.go index 77cd60ce6..7b2cea5b5 100644 --- a/storage/wdpost_run.go +++ b/storage/wdpost_run.go @@ -62,15 +62,15 @@ func (s *WindowPoStScheduler) doPost(ctx context.Context, deadline *miner.Deadli }() } -func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check *abi.BitField) (*abi.BitField, error) { +func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check abi.BitField) (abi.BitField, error) { spt, err := s.proofType.RegisteredSealProof() if err != nil { - return nil, xerrors.Errorf("getting seal proof type: %w", err) + return bitfield.BitField{}, xerrors.Errorf("getting seal proof type: %w", err) } mid, err := address.IDFromAddress(s.actor) if err != nil { - return nil, err + return bitfield.BitField{}, err } sectors := make(map[abi.SectorID]struct{}) @@ -86,12 +86,12 @@ func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check *abi.BitFi return nil }) if err != nil { - return nil, xerrors.Errorf("iterating over bitfield: %w", err) + return bitfield.BitField{}, xerrors.Errorf("iterating over bitfield: %w", err) } bad, err := s.faultTracker.CheckProvable(ctx, spt, tocheck) if err != nil { - return nil, xerrors.Errorf("checking provable sectors: %w", err) + return bitfield.BitField{}, xerrors.Errorf("checking provable sectors: %w", err) } for _, id := range bad { delete(sectors, id) @@ -101,10 +101,10 @@ func (s *WindowPoStScheduler) checkSectors(ctx context.Context, check *abi.BitFi sbf := bitfield.New() for s := range sectors { - (&sbf).Set(uint64(s.Number)) + sbf.Set(uint64(s.Number)) } - return &sbf, nil + return sbf, nil } func (s *WindowPoStScheduler) checkNextRecoveries(ctx context.Context, dlIdx uint64, partitions []*miner.Partition) error { @@ -420,8 +420,8 @@ func (s *WindowPoStScheduler) runPost(ctx context.Context, di miner.DeadlineInfo return params, nil } -func (s *WindowPoStScheduler) sectorInfo(ctx context.Context, deadlineSectors *abi.BitField, ts *types.TipSet) ([]abi.SectorInfo, error) { - sset, err := s.api.StateMinerSectors(ctx, s.actor, deadlineSectors, false, ts.Key()) +func (s *WindowPoStScheduler) sectorInfo(ctx context.Context, deadlineSectors abi.BitField, ts *types.TipSet) ([]abi.SectorInfo, error) { + sset, err := s.api.StateMinerSectors(ctx, s.actor, &deadlineSectors, false, ts.Key()) if err != nil { return nil, err }