Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

v1 source realm

Package gns implements GNS (Gno Name Service): an ENS-equivalent naming system expressed as a single Gno-native realm.

Readme View source

GNS — Gno Name Service

GNS is an ENS-equivalent naming system expressed as a single Gno-native realm. It provides the capabilities mainstream ENS users rely on — registration, renewal, expiry & grace, forward/reverse resolution, primary names, typed and arbitrary records, subnames with policies, delegated operators, pagination and events — but implements all of it through one realm, one ownership model, one record model, one authorization function and one registration lifecycle, rather than a collection of emulated ENS contracts.

Package path: gno.land/r/moul/gns/v1 · possible future target: gno.land/r/gnoland/gns.

Built and tested against gno 0.9 / master (chain, chain/banker, chain/runtime, gno.land/p/nt/avl/v0).

What is and isn't compatible with ENS

GNS deliberately does not aim for byte-for-byte ENS/Ethereum compatibility.

Equivalent user capabilities (different implementation):

ENS capability GNS
Register / renew second-level name Register, Renew
Expiration + grace period stored expiry + configurable grace
Commit–reveal Commit + Register (see preimage below)
Owner / transfer OwnerOf, Transfer
Resolver records built-in typed records (no pluggable resolver)
Multichain addresses SetCoinAddress keyed by coin type
Text / content hash / pubkey / ABI / interface typed setters/getters
Arbitrary records SetRecord with reverse-DNS namespaces
Reverse resolution + primary name SetPrimaryName / PrimaryName (forward-verified)
Subnames + subname registrar hierarchical names + RegistrationPolicy
Wrapped / emancipated names explicit ControlPolicy flags + LockPolicy
Delegated managers SetOperator with per-permission grants
Multicall not in-realm — loop a typed setter from one gnokey maketx run
Wildcard resolution Resolve(..., NearestAncestor)
Events append-only Event log + native chain.Emit

Explicitly NOT included (Ethereum-specific or out of scope for v1): DNSSEC import, DNS registrar, CCIP-Read, L2 resolution, NFT/ERC-721 ownership, Ethereum ABI compatibility, Unicode/emoji names, governance DAO, auctions, secondary marketplace, and arbitrary custom-resolver execution.

Names

  • Second-level names are stored string-native and suffix-free: alice, not alice.gno. Display clients may append a .gno suffix; it is presentation only.
  • Hierarchy is label.parent (wallet.alice, prod.api.company).
  • Labels: lowercase a–z, digits 0–9, and - (not leading/trailing). 1–63 bytes per label, ≤255 bytes and ≤16 labels total. Input is lowercased; non-ASCII is rejected. All canonicalization happens in Normalize.

Lifecycle

Available → Committed → Active → Grace → Expired → (recycled), plus Deleted for removed subnames and Reserved for admin-held names.

  • Active: now < ExpiresAt. Owner and permitted operators may mutate.
  • Grace: ExpiresAt ≤ now < GraceEndsAt. Only renewal by the existing owner; not registrable by others.
  • Expired: now ≥ GraceEndsAt. Registrable again; old state is cleared on re-registration and Generation is incremented so clients can detect the replacement. Subnames carry ParentGeneration and do not silently survive a recycled parent.

Commit–reveal

The commitment binds the reveal so observers can neither copy nor front-run it:

commitment = sha256hex( name | owner | duration | secret | recordsHash | policyRevision )

where | is "|", owner is the bech32 string, integers are base-10, and name is the normalized name. Use the on-chain helper MakeCommitment(...) to compute it identically to what Register recomputes at reveal.

Pricing

Deterministic and boring — no oracle, no USD, no auction:

price = duration × BasePricePerSecond × lengthMultiplier(label)

Default length multipliers: 1→100, 2→25, 3→5, 4→2, 5+→1. Price(name, duration) returns a quote; Register always recomputes from state and rejects a stale policyRevision.

Authorization

Every mutation funnels through one internal authorize(caller, name, permission) with a fixed authority order:

  1. Admin — emergency/protocol operations only; never routine power over user names or records (admin cannot confiscate).
  2. Direct owner of an active name.
  3. Active operator holding the matching permission.
  4. Parent authority, only where the child ControlPolicy allows it.

Gno-specific deviations from the spec

