forked from TrueCloudLab/frostfs-node
[#786] morph/client: Add NNS contract address getter
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
affae68061
commit
f43f389399
1 changed files with 62 additions and 0 deletions
62
pkg/morph/client/nns.go
Normal file
62
pkg/morph/client/nns.go
Normal file
|
@ -0,0 +1,62 @@
|
|||
package client
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
nns "github.com/nspcc-dev/neo-go/examples/nft-nd-nns"
|
||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||
)
|
||||
|
||||
const (
|
||||
nnsContractID = 1 // NNS contract must be deployed first in side chain
|
||||
|
||||
// NNSAuditContractName is a name of the audit contract in NNS.
|
||||
NNSAuditContractName = "audit.neofs"
|
||||
// NNSBalanceContractName is a name of the balance contract in NNS.
|
||||
NNSBalanceContractName = "balance.neofs"
|
||||
// NNSContainerContractName is a name of the container contract in NNS.
|
||||
NNSContainerContractName = "container.neofs"
|
||||
// NNSNeoFSIDContractName is a name of the neofsid contract in NNS.
|
||||
NNSNeoFSIDContractName = "neofsid.neofs"
|
||||
// NNSNetmapContractName is a name of the netmap contract in NNS.
|
||||
NNSNetmapContractName = "netmap.neofs"
|
||||
// NNSProxyContractName is a name of the proxy contract in NNS.
|
||||
NNSProxyContractName = "proxy.neofs"
|
||||
// NNSReputationContractName is a name of the reputation contract in NNS.
|
||||
NNSReputationContractName = "reputation.neofs"
|
||||
)
|
||||
|
||||
// NNSAlphabetContractName returns contract name of the alphabet contract in NNS
|
||||
// based on alphabet index.
|
||||
func NNSAlphabetContractName(index int) string {
|
||||
return "alphabet" + strconv.Itoa(index) + ".neofs"
|
||||
}
|
||||
|
||||
// NNSContractAddress returns contract address script hash based on its name
|
||||
// in NNS contract.
|
||||
func (c *Client) NNSContractAddress(name string) (sh util.Uint160, err error) {
|
||||
if c.multiClient != nil {
|
||||
return sh, c.multiClient.iterateClients(func(c *Client) error {
|
||||
sh, err = c.NNSContractAddress(name)
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
cs, err := c.client.GetContractStateByID(nnsContractID) // cache it?
|
||||
if err != nil {
|
||||
return sh, fmt.Errorf("NNS contract state: %w", err)
|
||||
}
|
||||
|
||||
s, err := c.client.NNSResolve(cs.Hash, name, nns.TXT)
|
||||
if err != nil {
|
||||
return sh, fmt.Errorf("NNS.resolve: %w", err)
|
||||
}
|
||||
|
||||
sh, err = util.Uint160DecodeStringLE(s)
|
||||
if err != nil {
|
||||
return sh, fmt.Errorf("NNS u160 decode: %w", err)
|
||||
}
|
||||
|
||||
return sh, nil
|
||||
}
|
Loading…
Reference in a new issue