[#556] morph/neofs: Implement wrapper over contract client

Implement wrapper over NeoFS contact's client which allows you to
conveniently interact with the contract. Implement `ManageKeys` method
for binding or unbinding public keys to the NeoFS account.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-05-31 20:25:34 +03:00 committed by Alex Vanin
parent 9dc741d43e
commit 8c2d42368a
2 changed files with 62 additions and 0 deletions

View file

@ -0,0 +1,35 @@
package neofscontract
import (
neofscontract "github.com/nspcc-dev/neofs-node/pkg/morph/client/neofs"
)
// ManageKeys binds/unbinds list of public keys from NeoFS account by script hash.
func (x *ClientWrapper) ManageKeys(scriptHash []byte, ks [][]byte, bind bool) error {
type args interface {
SetScriptHash([]byte)
SetKeys([][]byte)
}
var (
a args
call func(args) error
)
if bind {
a = new(neofscontract.BindKeysArgs)
call = func(a args) error {
return (*neofscontract.Client)(x).BindKeys(*a.(*neofscontract.BindKeysArgs))
}
} else {
a = new(neofscontract.UnbindKeysArgs)
call = func(a args) error {
return (*neofscontract.Client)(x).UnbindKeys(*a.(*neofscontract.UnbindKeysArgs))
}
}
a.SetScriptHash(scriptHash)
a.SetKeys(ks)
return call(a)
}

View file

@ -0,0 +1,27 @@
package neofscontract
import (
"fmt"
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
"github.com/nspcc-dev/neo-go/pkg/util"
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
neofscontract "github.com/nspcc-dev/neofs-node/pkg/morph/client/neofs"
)
// ClientWrapper is a wrapper over NeoFS contract
// client which provides convenient methods for
// working with a contract.
//
// Working ClientWrapper must be created via NewFromMorph.
type ClientWrapper neofscontract.Client
// NewFromMorph wraps client to work with NeoFS contract.
func NewFromMorph(cli *client.Client, contract util.Uint160, fee fixedn.Fixed8) (*ClientWrapper, error) {
sc, err := client.NewStatic(cli, contract, fee, client.TryNotary())
if err != nil {
return nil, fmt.Errorf("could not create client of NeoFS contract: %w", err)
}
return (*ClientWrapper)(neofscontract.New(sc)), nil
}