PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidators

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/demo/profile

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
profile
Namespace
demo
Files
4 (gnomod.toml)
Exported functions
7
Module
gno.land/r/demo/profile
gno
0.9

Files (4)

  • gnomod.tomltoml
  • profile.gnogno
  • render.gnogno
  • profile_test.gnogno
profile.gnogno
1package profile23import (4	"chain"56	"gno.land/p/nt/avl/v0"7	"gno.land/p/nt/mux/v0"8	"gno.land/p/nt/ufmt/v0"9)1011var (12	fields = avl.NewTree()13	router = mux.NewRouter()14)1516// Standard fields17const (18	DisplayName        = "DisplayName"19	Homepage           = "Homepage"20	Bio                = "Bio"21	Age                = "Age"22	Location           = "Location"23	Avatar             = "Avatar"24	GravatarEmail      = "GravatarEmail"25	AvailableForHiring = "AvailableForHiring"26	InvalidField       = "InvalidField"27)2829// Events30const (31	ProfileFieldCreated = "ProfileFieldCreated"32	ProfileFieldUpdated = "ProfileFieldUpdated"33)3435// Field types used when emitting event36const FieldType = "FieldType"3738const (39	BoolField   = "BoolField"40	StringField = "StringField"41	IntField    = "IntField"42)4344func init() {45	router.HandleFunc("", homeHandler)46	router.HandleFunc("u/{addr}", profileHandler)47	router.HandleFunc("f/{addr}/{field}", fieldHandler)48}4950// List of supported string fields51var stringFields = map[string]bool{52	DisplayName:   true,53	Homepage:      true,54	Bio:           true,55	Location:      true,56	Avatar:        true,57	GravatarEmail: true,58}5960// List of support int fields61var intFields = map[string]bool{62	Age: true,63}6465// List of support bool fields66var boolFields = map[string]bool{67	AvailableForHiring: true,68}6970// Setters7172func SetStringField(cur realm, field, value string) bool {73	addr := cur.Previous().Address()74	key := addr.String() + ":" + field75	updated := fields.Set(key, value)7677	event := ProfileFieldCreated78	if updated {79		event = ProfileFieldUpdated80	}8182	chain.Emit(event, FieldType, StringField, field, value)8384	return updated85}8687func SetIntField(cur realm, field string, value int) bool {88	addr := cur.Previous().Address()89	key := addr.String() + ":" + field90	updated := fields.Set(key, value)9192	event := ProfileFieldCreated93	if updated {94		event = ProfileFieldUpdated95	}9697	chain.Emit(event, FieldType, IntField, field, string(value))9899	return updated100}101102func SetBoolField(cur realm, field string, value bool) bool {103	addr := cur.Previous().Address()104	key := addr.String() + ":" + field105	updated := fields.Set(key, value)106107	event := ProfileFieldCreated108	if updated {109		event = ProfileFieldUpdated110	}111112	chain.Emit(event, FieldType, BoolField, field, ufmt.Sprintf("%t", value))113114	return updated115}116117// Getters118119func GetStringField(addr address, field, def string) string {120	key := addr.String() + ":" + field121	if value := fields.Get(key); value != nil {122		return value.(string)123	}124125	return def126}127128func GetBoolField(addr address, field string, def bool) bool {129	key := addr.String() + ":" + field130	if value := fields.Get(key); value != nil {131		return value.(bool)132	}133134	return def135}136137func GetIntField(addr address, field string, def int) int {138	key := addr.String() + ":" + field139	if value := fields.Get(key); value != nil {140		return value.(int)141	}142143	return def144}145

Functions

  • GetBoolField(addr string, field string, def bool) bool

  • GetIntField(addr string, field string, def int) int

  • GetStringField(addr string, field string, def string) string

  • Render(path string) string

  • SetBoolField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value bool) bool

  • SetIntField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value int) bool

  • SetStringField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value string) bool

Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

Rendered

RenderedRawgnoweb ↗

vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.