verifier: Handle sector unlocking correctly
This commit is contained in:
parent
8e489cdbdb
commit
375a6b4d38
@ -16,10 +16,11 @@ import (
|
|||||||
|
|
||||||
func (sb *Sealer) GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, error) {
|
func (sb *Sealer) GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, error) {
|
||||||
randomness[31] = 0 // TODO: Not correct, fixme
|
randomness[31] = 0 // TODO: Not correct, fixme
|
||||||
privsectors, skipped, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWinningPoStProof) // TODO: FAULTS?
|
privsectors, skipped, done, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWinningPoStProof) // TODO: FAULTS?
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer done()
|
||||||
if len(skipped) > 0 {
|
if len(skipped) > 0 {
|
||||||
return nil, xerrors.Errorf("pubSectorToPriv skipped sectors: %+v", skipped)
|
return nil, xerrors.Errorf("pubSectorToPriv skipped sectors: %+v", skipped)
|
||||||
}
|
}
|
||||||
@ -29,21 +30,29 @@ func (sb *Sealer) GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID,
|
|||||||
|
|
||||||
func (sb *Sealer) GenerateWindowPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, []abi.SectorID, error) {
|
func (sb *Sealer) GenerateWindowPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, []abi.SectorID, error) {
|
||||||
randomness[31] = 0 // TODO: Not correct, fixme
|
randomness[31] = 0 // TODO: Not correct, fixme
|
||||||
privsectors, skipped, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWindowPoStProof)
|
privsectors, skipped, done, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWindowPoStProof)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, xerrors.Errorf("gathering sector info: %w", err)
|
return nil, nil, xerrors.Errorf("gathering sector info: %w", err)
|
||||||
}
|
}
|
||||||
|
defer done()
|
||||||
|
|
||||||
proof, err := ffi.GenerateWindowPoSt(minerID, privsectors, randomness)
|
proof, err := ffi.GenerateWindowPoSt(minerID, privsectors, randomness)
|
||||||
return proof, skipped, err
|
return proof, skipped, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sb *Sealer) pubSectorToPriv(ctx context.Context, mid abi.ActorID, sectorInfo []abi.SectorInfo, faults []abi.SectorNumber, rpt func(abi.RegisteredProof) (abi.RegisteredProof, error)) (ffi.SortedPrivateSectorInfo, []abi.SectorID, error) {
|
func (sb *Sealer) pubSectorToPriv(ctx context.Context, mid abi.ActorID, sectorInfo []abi.SectorInfo, faults []abi.SectorNumber, rpt func(abi.RegisteredProof) (abi.RegisteredProof, error)) (ffi.SortedPrivateSectorInfo, []abi.SectorID, func(), error) {
|
||||||
fmap := map[abi.SectorNumber]struct{}{}
|
fmap := map[abi.SectorNumber]struct{}{}
|
||||||
for _, fault := range faults {
|
for _, fault := range faults {
|
||||||
fmap[fault] = struct{}{}
|
fmap[fault] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var doneFuncs []func()
|
||||||
|
done := func() {
|
||||||
|
for _, df := range doneFuncs {
|
||||||
|
df()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var skipped []abi.SectorID
|
var skipped []abi.SectorID
|
||||||
var out []ffi.PrivateSectorInfo
|
var out []ffi.PrivateSectorInfo
|
||||||
for _, s := range sectorInfo {
|
for _, s := range sectorInfo {
|
||||||
@ -53,17 +62,18 @@ func (sb *Sealer) pubSectorToPriv(ctx context.Context, mid abi.ActorID, sectorIn
|
|||||||
|
|
||||||
sid := abi.SectorID{Miner: mid, Number: s.SectorNumber}
|
sid := abi.SectorID{Miner: mid, Number: s.SectorNumber}
|
||||||
|
|
||||||
paths, done, err := sb.sectors.AcquireSector(ctx, sid, stores.FTCache|stores.FTSealed, 0, false)
|
paths, d, err := sb.sectors.AcquireSector(ctx, sid, stores.FTCache|stores.FTSealed, 0, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnw("failed to acquire sector, skipping", "sector", sid, "error", err)
|
log.Warnw("failed to acquire sector, skipping", "sector", sid, "error", err)
|
||||||
skipped = append(skipped, sid)
|
skipped = append(skipped, sid)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
done() // TODO: This is a tiny bit suboptimal
|
doneFuncs = append(doneFuncs, d)
|
||||||
|
|
||||||
postProofType, err := rpt(s.RegisteredProof)
|
postProofType, err := rpt(s.RegisteredProof)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ffi.SortedPrivateSectorInfo{}, nil, xerrors.Errorf("acquiring registered PoSt proof from sector info %+v: %w", s, err)
|
done()
|
||||||
|
return ffi.SortedPrivateSectorInfo{}, nil, nil, xerrors.Errorf("acquiring registered PoSt proof from sector info %+v: %w", s, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
out = append(out, ffi.PrivateSectorInfo{
|
out = append(out, ffi.PrivateSectorInfo{
|
||||||
@ -74,7 +84,7 @@ func (sb *Sealer) pubSectorToPriv(ctx context.Context, mid abi.ActorID, sectorIn
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return ffi.NewSortedPrivateSectorInfo(out...), skipped, nil
|
return ffi.NewSortedPrivateSectorInfo(out...), skipped, done, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ Verifier = ProofVerifier
|
var _ Verifier = ProofVerifier
|
||||||
|
Loading…
Reference in New Issue
Block a user