From a2572a23a3af6f6c32ee5aa8c3d43de1e242fe27 Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Fri, 10 Dec 2021 14:50:10 +0300 Subject: [PATCH] [#93] Return NNS resolver Signed-off-by: Denis Kirillov --- go.mod | 3 +- go.sum | Bin 17153 -> 41889 bytes resolver/nns.go | 121 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 resolver/nns.go diff --git a/go.mod b/go.mod index 5fadc95..aed77da 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,12 @@ require ( github.com/hashicorp/golang-lru v0.5.4 github.com/mr-tron/base58 v1.2.0 github.com/nspcc-dev/hrw v1.0.9 + github.com/nspcc-dev/neo-go v0.98.0 github.com/nspcc-dev/neofs-api-go/v2 v2.11.0-pre.0.20211201134523-3604d96f3fe1 github.com/nspcc-dev/neofs-crypto v0.3.0 github.com/nspcc-dev/rfc6979 v0.2.0 github.com/stretchr/testify v1.7.0 go.uber.org/zap v1.18.1 - golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 + golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 google.golang.org/grpc v1.41.0 ) diff --git a/go.sum b/go.sum index b7fdca38834c45185fbf4c456020bd5d84fc6783..93137b4af7501ad262ee9ca70478fa780668b10b 100644 GIT binary patch literal 41889 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