nns

package
v0.21.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2025 License: GPL-3.0, Apache-2.0 Imports: 16 Imported by: 9

Documentation

Overview

Package nns contains RPC wrappers for NameService contract.

Index

Examples

Constants

View Source
const (
	// NameAlphabetPrefix differs from other names in this list, because
	// in reality there will be multiple alphabets contract deployed to
	// a network named alphabet0, alphabet1, alphabet2, etc.
	NameAlphabetPrefix = "alphabet"
	NameAudit          = "audit"
	NameBalance        = "balance"
	NameContainer      = "container"
	NameNeoFSID        = "neofsid"
	NameNetmap         = "netmap"
	NameProxy          = "proxy"
	NameReputation     = "reputation"
)

A set of standard contract names deployed into FS chain.

View Source
const ContractTLD = "neofs"

ContractTLD is the default TLD for NeoFS contracts. It's a convention that is not likely to be used by any non-NeoFS networks, but for NeoFS ones it allows to find contract hashes more easily.

View Source
const ID = 1

ID is the default NNS contract ID in all NeoFS networks. NeoFS networks always deploy NNS first and can't work without it, therefore it always gets an ID of 1.

Variables

View Source
var (
	// A represents address record type.
	A = big.NewInt(int64(recordtype.A))
	// CNAME represents canonical name record type.
	CNAME = big.NewInt(int64(recordtype.CNAME))
	// SOA represents start of authority record type.
	SOA = big.NewInt(int64(recordtype.SOA))
	// TXT represents text record type.
	TXT = big.NewInt(int64(recordtype.TXT))
)

Record types are defined in [RFC 1035](https://tools.ietf.org/html/rfc1035) These variables are provided to be used with autogenerated NNS wrapper that accepts *big.Int for record type parameters, values MUST NOT be changed.

View Source
var (
	// AAAA represents IPv6 address record type.
	AAAA = big.NewInt(int64(recordtype.AAAA))
)

Record types are defined in [RFC 3596](https://tools.ietf.org/html/rfc3596) These variables are provided to be used with autogenerated NNS wrapper that accepts *big.Int for record type parameters, values MUST NOT be changed.

Functions

func AddressFromRecord added in v0.21.0

func AddressFromRecord(s string) (util.Uint160, error)

AddressFromRecord extracts util.Uint160 hash from the string using one of the following formats:

  • hex-encoded LE (reversed) hash (the oldest historically)
  • plain Neo address string ("Nxxxx")
  • attribute-based NEP-18 string

NeoFS used both for contract hashes stored in NNS at various stages of its development.

See also: AddressFromRecords.

func AddressFromRecords added in v0.21.0

func AddressFromRecords(strs []string) (util.Uint160, error)

AddressFromRecords extracts util.Uint160 hash from the set of given strings using AddressFromRecord. Returns the first result that can be interpreted as address.

func InferHash

func InferHash(sg ContractStateGetter) (util.Uint160, error)

InferHash simplifies resolving NNS contract hash in existing NeoFS networks. It assumes that NNS follows ID assignment assumptions which likely won't be the case for any non-NeoFS network.

Types

type Actor

type Actor interface {
	Invoker

	nep11.Actor

	MakeCall(contract util.Uint160, method string, params ...any) (*transaction.Transaction, error)
	MakeRun(script []byte) (*transaction.Transaction, error)
	MakeUnsignedCall(contract util.Uint160, method string, attrs []transaction.Attribute, params ...any) (*transaction.Transaction, error)
	MakeUnsignedRun(script []byte, attrs []transaction.Attribute) (*transaction.Transaction, error)
	SendCall(contract util.Uint160, method string, params ...any) (util.Uint256, uint32, error)
	SendRun(script []byte) (util.Uint256, uint32, error)
}

Actor is used by Contract to call state-changing methods.

type Contract

type Contract struct {
	ContractReader
	nep11.BaseWriter
	// contains filtered or unexported fields
}

Contract implements all contract methods.

func New

func New(actor Actor, hash util.Uint160) *Contract

New creates an instance of Contract using provided contract hash and the given Actor.

func NewInferred added in v0.21.0

func NewInferred(sg ContractStateGetter, actor Actor) (*Contract, error)

NewInferred creates an instance of Contract using hash obtained via InferHash.

func (*Contract) AddRecord

func (c *Contract) AddRecord(name string, typ *big.Int, data string) (util.Uint256, uint32, error)

AddRecord creates a transaction invoking `addRecord` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) AddRecordTransaction

func (c *Contract) AddRecordTransaction(name string, typ *big.Int, data string) (*transaction.Transaction, error)

AddRecordTransaction creates a transaction invoking `addRecord` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) AddRecordUnsigned

