80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
|
package ffiwrapper
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"golang.org/x/xerrors"
|
||
|
|
||
|
"github.com/filecoin-project/specs-actors/actors/abi"
|
||
|
)
|
||
|
|
||
|
type Config struct {
|
||
|
SealProofType abi.RegisteredProof
|
||
|
PoStProofType abi.RegisteredProof
|
||
|
|
||
|
_ struct{} // guard against nameless init
|
||
|
}
|
||
|
|
||
|
func sizeFromConfig(cfg Config) (abi.SectorSize, error) {
|
||
|
if cfg.SealProofType == abi.RegisteredProof(0) {
|
||
|
return abi.SectorSize(0), xerrors.New("must specify a seal proof type from abi.RegisteredProof")
|
||
|
}
|
||
|
|
||
|
if cfg.PoStProofType == abi.RegisteredProof(0) {
|
||
|
return abi.SectorSize(0), xerrors.New("must specify a PoSt proof type from abi.RegisteredProof")
|
||
|
}
|
||
|
|
||
|
s1, err := sizeFromProofType(cfg.SealProofType)
|
||
|
if err != nil {
|
||
|
return abi.SectorSize(0), err
|
||
|
}
|
||
|
|
||
|
s2, err := sizeFromProofType(cfg.PoStProofType)
|
||
|
if err != nil {
|
||
|
return abi.SectorSize(0), err
|
||
|
}
|
||
|
|
||
|
if s1 != s2 {
|
||
|
return abi.SectorSize(0), xerrors.Errorf("seal sector size %d does not equal PoSt sector size %d", s1, s2)
|
||
|
}
|
||
|
|
||
|
return s1, nil
|
||
|
}
|
||
|
|
||
|
func sizeFromProofType(p abi.RegisteredProof) (abi.SectorSize, error) {
|
||
|
x, err := p.RegisteredPoStProof()
|
||
|
if err != nil {
|
||
|
return 0, err
|
||
|
}
|
||
|
|
||
|
// values taken from https://github.com/filecoin-project/rust-fil-proofs/blob/master/filecoin-proofs/src/constants.rs#L11
|
||
|
|
||
|
switch x {
|
||
|
case abi.RegisteredProof_StackedDRG32GiBPoSt:
|
||
|
return 1 << 35, nil
|
||
|
case abi.RegisteredProof_StackedDRG2KiBPoSt:
|
||
|
return 2048, nil
|
||
|
case abi.RegisteredProof_StackedDRG8MiBPoSt:
|
||
|
return 1 << 23, nil
|
||
|
case abi.RegisteredProof_StackedDRG512MiBPoSt:
|
||
|
return 1 << 29, nil
|
||
|
default:
|
||
|
return abi.SectorSize(0), xerrors.Errorf("unsupported proof type: %+v", p)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TODO: remove this method after implementing it along side the registered proofs and importing it from there.
|
||
|
func SectorSizeForRegisteredProof(p abi.RegisteredProof) (abi.SectorSize, error) {
|
||
|
switch p {
|
||
|
case abi.RegisteredProof_StackedDRG32GiBSeal, abi.RegisteredProof_StackedDRG32GiBPoSt:
|
||
|
return 32 << 30, nil
|
||
|
case abi.RegisteredProof_StackedDRG2KiBSeal, abi.RegisteredProof_StackedDRG2KiBPoSt:
|
||
|
return 2 << 10, nil
|
||
|
case abi.RegisteredProof_StackedDRG8MiBSeal, abi.RegisteredProof_StackedDRG8MiBPoSt:
|
||
|
return 8 << 20, nil
|
||
|
case abi.RegisteredProof_StackedDRG512MiBSeal, abi.RegisteredProof_StackedDRG512MiBPoSt:
|
||
|
return 512 << 20, nil
|
||
|
default:
|
||
|
return 0, fmt.Errorf("unsupported registered proof %d", p)
|
||
|
}
|
||
|
}
|