From 7486c02bbce049df6731aadf3b828a6e297b44a9 Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Thu, 9 Mar 2023 15:33:16 +0300 Subject: [PATCH] [#88] adm: Fix method `nnsResolveKey` Signed-off-by: Anton Nikiforov --- .../internal/modules/morph/initialize_nns.go | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/cmd/frostfs-adm/internal/modules/morph/initialize_nns.go b/cmd/frostfs-adm/internal/modules/morph/initialize_nns.go index 7473d9e4c..91727202b 100644 --- a/cmd/frostfs-adm/internal/modules/morph/initialize_nns.go +++ b/cmd/frostfs-adm/internal/modules/morph/initialize_nns.go @@ -228,20 +228,27 @@ func nnsResolve(inv *invoker.Invoker, nnsHash util.Uint160, domain string) (stac } func nnsResolveKey(inv *invoker.Invoker, nnsHash util.Uint160, domain string) (*keys.PublicKey, error) { - item, err := nnsResolve(inv, nnsHash, domain) + res, err := nnsResolve(inv, nnsHash, domain) if err != nil { return nil, err } - v, ok := item.Value().(stackitem.Null) - if ok { + if _, ok := res.Value().(stackitem.Null); ok { return nil, errors.New("NNS record is missing") } - bs, err := v.TryBytes() - if err != nil { - return nil, errors.New("malformed response") + arr, ok := res.Value().([]stackitem.Item) + if !ok { + return nil, errors.New("API of the NNS contract method `resolve` has changed") } + for i := range arr { + var bs []byte + bs, err = arr[i].TryBytes() + if err != nil { + continue + } - return keys.NewPublicKeyFromString(string(bs)) + return keys.NewPublicKeyFromString(string(bs)) + } + return nil, errors.New("no valid keys are found") } // parseNNSResolveResult parses the result of resolving NNS record.