PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

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/gov/dao

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
dao
Namespace
gov
Files
5 (gnomod.toml)
Exported functions
21
Module
gno.land/r/gov/dao
gno
0.9

Files (5)

  • gnomod.tomltoml
  • proxy.gnogno
  • types.gnogno
  • allowlist_test.gnogno
  • proxy_test.gnogno
proxy_test.gnogno
1package dao23import (4	"chain/runtime/unsafe"5	"testing"67	"gno.land/p/nt/testutils/v0"8	"gno.land/p/nt/urequire/v0"9)1011// cur is a zero-value realm used as a placeholder when forwarding to12// uassert/urequire dispatch helpers that gained an `rlm realm` param.13// These tests pass `func()` callbacks (no crossing inside the callback),14// so rlm is ignored — a nil realm here is safe.15var cur realm1617const (18	v0 = "gno.land/r/gov/dao/impl/v0"19	v1 = "gno.land/r/gov/dao/v1/impl"20	v2 = "gno.land/r/gov/dao/v2/impl"21	v3 = "gno.land/r/gov/dao/v3/impl"22)2324const invalid = "gno.land/r/invalid/dao"2526var alice = testutils.TestAddress("alice")2728func TestProxy_Functions(cur realm, t *testing.T) {29	// initialize tests30	UpdateImpl(cross(cur), UpdateRequest{31		DAO:         &dummyDao{},32		AllowedDAOs: []string{v0},33	})3435	// invalid package cannot add a new dao in charge36	testing.SetRealm(testing.NewCodeRealm(invalid))37	urequire.AbortsWithMessage(t, cur, "permission denied for prev realm: gno.land/r/invalid/dao", func() {38		UpdateImpl(cross(cur), UpdateRequest{39			DAO: &dummyDao{},40		})41	})4243	// dao in charge can add a new dao44	testing.SetRealm(testing.NewCodeRealm(v0))45	urequire.NotPanics(t, cur, func() {46		UpdateImpl(cross(cur), UpdateRequest{47			DAO: &dummyDao{},48		})49	})5051	// v0 that is in charge adds v2 in charge52	testing.SetRealm(testing.NewCodeRealm(v0))53	urequire.NotPanics(t, cur, func() {54		UpdateImpl(cross(cur), UpdateRequest{55			DAO:         &dummyDao{},56			AllowedDAOs: []string{v0, v2},57		})58	})5960	// v0 can still do updates61	testing.SetRealm(testing.NewCodeRealm(v0))62	urequire.NotPanics(t, cur, func() {63		UpdateImpl(cross(cur), UpdateRequest{64			AllowedDAOs: []string{v1},65		})66	})6768	// not after removing himself from allowedDAOs list69	testing.SetRealm(testing.NewCodeRealm(v0))70	urequire.AbortsWithMessage(t, cur, "permission denied for prev realm: gno.land/r/gov/dao/impl/v0", func() {71		UpdateImpl(cross(cur), UpdateRequest{72			AllowedDAOs: []string{v0},73		})74	})7576	var pid ProposalID77	testing.SetRealm(testing.NewUserRealm(alice))78	urequire.NotPanics(t, cur, func() {79		e := NewSimpleExecutor(0, cur,80			func(realm) error {81				return nil82			},83			"",84		)85		pid = MustCreateProposal(cross(cur), NewProposalRequest("Proposal Title", "Description", e))86	})8788	p, err := GetProposal(1000)89	if p != nil || err == nil {90		panic("proposal should not exist and should return an error")91	}92	p = MustGetProposal(pid)93	urequire.Equal(t, "Proposal Title", p.Title())94	urequire.Equal(t, p.Author().String(), alice.String())9596	// need to switch the context back to v197	testing.SetRealm(testing.NewCodeRealm(v1))98	urequire.Equal(99		t,100		"Render: gno.land/r/gov/dao/test",101		Render(cross(cur), "test"),102	)103104	// reset state105	testing.SetRealm(testing.NewCodeRealm(v1))106	UpdateImpl(cross(cur), UpdateRequest{107		DAO: &dummyDao{},108	})109	// UpdateImpl deliberately ignores an empty AllowedDAOs, so it can no110	// longer be used to restore the bootstrap-open state — that is the point111	// of the guard. Reset the package var directly instead; we are in the112	// same package.113	allowedDAOs = nil114}115116type dummyDao struct{}117118func (dd *dummyDao) PreCreateProposal(_ int, rlm realm, r ProposalRequest) (address, error) {119	return unsafe.OriginCaller(), nil120}121122func (dd *dummyDao) PostCreateProposal(_ int, rlm realm, r ProposalRequest, pid ProposalID) {123}124125func (dd *dummyDao) VoteOnProposal(_ int, rlm realm, r VoteRequest) error {126	return nil127}128129func (dd *dummyDao) PreExecuteProposal(_ int, rlm realm, pid ProposalID) (bool, error) {130	return true, nil131}132133func (dd *dummyDao) ExecuteProposal(_ int, rlm realm, pid ProposalID, e Executor) error {134	return nil135}136137func (dd *dummyDao) Render(cur realm, pkgpath string, path string) string {138	return "Render: " + pkgpath + "/" + path139}140

