[#705] pkg/innerring: Add IR keys fetchers

Add `IrFetcherWithNotary` and `IrFetcherWithoutNotary`
that can fetch IR keys with and without usage of
notary contract.
Both can be hidden behind
`InnerRingKeys() (keys.PublicKeys, error)` interface.

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
remotes/fyrchik/meta-pebble
Pavel Karpy 2021-07-22 12:40:06 +03:00 committed by Alex Vanin
parent 8ea5744326
commit 8e66c67a74
1 changed files with 58 additions and 0 deletions

View File

@ -0,0 +1,58 @@
package innerring
import (
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
nmWrapper "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap/wrapper"
)
// NewIRFetcherWithNotary creates IrFetcherWithNotary.
//
// IrFetcherWithNotary can be used to obtain innerring key list if
// network that client is connected to supports notary contract.
//
// Passed client is required. Panics if nil.
func NewIRFetcherWithNotary(cli *client.Client) *IrFetcherWithNotary {
if cli == nil {
panic("could not init IRFetcher with notary: client must not be nil")
}
return &IrFetcherWithNotary{cli: cli}
}
// NewIRFetcherWithoutNotary creates IrFetcherWithoutNotary.
//
// IrFetcherWithoutNotary must be used to obtain innerring key list if
// network that netmap wrapper is connected to does not support notary
// contract.
//
// Passed netmap wrapper is required. Panics if nil.
func NewIRFetcherWithoutNotary(nm *nmWrapper.Wrapper) *IrFetcherWithoutNotary {
if nm == nil {
panic("could not init IRFetcher without notary: netmap wrapper must not be nil")
}
return &IrFetcherWithoutNotary{nm: nm}
}
// IrFetcherWithNotary fetches keys using notary contract. Must be created
// with NewIRFetcherWithNotary.
type IrFetcherWithNotary struct {
cli *client.Client
}
// IrFetcherWithoutNotary fetches keys using netmap contract. Must be created
// with NewIRFetcherWithoutNotary.
type IrFetcherWithoutNotary struct {
nm *nmWrapper.Wrapper
}
// InnerRingKeys fetches list of innerring keys from NeoFSAlphabet
// role in side chain.
func (fN IrFetcherWithNotary) InnerRingKeys() (keys.PublicKeys, error) {
return fN.cli.NeoFSAlphabetList()
}
// InnerRingKeys fetches list of innerring keys from netmap contract
// in side chain.
func (f IrFetcherWithoutNotary) InnerRingKeys() (keys.PublicKeys, error) {
return f.nm.GetInnerRingList()
}