diff --git a/verifying/verifying.go b/verifying/verifying.go index 970a120cb..3089423ad 100644 --- a/verifying/verifying.go +++ b/verifying/verifying.go @@ -27,13 +27,7 @@ func VerifyVRFNonce(nonce *uint64, m *shared.VRFNonceMetadata, opts ...OptionFun return fmt.Errorf("invalid `commitmentAtxId` length; expected: 32, given: %v", len(m.CommitmentAtxId)) } - options := defaultOpts() - for _, opt := range opts { - if err := opt(options); err != nil { - return err - } - } - + options := applyOpts(opts...) numLabels := uint64(m.NumUnits) * uint64(m.LabelsPerUnit) difficulty := shared.PowDifficulty(numLabels) @@ -68,10 +62,7 @@ type ProofVerifier struct { // NewProofVerifier creates a new proof verifier. // The verifier must be closed after use with Close(). func NewProofVerifier(opts ...OptionFunc) (*ProofVerifier, error) { - options, err := applyOpts(opts...) - if err != nil { - return nil, err - } + options := applyOpts(opts...) inner, err := postrs.NewVerifier(options.powFlags) if err != nil { return nil, err @@ -83,10 +74,6 @@ func NewProofVerifier(opts ...OptionFunc) (*ProofVerifier, error) { // Verify ensures the validity of a proof in respect to its metadata. // It returns nil if the proof is valid or an error describing the failure, otherwise. func (v *ProofVerifier) Verify(p *shared.Proof, m *shared.ProofMetadata, cfg config.Config, logger *zap.Logger, opts ...OptionFunc) error { - options, err := applyOpts(opts...) - if err != nil { - return err - } if len(m.NodeId) != 32 { return fmt.Errorf("invalid `nodeId` length; expected: 32, given: %v", len(m.NodeId)) } @@ -94,6 +81,7 @@ func (v *ProofVerifier) Verify(p *shared.Proof, m *shared.ProofMetadata, cfg con return fmt.Errorf("invalid `commitmentAtxId` length; expected: 32, given: %v", len(m.CommitmentAtxId)) } + options := applyOpts(opts...) scryptParams := postrs.NewScryptParams(options.labelScrypt.N, options.labelScrypt.R, options.labelScrypt.P) return v.VerifyProof(p, m, logger, postrs.Config(cfg), scryptParams) } diff --git a/verifying/verifying_options.go b/verifying/verifying_options.go index ca7070df2..add2c3594 100644 --- a/verifying/verifying_options.go +++ b/verifying/verifying_options.go @@ -1,8 +1,6 @@ package verifying import ( - "errors" - "github.com/spacemeshos/post/config" ) @@ -10,49 +8,29 @@ type option struct { powFlags config.PowFlags // scrypt parameters for labels initialization labelScrypt config.ScryptParams - - powCreatorId []byte } -func defaultOpts() *option { - return &option{ +func applyOpts(options ...OptionFunc) *option { + opts := &option{ powFlags: config.DefaultVerifyingPowFlags(), labelScrypt: config.DefaultLabelParams(), } -} - -func applyOpts(options ...OptionFunc) (*option, error) { - opts := defaultOpts() for _, opt := range options { - if err := opt(opts); err != nil { - return nil, err - } + opt(opts) } - return opts, nil + return opts } -type OptionFunc func(*option) error +type OptionFunc func(*option) func WithLabelScryptParams(params config.ScryptParams) OptionFunc { - return func(o *option) error { + return func(o *option) { o.labelScrypt = params - return nil } } func WithPowFlags(flags config.PowFlags) OptionFunc { - return func(o *option) error { + return func(o *option) { o.powFlags = flags - return nil - } -} - -func WithPowCreator(id []byte) OptionFunc { - return func(o *option) error { - if len(id) != 32 { - return errors.New("pow creator id must be 32 bytes") - } - o.powCreatorId = id - return nil } }