func (c *Contract) AddRecordUnsigned(name string, typ *big.Int, data string) (*transaction.Transaction, error)

AddRecordUnsigned creates a transaction invoking `addRecord` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) DeleteRecords

func (c *Contract) DeleteRecords(name string, typ *big.Int) (util.Uint256, uint32, error)

DeleteRecords creates a transaction invoking `deleteRecords` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) DeleteRecordsTransaction

func (c *Contract) DeleteRecordsTransaction(name string, typ *big.Int) (*transaction.Transaction, error)

DeleteRecordsTransaction creates a transaction invoking `deleteRecords` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) DeleteRecordsUnsigned

func (c *Contract) DeleteRecordsUnsigned(name string, typ *big.Int) (*transaction.Transaction, error)

DeleteRecordsUnsigned creates a transaction invoking `deleteRecords` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) Register

func (c *Contract) Register(name string, owner util.Uint160, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (util.Uint256, uint32, error)

Register creates a transaction invoking `register` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) RegisterTLD

func (c *Contract) RegisterTLD(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (util.Uint256, uint32, error)

RegisterTLD creates a transaction invoking `registerTLD` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) RegisterTLDTransaction

func (c *Contract) RegisterTLDTransaction(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

RegisterTLDTransaction creates a transaction invoking `registerTLD` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) RegisterTLDUnsigned

func (c *Contract) RegisterTLDUnsigned(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

RegisterTLDUnsigned creates a transaction invoking `registerTLD` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) RegisterTransaction

func (c *Contract) RegisterTransaction(name string, owner util.Uint160, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

RegisterTransaction creates a transaction invoking `register` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) RegisterUnsigned

func (c *Contract) RegisterUnsigned(name string, owner util.Uint160, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

RegisterUnsigned creates a transaction invoking `register` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) Renew

func (c *Contract) Renew(name string, years *big.Int) (util.Uint256, uint32, error)

Renew creates a transaction invoking `renew` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) Renew2 added in v0.21.0

func (c *Contract) Renew2(name string) (util.Uint256, uint32, error)

Renew2 creates a transaction invoking `renew` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) Renew2Transaction added in v0.21.0

func (c *Contract) Renew2Transaction(name string) (*transaction.Transaction, error)

Renew2Transaction creates a transaction invoking `renew` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) Renew2Unsigned added in v0.21.0

func (c *Contract) Renew2Unsigned(name string) (*transaction.Transaction, error)

Renew2Unsigned creates a transaction invoking `renew` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) RenewTransaction

func (c *Contract) RenewTransaction(name string, years *big.Int) (*transaction.Transaction, error)

RenewTransaction creates a transaction invoking `renew` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) RenewUnsigned

func (c *Contract) RenewUnsigned(name string, years *big.Int) (*transaction.Transaction, error)

RenewUnsigned creates a transaction invoking `renew` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) SetAdmin

func (c *Contract) SetAdmin(name string, admin util.Uint160) (util.Uint256, uint32, error)

SetAdmin creates a transaction invoking `setAdmin` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) SetAdminTransaction

func (c *Contract) SetAdminTransaction(name string, admin util.Uint160) (*transaction.Transaction, error)

SetAdminTransaction creates a transaction invoking `setAdmin` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) SetAdminUnsigned

func (c *Contract) SetAdminUnsigned(name string, admin util.Uint160) (*transaction.Transaction, error)

SetAdminUnsigned creates a transaction invoking `setAdmin` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) SetPrice

func (c *Contract) SetPrice(price *big.Int) (util.Uint256, uint32, error)

SetPrice creates a transaction invoking `setPrice` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) SetPriceTransaction

func (c *Contract) SetPriceTransaction(price *big.Int) (*transaction.Transaction, error)

SetPriceTransaction creates a transaction invoking `setPrice` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) SetPriceUnsigned

func (c *Contract) SetPriceUnsigned(price *big.Int) (*transaction.Transaction, error)

SetPriceUnsigned creates a transaction invoking `setPrice` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) SetRecord

func (c *Contract) SetRecord(name string, typ *big.Int, id *big.Int, data string) (util.Uint256, uint32, error)

SetRecord creates a transaction invoking `setRecord` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) SetRecordTransaction

func (c *Contract) SetRecordTransaction(name string, typ *big.Int, id *big.Int, data string) (*transaction.Transaction, error)

