From c0093b2b794c832e6f6e632ec9c0025bcadc32f1 Mon Sep 17 00:00:00 2001
From: Alex Vanin <alexey@nspcc.ru>
Date: Thu, 1 Jul 2021 20:00:30 +0300
Subject: [PATCH] [#658] morph/neofsid: Add TryNotary() option

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
---
 pkg/innerring/innerring.go                 |  4 ++--
 pkg/morph/client/neofsid/wrapper/client.go | 28 ++++++++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/pkg/innerring/innerring.go b/pkg/innerring/innerring.go
index a7780724e..82c3da69f 100644
--- a/pkg/innerring/innerring.go
+++ b/pkg/innerring/innerring.go
@@ -30,7 +30,7 @@ import (
 	balanceWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/balance/wrapper"
 	cntWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/container/wrapper"
 	neofsWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/neofs/wrapper"
-	neofsid "github.com/nspcc-dev/neofs-node/pkg/morph/client/neofsid/wrapper"
+	neofsidWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/neofsid/wrapper"
 	nmWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap/wrapper"
 	repWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/reputation/wrapper"
 	"github.com/nspcc-dev/neofs-node/pkg/morph/event"
@@ -417,7 +417,7 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
 		return nil, err
 	}
 
-	neofsIDClient, err := neofsid.NewFromMorph(server.morphClient, server.contracts.neofsID, fee)
+	neofsIDClient, err := neofsidWrapper.NewFromMorph(server.morphClient, server.contracts.neofsID, fee, neofsidWrapper.TryNotary())
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/morph/client/neofsid/wrapper/client.go b/pkg/morph/client/neofsid/wrapper/client.go
index 44a30e6c2..3deffbf21 100644
--- a/pkg/morph/client/neofsid/wrapper/client.go
+++ b/pkg/morph/client/neofsid/wrapper/client.go
@@ -16,9 +16,33 @@ import (
 // Working ClientWrapper must be created via Wrap.
 type ClientWrapper neofsid.Client
 
+// Option allows to set an optional
+// parameter of ClientWrapper.
+type Option func(*opts)
+
+type opts []client.StaticClientOption
+
+func defaultOpts() *opts {
+	return new(opts)
+}
+
+// TryNotary returns option to enable
+// notary invocation tries.
+func TryNotary() Option {
+	return func(o *opts) {
+		*o = append(*o, client.TryNotary())
+	}
+}
+
 // NewFromMorph wraps client to work with NeoFS ID contract.
-func NewFromMorph(cli *client.Client, contract util.Uint160, fee fixedn.Fixed8) (*ClientWrapper, error) {
-	sc, err := client.NewStatic(cli, contract, fee, client.TryNotary())
+func NewFromMorph(cli *client.Client, contract util.Uint160, fee fixedn.Fixed8, opts ...Option) (*ClientWrapper, error) {
+	o := defaultOpts()
+
+	for i := range opts {
+		opts[i](o)
+	}
+
+	sc, err := client.NewStatic(cli, contract, fee, ([]client.StaticClientOption)(*o)...)
 	if err != nil {
 		return nil, fmt.Errorf("could not create client of NeoFS ID contract: %w", err)
 	}