The spec is written with Ethereum/Go idioms; these are the deliberate, gno-correct adaptations:

  • Mutations panic, they don't return error. In gno only a panic/abort reverts state, so state-changing crossing functions (those taking cur realm) panic with a stable machine-readable error code (unauthorized, name_unavailable, commitment_missing, …). Read/quote functions return (value, ok) or (value, error) normally.
  • avl.Tree instead of Go maps for every enumerable collection, so all listing APIs (NamesByOwner, Subnames, TextKeys, CoinTypes, Operators, EventsAfter) are ordered, bounded, and cursor-based — there is no unbounded "return everything" query.
  • String-native storage rather than namehashes (hashing is used only for commitments and event digests).

Public API (summary)

Read: Normalize, Status, Exists, OwnerOf, GetName, Resolve, Address, CoinAddress, Text, ContentHash, PublicKey, ABI, Interface, Record, PrimaryName, Price, MakeCommitment, CommitmentStatus, NamesByOwner, Subnames, TextKeys, CoinTypes, Operators, EventsAfter, EventsForName, Render.

Mutations (crossing): Commit, Register, Renew, Transfer, CreateSubname, DeleteSubname, SetRegistrationPolicy, LockPolicy, SetOperator, RemoveOperator, SetPrimaryName, ClearPrimaryName, and the typed record setters (SetAddress, SetText, SetCoinAddress, SetContentHash, SetPublicKey, SetABI, SetInterface, SetRecord, SetTTL).

Admin (two-step transfer): SetPaused, SetRegistrationOpen, SetPricing, SetTreasury, ReserveName, SetLimits, TransferAdmin, AcceptAdmin.

Render explorer

Render(path) serves a read-only Markdown explorer:

/                 overview + stats
/name/<name>      owner, status, expiry, records, subnames
/address/<g1...>  verified primary name + owned names
/available/<name> availability + price
/events           recent events
/help             API summary

Building & testing

1export GNOROOT=/path/to/gnolang/gno   # a gno master checkout
2gno lint .
3gno test .

The test suite covers the spec's critical invariants: single effective owner, expired owners lose authority, grace names aren't re-registrable, parents can't exceed child policy, permanent policies only tighten, forward-verified primary names, single-use commitments, deterministic overflow-safe pricing, generation recycling without stale-record leakage, bounded enumeration, and admin non-confiscation.

Testing note. Because this realm is developed outside the gno examples module, it uses local assertion helpers instead of gno.land/p/nt/uassert (whose working-tree copy fails to preprocess for external packages), and it unit-tests rejection paths against the internal error-returning helpers (authorize, priceFor, available, mergeRestrictive, …) rather than by catching crossing-boundary aborts. End-to-end abort/// Error: filetests can be added once the realm lives in-tree.

Client caching

Reverse resolution is forward-verified on-chain, so clients and indexers may safely cache the user ↔ address mapping:

  • positive match (an address has a verified primary name, or a name resolves to an address): cache for up to 1 hour;
  • negative result (no primary name / no match): cache for only 1 minute, so a freshly-set name becomes visible quickly.

Status

This is a v1 implementation of the GNS design spec. It is staged for review; it is not deployed.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

Dependency graph:

gno.land/r/moul/gns/v1 dependency graph

⚠️ Disclaimer: provided as-is, without warranty; not security-audited. Full disclaimer: DISCLAIMER.

Overview

Package gns implements GNS (Gno Name Service): an ENS-equivalent naming system expressed as a single Gno-native realm.

The design goal is NOT byte-for-byte ENS compatibility. Instead it provides the same user-facing capabilities (registration, renewal, expiry/grace, forward & reverse resolution, primary names, typed + arbitrary records, subnames with policies, delegated operators, pagination and events) through ONE realm, ONE ownership model, ONE record model, ONE authorization function and ONE registration lifecycle.

Key deviations from a naive port of the spec, forced by gno semantics:

  • State-mutating exported functions are "crossing" functions: they take `cur realm` as the first parameter and PANIC (abort) on failure rather than returning an error, because in gno only a panic/abort reverts state. Failures panic with a stable machine-readable code (see the error_* set).
  • Persistent, enumerable collections use avl.Tree (ordered, paginatable) instead of Go maps, so every listing API is bounded and cursor-based.
  • Names are stored string-native (canonical "label.parent"), not namehashed.

See README.md for the full compatibility statement.

Constants 5