SetRecordTransaction creates a transaction invoking `setRecord` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) SetRecordUnsigned

func (c *Contract) SetRecordUnsigned(name string, typ *big.Int, id *big.Int, data string) (*transaction.Transaction, error)

SetRecordUnsigned creates a transaction invoking `setRecord` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) Update

func (c *Contract) Update(nef []byte, manifest string, data any) (util.Uint256, uint32, error)

Update creates a transaction invoking `update` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) UpdateSOA

func (c *Contract) UpdateSOA(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (util.Uint256, uint32, error)

UpdateSOA creates a transaction invoking `updateSOA` method of the contract. This transaction is signed and immediately sent to the network. The values returned are its hash, ValidUntilBlock value and error if any.

func (*Contract) UpdateSOATransaction

func (c *Contract) UpdateSOATransaction(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

UpdateSOATransaction creates a transaction invoking `updateSOA` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) UpdateSOAUnsigned

func (c *Contract) UpdateSOAUnsigned(name string, email string, refresh *big.Int, retry *big.Int, expire *big.Int, ttl *big.Int) (*transaction.Transaction, error)

UpdateSOAUnsigned creates a transaction invoking `updateSOA` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

func (*Contract) UpdateTransaction

func (c *Contract) UpdateTransaction(nef []byte, manifest string, data any) (*transaction.Transaction, error)

UpdateTransaction creates a transaction invoking `update` method of the contract. This transaction is signed, but not sent to the network, instead it's returned to the caller.

func (*Contract) UpdateUnsigned

func (c *Contract) UpdateUnsigned(nef []byte, manifest string, data any) (*transaction.Transaction, error)

UpdateUnsigned creates a transaction invoking `update` method of the contract. This transaction is not signed, it's simply returned to the caller. Any fields of it that do not affect fees can be changed (ValidUntilBlock, Nonce), fee values (NetworkFee, SystemFee) can be increased as well.

type ContractReader

type ContractReader struct {
	nep11.NonDivisibleReader
	// contains filtered or unexported fields
}

ContractReader implements safe contract methods.

func NewInferredReader added in v0.21.0

func NewInferredReader(sg ContractStateGetter, invoker Invoker) (*ContractReader, error)

NewInferredReader creates an instance of ContractReader using hash obtained via InferHash.

func NewReader

func NewReader(invoker Invoker, hash util.Uint160) *ContractReader

NewReader creates an instance of ContractReader using provided contract hash and the given Invoker.

func (*ContractReader) GetAllRecords

func (c *ContractReader) GetAllRecords(name string) (uuid.UUID, result.Iterator, error)

GetAllRecords invokes `getAllRecords` method of contract.

func (*ContractReader) GetAllRecordsExpanded

func (c *ContractReader) GetAllRecordsExpanded(name string, _numOfIteratorItems int) ([]stackitem.Item, error)

GetAllRecordsExpanded is similar to GetAllRecords (uses the same contract method), but can be useful if the server used doesn't support sessions and doesn't expand iterators. It creates a script that will get the specified number of result items from the iterator right in the VM and return them to you. It's only limited by VM stack and GAS available for RPC invocations.

func (*ContractReader) GetPrice

func (c *ContractReader) GetPrice() (*big.Int, error)

GetPrice invokes `getPrice` method of contract.

func (*ContractReader) GetRecords

func (c *ContractReader) GetRecords(name string, typ *big.Int) ([]string, error)

GetRecords invokes `getRecords` method of contract.

func (*ContractReader) IsAvailable

func (c *ContractReader) IsAvailable(name string) (bool, error)

IsAvailable invokes `isAvailable` method of contract.

func (*ContractReader) Resolve

func (c *ContractReader) Resolve(name string, typ *big.Int) ([]string, error)

Resolve invokes `resolve` method of contract.

func (*ContractReader) ResolveFSContract

func (c *ContractReader) ResolveFSContract(name string) (util.Uint160, error)

ResolveFSContract is a convenience method that doesn't exist in the NNS contract itself (it doesn't care which data is stored there). It assumes that contracts follow the ContractTLD convention, gets simple contract names (like "container" or "netmap") and extracts the hash for the respective NNS record using AddressFromRecords.

Example

Resolve addresses of NeoFS smart contracts deployed in a particular FS chain by their NNS domain names.

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/nspcc-dev/neo-go/pkg/rpcclient"
	"github.com/nspcc-dev/neo-go/pkg/rpcclient/invoker"
	"github.com/nspcc-dev/neofs-contract/rpc/nns"
)

