PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

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/gnops/valopers

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
valopers
Namespace
gnops
Files
14 (gnomod.toml)
Exported functions
13
Module
gno.land/r/gnops/valopers
gno
0.9

Files (14)

  • gnomod.tomltoml
  • admin.gnogno
  • init.gnogno
  • valopers.gnogno
  • admin_test.gnogno
  • pubkey_type_test.gnogno
  • rotate_test.gnogno
  • valopers_test.gnogno
  • z_1_filetest.gnogno
  • z_2_filetest.gnogno
  • z_auth_readonly_filetest.gnogno
  • z_foreign_realm_capability_filetest.gnogno
  • z_govdao_only_principal_filetest.gnogno
  • z_operator_authlist_capability_filetest.gnogno
  • init.gnogno
    1package valopers23import (4	"gno.land/p/moul/authz/v0"5	"gno.land/p/moul/txlink/v0"6	"gno.land/p/nt/avl/v0"7)8

    Functions

    • AddToAuthList(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}, addr string, member string)

    • Auth() string

    • DeleteFromAuthList(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}, addr string, member string)

    • GetByAddr(addr string) struct{Moniker string; Description string; ServerType string; OperatorAddress .uverse.address; SigningPubKey string; SigningAddress .uverse.address; LastRotationHeight int64; KeepRunning bool; auth *gno.land/p/nt/ownable/exts/authorizable/v0.Authorizable}

    • NewAuthorityRotationProposalRequest(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}, newContractPath string) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}

    • NewInstructionsProposalRequest(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}, newInstructions string) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}

    • Register(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}, moniker string, description string, serverType string, addr string, pubKey string)

    • Render(fullPath string) string

    • UpdateDescription(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}, addr string, description string)

    • UpdateKeepRunning(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}, addr string, keepRunning bool)

    • UpdateMoniker(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}, addr string, moniker string)

    • UpdateServerType(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}, addr string, serverType string)

    • UpdateSigningKey(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}, addr string, newPubKey string)

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

    Rendered

    RenderedRawgnoweb ↗
    9func init() {
    10 valopers = avl.NewTree()
    11
    12 // The authority is pointed at GovDAO, NOT at this realm.
    13 //
    14 // Pointing it here instead would make the gate compare valopers'
    15 // address to valopers' address: every crossing frame of this package
    16 // has rlm.Address() == PackageAddress(ownPath), so the check could
    17 // never reject. Pointed at r/gov/dao and driven by DoByPrevious
    18 // (see updateInstructions), the principal is the realm that crossed
    19 // in — GovDAO's executor on the legitimate path, and the caller
    20 // itself on any other, which is what makes the check real.
    21 //
    22 // The handler is a pass-through: this is where an intent check
    23 // (timelock, quorum, audit trail) would go if one is ever wanted.
    24 // It is NOT where the caller check lives — that is the authority's
    25 // contract-identity gate, upstream of here.
    26 auth = authz.NewWithAuthority(
    27 authz.NewContractAuthority(
    28 "gno.land/r/gov/dao",
    29 func(_ string, action authz.PrivilegedAction) error {
    30 return action()
    31 },
    32 ),
    33 )
    34
    35 instructions = `
    36# Welcome to the **Valopers** realm
    37
    38## 📌 Purpose of this Contract
    39
    40The **Valopers** contract is designed to maintain a registry of **validator profiles**. This registry provides essential information to **GovDAO members**, enabling them to make informed decisions when voting on the inclusion of new validators into the **valset**.
    41
    42By registering your validator profile, you contribute to a transparent and well-informed governance process within **gno.land**.
    43
    44---
    45
    46## 📝 How to Register Your Validator Node
    47
    48To add your validator node to the registry, use the [**Register**](` + txlink.Call("Register") + `) function with the following parameters:
    49
    50- **Moniker** (Validator Name)
    51 - Must be **human-readable**
    52 - **Max length**: **32 characters**
    53 - **Allowed characters**: Letters, numbers, spaces, hyphens (**-**), and underscores (**_**)
    54 - **No special characters** at the beginning or end
    55
    56- **Description** (Introduction & Validator Details)
    57 - **Max length**: **2048 characters**
    58 - Must include answers to the questions listed below
    59
    60- **Server Type** (Infrastructure Type)
    61 - Must be one of the following values:
    62 - **cloud**: For validators running on cloud infrastructure (AWS, GCP, Azure, etc.)
    63 - **on-prem**: For validators running on on-premises infrastructure
    64 - **data-center**: For validators running in dedicated data centers
    65
    66- **Operator Address**
    67 - The ` + "`g1...`" + ` address of your operator account (from your ` + "`gnokey`" + ` keyring)
    68 - **Must be controlled by the signer** of this transaction — the realm rejects the call if the signer doesn't control that address
    69
    70- **Validator Consensus Public Key**
    71 - Your validator node's consensus public key, in the ` + "`gpub1...`" + ` format
    72 - Retrieve it by running: ` + "`gnoland secrets get validator_key`" + `
    73
    74### ✍️ Required Information for the Description
    75
    76Please provide detailed answers to the following questions to ensure transparency and improve your chances of being accepted:
    77
    781. The name of your validator
    792. Networks you are currently validating and your total AuM (assets under management)
    803. Links to your **digital presence** (website, social media, etc.). Please include your Discord handle to be added to our main comms channel, the gno.land valoper Discord channel.
    814. Contact details
    825. Why are you interested in validating on **gno.land**?
    836. What contributions have you made or are willing to make to **gno.land**?
    84
    85---
    86
    87## 🔄 Updating Your Validator Information
    88
    89After registration, you can update your validator details using the **update functions** provided by the contract.
    90
    91---
    92
    93## 📢 Submitting a Proposal to Join the Validator Set
    94
    95Once you're satisfied with your **valoper** profile, you need to notify GovDAO; only a GovDAO member can submit a proposal to add you to the validator set.
    96
    97If you are a GovDAO member, you can nominate yourself by executing the following function: [**r/gnops/valopers/proposal.ProposeNewValidator**](` + txlink.Realm("gno.land/r/gnops/valopers/proposal").Call("ProposeNewValidator") + `)
    98
    99This will initiate a governance process where **GovDAO** members will vote on your proposal.
    100
    101---
    102
    103🚀 **Register now and become a part of gno.land’s validator ecosystem!**
    104
    105Read more: [How to become a validator](https://github.com/gnolang/gno/tree/master/gno.land/cmd/gnoland#become-a-validator)
    106
    107Disclaimer: Please note, registering your validator profile and/or validating on testnets does not guarantee a validator slot on the gno.land beta mainnet. However, active participation and contributions to testnets will help establish credibility and may improve your chances for future validator acceptance. The initial validator amount and valset will ultimately be selected through GovDAO governance proposals and acceptance.
    108
    109---
    110
    111`
    112}
    113

    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.