const EvNameRegistered, EvNameRenewed, EvNameTransferred, EvNameExpired, EvNameDeleted, EvSubnameCreated, EvPolicyChanged, EvOperatorChanged, EvRecordChanged, EvPrimaryNameChange, EvConfigChanged, EvPaused, EvUnpaused

 1const (
 2	EvNameRegistered    = "NameRegistered"
 3	EvNameRenewed       = "NameRenewed"
 4	EvNameTransferred   = "NameTransferred"
 5	EvNameExpired       = "NameExpired"
 6	EvNameDeleted       = "NameDeleted"
 7	EvSubnameCreated    = "SubnameCreated"
 8	EvPolicyChanged     = "PolicyChanged"
 9	EvOperatorChanged   = "OperatorChanged"
10	EvRecordChanged     = "RecordChanged"
11	EvPrimaryNameChange = "PrimaryNameChanged"
12	EvConfigChanged     = "ConfigChanged"
13	EvPaused            = "Paused"
14	EvUnpaused          = "Unpaused"
15)
source

Event types.

Functions 55

func ABI

Action
1func ABI(name string, contentType string) ([]byte, bool)
source

ABI returns an ABI blob.

func Address

Action
1func Address(name string) (string, bool)
source

Address returns the native address record.

func CoinAddress

Action
1func CoinAddress(name string, coinType string) ([]byte, bool)
source

CoinAddress returns a multichain address.

func Commit

crossing Action
1func Commit(cur realm, commit string)
source

Commit stores a registration commitment. The commitment hides the intended name; only its hash is recorded together with the committer and timestamp.

func CreateSubname

crossing Action
1func CreateSubname(cur realm, parent string, label string, owner address, options SubnameOptions)
source

CreateSubname creates label.parent according to the parent registration policy.

func DeleteSubname

crossing Action
1func DeleteSubname(cur realm, name string)
source

DeleteSubname removes a subname. Callable by the owner, or by the parent when ParentCanDelete is set.

func Exists

Action
1func Exists(name string) bool
source

Exists reports whether a name currently resolves to a live registration.

func Interface

Action
1func Interface(name string, interfaceID string) (string, bool)
source

Interface returns an interface target.

func LockPolicy

crossing Action
1func LockPolicy(cur realm, name string, restrictions ControlPolicy)
source

LockPolicy makes a name's control policy strictly more restrictive (emancipation). Flags may only move true->false; once Permanent, no field may be relaxed. Only the owner may lock.

func MakeCommitment

Action
1func MakeCommitment(name string, owner address, duration int64, secret, recordsHash string, policyRevision uint64) (string, error)
source

MakeCommitment is the public helper clients use to derive the commitment hex to pass to Commit. It normalizes the name first so the value matches what Register recomputes at reveal. Returns an error if the name is invalid.

func Normalize

Action
1func Normalize(name string) (string, error)
source

Normalize canonicalizes a name: lowercases ASCII, validates every label, and enforces length/depth limits. Non-ASCII input is rejected outright.

func OwnerOf

Action
1func OwnerOf(name string) (string, bool)
source

OwnerOf returns the owner of an active/grace name.

func PrimaryName

Action
1func PrimaryName(addr string) (string, bool)
source

PrimaryName returns the verified primary name for an address, checking that (1) a reverse record exists, (2) the name is active, and (3) forward resolution still matches. Any failure returns not-found.

func PublicKey

Action
1func PublicKey(name string) ([]byte, bool)
source

PublicKey returns the public key record.

func Record

Action
1func Record(name string, namespace string, key string) ([]byte, bool)
source

Record returns an arbitrary namespaced record.

func RemoveOperator

crossing Action
1func RemoveOperator(cur realm, name string, operator address)
source

RemoveOperator revokes an operator.

func Render

1func Render(path string) string
source

Render is a human-readable explorer. It never mutates state.

func ReserveName

crossing Action
1func ReserveName(cur realm, name string, reserved bool)
source

ReserveName reserves (or unreserves) an unregistered name so it cannot be publicly registered. Admin may not reserve an actively-owned name.

func SetABI

crossing Action
1func SetABI(cur realm, name string, contentType string, value []byte)
source

SetABI sets an ABI blob by content type.

func SetAddress

crossing Action
1func SetAddress(cur realm, name string, addr string)
source

SetAddress sets the native address record.

func SetCoinAddress

