Categorygithub.com/jw-1ns/go-1ns
modulepackage
0.1.7
Repository: https://github.com/jw-1ns/go-1ns.git
Documentation: pkg.go.dev

# README

go-1ns

Tag License GoDoc Travis CI codecov.io Go Report Card

Go module to simplify interacting with the 1 Name Service contracts. Initial version copied from go-ens

Table of Contents

Install

go-1ns is a standard Go module which can be installed with:

go get github.com/jw-1ns/go-1ns

Usage

go-1ns provides simple access to the 1 Name Service (1ns) contracts.

Resolution

The most commonly-used feature of 1ns is resolution: converting an 1ns name to an Ethereum address. go-1ns provides a simple call to allow this:

address, err := onens.Resolve(client, domain)

where client is a connection to an Harmony client and domain is the fully-qualified name you wish to resolve (e.g. foo.mydomain.country) (full examples for using this are given in the Example section below).

The reverse process, converting an address to an 1ns name, is just as simple:

domain, err := onens.ReverseResolve(client, address)

Note that if the address does not have a reverse resolution this will return "". If you just want a string version of an address for on-screen display then you can use onens.Format(), for example:

fmt.Printf("The address is %s\n", onens.Format(client, address))

This will carry out reverse resolution of the address and print the name if present; if not it will print a formatted version of the address.

Management of names

A top-level name is one that sits directly underneath .country, for example mydomain.country. Lower-level names, such as foo.mydomain.country are covered in the following section. go-1ns provides a simplified Name interface to manage top-level, removing the requirement to understand registrars, controllers, etc.

Starting out with names in go-1ns is easy:

client, err := ethclient.Dial("https://api.s0.t.hmny.io")
name, err := onens.NewName(client, "mydomain.country")

Addresses can be set and obtained using the address functions, for example to get an address:

COIN_TYPE_ETHEREUM := uint64(60)
address, err := name.Address(COIN_TYPE_ETHEREUM)

1ns supports addresses for multiple coin types; values of coin types can be found at https://github.com/satoshilabs/slips/blob/master/slip-0044.md

Registering and extending names

Most operations on a domain will involve setting resolvers and resolver information.

Management of subdomains

Because subdomains have their own registrars they do not work with the Name interface.

Example

package main

import (
	"fmt"

	"github.com/ethereum/go-ethereum/ethclient"
	onens "github.com/jw-1ns/go-1ns"
)

func main() {
	// Replace SECRET with your own access token for this example to work.
	client, err := ethclient.Dial("https://api.s0.t.hmny.io")
	if err != nil {
		panic(err)
	}

	// Resolve a name to an address.
	domain := "test.country"
	address, err := onens.Resolve(client, domain)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Address of %s is %s\n", domain, address.Hex())

	// Reverse resolve an address to a name.
	reverse, err := onens.ReverseResolve(client, address)
	if err != nil {
		panic(err)
	}
	if reverse == "" {
		fmt.Printf("%s has no reverse lookup\n", address.Hex())
	} else {
		fmt.Printf("Name of %s is %s\n", address.Hex(), reverse)
	}
}

Maintainers

John Whitton: @john_whitton.

Contribute

Contributions welcome. Please check out the issues.

License

Apache-2.0 © 2022 John Whitton

# Packages

No description provided by the author
No description provided by the author

# Functions

ContenthashToString turns EIP-1577 binary format in to EIP-1577 text format.
CreateRegistrySession creates a session suitable for multiple calls.
DNSWireFormat turns a domain name in to wire format.
DNSWireFormatDomainHash hashes a domain name in wire format.
Domain obtains the domain of an ENS name, including subdomains.
DomainLevel calculates the level of the domain presented.
DomainPart obtains a part of a name Positive parts start at the lowest-level of the domain and work towards the top-level domain.
LabelHash generates a simple hash for a piece of a name.
NameHash generates a hash from a name that can be used to look up the name in ENS.
NewBaseRegistrar obtains the registrar contract for a given domain.
NewDNSResolver creates a new DNS resolver for a given domain.
NewDNSResolverAt creates a new DNS resolver for a given domain at a given address.
NewName creates an ENS name structure.
NewRegistrarController creates a new controller for a given domain.
NewETHControllerAt creates a .eth controller at a given address.
NewRegistry obtains the ENS registry.
NewResolver obtains an Public resolver for a given domain.
NewResolverAt obtains an ENS resolver at a given address.
NormaliseDomain turns ENS domain in to normal form.
NormaliseDomainStrict turns ENS domain in to normal form, using strict DNS rules (e.g.
Normalize normalizes a name according to the ENS rules.
PublicResolverAddress obtains the address of the public resolver for a chain.
RegistrarContractAddress obtains the registrar contract address for a given domain.
RegistryContractAddress obtains the address of the registry contract for a chain.
RegistryContractFromRegistrar obtains the registry contract given an existing registrar contract.
Resolve resolves an ENS name in to an Etheruem address This will return an error if the name is not found or otherwise 0.
SetResolver sets the resolver for a name.
SetSubdomainOwner sets the owner for a subdomain of a name.
StringToContenthash turns EIP-1577 text format in to EIP-1577 binary format.
Tld obtains the top-level domain of an ENS name.
UnqualifiedName strips the root from the domain and ensures the result is suitable as a name.

# Variables

UnknownAddress is the address to which unknown entries resolve.

# Structs

BaseRegistrar is the structure for the registrar.
DNSResolver is the structure for the DNS resolver contract.
Name represents an ENS name, for example 'foo.bar.country'.
RegistrarController is the structure for the registrar controller contract.
Registry is the structure for the registry contract.
Resolver is the structure for the public resolver contract.