Functions

  • AllowedDAOs() []string

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

  • ExecuteOrRejectProposal(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}, pid int64) bool

  • ExecuteProposal(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}, pid int64) bool

  • GetProposal(pid int64) (*gno.land/r/gov/dao.Proposal, interface {Error func() string})

  • InAllowedDAOs(pkg string) bool

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

  • MustGetProposal(pid int64) *gno.land/r/gov/dao.Proposal

  • MustVoteOnProposal(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}, r struct{Option gno.land/r/gov/dao.VoteOption; ProposalID gno.land/r/gov/dao.ProposalID; Metadata interface {}})

  • MustVoteOnProposalSimple(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}, pid int64, option string)

  • NewProposalRequest(title string, description string, executor interface {CreationRealm func() string; Execute func(.uverse.realm) .uverse.error; String func() string}) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}

  • NewProposalRequestWithFilter(title string, description string, executor interface {CreationRealm func() string; Execute func(.uverse.realm) .uverse.error; String func() string}, filter interface {}) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}

  • NewProposals() *gno.land/r/gov/dao.Proposals

  • NewSafeExecutor(e interface {CreationRealm func() string; Execute func(.uverse.realm) .uverse.error; String func() string}) *gno.land/r/gov/dao.SafeExecutor

  • NewSimpleExecutor(int, rlm 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}, callback func(.uverse.realm) .uverse.error, description string) *gno.land/r/gov/dao.SimpleExecutor

  • NewUpdateRequest(d interface {ExecuteProposal func(int, .uverse.realm, gno.land/r/gov/dao.ProposalID, gno.land/r/gov/dao.Executor) .uverse.error; PostCreateProposal func(int, .uverse.realm, gno.land/r/gov/dao.ProposalRequest, gno.land/r/gov/dao.ProposalID); PreCreateProposal func(int, .uverse.realm, gno.land/r/gov/dao.ProposalRequest) (.uverse.address, .uverse.error); PreExecuteProposal func(int, .uverse.realm, gno.land/r/gov/dao.ProposalID) (bool, .uverse.error); Render func(.uverse.realm, string, string) string; VoteOnProposal func(int, .uverse.realm, gno.land/r/gov/dao.VoteRequest) .uverse.error}, allowedDAOs []string) struct{DAO gno.land/r/gov/dao.DAO; AllowedDAOs []string}

  • NewVoteRequest(option string, proposalID int64) struct{Option gno.land/r/gov/dao.VoteOption; ProposalID gno.land/r/gov/dao.ProposalID; Metadata interface {}}

  • NewVoteRequestWithMetadata(option string, proposalID int64, metadata interface {}) struct{Option gno.land/r/gov/dao.VoteOption; ProposalID gno.land/r/gov/dao.ProposalID; Metadata interface {}}

  • Render(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}, p string) string

  • UpdateImpl(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}, r struct{DAO gno.land/r/gov/dao.DAO; AllowedDAOs []string})

  • VoteOnProposal(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}, r struct{Option gno.land/r/gov/dao.VoteOption; ProposalID gno.land/r/gov/dao.ProposalID; Metadata interface {}}) interface {Error func() string}

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.