crossing Action
1func SetCoinAddress(cur realm, name string, coinType string, value []byte)
source

SetCoinAddress sets a multichain address for coinType (decimal string).

func SetContentHash

crossing Action
1func SetContentHash(cur realm, name string, value []byte)
source

SetContentHash sets the content hash record.

func SetInterface

crossing Action
1func SetInterface(cur realm, name string, interfaceID string, target string)
source

SetInterface sets an interface target by interface ID.

func SetLimits

crossing Action
1func SetLimits(cur realm, maxRecords, maxOperators uint16, maxText, maxBinary uint32)
source

SetLimits updates operational storage/abuse limits (future registrations and mutations). Existing names are unaffected until next mutation.

func SetOperator

crossing Action
1func SetOperator(cur realm, name string, operator address, permissions Permissions)
source

SetOperator grants (or updates) an operator's permissions on a name.

func SetPaused

crossing Action
1func SetPaused(cur realm, paused bool)
source

SetPaused toggles the global pause. Paused blocks registration, subname creation, transfers and record mutation; reads, renewals and primary-name clearing remain available. It never confiscates or mutates ownership.

func SetPricing

crossing Action
1func SetPricing(cur realm, pricing PricingConfig)
source

SetPricing updates future pricing and bumps the policy revision so pending commitments that priced against the old rules are rejected at reveal.

func SetPrimaryName

crossing Action
1func SetPrimaryName(cur realm, name string)
source

SetPrimaryName sets the caller's primary (reverse) name. The name must be active and forward-resolve (Address) to the caller.

func SetPublicKey

crossing Action
1func SetPublicKey(cur realm, name string, value []byte)
source

SetPublicKey sets the public key record.

func SetRecord

crossing Action
1func SetRecord(cur realm, name string, namespace string, key string, value []byte)
source

SetRecord sets an arbitrary namespaced record. Reserved namespaces are rejected; use the typed setters for those.

func SetRegistrationOpen

crossing Action
1func SetRegistrationOpen(cur realm, open bool)
source

SetRegistrationOpen toggles whether new second-level registrations are open.

func SetRegistrationPolicy

crossing Action
1func SetRegistrationPolicy(cur realm, name string, policy RegistrationPolicy)
source

SetRegistrationPolicy sets the subname-issuance policy for a name.

func SetTTL

crossing Action
1func SetTTL(cur realm, name string, ttl uint64)
source

SetTTL sets the name's TTL metadata.

func SetText

crossing Action
1func SetText(cur realm, name string, key string, value string)
source

SetText sets a text record; empty value deletes it (physical removal).

func SetTreasury

crossing Action
1func SetTreasury(cur realm, treasury address)
source

SetTreasury updates the treasury address.

func Text

Action
1func Text(name string, key string) (string, bool)
source

Text returns a text record.

func Transfer

crossing Action
1func Transfer(cur realm, name string, newOwner address, clearOperators, clearRecords bool)
source

Transfer moves ownership of a name.

func TransferAdmin

crossing Action
1func TransferAdmin(cur realm, next address)
source

TransferAdmin begins a two-step admin handover.

func CommitmentStatus

Action
1func CommitmentStatus(commit string) CommitmentView
source

CommitmentStatus returns the state of a pending commitment.

func EventsAfter

Action
1func EventsAfter(id uint64, limit uint16) EventPage
source

EventsAfter returns events with ID strictly greater than id.

func EventsForName

Action
1func EventsForName(name string, after uint64, limit uint16) EventPage
source

EventsForName returns events for a specific name with ID greater than after.

func Status

Action
1func Status(name string) NameStatus
source

Status returns the lifecycle status of a name.

func GetName

Action
1func GetName(name string) (NameView, bool)
source

GetName returns a read-only view of a name.

func Operators

Action
1func Operators(name string, cursor string, limit uint16) OperatorPage
source

Operators lists operators and their permissions for a name.

func Price

Action
1func Price(name string, duration int64) (PriceQuote, error)
source

Price returns a price quote for registering/renewing name for duration.

func Register

crossing Action
1func Register(cur realm, request RegisterRequest) RegistrationResult
source

Register reveals and consumes a commitment to create a second-level name.

func Renew

crossing Action
1func Renew(cur realm, name string, duration int64) RenewalResult
source

Renew extends a name's expiry. Anyone may pay to renew (a socially useful property: third parties can prevent expiry but gain no authority). Renewal is allowed while Active or in Grace, never once fully Expired.

