63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
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
|
|
}
|