sealing: WIP SectorInfo sanity checks
This commit is contained in:
parent
4436148fa1
commit
efaf2c720b
73
storage/sealing/checks.go
Normal file
73
storage/sealing/checks.go
Normal file
@ -0,0 +1,73 @@
|
||||
package sealing
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/filecoin-project/go-address"
|
||||
"github.com/filecoin-project/lotus/chain/actors"
|
||||
"github.com/filecoin-project/lotus/chain/types"
|
||||
)
|
||||
|
||||
func checkPieces(ctx context.Context, si *SectorInfo, api sealingApi) error {
|
||||
for i, piece := range si.Pieces {
|
||||
deal, err := api.StateMarketStorageDeal(ctx, piece.DealID, nil)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("getting deal %d for piece %d: %w", piece.DealID, i, err)
|
||||
}
|
||||
|
||||
if string(deal.PieceRef) != string(piece.CommP) {
|
||||
return xerrors.Errorf("piece %d of sector %d refers deal %d with wrong CommP: %x != %x", i, si.SectorID, piece.DealID, piece.CommP, deal.PieceRef)
|
||||
}
|
||||
|
||||
if piece.Size != deal.PieceSize {
|
||||
return xerrors.Errorf("piece %d of sector %d refers deal %d with different size: %d != %d", i, si.SectorID, piece.DealID, piece.Size, deal.PieceSize)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkSeal(ctx context.Context, maddr address.Address, si *SectorInfo, api sealingApi) (err error) {
|
||||
ssize, err := api.StateMinerSectorSize(ctx, maddr, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ccparams, err := actors.SerializeParams(&actors.ComputeDataCommitmentParams{
|
||||
DealIDs: si.deals(),
|
||||
SectorSize: ssize,
|
||||
})
|
||||
if err != nil {
|
||||
return xerrors.Errorf("computing params for ComputeDataCommitment: %w", err)
|
||||
}
|
||||
|
||||
ccmt := &types.Message{
|
||||
To: actors.StorageMarketAddress,
|
||||
From: actors.StorageMarketAddress,
|
||||
Value: types.NewInt(0),
|
||||
GasPrice: types.NewInt(0),
|
||||
GasLimit: types.NewInt(9999999999),
|
||||
Method: actors.SMAMethods.ComputeDataCommitment,
|
||||
Params: ccparams,
|
||||
}
|
||||
r, err := api.StateCall(ctx, ccmt, nil)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("calling ComputeDataCommitment: %w", err)
|
||||
}
|
||||
if r.ExitCode != 0 {
|
||||
return xerrors.Errorf("receipt for ComputeDataCommitment han exit code %d", r.ExitCode)
|
||||
}
|
||||
if string(r.Return) != string(si.CommD) {
|
||||
return xerrors.Errorf("on chain CommD differs from sector: %x != %x", r.Return, si.CommD)
|
||||
}
|
||||
|
||||
|
||||
// TODO: Validate ticket
|
||||
// TODO: Verify commp / commr / proof
|
||||
// TODO: (StateCall PreCommit)
|
||||
return nil
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user