func Resolve

Action
1func Resolve(name string, query RecordQuery, mode ResolveMode) ResolveResult
source

Resolve returns a record either at the exact name or from the nearest valid ancestor (wildcard-style). Inheritance is explicit, never implicit in the primitive getters.

func CoinTypes

Action
1func CoinTypes(name string, cursor string, limit uint16) StringPage
source

CoinTypes lists multichain coin types set for a name.

func NamesByOwner

Action
1func NamesByOwner(owner string, cursor string, limit uint16) StringPage
source

NamesByOwner lists canonical names owned by owner.

func Subnames

Action
1func Subnames(parent string, cursor string, limit uint16) StringPage
source

Subnames lists direct subnames of parent.

func TextKeys

Action
1func TextKeys(name string, cursor string, limit uint16) StringPage
source

TextKeys lists text-record keys for a name.

Types 24

type CommitmentView

struct
1type CommitmentView struct {
2	Exists    bool
3	Committer string
4	CreatedAt int64
5	ReadyAt   int64
6	ExpiresAt int64
7}
source

CommitmentView is the read projection of a pending commitment.

type Config

struct
 1type Config struct {
 2	Admin        address
 3	PendingAdmin address
 4
 5	RegistrationOpen bool
 6
 7	MinCommitAge int64
 8	MaxCommitAge int64
 9
10	MinRegistrationDuration int64
11	MaxRegistrationDuration int64
12
13	GracePeriod int64
14
15	BasePricePerSecond int64
16	PremiumByLength    map[uint8]int64
17
18	PaymentDenom string
19	Treasury     address
20
21	MaxTextValueBytes   uint32
22	MaxBinaryValueBytes uint32
23	MaxRecordsPerName   uint16
24	MaxOperatorsPerName uint16
25
26	PolicyRevision uint64 // bumped whenever pricing/registration rules change
27	Paused         bool
28}
source

Config is the realm-global configuration.

type ControlPolicy

struct
 1type ControlPolicy struct {
 2	OwnerCanTransfer       bool
 3	OwnerCanCreateSubnames bool
 4	RecordsMutable         bool
 5
 6	ParentCanReclaim      bool
 7	ParentCanTransfer     bool
 8	ParentCanDelete       bool
 9	ParentCanChangePolicy bool
10
11	// Permanent means the policy can only become MORE restrictive. It does not
12	// make records immutable by itself.
13	Permanent bool
14}
source

ControlPolicy holds the explicit, readable ownership/parent control flags that replace ENS Name Wrapper fuses.

type Event

struct
 1type Event struct {
 2	ID        uint64
 3	Height    int64
 4	Timestamp int64
 5
 6	Type string
 7	Name string
 8
 9	Actor  string
10	Owner  string
11	Target string
12
13	Revision uint64
14
15	Key       string
16	OldDigest string
17	NewDigest string
18}
source

Event is an append-only change record for indexers.

type Name

struct
 1type Name struct {
 2	Canonical string
 3	Owner     address
 4
 5	CreatedAt   int64
 6	UpdatedAt   int64
 7	ExpiresAt   int64 // 0 == permanent subname (follows parent validity)
 8	GraceEndsAt int64
 9
10	Parent string
11	Label  string
12	Depth  uint8
13
14	TTL uint64
15
16	Generation       uint64
17	ParentGeneration uint64
18
19	RegistrationPolicy RegistrationPolicy
20	ControlPolicy      ControlPolicy
21
22	Records *Records
23
24	Operators     *avl.Tree // address string -> Permissions
25	OperatorCount int
26
27	Revision uint64
28	Reserved bool
29	Deleted  bool
30}
source

Name is the single object the whole realm operates on.

type NameStatus

ident
1type NameStatus string
source

NameStatus mirrors the lifecycle states.

type NameView

struct
 1type NameView struct {
 2	Canonical   string
 3	Owner       string
 4	Status      string
 5	CreatedAt   int64
 6	UpdatedAt   int64
 7	ExpiresAt   int64
 8	GraceEndsAt int64
 9	Parent      string
10	Label       string
11	Depth       uint8
12	TTL         uint64
13	Generation  uint64
14	Revision    uint64
15	Reserved    bool
16	NativeAddr  string
17}
source

NameView is the read-only projection returned by GetName.

