frostfs-http-gw/internal/service/contracts/util/util.go
Nikita Zinkevich 96a22d98f2
All checks were successful
/ DCO (pull_request) Successful in 26s
/ Vulncheck (pull_request) Successful in 57s
/ Builds (pull_request) Successful in 1m22s
/ OCI image (pull_request) Successful in 1m34s
/ Lint (pull_request) Successful in 2m18s
/ Tests (pull_request) Successful in 59s
/ Integration tests (pull_request) Successful in 5m53s
/ Builds (push) Successful in 1m4s
/ Vulncheck (push) Successful in 1m2s
/ Lint (push) Successful in 2m22s
/ Tests (push) Successful in 1m11s
/ Integration tests (push) Successful in 6m2s
/ OCI image (push) Successful in 1m11s
[#232] Use contract to get container info
Signed-off-by: Nikita Zinkevich <n.zinkevich@yadro.com>
2025-04-28 16:58:35 +03:00

34 lines
888 B
Go

package util
import (
"fmt"
"strings"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ns"
"github.com/nspcc-dev/neo-go/pkg/util"
)
// ResolveContractHash determine contract hash by resolving NNS name.
func ResolveContractHash(contractHash, rpcAddress string) (util.Uint160, error) {
if hash, err := util.Uint160DecodeStringLE(contractHash); err == nil {
return hash, nil
}
splitName := strings.Split(contractHash, ".")
if len(splitName) != 2 {
return util.Uint160{}, fmt.Errorf("invalid contract name: '%s'", contractHash)
}
var domain container.Domain
domain.SetName(splitName[0])
domain.SetZone(splitName[1])
var nns ns.NNS
if err := nns.Dial(rpcAddress); err != nil {
return util.Uint160{}, fmt.Errorf("dial nns %s: %w", rpcAddress, err)
}
defer nns.Close()
return nns.ResolveContractHash(domain)
}