//+build cgo package ffiwrapper import ( "context" "golang.org/x/xerrors" "go.opencensus.io/trace" ffi "github.com/filecoin-project/filecoin-ffi" "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/sector-storage/stores" ) func (sb *Sealer) GenerateWinningPoStSectorChallenge(ctx context.Context, proofType abi.RegisteredProof, minerID abi.ActorID, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) { randomness[31] = 0 // TODO: Not correct, fixme return ffi.GenerateWinningPoStSectorChallenge(proofType, minerID, randomness, eligibleSectorCount) } 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 privsectors, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWinningPoStProof) // TODO: FAULTS? if err != nil { return nil, err } return ffi.GenerateWinningPoSt(minerID, privsectors, randomness) } func (sb *Sealer) GenerateWindowPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, error) { randomness[31] = 0 // TODO: Not correct, fixme privsectors, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredProof.RegisteredWindowPoStProof) // TODO: FAULTS? if err != nil { return nil, err } return ffi.GenerateWindowPoSt(minerID, privsectors, randomness) } 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, error) { fmap := map[abi.SectorNumber]struct{}{} for _, fault := range faults { fmap[fault] = struct{}{} } var out []ffi.PrivateSectorInfo for _, s := range sectorInfo { if _, faulty := fmap[s.SectorNumber]; faulty { continue } paths, done, err := sb.sectors.AcquireSector(ctx, abi.SectorID{Miner: mid, Number: s.SectorNumber}, stores.FTCache|stores.FTSealed, 0, false) if err != nil { return ffi.SortedPrivateSectorInfo{}, xerrors.Errorf("acquire sector paths: %w", err) } done() // TODO: This is a tiny bit suboptimal postProofType, err := rpt(s.RegisteredProof) if err != nil { return ffi.SortedPrivateSectorInfo{}, xerrors.Errorf("acquiring registered PoSt proof from sector info %+v: %w", s, err) } out = append(out, ffi.PrivateSectorInfo{ CacheDirPath: paths.Cache, PoStProofType: postProofType, SealedSectorPath: paths.Sealed, SectorInfo: s, }) } return ffi.NewSortedPrivateSectorInfo(out...), nil } var _ Verifier = ProofVerifier type proofVerifier struct{} var ProofVerifier = proofVerifier{} func (proofVerifier) VerifySeal(info abi.SealVerifyInfo) (bool, error) { return ffi.VerifySeal(info) } func (proofVerifier) VerifyWinningPoSt(ctx context.Context, info abi.WinningPoStVerifyInfo) (bool, error) { info.Randomness[31] = 0 // TODO: Not correct, fixme _, span := trace.StartSpan(ctx, "VerifyWinningPoSt") defer span.End() return ffi.VerifyWinningPoSt(info) } func (proofVerifier) VerifyWindowPoSt(ctx context.Context, info abi.WindowPoStVerifyInfo) (bool, error) { info.Randomness[31] = 0 // TODO: Not correct, fixme _, span := trace.StartSpan(ctx, "VerifyWindowPoSt") defer span.End() return ffi.VerifyWindowPoSt(info) }