package storage import ( "context" "github.com/ipfs/go-cid" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-storage/storage" "github.com/filecoin-project/lotus/api" sealing "github.com/filecoin-project/lotus/extern/storage-sealing" "github.com/filecoin-project/lotus/extern/storage-sealing/sealiface" "github.com/filecoin-project/lotus/storage/sectorblocks" ) // TODO: refactor this to be direct somehow func (m *Miner) Address() address.Address { return m.sealing.Address() } func (m *Miner) StartPackingSector(sectorNum abi.SectorNumber) error { return m.sealing.StartPacking(sectorNum) } func (m *Miner) ListSectors() ([]sealing.SectorInfo, error) { return m.sealing.ListSectors() } func (m *Miner) PledgeSector(ctx context.Context) (storage.SectorRef, error) { return m.sealing.PledgeSector(ctx) } func (m *Miner) ForceSectorState(ctx context.Context, id abi.SectorNumber, state sealing.SectorState) error { return m.sealing.ForceSectorState(ctx, id, state) } func (m *Miner) RemoveSector(ctx context.Context, id abi.SectorNumber) error { return m.sealing.Remove(ctx, id) } func (m *Miner) TerminateSector(ctx context.Context, id abi.SectorNumber) error { return m.sealing.Terminate(ctx, id) } func (m *Miner) TerminateFlush(ctx context.Context) (*cid.Cid, error) { return m.sealing.TerminateFlush(ctx) } func (m *Miner) TerminatePending(ctx context.Context) ([]abi.SectorID, error) { return m.sealing.TerminatePending(ctx) } func (m *Miner) SectorPreCommitFlush(ctx context.Context) ([]sealiface.PreCommitBatchRes, error) { return m.sealing.SectorPreCommitFlush(ctx) } func (m *Miner) SectorPreCommitPending(ctx context.Context) ([]abi.SectorID, error) { return m.sealing.SectorPreCommitPending(ctx) } func (m *Miner) CommitFlush(ctx context.Context) ([]sealiface.CommitBatchRes, error) { return m.sealing.CommitFlush(ctx) } func (m *Miner) CommitPending(ctx context.Context) ([]abi.SectorID, error) { return m.sealing.CommitPending(ctx) } func (m *Miner) SectorMatchPendingPiecesToOpenSectors(ctx context.Context) error { return m.sealing.MatchPendingPiecesToOpenSectors(ctx) } func (m *Miner) MarkForUpgrade(ctx context.Context, id abi.SectorNumber, snap bool) error { if snap { return m.sealing.MarkForSnapUpgrade(ctx, id) } return m.sealing.MarkForUpgrade(ctx, id) } func (m *Miner) IsMarkedForUpgrade(id abi.SectorNumber) bool { return m.sealing.IsMarkedForUpgrade(id) } func (m *Miner) SectorAbortUpgrade(sectorNum abi.SectorNumber) error { return m.sealing.AbortUpgrade(sectorNum) } func (m *Miner) SectorAddPieceToAny(ctx context.Context, size abi.UnpaddedPieceSize, r storage.Data, d api.PieceDealInfo) (api.SectorOffset, error) { return m.sealing.SectorAddPieceToAny(ctx, size, r, d) } func (m *Miner) SectorsStatus(ctx context.Context, sid abi.SectorNumber, showOnChainInfo bool) (api.SectorInfo, error) { if showOnChainInfo { return api.SectorInfo{}, xerrors.Errorf("on-chain info not supported") } info, err := m.sealing.GetSectorInfo(sid) if err != nil { return api.SectorInfo{}, err } deals := make([]abi.DealID, len(info.Pieces)) pieces := make([]api.SectorPiece, len(info.Pieces)) for i, piece := range info.Pieces { pieces[i].Piece = piece.Piece if piece.DealInfo == nil { continue } pdi := *piece.DealInfo // copy pieces[i].DealInfo = &pdi deals[i] = piece.DealInfo.DealID } log := make([]api.SectorLog, len(info.Log)) for i, l := range info.Log { log[i] = api.SectorLog{ Kind: l.Kind, Timestamp: l.Timestamp, Trace: l.Trace, Message: l.Message, } } sInfo := api.SectorInfo{ SectorID: sid, State: api.SectorState(info.State), CommD: info.CommD, CommR: info.CommR, Proof: info.Proof, Deals: deals, Pieces: pieces, Ticket: api.SealTicket{ Value: info.TicketValue, Epoch: info.TicketEpoch, }, Seed: api.SealSeed{ Value: info.SeedValue, Epoch: info.SeedEpoch, }, PreCommitMsg: info.PreCommitMessage, CommitMsg: info.CommitMessage, Retries: info.InvalidProofs, ToUpgrade: m.IsMarkedForUpgrade(sid), ReplicaUpdateMessage: info.ReplicaUpdateMessage, LastErr: info.LastErr, Log: log, // on chain info SealProof: info.SectorType, Activation: 0, Expiration: 0, DealWeight: big.Zero(), VerifiedDealWeight: big.Zero(), InitialPledge: big.Zero(), OnTime: 0, Early: 0, } return sInfo, nil } var _ sectorblocks.SectorBuilder = &Miner{}