type OperatorView

struct
1type OperatorView struct {
2	Address     string
3	Permissions Permissions
4}
source

type Permission

ident
1type Permission int
source

Permission enumerates the delegable operator capabilities.

type Permissions

struct
1type Permissions struct {
2	ManageRecords   bool
3	ManageOperators bool
4	ManageSubnames  bool
5	Renew           bool
6	Transfer        bool
7	ManagePolicy    bool
8	ExpiresAt       int64
9}
source

Permissions is an operator grant. ExpiresAt == 0 means no expiry.

type PriceQuote

struct
1type PriceQuote struct {
2	Amount     int64
3	Denom      string
4	ValidUntil int64
5	Revision   uint64
6}
source

PriceQuote is returned by Price.

type PricingConfig

struct
1type PricingConfig struct {
2	BasePricePerSecond int64
3	PremiumByLength    map[uint8]int64
4	PaymentDenom       string
5}
source

PricingConfig is the admin-settable pricing surface.

type RecordQuery

struct
1type RecordQuery struct {
2	Kind string // "address" | "text" | "coin" | "content" | "pubkey" | "abi" | "interface" | "record"
3	Key1 string // text key / coin type / abi content type / interface id / namespace
4	Key2 string // arbitrary record key (with namespace in Key1)
5}
source

RecordQuery selects which record Resolve should return.

type Records

struct
 1type Records struct {
 2	NativeAddress string
 3	ContentHash   []byte
 4	PublicKey     []byte
 5
 6	Addresses  *avl.Tree // coinType (decimal string) -> []byte
 7	Text       *avl.Tree // key -> string
 8	ABIs       *avl.Tree // contentType -> []byte
 9	Interfaces *avl.Tree // interfaceID -> string
10	Arbitrary  *avl.Tree // "namespace/key" -> []byte
11
12	Count int // number of stored entries, for MaxRecordsPerName enforcement
13}
source

Records is the built-in resolver state for a single name.

type RegisterRequest

struct
 1type RegisterRequest struct {
 2	Name           string
 3	Owner          address
 4	Duration       int64
 5	Secret         string
 6	RecordsHash    string
 7	PolicyRevision uint64
 8
 9	NativeAddress string
10	SetPrimary    bool
11}
source

RegisterRequest is the reveal payload for Register.

The commitment the client submits via Commit MUST equal sha256hex(Name|Owner|Duration|Secret|RecordsHash|PolicyRevision) using the same field values. RecordsHash is an opaque client-computed hex digest of the intended initial records; it binds the reveal so a front-runner cannot change records. NativeAddress/SetPrimary are optional conveniences applied after creation.

type RegistrationPolicy

struct
 1type RegistrationPolicy struct {
 2	Mode string // closed | owner | open | allowlist | paid
 3
 4	MinDuration int64
 5	MaxDuration int64
 6
 7	PricePerSecond int64
 8	PaymentDenom   string
 9
10	Allowlist *avl.Tree // address string -> bool
11
12	DefaultControlPolicy ControlPolicy
13}
source

RegistrationPolicy governs how subnames of a name may be created. The realm-global config drives second-level registration.

type RegistrationResult

struct
1type RegistrationResult struct {
2	Canonical  string
3	Owner      string
4	ExpiresAt  int64
5	Generation uint64
6	Paid       int64
7	Refunded   int64
8}
source

RegistrationResult is returned by Register.

type RenewalResult

struct
1type RenewalResult struct {
2	Canonical string
3	ExpiresAt int64
4	Paid      int64
5}
source

RenewalResult is returned by Renew.

type ResolveMode

ident
1type ResolveMode int
source

ResolveMode selects exact vs inherited resolution.

type ResolveResult

struct
1type ResolveResult struct {
2	Found      bool
3	Requested  string
4	SourceName string
5	Value      []byte
6	Revision   uint64
7	ExpiresAt  int64
8}
source

ResolveResult is returned by Resolve.

type StringPage

struct
1type StringPage struct {
2	Items []string
3	Next  string
4}
source

Paged result types (gno avoids generics; concrete types keep it simple).

type SubnameOptions

struct
1type SubnameOptions struct {
2	Duration      int64 // 0 == permanent (follows parent)
3	ControlPolicy ControlPolicy
4	NativeAddress string
5}
source

SubnameOptions configures CreateSubname.

Imports 12

Source Files 3