generated from TrueCloudLab/basic
35 lines
886 B
Go
35 lines
886 B
Go
|
package resolver
|
||
|
|
||
|
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(endpoint, contractHash 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(endpoint); err != nil {
|
||
|
return util.Uint160{}, fmt.Errorf("dial nns %s: %w", endpoint, err)
|
||
|
}
|
||
|
defer nns.Close()
|
||
|
|
||
|
return nns.ResolveContractHash(domain)
|
||
|
}
|