diff --git a/api/api_full.go b/api/api_full.go index 4d65ad23d..f2585b927 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -247,8 +247,8 @@ type FullNode interface { ClientRetrieve(ctx context.Context, order RetrievalOrder, ref *FileRef) (<-chan marketevents.RetrievalEvent, error) // ClientQueryAsk returns a signed StorageAsk from the specified miner. ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error) - // ClientCalcCommP calculates the CommP for a specified file, based on the sector size of the provided miner. - ClientCalcCommP(ctx context.Context, inpath string, miner address.Address) (*CommPRet, error) + // ClientCalcCommP calculates the CommP for a specified file + ClientCalcCommP(ctx context.Context, inpath string) (*CommPRet, error) // ClientGenCar generates a CAR file for the specified file. ClientGenCar(ctx context.Context, ref FileRef, outpath string) error // ClientDealSize calculates real deal data size diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 090f77f82..5be189c98 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -137,7 +137,7 @@ type FullNodeStruct struct { ClientListDeals func(ctx context.Context) ([]api.DealInfo, error) `perm:"write"` ClientRetrieve func(ctx context.Context, order api.RetrievalOrder, ref *api.FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"` ClientQueryAsk func(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error) `perm:"read"` - ClientCalcCommP func(ctx context.Context, inpath string, miner address.Address) (*api.CommPRet, error) `perm:"read"` + ClientCalcCommP func(ctx context.Context, inpath string) (*api.CommPRet, error) `perm:"read"` ClientGenCar func(ctx context.Context, ref api.FileRef, outpath string) error `perm:"write"` ClientDealSize func(ctx context.Context, root cid.Cid) (api.DataSize, error) `perm:"read"` @@ -426,8 +426,8 @@ func (c *FullNodeStruct) ClientRetrieve(ctx context.Context, order api.Retrieval func (c *FullNodeStruct) ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error) { return c.Internal.ClientQueryAsk(ctx, p, miner) } -func (c *FullNodeStruct) ClientCalcCommP(ctx context.Context, inpath string, miner address.Address) (*api.CommPRet, error) { - return c.Internal.ClientCalcCommP(ctx, inpath, miner) +func (c *FullNodeStruct) ClientCalcCommP(ctx context.Context, inpath string) (*api.CommPRet, error) { + return c.Internal.ClientCalcCommP(ctx, inpath) } func (c *FullNodeStruct) ClientGenCar(ctx context.Context, ref api.FileRef, outpath string) error { diff --git a/cli/client.go b/cli/client.go index 5bc0f4a0d..bfe86e186 100644 --- a/cli/client.go +++ b/cli/client.go @@ -174,7 +174,7 @@ var clientDropCmd = &cli.Command{ var clientCommPCmd = &cli.Command{ Name: "commP", Usage: "Calculate the piece-cid (commP) of a CAR file", - ArgsUsage: "[inputFile minerAddress]", + ArgsUsage: "[inputFile]", Flags: []cli.Flag{ &CidBaseFlag, }, @@ -186,16 +186,11 @@ var clientCommPCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.Args().Len() != 2 { - return fmt.Errorf("usage: commP ") + if cctx.Args().Len() != 1 { + return fmt.Errorf("usage: commP ") } - miner, err := address.NewFromString(cctx.Args().Get(1)) - if err != nil { - return err - } - - ret, err := api.ClientCalcCommP(ctx, cctx.Args().Get(0), miner) + ret, err := api.ClientCalcCommP(ctx, cctx.Args().Get(0)) if err != nil { return err } diff --git a/node/impl/client/client.go b/node/impl/client/client.go index 2823ca263..404487859 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -565,13 +565,19 @@ func (a *API) ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Addre return signedAsk, nil } -func (a *API) ClientCalcCommP(ctx context.Context, inpath string, miner address.Address) (*api.CommPRet, error) { - mi, err := a.StateMinerInfo(ctx, miner, types.EmptyTSK) - if err != nil { - return nil, xerrors.Errorf("failed checking miners sector size: %w", err) - } +func (a *API) ClientCalcCommP(ctx context.Context, inpath string) (*api.CommPRet, error) { - rt, err := ffiwrapper.SealProofTypeFromSectorSize(mi.SectorSize) + // Hard-code the sector size to 32GiB, because: + // - pieceio.GeneratePieceCommitment requires a RegisteredSealProof + // - commP itself is sector-size independent, with rather low probability of that changing + // ( note how the final rust call is identical for every RegSP type ) + // https://github.com/filecoin-project/rust-filecoin-proofs-api/blob/v5.0.0/src/seal.rs#L1040-L1050 + // + // IF/WHEN this changes in the future we will have to be able to calculate + // "old style" commP, and thus will need to introduce a version switch or similar + arbitrarySectorSize := abi.SectorSize(32 << 30) + + rt, err := ffiwrapper.SealProofTypeFromSectorSize(arbitrarySectorSize) if err != nil { return nil, xerrors.Errorf("bad sector size: %w", err) }