forked from TrueCloudLab/frostfs-node
[#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:
parent
9dc741d43e
commit
8c2d42368a
2 changed files with 62 additions and 0 deletions
35
pkg/morph/client/neofs/wrapper/bind.go
Normal file
35
pkg/morph/client/neofs/wrapper/bind.go
Normal 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)
|
||||
}
|
27
pkg/morph/client/neofs/wrapper/client.go
Normal file
27
pkg/morph/client/neofs/wrapper/client.go
Normal 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
|
||||
}
|
Loading…
Reference in a new issue