func main() {
	const fschainRPCEndpoint = "https://rpc1.morph.fs.neo.org:40341"

	c, err := rpcclient.New(context.Background(), fschainRPCEndpoint, rpcclient.Options{})
	if err != nil {
		log.Fatal(err)
	}

	err = c.Init()
	if err != nil {
		log.Fatal(err)
	}

	nnsAddress, err := nns.InferHash(c)
	if err != nil {
		log.Fatal(err)
	}

	nnsContract := nns.NewReader(invoker.New(c, nil), nnsAddress)

	for _, name := range []string{
		nns.NameAudit,
		nns.NameBalance,
		nns.NameContainer,
		nns.NameNeoFSID,
		nns.NameNetmap,
		nns.NameProxy,
		nns.NameReputation,
	} {
		addr, err := nnsContract.ResolveFSContract(name)
		if err != nil {
			log.Fatal(err)
		}

		fmt.Printf("%s: %s\n", name, addr)
	}
}
Output:

func (*ContractReader) Roots

func (c *ContractReader) Roots() (uuid.UUID, result.Iterator, error)

Roots invokes `roots` method of contract.

func (*ContractReader) RootsExpanded

func (c *ContractReader) RootsExpanded(_numOfIteratorItems int) ([]stackitem.Item, error)

RootsExpanded is similar to Roots (uses the same contract method), but can be useful if the server used doesn't support sessions and doesn't expand iterators. It creates a script that will get the specified number of result items from the iterator right in the VM and return them to you. It's only limited by VM stack and GAS available for RPC invocations.

func (*ContractReader) Version

func (c *ContractReader) Version() (*big.Int, error)

Version invokes `version` method of contract.

type ContractStateGetter

type ContractStateGetter interface {
	GetContractStateByID(int32) (*state.Contract, error)
}

ContractStateGetter is the interface required for contract state resolution using a known contract ID.

type Invoker

type Invoker interface {
	nep11.Invoker
}

Invoker is used by ContractReader to call various safe methods.

type NnsNameState

type NnsNameState struct {
	Owner      util.Uint160
	Name       string
	Expiration *big.Int
	Admin      util.Uint160
}

NnsNameState is a contract-specific nns.NameState type used by its methods.

func (*NnsNameState) FromStackItem

func (res *NnsNameState) FromStackItem(item stackitem.Item) error

FromStackItem retrieves fields of NnsNameState from the given stackitem.Item or returns an error if it's not possible to do to so. It implements stackitem.Convertible interface.

func (*NnsNameState) ToSCParameter added in v0.21.0

func (res *NnsNameState) ToSCParameter() (smartcontract.Parameter, error)

ToSCParameter creates smartcontract.Parameter representing NnsNameState. It implements smartcontract.Convertible interface so that NnsNameState could be used with invokers.

func (*NnsNameState) ToStackItem added in v0.21.0

func (res *NnsNameState) ToStackItem() (stackitem.Item, error)

ToStackItem creates stackitem.Item representing NnsNameState. It implements stackitem.Convertible interface.

type RenewEvent added in v0.21.0

type RenewEvent struct {
	Name          string
	OldExpiration *big.Int
	NewExpiration *big.Int
}

RenewEvent represents "Renew" event emitted by the contract.

func RenewEventsFromApplicationLog added in v0.21.0

func RenewEventsFromApplicationLog(log *result.ApplicationLog) ([]*RenewEvent, error)

RenewEventsFromApplicationLog retrieves a set of all emitted events with "Renew" name from the provided result.ApplicationLog.

func (*RenewEvent) FromStackItem added in v0.21.0

func (e *RenewEvent) FromStackItem(item *stackitem.Array) error

FromStackItem converts provided stackitem.Array to RenewEvent or returns an error if it's not possible to do to so.

type SetAdminEvent added in v0.21.0

type SetAdminEvent struct {
	Name     string
	OldAdmin util.Uint160
	NewAdmin util.Uint160
}

SetAdminEvent represents "SetAdmin" event emitted by the contract.

func SetAdminEventsFromApplicationLog added in v0.21.0

func SetAdminEventsFromApplicationLog(log *result.ApplicationLog) ([]*SetAdminEvent, error)

SetAdminEventsFromApplicationLog retrieves a set of all emitted events with "SetAdmin" name from the provided result.ApplicationLog.

func (*SetAdminEvent) FromStackItem added in v0.21.0

func (e *SetAdminEvent) FromStackItem(item *stackitem.Array) error

FromStackItem converts provided stackitem.Array to SetAdminEvent or returns an error if it's not possible to do to so.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL