Realm

gno.land/r/samcrew/daodemo/custom_resource

Rendered output

🔧 Custom Resource Demo

This showcases how to extend your DAO with custom actions.

ℹ️ How it Works

  1. Join the DAO using the AddMember function.

  2. Create a blog post Proposal using ProposeNewPost function with these parameters:

  • title: The title of the blog post
  • content: The content of the blog post
  1. Vote on proposals using their ID.

  2. Execute proposals that have passed (met the required voting conditions).

    📝 Note: Only proposals that have met the governance conditions can be executed. You need at least 10% of member approval to execute a proposal.

📋 Available Actions

Member Management

Custom Resource Actions

Other Demos

This is a demonstration DAO built with gno.land and daokit


Demo DAOKIT DAO

This is a demo DAO built with DAOKIT

Realm address: g1czaf0jpes9vcjewhjf9p7vndh5ygdplcf3p9jt

Discover more about this DAO on the configuration page ⚙️


> Go to Members

> Go to Proposals

My blog

No post available

Query (read-only)

non-crossing functions · no tx, no wallet needed
NewPostAction(title string, content string) → interface {String func() string; Type func() string}
NewPostHandler(blog *gno.land/r/samcrew/daodemo/custom_resource.Blog) → interface {Execute func(gno.land/p/samcrew/daokit.Action, .uverse.realm); Type func() string}

Call functions (state-changing)

signs a tx via Adena
AddMember()
Execute(proposalID uint64)
Propose(req struct{Title string; Description string; Action gno.land/p/samcrew/daokit.Action})
ProposeNewPost(title string, content string)
Vote(proposalID uint64, vote string)

All exported functions (8)

show raw signatures
NameParamsReturns
NewPostAction [{"Name": "title", "Type": "string", "Value": ""}, {"Name": "content", "Type": "string", "Value": ""}] [{"Name": ".res.0", "Type": "interface {String func() string; Type func() string}", "Value": ""}]
NewPostHandler [{"Name": "blog", "Type": "*gno.land/r/samcrew/daodemo/custom_resource.Blog", "Value": ""}] [{"Name": ".res.0", "Type": "interface {Execute func(gno.land/p/samcrew/daokit.Action, .uverse.realm); Type func() string}", "Value": ""}]
Propose [{"Name": "cur", "Type": "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}", "Value": ""}, {"Name": "req", "Type": "struct{Title string; Description string; Action gno.land/p/samcrew/daokit.Action}", "Value": ""}]
Vote [{"Name": "cur", "Type": "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}", "Value": ""}, {"Name": "proposalID", "Type": "uint64", "Value": ""}, {"Name": "vote", "Type": "string", "Value": ""}]
Execute [{"Name": "cur", "Type": "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}", "Value": ""}, {"Name": "proposalID", "Type": "uint64", "Value": ""}]
Render [{"Name": "path", "Type": "string", "Value": ""}] [{"Name": ".res.0", "Type": "string", "Value": ""}]
AddMember [{"Name": "cur", "Type": "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}", "Value": ""}]
ProposeNewPost [{"Name": "cur", "Type": "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}", "Value": ""}, {"Name": "title", "Type": "string", "Value": ""}, {"Name": "content", "Type": "string", "Value": ""}]

Files

Storage

{
  "raw": "storage: 126970, deposit: 12697000"
}